Vercel: como funciona a entrega de webhooks

A Vercel assina o corpo bruto com HMAC-SHA1. O formato verificado, o comportamento de entrega não publicado e um verificador Node.

Comportamento de entrega

Lido na documentação do próprio provedor, verificado pela última vez em 2026-08-06. Onde o provedor não informa um número, esta tabela também não traz nenhum.

Prazo de respostanão publicado pelo provedor
Novas tentativasnão publicado pelo provedor
Desistenão publicado pelo provedor

Assinatura

Verificada com um verificador funcional, comprovado por uma suíte de testes, e não lida na documentação. Última verificação em 2026-08-20.

AlgoritmoHMAC-SHA1
Payload assinadoraw body
Codificaçãohex
Cabeçalhox-vercel-signature
Tolerâncianenhuma exigida

Verifique a assinatura

O corpo bruto da requisição, byte a byte, antes de qualquer parsing de JSON. Todos os esquemas desta página quebram no momento em que um framework serializa o payload de novo.

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

Armadilhas

O segredo é mostrado só uma vez, na criação. Se você perdê-lo, o único caminho é excluir e recriar o webhook: não existe botão de revelar para voltar depois.

Leia também

O AnyHook fica entre Vercel e seus endpoints: responde em cerca de um segundo, tenta de novo segundo um cronograma próprio quando seu servidor está fora do ar e guarda cada evento disponível para replay. Troque uma URL e mantenha seu código.

Como funciona →