Como funciona
Quando voce cria uma transacao comcallbackUrl, a Safefy envia uma requisicao HTTP POST para essa URL sempre que o status mudar.
Eventos disponiveis
Eventos de Transacao
| Evento | Descricao | Quando acontece |
|---|---|---|
transaction.completed | Pagamento confirmado | Quando o PIX e pago e confirmado pelo banco |
transaction.expired | Transacao expirou | Quando o prazo para pagamento esgota (padrao: 30 min) |
transaction.failed | Falha no processamento | Quando ocorre erro na adquirente ou validacao |
transaction.refunded | Pagamento estornado | Quando um pagamento confirmado e estornado |
Eventos de Saque
| Evento | Descricao | Quando acontece |
|---|---|---|
cashout.completed | Saque concluido | Quando o PIX e enviado para a conta destino |
cashout.failed | Falha no saque | Quando o saque e rejeitado ou falha |
Status das transacoes
Entenda o ciclo de vida de uma transacao e quando cada webhook e disparado:Detalhes de cada status
Pending - Aguardando pagamento
Pending - Aguardando pagamento
A transacao foi criada e esta aguardando o pagamento do cliente.O que fazer: Exiba o QR Code/codigo PIX para o cliente e aguarde a confirmacao.Webhook: Nenhum webhook e enviado neste status.
Completed - Pagamento confirmado
Completed - Pagamento confirmado
O pagamento foi recebido e confirmado pelo banco. O valor ja esta disponivel no seu saldo.O que fazer: Libere o produto/servico para o cliente.Webhook:
transaction.completedCampos importantes no webhook:data.completedAt- Data/hora da confirmacaodata.pix.endToEndId- ID unico da transacao no Banco Centraldata.pix.payerName- Nome do pagadordata.pix.payerDocument- Documento do pagador (mascarado)data.pix.payerBank- Banco do pagador
Expired - Transacao expirada
Expired - Transacao expirada
O tempo para pagamento expirou e a transacao foi automaticamente cancelada.O que fazer: Informe o cliente que o tempo expirou e ofereca uma nova tentativa.Webhook:
transaction.expiredFailed - Falha no processamento
Failed - Falha no processamento
Ocorreu um erro durante o processamento da transacao.O que fazer: Verifique o campo
failureReason e tome a acao apropriada.Webhook: transaction.failedCampo importante: data.failureReason - Motivo da falhaRefunded - Pagamento estornado
Refunded - Pagamento estornado
O pagamento confirmado foi estornado. O valor foi devolvido ao pagador.O que fazer: Revogue o acesso ao produto/servico.Webhook:
transaction.refundedCampo importante: data.refundedAt - Data/hora do estornoCancelled - Transacao cancelada
Cancelled - Transacao cancelada
A transacao foi cancelada manualmente antes do pagamento.O que fazer: Nenhuma acao necessaria.Webhook: Nenhum webhook e enviado para cancelamento manual.
Payload de exemplo
transaction.completed
Enviado quando o pagamento PIX e confirmado:transaction.expired
Enviado quando o tempo de pagamento esgota:transaction.refunded
Enviado quando um pagamento e estornado:cashout.completed
Enviado quando um saque e processado com sucesso:Headers enviados
| Header | Descricao |
|---|---|
X-Safefy-Signature | Assinatura HMAC-SHA256 para validacao |
X-Safefy-Event | Tipo do evento (transaction.completed, etc) |
X-Safefy-Delivery | ID unico da entrega |
X-Safefy-Attempt | Numero da tentativa (1, 2, 3…) |
Validando a assinatura
Para garantir que o webhook veio da Safefy, valide a assinatura:Retries
Se sua aplicacao nao responder com2xx, a Safefy tentara novamente:
| Tentativa | Intervalo |
|---|---|
| 1 | Imediato |
| 2 | 1 minuto |
| 3 | 5 minutos |
| 4 | 30 minutos |
| 5 | 2 horas |
Boas praticas
Responda rapido
Retorne 200 OK imediatamente e processe o webhook de forma assincrona.
Seja idempotente
Use o id do webhook para evitar processar o mesmo evento duas vezes.
Valide a assinatura
Sempre verifique X-Safefy-Signature antes de confiar no payload.
Use HTTPS
Configure sua callbackUrl apenas com HTTPS em producao.