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 | tidak dipublikasikan vendor |
| Berhenti mencoba | tidak dipublikasikan vendor |
Tanda tangan
Diverifikasi dengan verifier yang berfungsi dan dibuktikan oleh test suite, bukan dibaca dari dokumentasi. Terakhir diverifikasi 2026-08-20.
| Algoritma | HMAC-SHA1 |
|---|---|
| Payload bertanda tangan | raw body |
| Encoding | hex |
| Header | x-vercel-signature |
| Toleransi | tidak diberlakukan |
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");
// hex(HMAC-SHA1(webhook secret, raw body))
const expected = crypto
.createHmac("sha1", webhookSecret) // Team Settings → Webhooks, shown once
.update(rawBody)
.digest("hex");
const received = Buffer.from(req.headers["x-vercel-signature"] ?? "");
const wanted = Buffer.from(expected);
// timingSafeEqual throws on a length mismatch, so check that first.
const valid =
received.length === wanted.length && crypto.timingSafeEqual(received, wanted);Yang sering menjebak
Secret hanya ditampilkan satu kali, saat dibuat. Jika hilang, satu-satunya jalan adalah menghapus dan membuat ulang webhook; tidak ada tombol untuk menampilkannya lagi.
Baca juga
AnyHook berada di depan endpoint yang menerima webhook dari Vercel: 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.