Como funciona
Eventos disponíveis
| Evento | Descrição |
|---|---|
payment.created | Pagamento criado e aguardando |
payment.succeeded | Pagamento confirmado |
payment.failed | Pagamento falhou |
payment.expired | Pagamento expirou |
link.created | Novo link de pagamento criado |
link.updated | Link de pagamento atualizado |
link.deactivated | Link de pagamento desativado |
payout.created | Saque solicitado |
payout.succeeded | Saque concluído |
payout.failed | Saque falhou |
Payload
Todos os webhooks seguem o mesmo formato:| Campo | Tipo | Descrição |
|---|---|---|
id | string | ID da delivery (UUID). Use para idempotência |
type | string | Tipo do evento |
version | string | Versão da API usada |
when | string | ISO 8601 timestamp do evento |
environment | test | live | Ambiente do evento |
data | object | Dados do recurso relacionado |
Headers
Cada request de webhook inclui:| Header | Descrição |
|---|---|
Content-Type | application/json |
X-Pagozz-Event | Tipo do evento |
X-Pagozz-Delivery | ID único da delivery |
X-Pagozz-Timestamp | Unix timestamp da assinatura |
X-Pagozz-Signature | Assinatura HMAC-SHA256 |
User-Agent | Pagozz-Webhook/1.0 |
Verificação de assinatura
Sempre verifique a assinatura para garantir que o webhook veio do Pagozz.Algoritmo
- Extrair
X-Pagozz-TimestampeX-Pagozz-Signaturedos headers - Montar o conteúdo assinado:
{timestamp}.{body} - Calcular HMAC-SHA256 com seu secret
- Comparar com a assinatura recebida (constant-time)
- Verificar que o timestamp está dentro de 5 minutos
Retentativas
Quando seu endpoint retorna status diferente de 2xx (ou timeout), o Pagozz retenta automaticamente:| Tentativa | Delay | Tempo acumulado |
|---|---|---|
| 1 | imediato | 0 |
| 2 | 1 minuto | 1 min |
| 3 | 5 minutos | 6 min |
| 4 | 30 minutos | 36 min |
| 5 | 2 horas | ~2.5h |
| 6 | 8 horas | ~10.5h |
| 7 | 24 horas | ~34.5h |
| 8 | 48 horas | ~82.5h (~3.4 dias) |
exhausted e um email de alerta é enviado.
Boas práticas
Responda rápido
Retorne 2xx em até 10 segundos (timeout do Pagozz).
Idempotência
Use o
id do evento para evitar processar duplicatas.Processe async
Receba o webhook, retorne 200, e processe em background.
Verifique assinatura
Sempre valide antes de processar qualquer evento.
Limites
| Limite | Valor |
|---|---|
| Timeout por request | 10 segundos |
| Tentativas por delivery | 8 |
| Janela total de retentativas | ~3.4 dias |
| Tolerância de timestamp | 5 minutos |
