Lewati ke konten utama
s.id Logo
Platform Developer

Webhook

Pengiriman event real-time ke endpoint HTTPS kamu.

Gambaran Umum

Daftarkan endpoint HTTPS publik di Dashboard → Developer → Webhooks. s.id bakal kirim POST payload JSON bertanda tangan ke URL kamu setiap kali event yang kamu langgani terjadi. Kalau pengiriman gagal (non-2xx atau timeout), sistem coba ulang sampai 3 kali, dengan jeda 0 detik, 5 detik, dan 30 detik.

POST

Pengiriman JSON

10s

Batas waktu respons

2xx

Respons berhasil

Kebijakan retry dan keamanan

  • Event gagal mendapat maksimal tiga percobaan dengan jeda 0, 5, dan 30 detik.
  • Setelah lima event gagal berturut-turut, webhook otomatis dinonaktifkan.
  • Verifikasi signature terhadap raw request body yang persis sebelum memproses JSON.

Event yang tersedia

Event yang Tersedia

link.created

Dikirim saat link baru dibuat

link.updated

Dikirim saat URL atau judul link diubah

link.archived

Dikirim saat link diarsipkan

link.clicked

Dikirim pada setiap pengalihan link

microsite.published

Dikirim saat microsite dipublikasikan

qr.scanned

Dikirim saat QR Code dipindai

Struktur Payload

Setiap POST webhook berisi body JSON dengan nama event, resource yang relevan, dan timestamp UTC.

application/json
{
  "event": "link.created",
  "link": {
    "id": 123,
    "short": "mylink",
    "short_url": "https://s.id/mylink",
    "long_url": "https://example.com/long-url",
    "title": "My Link",
    "created": "2026-06-22T10:00:00Z"
  },
  "timestamp": "2026-06-22T10:00:00Z"
}

Header pengiriman

X-SID-Event
Nama event
X-SID-Signature
Signature sha256=<hmac-hex>
X-SID-Delivery-ID
Identitas pengiriman unik
User-Agent
s.id-Webhooks/1.0

Memverifikasi Tanda Tangan

Setiap pengiriman menyertakan header X-SID-Signature: sha256=<hex>. Hitung HMAC-SHA256 dari body permintaan mentah pakai secret webhook kamu, lalu bandingkan pakai timing-safe comparison.

Selalu verifikasi tanda tangan sebelum memproses event. Jangan pernah mempercayai payload tanpa memverifikasi HMAC.
Node.js
const crypto = require('node:crypto');

function verifySignature(secret, rawBody, sigHeader) {
  if (typeof sigHeader !== 'string' || !sigHeader.startsWith('sha256=')) {
    return false;
  }

  const expected = 'sha256=' +
    crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
  const receivedBuffer = Buffer.from(sigHeader, 'utf8');
  const expectedBuffer = Buffer.from(expected, 'utf8');

  return receivedBuffer.length === expectedBuffer.length &&
    crypto.timingSafeEqual(receivedBuffer, expectedBuffer);
}
Go
func verifySignature(secret, body []byte, sig string) bool {
  mac := hmac.New(sha256.New, secret)
  mac.Write(body)
  expected := "sha256=" + hex.EncodeToString(mac.Sum(nil))
  return hmac.Equal([]byte(sig), []byte(expected))
}

Pengaturan

  1. 1

    Buka Dashboard → Developer → Webhooks dan klik Tambah Webhook.

  2. 2

    Masukkan URL endpoint HTTPS kamu dan pilih event yang mau kamu langgani.

  3. 3

    Salin secret webhook, ditampilkan hanya sekali.

  4. 4

    Di server kamu, verifikasi header X-SID-Signature dulu sebelum diproses.

  5. 5

    Kembalikan HTTP 2xx dalam 10 detik. Kalau gagal, sistem coba ulang sampai 3 kali. Setelah 5 kali gagal berturut-turut, webhook otomatis dinonaktifkan.

Tambah Webhook

Siap mulai membangun?

Buat API key dalam hitungan menit. Sudah termasuk tier gratis, tanpa kartu kredit.

Dapatkan API key kamu