POST na URL de webhook cadastrada no seu projeto. Assim você fecha o pedido assim que a validação termina, sem consultar a API de transação em polling. Aqui o seu serviço é quem recebe a chamada.
Sem URL cadastrada, nada é enviado e o status fica disponível apenas por consulta.
Configuração
O webhook é uma configuração por projeto, feita no dashboard do TrustPass em Configurações do Trustpass → Conexões.1
Cadastre a URL
Em URL de webhook, informe o endereço do seu serviço que vai receber os eventos e clique em Salvar.
2
Guarde o segredo de assinatura
No primeiro cadastro da URL, o dashboard exibe o segredo de assinatura (
whsec_...). Ele só é exibido nesse momento: copie-o e guarde-o no seu cofre de segredos. Ele é usado para verificar a assinatura de cada chamada.3
Teste a URL
Clique em Testar webhook para enviar um evento de teste à URL e ver se o seu serviço responde. Veja Evento de teste.
- A URL precisa ser
httpse pública. Não são aceitos endereços privados, de loopback ou internos, nem credenciais na URL (https://usuario:senha@...). - Trocar a URL depois mantém o mesmo segredo.
- Em Gerar novo segredo, você cria um novo segredo a qualquer momento. O segredo anterior deixa de valer na hora, inclusive para as novas tentativas de entregas pendentes: atualize o seu sistema logo em seguida.
- Em Remover webhook, você apaga a URL e o segredo e descarta as entregas pendentes. Um novo cadastro gera um novo segredo.
- As mudanças da URL ficam registradas na aba Histórico.
Eventos
A criação da transação (status
pending) não gera evento. Veja o significado de cada status na lista completa de status.
Evento de teste
O botão Testar webhook envia um únicoPOST do tipo webhook.test para a URL informada, já salva ou não. Ele usa os mesmos headers e o mesmo formato de corpo de um evento real, com data igual a { "test": true }.
- O teste não tem novas tentativas: o dashboard mostra na hora se o seu serviço respondeu com 2xx ou qual foi a falha (por exemplo,
405quando a URL não aceitaPOST, ou ausência de resposta no prazo). - O teste é assinado com um segredo descartável, e não com o seu. Se o seu serviço valida a assinatura, ele vai recusar o teste (por exemplo, com
401ou403): nesse caso a recusa é esperada e confirma que a URL está acessível. - Ignore eventos
webhook.testno processamento dos seus pedidos.
Headers da chamada
string
Sempre
application/json.string
Sempre
TrustPass-Webhooks/1.0.string
Identificador único do evento. É o mesmo em todas as tentativas de entrega: use-o para descartar duplicados.Exemplo:
6f1c2c1e-6a43-4f0e-9a51-0d6f5c1b2a77string
Tipo do evento:
transaction.status_changed ou webhook.test.Exemplo: transaction.status_changedstring
Momento do envio desta tentativa, em segundos Unix.Exemplo:
1791378301string
Assinatura da chamada no formato
v1=<hex>: HMAC-SHA256 do texto <timestamp>.<corpo cru>, calculado com o seu segredo. Veja como verificar a assinatura.Corpo
string
Identificador do evento. Igual ao header
x-trustpass-event-id.string
Tipo do evento:
transaction.status_changed ou webhook.test.string
Data e hora em que o evento foi gerado (ISO 8601).
object
Dados da mudança de status. No evento
webhook.test, vale { "test": true }.Exemplo
O evento traz apenas identificadores e status, sem documento, dados de cartão ou nome. Para o detalhe da transação, consulte a API de transação ou a consulta de inteligência.
Como verificar a assinatura
Antes de processar o evento, confirme que ele veio do TrustPass:- Leia o corpo cru da requisição, exatamente os bytes recebidos. Não use o JSON depois de convertido e serializado de novo.
- Monte o texto
<x-trustpass-timestamp>.<corpo cru>e calcule o HMAC-SHA256 com o seu segredo, em hexadecimal. - Compare
v1=<hmac>com o headerx-trustpass-signatureusando uma comparação em tempo constante. - Rejeite timestamps muito antigos (por exemplo, mais de 5 minutos) para se proteger contra reenvio da mesma chamada.
Node.js
Resposta, timeout e novas tentativas
- Qualquer resposta 2xx confirma a entrega. Responda rápido e processe o evento depois.
- Cada tentativa tem timeout de 5 segundos. Redirecionamentos não são seguidos e contam como falha.
- A primeira tentativa sai em poucos segundos após a mudança de status. Se ela falhar (resposta fora de 2xx, timeout ou erro de rede), há novas tentativas depois de 30 s, 2 min, 10 min, 30 min, 1 h, 3 h, 6 h, 12 h e 24 h: 10 tentativas, cerca de 47 horas no total. Esgotadas as tentativas, o evento não é mais reenviado.
Duplicidade e ordem
A entrega é pelo menos uma vez: o mesmo evento pode chegar mais de uma vez, e uma nova tentativa pode chegar depois de um evento mais recente da mesma transação.- Descarte duplicados pelo
x-trustpass-event-id. - Guarde o último
sequenceaplicado por transação e ignore eventos comsequencemenor ou igual a ele.