Receber eventos
Envie webhook_url na criação da cobrança ou da transferência e receba os eventos dela, sem cadastrar nada antes.
É o jeito recomendado de integrar. Cada cobrança e cada transferência carrega a URL que deve ser avisada, então o seu sistema decide o destino na hora de criar o recurso: um pedido da loja A vai para o backend da loja A, um repasse vai para o financeiro, sem configuração na dashboard.
Como usar
Campos na criação
webhook_urlstringopcional | URL http(s) pública que recebe os POSTs. Até 2048 caracteres. |
webhook_secretstringopcional | Assina as entregas para essa URL com o header X-Webhook-Signature. |
curl -X POST https://api.transakto.io/v1/charges \
-H "x-api-key: sk_live_..." \
-H "Idempotency-Key: pedido-1042" \
-H "Content-Type: application/json" \
-d '{
"amount": 4990,
"reference": "pedido-1042",
"customer": {
"name": "Maria Souza",
"email": "maria@exemplo.com.br",
"document": "123.456.789-09"
},
"webhook_url": "https://meusistema.com.br/hooks/pagamentos",
"webhook_secret": "um-segredo-bem-longo"
}'Funciona igual em POST /v1/payouts. A URL volta no campo webhook_url das respostas, para você conferir o que ficou gravado. O segredo nunca volta.
O que chega
Todos os eventos daquele recurso, do created ao desfecho: para uma cobrança Pix, charge.pix.created, charge.pix.emitted e depois charge.pix.paid (ou failed, refunded e os demais). Não há lista de eventos para escolher: se aconteceu com o recurso, a URL fica sabendo.
O corpo, os headers e a assinatura são os mesmos de qualquer entrega. Veja Eventos para o formato e Assinatura para validar o X-Webhook-Signature. O campo reference vem em todos os eventos, então dá para achar o pedido sem guardar o id da cobrança.
webhook_secret não há assinatura, e quem descobrir a URL consegue simular um pagamento confirmado. Em produção, mande sempre o segredo.Regras
A URL precisa ser http ou https e apontar para um host público. localhost, IPs de rede privada e endereços de link local são recusados na criação com 422 e INVALID_WEBHOOK_URL, antes de qualquer cobrança ser emitida. Para testar na sua máquina, exponha a porta com um túnel (ngrok, cloudflared) e use a URL pública dele.
A URL fica fixa no recurso: não dá para trocar depois de criado. Se o seu endereço mudar, as cobranças novas já saem com o novo, e as entregas antigas podem ser reenviadas pela dashboard.
Entregas e retentativas
Responda com qualquer status 2xx em até 10 segundos. Outra resposta, timeout ou erro de conexão conta como falha, e a entrega é repetida em 1 minuto, 5 minutos, 15 minutos, 1 hora, 3 horas, 6 horas e 12 horas: são 8 tentativas no total, ao longo de cerca de 22 horas. Depois disso a entrega fica como falha e pode ser reenviada pela dashboard.
Toda repetição leva o mesmo id de evento. Use esse id para ignorar o que já processou. As entregas saem em paralelo e não há garantia de ordem entre eventos: confie no status do recurso que vem no corpo, não na ordem de chegada.
Junto com endpoints cadastrados
Se a sua aplicação também tem endpoints cadastrados em /v1/webhooks, eles continuam recebendo os eventos que assinaram. As duas formas somam: o webhook_url do recurso recebe tudo daquele recurso, e o endpoint cadastrado recebe os eventos escolhidos de todos os recursos.
Quando o webhook_url é exatamente a mesma URL de um endpoint cadastrado que já assina o evento, a entrega sai uma vez só, assinada com o segredo do endpoint cadastrado.