Perilaku pengiriman
Diambil dari dokumentasi resmi vendor, terakhir diperiksa 2026-08-06. Jika vendor tidak menyebut angka, tabel ini juga tidak mencantumkannya.
| Batas waktu respons | tidak dipublikasikan vendor |
|---|---|
| Percobaan ulang | 8 upaya: langsung, 5 detik, 5 menit, 30 menit, 2 jam, 5 jam, 10 jam, 10 jam. Setelah itu, operational webhook message.attempt.exhausted |
| Berhenti mencoba | Endpoint dinonaktifkan setelah semua upaya gagal selama 5 hari |
| Sumber | https://docs.svix.com/retries |
Tanda tangan
Diverifikasi dengan verifier yang berfungsi dan dibuktikan oleh test suite, bukan dibaca dari dokumentasi. Terakhir diverifikasi 2026-08-20.
| Algoritma | HMAC-SHA256 |
|---|---|
| Payload bertanda tangan | {id}.{timestamp}.{body} |
| Encoding | base64 |
| Header | svix-signature = v1,base64 |
| Toleransi | 5 menit |
Verifikasi
Raw body dari permintaan, byte demi byte, sebelum parsing JSON apa pun. Setiap skema di halaman ini rusak begitu framework melakukan serialisasi ulang pada payload.
const crypto = require("node:crypto");
// base64(HMAC-SHA256(base64-decoded secret, "{id}.{timestamp}.{body}"))
const id = req.headers["svix-id"];
const ts = req.headers["svix-timestamp"];
const key = Buffer.from(whsecSecret.replace("whsec_", ""), "base64");
const expected = crypto
.createHmac("sha256", key)
.update(`${id}.${ts}.${rawBody}`)
.digest("base64");
// svix-signature holds space-separated candidates like "v1,<base64>"
const valid = req.headers["svix-signature"]
.split(" ")
.some((part) => part.split(",")[1] === expected);Atau SDK resminya: new Webhook(secret).verify(rawBody, headers); SDK ini juga memberlakukan toleransi stempel waktu (timestamp) 5 menit untuk Anda. Prefiks whsec_ dibuang dan sisanya di-decode dari base64 sebelum dijadikan kunci HMAC; melewatkan langkah itu adalah kesalahan klasik.
Yang sering menjebak
Webhook Clerk dan Resend sebenarnya Svix di baliknya, jadi satu verifier mencakup ketiganya: header dan formatnya identik, hanya dashboard tempat secret disimpan yang berbeda.
Tangga percobaan ulangnya 8 upaya (langsung, 5 dtk, 5 mnt, 30 mnt, 2 jam, 5 jam, 10 jam, 10 jam), lalu operational webhook message.attempt.exhausted memberi tahu Anda bahwa Svix sudah menyerah. Lima hari semuanya gagal akan menonaktifkan endpoint.
Baca juga
AnyHook berada di depan endpoint yang menerima webhook dari Svix: AnyHook menjawab dalam sekitar satu detik, mencoba ulang sesuai jadwalnya sendiri saat server Anda mati, dan menyimpan setiap event agar dapat diputar ulang (replay). Ganti satu URL, kode Anda tetap; agar percobaan ulang dan putar ulang diterima, periksa AnyHook-Signature, karena tanda tangan milik Svix kedaluwarsa setelah 5 menit.