Skip to main content
Sempre que o status de uma transação muda, o TrustPass faz um 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.
Regras da URL:
  • A URL precisa ser https e 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.
Gestão do segredo e da URL:
  • 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 único POST 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, 405 quando a URL não aceita POST, 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 401 ou 403): nesse caso a recusa é esperada e confirma que a URL está acessível.
  • Ignore eventos webhook.test no 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-0d6f5c1b2a77
string
Tipo do evento: transaction.status_changed ou webhook.test.Exemplo: transaction.status_changed
string
Momento do envio desta tentativa, em segundos Unix.Exemplo: 1791378301
string
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:
  1. Leia o corpo cru da requisição, exatamente os bytes recebidos. Não use o JSON depois de convertido e serializado de novo.
  2. Monte o texto <x-trustpass-timestamp>.<corpo cru> e calcule o HMAC-SHA256 com o seu segredo, em hexadecimal.
  3. Compare v1=<hmac> com o header x-trustpass-signature usando uma comparação em tempo constante.
  4. 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 sequence aplicado por transação e ignore eventos com sequence menor ou igual a ele.