Webhooks notificam o seu sistema em tempo real quando algo acontece na Z2Pay (uma transação foi paga, um saque foi rejeitado, uma fatura foi emitida, etc.). Esta página cobre o gerenciamento dos webhooks (CRUD) e o histórico de entregas (deliveries).
Todas as requisições exigem o header x-api-key. Veja Autenticação .
Endpoints
Configuração de webhooks
Método Rota Descrição POST/webhooksCriar um webhook GET/webhooksListar webhooks (paginado) GET/webhooks/listenersListar o catálogo de eventos disponíveis GET/webhooks/:idBuscar um webhook por ID PUT/webhooks/:idAtualizar um webhook PATCH/webhooks/:id/statusAtivar ou desativar um webhook DELETE/webhooks/:idRemover um webhook (soft delete)
Histórico de entregas (deliveries)
Método Rota Descrição GET/webhooks/deliveriesListar entregas (paginado, com filtros) GET/webhooks/deliveries/:idBuscar uma entrega por ID POST/webhooks/deliveries/:id/retryReprocessar uma entrega
A URL do webhook precisa usar HTTPS e apontar para um host público . URLs que resolvem para
localhost, faixas de IP privadas (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16),
link-local/metadata de cloud (169.254.0.0/16, metadata.google.internal) ou esquemas que não
sejam http/https são rejeitadas com 400. Isso protege contra SSRF.
Criar webhook
POST /webhooks
Registra um novo webhook. Retorna 201 com o webhook criado.
Nome de identificação do webhook. Entre 1 e 255 caracteres.
URL HTTPS pública que receberá as notificações. URLs internas/privadas são rejeitadas (veja o aviso acima).
Lista de eventos a assinar. Cada valor deve ser um código do
catálogo de eventos . Se enviado vazio (ou omitido), o webhook
escuta TODOS os eventos.
Este endpoint aceita o header Idempotency-Key para evitar criações duplicadas. Veja Convenções .
curl -X POST https://api.sandbox.z2pay.com/webhooks \
-H "x-api-key: SUA_CHAVE_DE_SANDBOX" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 3f1c8a90-2b7d-4d2e-9b1a-6f0e2c5a9d11" \
-d '{
"name": "Notificações de pagamento",
"url": "https://meusite.com/webhooks/z2pay",
"events": ["transaction.paid", "transaction.refunded"],
"secret": "um-segredo-bem-grande"
}'
{
"id" : "whk_8Hk2pQ7rT9vLm3Nx" ,
"companyId" : "comp_4Zp1Yt6Bn0Wq" ,
"name" : "Notificações de pagamento" ,
"url" : "https://meusite.com/webhooks/z2pay" ,
"events" : [ "transaction.paid" , "transaction.refunded" ],
"secret" : "um-segredo-bem-grande" ,
"isActive" : true ,
"createdAt" : "2026-06-24T13:45:00.000Z" ,
"updatedAt" : "2026-06-24T13:45:00.000Z" ,
"deletedAt" : null ,
"version" : 1
}
Listar webhooks
GET /webhooks
Retorna uma lista paginada dos webhooks da sua conta.
Parâmetro (query) Tipo Obrigatório Descrição isActivebooleanNão Filtra por status ativo/inativo. eventstringNão Filtra webhooks que escutam um evento específico (ex: transaction.paid). pageintegerNão Página (inteiro positivo). Padrão 1. limitintegerNão Itens por página (inteiro positivo, máximo 100). Padrão 20.
curl -X GET "https://api.sandbox.z2pay.com/webhooks?isActive=true&page=1&limit=20" \
-H "x-api-key: SUA_CHAVE_DE_SANDBOX"
{
"data" : [
{
"id" : "whk_8Hk2pQ7rT9vLm3Nx" ,
"companyId" : "comp_4Zp1Yt6Bn0Wq" ,
"name" : "Notificações de pagamento" ,
"url" : "https://meusite.com/webhooks/z2pay" ,
"events" : [ "transaction.paid" , "transaction.refunded" ],
"secret" : "um-segredo-bem-grande" ,
"isActive" : true ,
"createdAt" : "2026-06-24T13:45:00.000Z" ,
"updatedAt" : "2026-06-24T13:45:00.000Z" ,
"deletedAt" : null ,
"version" : 1
}
],
"pagination" : {
"page" : 1 ,
"limit" : 20 ,
"total" : 1 ,
"totalPages" : 1
}
}
Listar eventos disponíveis
GET /webhooks/listeners
Retorna o catálogo completo de eventos que podem ser assinados. Use os valores de code no campo
events ao criar ou atualizar um webhook. Não aceita parâmetros.
curl -X GET https://api.sandbox.z2pay.com/webhooks/listeners \
-H "x-api-key: SUA_CHAVE_DE_SANDBOX"
{
"data" : [
{ "code" : "transaction.created" , "description" : "Transação criada" },
{ "code" : "transaction.waiting_payment" , "description" : "Transação aguardando pagamento" },
{ "code" : "transaction.paid" , "description" : "Transação paga" },
{ "code" : "transaction.refused" , "description" : "Transação recusada" },
{ "code" : "transaction.failed" , "description" : "Transação falhou" },
{ "code" : "transaction.canceled" , "description" : "Transação cancelada" },
{ "code" : "transaction.refunded" , "description" : "Transação reembolsada" },
{ "code" : "transaction.chargeback" , "description" : "Transação em chargeback" },
{ "code" : "payment.created" , "description" : "Pagamento criado" },
{ "code" : "payment.waiting_payment" , "description" : "Pagamento aguardando pagamento" },
{ "code" : "payment.paid" , "description" : "Pagamento aprovado" },
{ "code" : "payment.refused" , "description" : "Pagamento recusado" },
{ "code" : "payment.failed" , "description" : "Pagamento falhou" },
{ "code" : "payment.refunded" , "description" : "Pagamento reembolsado" },
{ "code" : "payment.chargeback" , "description" : "Pagamento em chargeback" },
{ "code" : "customer.created" , "description" : "Cliente criado" },
{ "code" : "customer.updated" , "description" : "Cliente atualizado" },
{ "code" : "recipient.created" , "description" : "Recebedor criado" },
{ "code" : "recipient.updated" , "description" : "Recebedor atualizado" },
{ "code" : "recipient.approved" , "description" : "Recebedor aprovado" },
{ "code" : "recipient.refused" , "description" : "Recebedor recusado" },
{ "code" : "recipient.deleted" , "description" : "Recebedor removido" },
{ "code" : "withdrawal.requested" , "description" : "Saque solicitado" },
{ "code" : "withdrawal.paid" , "description" : "Saque pago" },
{ "code" : "withdrawal.rejected" , "description" : "Saque recusado" },
{ "code" : "invoice.issued" , "description" : "Fatura emitida" },
{ "code" : "invoice.payment_attempted" , "description" : "Tentativa de cobrança da fatura" },
{ "code" : "invoice.paid" , "description" : "Fatura paga" },
{ "code" : "invoice.voided" , "description" : "Fatura anulada" },
{ "code" : "invoice.refunded" , "description" : "Fatura reembolsada" },
{ "code" : "invoice.rescheduled" , "description" : "Fatura reagendada" },
{ "code" : "subscription.created" , "description" : "Assinatura criada" },
{ "code" : "subscription.activated" , "description" : "Assinatura ativada" },
{ "code" : "subscription.canceled" , "description" : "Assinatura cancelada" },
{ "code" : "subscription.cycle_advanced" , "description" : "Novo ciclo da assinatura iniciado" },
{ "code" : "subscription.paused" , "description" : "Assinatura pausada" },
{ "code" : "subscription.resumed" , "description" : "Assinatura retomada" }
]
}
Os códigos seguem o padrão recurso.acao (ex: transaction.paid). A documentação detalhada de cada
payload por evento está em Catálogo de eventos .
Buscar webhook por ID
GET /webhooks/:id
Retorna os dados de um webhook específico.
Status Quando 200Webhook encontrado. 404Webhook não encontrado. Veja Erros .
curl -X GET https://api.sandbox.z2pay.com/webhooks/whk_8Hk2pQ7rT9vLm3Nx \
-H "x-api-key: SUA_CHAVE_DE_SANDBOX"
{
"id" : "whk_8Hk2pQ7rT9vLm3Nx" ,
"companyId" : "comp_4Zp1Yt6Bn0Wq" ,
"name" : "Notificações de pagamento" ,
"url" : "https://meusite.com/webhooks/z2pay" ,
"events" : [ "transaction.paid" , "transaction.refunded" ],
"secret" : "um-segredo-bem-grande" ,
"isActive" : true ,
"createdAt" : "2026-06-24T13:45:00.000Z" ,
"updatedAt" : "2026-06-24T13:45:00.000Z" ,
"deletedAt" : null ,
"version" : 1
}
Atualizar webhook
PUT /webhooks/:id
Atualiza as configurações de um webhook. Todos os campos do corpo são opcionais — envie apenas o que
deseja mudar. Retorna 200 com o webhook atualizado.
Novo nome. Entre 1 e 255 caracteres.
Nova URL HTTPS pública. URLs internas/privadas são rejeitadas.
Nova lista de eventos a assinar. Se enviada vazia, o webhook passa a escutar TODOS os eventos.
Novo segredo. Mínimo de 8 caracteres.
Este endpoint aceita o header Idempotency-Key.
Status Quando 200Webhook atualizado. 404Webhook não encontrado.
curl -X PUT https://api.sandbox.z2pay.com/webhooks/whk_8Hk2pQ7rT9vLm3Nx \
-H "x-api-key: SUA_CHAVE_DE_SANDBOX" \
-H "Content-Type: application/json" \
-d '{
"events": ["transaction.paid", "transaction.refused", "transaction.refunded"]
}'
{
"id" : "whk_8Hk2pQ7rT9vLm3Nx" ,
"companyId" : "comp_4Zp1Yt6Bn0Wq" ,
"name" : "Notificações de pagamento" ,
"url" : "https://meusite.com/webhooks/z2pay" ,
"events" : [ "transaction.paid" , "transaction.refused" , "transaction.refunded" ],
"secret" : "um-segredo-bem-grande" ,
"isActive" : true ,
"createdAt" : "2026-06-24T13:45:00.000Z" ,
"updatedAt" : "2026-06-24T14:10:00.000Z" ,
"deletedAt" : null ,
"version" : 2
}
Ativar / desativar webhook
PATCH /webhooks/:id/status
Altera o status ativo/inativo de um webhook. Um webhook inativo não recebe novas entregas. Retorna 200.
true para ativar, false para desativar.
Este endpoint aceita o header Idempotency-Key.
Status Quando 200Status atualizado. 404Webhook não encontrado.
curl -X PATCH https://api.sandbox.z2pay.com/webhooks/whk_8Hk2pQ7rT9vLm3Nx/status \
-H "x-api-key: SUA_CHAVE_DE_SANDBOX" \
-H "Content-Type: application/json" \
-d '{ "isActive": false }'
{
"id" : "whk_8Hk2pQ7rT9vLm3Nx" ,
"companyId" : "comp_4Zp1Yt6Bn0Wq" ,
"name" : "Notificações de pagamento" ,
"url" : "https://meusite.com/webhooks/z2pay" ,
"events" : [ "transaction.paid" , "transaction.refunded" ],
"secret" : "um-segredo-bem-grande" ,
"isActive" : false ,
"createdAt" : "2026-06-24T13:45:00.000Z" ,
"updatedAt" : "2026-06-24T14:20:00.000Z" ,
"deletedAt" : null ,
"version" : 3
}
Remover webhook
DELETE /webhooks/:id
Remove um webhook usando soft delete : a entidade não é apagada, apenas marcada com deletedAt
preenchido. Retorna 200 com a entidade removida.
Este endpoint aceita o header Idempotency-Key.
Status Quando 200Webhook removido. 404Webhook não encontrado.
curl -X DELETE https://api.sandbox.z2pay.com/webhooks/whk_8Hk2pQ7rT9vLm3Nx \
-H "x-api-key: SUA_CHAVE_DE_SANDBOX"
{
"id" : "whk_8Hk2pQ7rT9vLm3Nx" ,
"companyId" : "comp_4Zp1Yt6Bn0Wq" ,
"name" : "Notificações de pagamento" ,
"url" : "https://meusite.com/webhooks/z2pay" ,
"events" : [ "transaction.paid" , "transaction.refunded" ],
"secret" : "um-segredo-bem-grande" ,
"isActive" : false ,
"createdAt" : "2026-06-24T13:45:00.000Z" ,
"updatedAt" : "2026-06-24T14:25:00.000Z" ,
"deletedAt" : "2026-06-24T14:25:00.000Z" ,
"version" : 4
}
Listar entregas (deliveries)
GET /webhooks/deliveries
Retorna uma lista paginada das tentativas de entrega de webhooks. Cada delivery é o registro de uma
notificação enviada (ou que está em processo de envio) para a sua URL.
Parâmetro (query) Tipo Obrigatório Descrição webhookIdstringNão Filtra pelas entregas de um webhook específico. eventTypestringNão Filtra por tipo de evento (ex: transaction.paid). statusstringNão Filtra por status. Valores: pending, success, failed, retrying. fromstring (ISO 8601)Não Data inicial do intervalo de criação. tostring (ISO 8601)Não Data final do intervalo de criação. sortstringNão Ordenação. Valores: createdAt.asc, createdAt.desc. Padrão createdAt.desc. pageintegerNão Página (inteiro positivo). Padrão 1. limitintegerNão Itens por página (inteiro positivo, máximo 100). Padrão 20.
curl -X GET "https://api.sandbox.z2pay.com/webhooks/deliveries?status=failed&page=1&limit=20" \
-H "x-api-key: SUA_CHAVE_DE_SANDBOX"
{
"data" : [
{
"id" : "whd_5Qm9Rt2pK7vBn1Xz" ,
"companyId" : "comp_4Zp1Yt6Bn0Wq" ,
"webhookId" : "whk_8Hk2pQ7rT9vLm3Nx" ,
"eventId" : "evt_1a2b3c4d5e6f" ,
"eventType" : "transaction.paid" ,
"entityType" : "transaction" ,
"entityId" : "txn_9Lp3Kt7rQ2vMn4Xz" ,
"url" : "https://meusite.com/webhooks/z2pay" ,
"payload" : {
"event" : "transaction.paid" ,
"data" : { "id" : "txn_9Lp3Kt7rQ2vMn4Xz" }
},
"status" : "failed" ,
"attemptCount" : 3 ,
"returnStatus" : 500 ,
"returnData" : { "error" : "internal server error" },
"errorMessage" : "Request failed with status code 500" ,
"lastAttemptAt" : "2026-06-24T13:50:12.000Z" ,
"createdAt" : "2026-06-24T13:46:00.000Z" ,
"updatedAt" : "2026-06-24T13:50:12.000Z"
}
],
"pagination" : {
"page" : 1 ,
"limit" : 20 ,
"total" : 1 ,
"totalPages" : 1
}
}
Buscar entrega por ID
GET /webhooks/deliveries/:id
Retorna os dados completos de uma entrega, incluindo o payload enviado e o returnData da resposta
recebida — útil para depurar uma entrega que falhou.
Status Quando 200Entrega encontrada. 404Entrega não encontrada.
ID da entrega (prefixo whd_).
ID do webhook que originou esta entrega.
ID do evento que disparou a entrega.
Tipo do evento (ex: transaction.paid).
Tipo da entidade relacionada (ex: transaction).
ID da entidade relacionada (ex: txn_...).
URL para a qual a entrega foi enviada.
Conteúdo JSON enviado na entrega.
Status da entrega: pending, success, failed ou retrying.
Número de tentativas de envio já realizadas.
Código HTTP retornado pelo seu endpoint na última tentativa.
Corpo da resposta retornado pelo seu endpoint.
Mensagem de erro da última tentativa, quando houver.
Data/hora da última tentativa (ISO 8601), quando houver.
Data/hora de criação da entrega (ISO 8601).
Data/hora da última atualização (ISO 8601).
curl -X GET https://api.sandbox.z2pay.com/webhooks/deliveries/whd_5Qm9Rt2pK7vBn1Xz \
-H "x-api-key: SUA_CHAVE_DE_SANDBOX"
{
"id" : "whd_5Qm9Rt2pK7vBn1Xz" ,
"companyId" : "comp_4Zp1Yt6Bn0Wq" ,
"webhookId" : "whk_8Hk2pQ7rT9vLm3Nx" ,
"eventId" : "evt_1a2b3c4d5e6f" ,
"eventType" : "transaction.paid" ,
"entityType" : "transaction" ,
"entityId" : "txn_9Lp3Kt7rQ2vMn4Xz" ,
"url" : "https://meusite.com/webhooks/z2pay" ,
"payload" : {
"event" : "transaction.paid" ,
"data" : { "id" : "txn_9Lp3Kt7rQ2vMn4Xz" }
},
"status" : "failed" ,
"attemptCount" : 3 ,
"returnStatus" : 500 ,
"returnData" : { "error" : "internal server error" },
"errorMessage" : "Request failed with status code 500" ,
"lastAttemptAt" : "2026-06-24T13:50:12.000Z" ,
"createdAt" : "2026-06-24T13:46:00.000Z" ,
"updatedAt" : "2026-06-24T13:50:12.000Z"
}
Reprocessar entrega
POST /webhooks/deliveries/:id/retry
Reenvia uma entrega que falhou anteriormente. Use após corrigir o seu endpoint para receber novamente
a notificação. Retorna 200 com { "ok": true }.
Este endpoint aceita o header Idempotency-Key.
Status Quando 200Entrega reenviada (enfileirada para reprocessamento). 404Entrega não encontrada.
curl -X POST https://api.sandbox.z2pay.com/webhooks/deliveries/whd_5Qm9Rt2pK7vBn1Xz/retry \
-H "x-api-key: SUA_CHAVE_DE_SANDBOX"
Tratamento de erros (formato do corpo, status codes comuns como 400 de validação e 401 de
autenticação) está documentado em Erros .
Veja também
Webhooks: visão geral Como funciona a entrega, retentativas e validação de assinatura.
Catálogo de eventos Cada evento e o payload que você recebe.
Transações A origem da maioria dos eventos de webhook.
Erros Formato de erro e status codes da API.