s.id Logo
s.id
Developer Platform

Webhooks

Real-time na pagpapadala ng event sa iyong HTTPS endpoint.

Pangkalahatang-ideya

Irehistro ang isang pampublikong HTTPS endpoint sa Dashboard → Developer → Webhooks. Mag-POST ang s.id ng naka-sign na JSON payload sa iyong URL kapag nangyari ang naka-subscribe na event. Ang mga nabigong delivery (hindi 2xx o timeout) ay muling susubukan nang hanggang 3 beses, na may pagkaantala na 0 segundo, 5 segundo, at 30 segundo.

Mga Available na Event

link.createdFired when a new link is created
link.updatedFired when a link's URL or title is changed
link.archivedFired when a link is archived
link.clickedFired on each redirect (per-click event)
microsite.publishedFired when a microsite is published
qr.scannedFired when a QR code is scanned

Istraktura ng Payload

Ang bawat webhook POST ay naglalaman ng JSON body na may pangalan ng event, ang kaugnay na resource, at isang UTC timestamp.

{
  "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"
}

Pag-verify ng mga Signature

Kasama sa bawat delivery ang header na X-SID-Signature: sha256=<hex>. Kalkulahin ang HMAC-SHA256 ng raw request body gamit ang iyong webhook secret at ihambing gamit ang timing-safe equality.

Palaging i-verify ang signature bago iproseso ang event. Huwag kailanman magtiwala sa payload nang hindi na-verify ang HMAC.

Node.js

const crypto = require('crypto');

function verifySignature(secret, rawBody, sigHeader) {
  const expected = 'sha256=' +
    crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(sigHeader),
    Buffer.from(expected),
  );
}

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

Setup

  1. 1Pumunta sa Dashboard → Developer → Webhooks at i-click ang Add Webhook.
  2. 2Ilagay ang iyong HTTPS endpoint URL at piliin ang mga event na gusto mong i-subscribe.
  3. 3Kopyahin ang webhook secret — isang beses lamang itong ipinakikita.
  4. 4Sa iyong server, i-verify ang X-SID-Signature header bago mag-proseso.
  5. 5Mag-return ng HTTP 2xx sa loob ng 10 segundo. Ang mga nabigong delivery ay muling susubukan nang hanggang 3 beses; pagkatapos ng 5 magkakasunod na nabigong delivery, awtomatikong madi-disable ang webhook.