1. Secret na URL
Ao criar o webhook, você define umsecret. A AbacatePay inclui esse valor como query parameter em cada requisição:
2. Assinatura HMAC
Mesmo que alguém descubra sua URL e seu secret, a assinatura HMAC garante que o corpo da requisição não foi alterado e que o evento realmente veio da AbacatePay. O header enviado é:Validação em Node.js
Validação em Python
Validação em Go
Retentativas
Se seu endpoint não retornar2xx dentro do timeout, a AbacatePay tenta reenviar o evento automaticamente com backoff progressivo.
O que pode causar retentativa:
- Timeout na conexão
- Resposta com status
5xx - Resposta com status
4xx(exceto200)
Idempotência é obrigatória
Armazene o campo
id de cada evento recebido. Antes de processar, verifique se esse ID já foi tratado anteriormente. Eventos duplicados são raros mas acontecem.Checklist de segurança
- Use HTTPS — nunca HTTP em produção
- Valide o secret na query string
- Valide a assinatura HMAC do header
- Responda 200 OK somente após concluir o processamento
- Implemente idempotência usando o
iddo evento - Não valide o payload inteiro com schemas rígidos (como Zod) — campos novos podem ser adicionados futuramente