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
A assinatura HMAC garante que o corpo da requisição não foi alterado no caminho. O header enviado é:Validação em Node.js
Validação em Python
Validação em Go
Retentativas
Se seu endpoint não responder2xx em até 30 segundos por um motivo temporário, a AbacatePay tenta reenviar o evento automaticamente: até 7 tentativas ao longo de cerca de 18 horas.
O que causa retentativa:
- Timeout (30 segundos), erro de conexão, DNS ou TLS
- Resposta com status
5xx - Resposta com status
408ou429
4xx e 3xx não são retentados, e 410 Gone desativa o webhook. Veja os intervalos completos em Entrega e retentativas.
Boas práticas para lidar com retentativas:
Idempotência é obrigatória
Armazene o campo
id de cada evento recebido. Todas as retentativas de um evento chegam com o mesmo id: antes de processar, verifique se ele já foi tratado.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