Mecanismo de Entrega
Webhooks são processados de forma assíncrona via fila Postgres (pgmq)
disparada por pg_cron:
- Um evento ocorre na plataforma (ex: pagamento confirmado)
- O evento é enfileirado em
pgmq(queuewebhook_delivery) - Uma Edge Function consome a fila e envia o
POSTpara cada endpoint inscrito - Se a entrega falhar, o retry automático é acionado
Configurações de Entrega
Após 30 dias, o payload do evento é removido automaticamente (archival), mas os metadados da entrega (status, data, HTTP code) são mantidos.
Retry Automático
Quando seu endpoint retorna um status diferente de2xx ou não responde dentro de 20 segundos, a Chargefy automaticamente reagenda a entrega com backoff exponencial.
Após 10 tentativas falhadas, a entrega é marcada como falha permanente. Você pode solicitar reentrega manual via API ou dashboard.
Verificação de Assinatura HMAC
Todos os webhooks são assinados usando HMAC-SHA256 seguindo o padrão Standard Webhooks.Headers de Assinatura
Cada requisição de webhook inclui os seguintes headers:Corpo JSON (payload)
O corpo é JSON com campos de primeiro nível nesta ordem:
Assim você pode persistir um único JSON (por exemplo em fila ou banco) já com o identificador para idempotência, alinhado ao header.
Eventos antigos (antes desta convenção) podem não incluir
id no corpo; use sempre o header webhook-id para verificação de assinatura e idempotência.Como verificar
O secret está no formato canônicowhsec_<base64>, então a forma mais
simples e segura é usar a biblioteca oficial svix
— ela cuida da decodificação do secret, da verificação de timestamp,
da comparação constant-time e do suporte a múltiplas assinaturas durante
rotação. Existe lib oficial em Node, Python, Ruby, Go, PHP, Java, C# e
Rust.
Múltiplas Assinaturas
O headerwebhook-signature pode conter múltiplas assinaturas separadas por espaço. Isso permite rotação de secrets sem downtime:
Boas Práticas
Responda rápido (< 20s)
Responda rápido (< 20s)
Processe webhooks de forma assíncrona. Responda com
200 imediatamente e processe o evento em background. Se seu handler demorar mais de 20 segundos, a Chargefy considerará a entrega como falhada.Idempotência
Idempotência
Use o
webhook-id (ou o campo id no JSON do corpo, quando presente — mesmo valor) como chave de idempotência. O mesmo evento pode ser entregue mais de uma vez (retry). Garanta que processar o mesmo evento duas vezes não cause efeitos duplicados.Sempre verifique a assinatura
Sempre verifique a assinatura
Nunca processe um webhook sem verificar a assinatura HMAC. Isso protege contra requisições forjadas.
Monitore entregas no dashboard
Monitore entregas no dashboard
Acompanhe o status das entregas em Configurações → Webhooks → Entregas. Verifique regularmente se há falhas persistentes.
Use HTTPS
Use HTTPS
URLs de webhook devem usar HTTPS. A Chargefy não aceita endpoints HTTP.
Desenvolvimento Local
Para testar webhooks em desenvolvimento local, use um tunnel:Troubleshooting
Próximos Passos
Eventos Disponíveis
Lista completa de 27 tipos de eventos
Gerenciar Endpoints
Criar, atualizar e deletar endpoints

