Chuyển đến nội dung chính
s.id Logo
Xem Markdown

Webhook

Webhook gửi sự kiện từ tài khoản s.id trực tiếp đến máy chủ của bạn. Đăng ký endpoint tại Dashboard > Developer > Webhooks, rồi chọn các sự kiện cần thiết.

Sự kiện và header

Sự kiệnGửi khi
link.createdKích hoạt khi liên kết mới được tạo
link.updatedKích hoạt khi URL hoặc tiêu đề liên kết thay đổi
link.archivedKích hoạt khi một liên kết được lưu trữ
link.clickedKích hoạt ở mỗi lần chuyển hướng (một sự kiện cho mỗi lượt nhấp)
microsite.publishedKích hoạt khi microsite được xuất bản
qr.scannedKích hoạt khi mã QR được quét
HeaderGiá trị
X-SID-EventTên sự kiện, ví dụ link.created
X-SID-Signaturesha256=<hmac-hex>
X-SID-Delivery-IDID duy nhất cho mỗi lần gửi
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"
}

Gửi

  • Gửi bằng POST với Content-Type: application/json.
  • Tối đa 3 lần thử cho mỗi sự kiện, cách nhau 0, 5 và 30 giây.
  • Webhook bị tắt sau 5 sự kiện thất bại liên tiếp.
  • Nút Test gửi payload mẫu, và lịch sử nằm trong mục Deliveries.

Xác minh chữ ký

Mỗi lần gửi được ký bằng HMAC-SHA256 trên raw body với webhook secret của bạn. Tính lại chữ ký trước khi xử lý 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);
}