Se você ainda não recebe webhooks, comece pela
Visão geral — lá está o formato do envelope e a validação
de assinatura. Esta página assume que seu endpoint já está cadastrado.
Confirmação de recebimento
Uma entrega é considerada confirmada quando o seu endpoint responde2xx em até 30
segundos. Qualquer outra coisa — resposta fora da faixa 2xx, timeout ou falha de conexão —
conta como tentativa falha e coloca a entrega no ciclo de retentativas automáticas.
Retentativas automáticas
Depois de uma falha, o Z2Pay reenvia sozinho, com intervalos crescentes (backoff):
Enquanto está no ciclo, a entrega aparece no
histórico de entregas com status
retrying, e o
attemptCount mostra em que ponto da tabela ela está. Depois da 7ª falha, a entrega
vira falha definitiva (failed) e fica disponível para
reenvio manual.
O horário da próxima tentativa não é exposto. A API devolve o
status e o attemptCount, e
é por eles que se acompanha — retrying significa que ela ainda vai sair sozinha. Se você precisa
de uma estimativa, some os intervalos da tabela a partir do lastAttemptAt.Entregas de teste (
isTest: true, disparadas pelo botão de teste do painel) não
entram no ciclo: falharam, acabou. Elas existem só para validar seu endpoint.Ordem de entrega não é garantida
Retentativas fazem eventos chegarem fora de ordem: a retentativa de um evento antigo pode chegar depois de um evento mais novo da mesma entidade. Exemplo real: umpayment.pending que falhou e está sendo retentado pode chegar depois do payment.paid
daquele mesmo pagamento. Se o seu código aplicar os eventos na ordem de chegada, o pagamento
“volta” para pendente.
Proteja-se de uma destas duas formas:
a) Descarte eventos antigos pelo occurredAt
O occurredAt do envelope é o instante em que o evento ocorreu (não o horário do envio —
retentativas reenviam o valor original). Guarde o occurredAt mais recente que você processou
por entidade e ignore qualquer evento anterior a ele:
b) Trate o webhook como aviso, não como verdade
A alternativa mais robusta: use o webhook apenas como aviso de que algo mudou e consulte a API (GET do recurso, com o id que veio em data) para obter o estado atual antes de
agir. Assim, chegar fora de ordem deixa de importar — você sempre age sobre o estado vigente.
Idempotência
Oid do envelope (prefixo whd_) é único por entrega, mas a mesma entrega pode chegar
mais de uma vez. O caso clássico: seu endpoint processou o evento, mas demorou mais de 30
segundos para responder — para o Z2Pay isso é timeout, conta como falha, e a retentativa
entrega o mesmo id de novo.
Deduplique pelo id antes de processar: guarde os id já processados e, se chegar
repetido, responda 2xx sem fazer nada. O passo a passo está em
Idempotência no seu receptor.
Desativação automática
Quando uma entrega esgota as 7 tentativas, o Z2Pay olha o histórico do webhook para decidir se o problema é pontual ou se o endpoint está fora do ar:- Se alguma outra entrega teve sucesso desde que essa entrega foi criada (~31h30), o endpoint está vivo — só aquela entrega vira falha definitiva. Falha pontual de um evento específico nunca desativa o webhook.
- Se nenhuma entrega teve sucesso na janela inteira, o endpoint é considerado fora do ar e o webhook é desativado automaticamente. Um e-mail é enviado ao responsável pela conta informando a URL afetada, desde quando as entregas falham e o último erro observado.
Reativação e reconciliação
A reativação é manual, na página de Webhooks do painel. Duas regras importantes sobre o período em que o webhook ficou desativado:- Eventos ocorridos nesse período não são enviados nem enfileirados — não existe uma fila esperando a reativação.
- Após reativar, esses eventos não são reenviados automaticamente em nenhuma hipótese.
1
Reenvie as entregas com falha
Liste as entregas com
status=failed no
histórico de entregas e reenvie cada uma com
POST /webhooks/deliveries/:id/retry.
Isso cobre o que chegou a virar entrega e falhou.2
Consulte a API para o que não virou entrega
Eventos ocorridos enquanto o webhook estava desativado nunca viraram entrega — para
esses, consulte a API (
GET dos recursos, filtrando pelo período) e reconcilie o estado
na sua base.Registro e reenvio manual
Cada entrega registrastatus, attemptCount, returnStatus (o HTTP que seu servidor
respondeu), returnData (corpo da resposta), errorMessage e lastAttemptAt. Consulte tudo em
GET /webhooks/deliveries.
O reenvio manual (POST /webhooks/deliveries/:id/retry)
recusa com códigos distintos, para você saber exatamente o que impediu:
Veja também
Webhooks · Visão geral
Envelope do evento, cabeçalhos e validação da assinatura HMAC.
Catálogo de eventos
Todos os códigos de evento que você pode assinar.
Histórico de entregas
Liste as entregas, filtre por status e inspecione cada tentativa.
Reprocessar entrega
Reenvie manualmente uma entrega que falhou.