Lewati ke konten utama
s.id Logo
Lihat Markdown

Webhook

Webhook mengirim event dari akun s.id ke server kamu secara langsung. Daftarkan endpoint di Dashboard > Developer > Webhooks, lalu pilih event yang dibutuhkan.

Event dan header

EventDikirim saat
link.createdDikirim saat link baru dibuat
link.updatedDikirim saat URL atau judul link diubah
link.archivedDikirim saat link diarsipkan
link.clickedDikirim pada setiap pengalihan link
microsite.publishedDikirim saat microsite dipublikasikan
qr.scannedDikirim saat QR Code dipindai
HeaderIsi
X-SID-EventNama event, misalnya link.created
X-SID-Signaturesha256=<hmac-hex>
X-SID-Delivery-IDID unik setiap pengiriman
User-Agents.id-Webhooks/1.0
json
{
  "event": "link.created",
  "link": {
    "id": 123,
    "short": "[your-alias]",
    "short_url": "https://s.id/[your-alias]",
    "long_url": "https://example.com/long-url",
    "title": "My Link",
    "created": "2026-06-22T10:00:00Z"
  },
  "timestamp": "2026-06-22T10:00:00Z"
}

Pengiriman

  • Dikirim dengan POST dan Content-Type: application/json.
  • Maksimal 3 percobaan per event, dengan jeda 0, 5, dan 30 detik.
  • Webhook dinonaktifkan setelah 5 event berturut-turut gagal.
  • Tombol Test mengirim contoh payload, dan riwayat tersedia di Deliveries.

Verifikasi tanda tangan

Setiap pengiriman ditandatangani dengan HMAC-SHA256 dari body mentah memakai secret webhook kamu. Hitung ulang sebelum memproses payload.

javascript
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);
}