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
| Event | Dikirim saat |
|---|---|
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 |
| Header | Isi |
|---|---|
X-SID-Event | Nama event, misalnya link.created |
X-SID-Signature | sha256=<hmac-hex> |
X-SID-Delivery-ID | ID unik setiap pengiriman |
User-Agent | s.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);
}