POST para uma URL que você cadastra.
Esta página explica como receber e validar os eventos. Para cadastrar, listar
e remover endpoints de webhook, veja Core API: Webhooks.
Para a lista de eventos disponíveis, veja Eventos.
Como funciona
Você cadastra um endpoint
Registre uma URL pública (HTTPS) e, opcionalmente, um
secret. Você também escolhe
quais eventos quer receber — uma lista vazia significa “todos os eventos”. Veja
Core API: Webhooks.Um evento acontece
Algo muda na sua conta (ex.: uma transação é paga). O Z2Pay seleciona seus webhooks
ativos que escutam aquele tipo de evento.
O Z2Pay faz POST no seu endpoint
Para cada webhook correspondente, o Z2Pay envia um
POST com o envelope JSON do
evento no corpo da requisição e cabeçalhos de identificação/assinatura.O envelope do evento
Todo webhook chega no mesmo formato de envelope. O conteúdo específico do recurso fica sempre dentro dedata.
Identificador único desta entrega (prefixo
whd_). Cada tentativa de entregar o mesmo
evento ao mesmo endpoint usa o mesmo id — use-o como chave de idempotência (veja abaixo).O objeto do recurso relacionado ao evento (a transação, o reembolso, a assinatura, etc.).
O formato de
data depende do type.Data e hora em que o evento foi despachado, em ISO 8601 com timezone (UTC).
Identificador da sua company (prefixo
comp_).Cabeçalhos da requisição
TodoPOST de webhook inclui:
| Cabeçalho | Sempre presente | Descrição |
|---|---|---|
Content-Type | Sim | application/json |
User-Agent | Sim | Z2Pay-Webhooks/1.0 |
X-Webhook-Event-Id | Sim | Identificador do evento de origem. Usado para correlação. |
X-Webhook-Timestamp | Apenas com secret | Momento da assinatura, em ISO 8601 com timezone. |
X-Webhook-Signature | Apenas com secret | Assinatura HMAC-SHA256 do corpo, em hexadecimal. |
Os cabeçalhos
X-Webhook-Timestamp e X-Webhook-Signature só são enviados quando você
cadastrou um secret no webhook. Sem secret, não há assinatura para validar — por isso
recomendamos sempre configurar um secret.Verificando a assinatura
Quando o webhook temsecret, o Z2Pay calcula a assinatura assim:
payload é o envelope inteiro (o JSON com id, type, data, occurredAt e
companyId) — exatamente o corpo que chega na requisição.
Exemplo em Node.js
Idempotência no seu receptor
O mesmo evento pode chegar mais de uma vez (por reprocessamento interno ou por uma resposta sua que demorou demais). O seu endpoint deve ser idempotente.Use o id da entrega como chave
Guarde o
id do envelope (prefixo whd_) ao processar o evento. Ele é estável entre
tentativas da mesma entrega.Ignore o que já foi processado
Antes de aplicar efeitos colaterais, verifique se aquele
id já foi processado. Se sim,
responda 2xx e não faça nada de novo.O
X-Webhook-Event-Id identifica o evento de origem e também pode ser usado para correlação
e deduplicação. Já o id do envelope é específico da entrega ao seu endpoint.Tempo limite e tentativas
Tempo limite
Cada
POST tem um tempo limite de 30 segundos. Se o seu servidor não responder dentro
desse prazo, a tentativa é considerada falha.O que conta como sucesso
Apenas respostas HTTP na faixa 2xx são consideradas entrega bem-sucedida. Redirecionamentos,
4xx e 5xx contam como falha.O Z2Pay registra o resultado de cada tentativa de entrega (status HTTP retornado pelo seu
servidor, corpo da resposta e número de tentativas). A entrega só precisa que você responda
2xx para ser marcada como bem-sucedida.Boas práticas
Sempre configure um secret
Sempre configure um secret
Sem
secret, não há cabeçalhos de assinatura e você não consegue garantir que a requisição
veio do Z2Pay. Configure um secret forte ao cadastrar o webhook em
Core API: Webhooks.Valide a assinatura antes de processar
Valide a assinatura antes de processar
Rejeite com
401 qualquer requisição cuja assinatura não bata. Não processe o evento antes
de validar.Processe de forma assíncrona
Processe de forma assíncrona
Enfileire o evento e responda
2xx rapidamente. Processamento lento aumenta o risco de
estourar o tempo limite de 30s e gerar reentregas.Trate o evento como dica, não como verdade absoluta
Trate o evento como dica, não como verdade absoluta
Em fluxos críticos (ex.: liberar um pedido), confirme o estado consultando a
Core API: Transactions com o
id recebido em data.Veja também
Eventos
A lista de tipos de evento (
type) que o Z2Pay envia.Core API: Webhooks
Cadastrar, listar e remover endpoints de webhook.
Erros
Formato e códigos de erro da API.
Convenções
IDs com prefixo, valores em centavos e datas em ISO 8601.

