Visão Geral
Webhooks permitem que você receba notificações HTTP automáticas quando eventos importantes acontecem na sua conta, como pagamentos confirmados, reembolsos processados ou saques concluídos.Eventos Disponíveis
| Evento | Descrição |
|---|---|
payment_completed | Pagamento foi confirmado com sucesso |
refund_completed | Reembolso foi processado |
withdrawal_completed | Saque foi processado com sucesso |
withdrawal_failed | Saque foi rejeitado ou falhou |
Estrutura do Payload
Todos os webhooks seguem a mesma estrutura base:| Campo | Tipo | Descrição |
|---|---|---|
event | string | Tipo do evento |
eventId | string | ID único do evento (geralmente o ID da transação) |
timestamp | string | Data/hora do evento em formato ISO 8601 |
data | object | Dados específicos do evento |
Headers Enviados
Cada requisição de webhook inclui os seguintes headers:| Header | Descrição |
|---|---|
Content-Type | application/json |
X-Webhook-Signature | Assinatura HMAC-SHA256 do payload |
X-Webhook-Timestamp | Timestamp em milliseconds |
Validando a Assinatura
Cada webhook é assinado com HMAC-SHA256 para garantir autenticidade. Siga estes passos para validar:- Calcule a signing key:
SHA256(seu_webhook_secret)em hex - Calcule o HMAC-SHA256 do body da requisição usando a signing key
- Compare o resultado com o header
X-Webhook-Signatureusando comparação em tempo constante
Exemplos de Payload
payment_completed
Enviado quando um pagamento PIX é confirmado.| Campo | Tipo | Descrição |
|---|---|---|
transactionId | string | ID único da transação |
environment | string | Ambiente (production ou sandbox) |
amount | number | Valor total do pagamento |
feeAmount | number | Taxa cobrada |
netAmount | number | Valor líquido (amount - feeAmount) |
currency | string | Moeda (BRL) |
paymentMethod | string | Método de pagamento (pix) |
status | string | Status do pagamento (completed) |
completedAt | string | Data/hora da conclusão em ISO 8601 |
externalReference | string | Sua referência externa (opcional) |
metadata | object | Metadados customizados enviados na criação do pagamento (opcional) |
refund_completed
Enviado quando um reembolso é processado.| Campo | Tipo | Descrição |
|---|---|---|
refundTransactionId | string | ID único da transação de reembolso |
originalTransactionId | string | ID da transação original que foi reembolsada |
environment | string | Ambiente (production ou sandbox) |
amount | number | Valor do reembolso |
feeAmount | number | Taxa do reembolso |
netAmount | number | Valor líquido do reembolso |
currency | string | Moeda (BRL) |
status | string | Status do reembolso (completed) |
completedAt | string | Data/hora da conclusão em ISO 8601 |
metadata | object | Metadados customizados do pagamento original (opcional) |
withdrawal_completed
Enviado quando um saque é processado com sucesso.| Campo | Tipo | Descrição |
|---|---|---|
withdrawalId | string | ID único do saque |
environment | string | Ambiente (production ou sandbox) |
amount | number | Valor do saque |
feeAmount | number | Taxa do saque |
netAmount | number | Valor líquido transferido |
currency | string | Moeda (BRL) |
status | string | Status do saque (completed) |
completedAt | string | Data/hora da conclusão em ISO 8601 |
metadata | object | Metadados customizados do saque (opcional) |
withdrawal_failed
Enviado quando um saque é rejeitado ou falha.| Campo | Tipo | Descrição |
|---|---|---|
withdrawalId | string | ID único do saque |
environment | string | Ambiente (production ou sandbox) |
amount | number | Valor do saque |
feeAmount | number | Taxa do saque |
netAmount | number | Valor líquido que seria transferido |
currency | string | Moeda (BRL) |
status | string | Status do saque (failed) |
failedAt | string | Data/hora da falha em ISO 8601 |
failureReason | string | Motivo da falha (insufficient_funds, invalid_account, etc.) |
metadata | object | Metadados customizados do saque (opcional) |
Boas Práticas
Responda rapidamente
Responda rapidamente
Retorne um status
200 OK o mais rápido possível. Processe o webhook de forma assíncrona se necessário.Implemente idempotência
Implemente idempotência
Use o
eventId para evitar processar o mesmo evento duas vezes. Webhooks podem ser reenviados em caso de falha.Use HTTPS
Use HTTPS
Configure seu endpoint apenas com HTTPS para garantir a segurança dos dados.
Retentativas
Se o seu endpoint não responder com status2xx, tentaremos reenviar o webhook:
- 5 tentativas com backoff exponencial
- Intervalo inicial: 2 segundos
- Intervalo máximo: ~30 segundos entre tentativas

