Documentation Index
Fetch the complete documentation index at: https://docs.troqpay.com/llms.txt
Use this file to discover all available pages before exploring further.
Webhooks
Pense no webhook como o jeito da troqpay te avisar que alguma coisa mudou. Em vez de perguntar para a API o tempo todo se um checkout foi pago, você cadastra uma URL no seu sistema e a troqpay envia umPOST sempre que um evento relevante acontecer.
Por que usar webhooks
Sem webhook, seu backend teria que ficar consultando a API repetidamente para descobrir se o pagamento foi confirmado. Com webhook, a troqpay te avisa assim que isso acontecer. Na prática, isso ajuda você a:- atualizar o status de um pedido
- liberar acesso a um produto
- registrar a confirmação do pagamento
- reduzir polling desnecessário
Onde cadastrar no app
No fluxo mais comum, você faz isso no app da troqpay:Como funciona na prática
O que a troqpay espera do seu endpoint
Receba JSON por HTTPS
Seu endpoint precisa aceitar
POST com corpo JSON e estar disponível publicamente por HTTPS.Valide a assinatura
Use
x-troqpay-signature e o segredo do webhook para confiar no evento.Responda 2xx rápido
Faça o ack assim que a entrega for aceita. Deixe processamento pesado para sua fila interna.
Espere reentregas
Trate o modelo de entrega como
at least once: o mesmo evento pode chegar mais de uma vez.Eventos disponíveis hoje
| Evento | Quando acontece |
|---|---|
checkout.created | Quando o checkout é criado com sucesso |
checkout.paid | Quando o pagamento Pix é confirmado |
checkout.expired | Quando o checkout expira sem pagamento |
Ordem, timeout e reentregas
- para o mesmo checkout, o fluxo esperado costuma ser
checkout.createdseguido decheckout.paidoucheckout.expired - não assuma ordem estrita entre eventos de checkouts diferentes
- a troqpay tenta entregar até 5 vezes com backoff
60s → 5m → 15m → 60m - o timeout de cada tentativa é de 5 segundos
- se o seu endpoint não responder
2xxdentro desse prazo, a entrega é retentada - guarde
event.idpara garantir processamento idempotente — o mesmoevt_...pode chegar mais de uma vez
Restrições do endpoint
A troqpay valida algumas coisas quando você cadastra a URL no app:- precisa ser uma URL absoluta válida
- precisa usar
http://ouhttps:// - não pode ter credenciais embutidas (
https://user:pass@host/...é rejeitado) - em produção (
trq_live_), precisa serhttps://e não pode ser endereço local ou de rede privada (RFC 1918, loopback, link-local)
Exemplo de payload
data.checkout é exatamente a mesma forma retornada por GET /v1/checkouts/{checkoutId}. Inclui customer (sem phone), pix, settlement e metadata.
Assinatura
Cada endpoint cadastrado no app tem o seu próprio segredo de assinatura, mostrado uma vez no momento do cadastro. Toda entrega inclui o header:HMAC-SHA256 do corpo bruto da requisição, codificado em hex, usando esse segredo. Em pseudo-fórmula:
Exemplo de verificação em Node.js
O que responder para a troqpay
| Resposta do endpoint | O que isso significa |
|---|---|
2xx | A entrega foi aceita pelo seu sistema |
4xx ou 5xx | A entrega falhou e seu endpoint precisa ser investigado |
| Timeout | Trate como falha de entrega e prepare seu endpoint para reprocessar o evento |
Boas práticas de processamento
Responda 2xx rápido
Faça o ack da entrega rapidamente e deixe o processamento pesado para sua fila interna.
Use idempotência
Guarde
event.id para garantir que a mesma entrega não seja processada duas vezes.Espere reentregas
Retry faz parte da vida de qualquer integração séria. Seu endpoint precisa lidar bem com isso.
Logue com contexto
Registre
event.id, checkout.id, externalId e livemode para investigar problemas sem dor.Próximos passos
- Modelar os checkouts Pix
- Subir para produção
- Abra a aba
API Referencepara consultar a referência completa dos eventos e recursos
Precisa de ajuda para seguir?
Voltar ao Quickstart
Se você ainda não criou a primeira cobrança, volte e valide o fluxo completo.
Revisar erros
Veja como investigar falhas de autenticação, payload ou resposta do endpoint.
Abrir o app
Use o app da troqpay para revisar suas URLs, chaves e o ambiente que você está usando.

