Saltar para o conteúdo principal

Catálogo de eventos

A Monitorização de transações emite três eventos de webhook que, em conjunto, cobrem todo o ciclo de vida da transação, mais um quarto evento opcional que anuncia novas sugestões de regras. Todos utilizam a infraestrutura padrão de webhooks da Didit com assinatura HMAC-SHA256. Consulte a referência de webhooks para destinos, assinatura e testes. Os eventos ao nível da entidade (user.status.updated, business.status.updated) também podem ser disparados em consequência de atividade de transações. Consulte webhooks de entidades.
As aplicações sandbox não emitem webhooks transaction.created ou transaction.status.updated. Para testar esses eventos, use uma aplicação de produção ou API & Webhooks → Try Webhook na consola. As trocas sandbox da Travel Rule emitem webhooks travel_rule.status.updated com environment: sandbox; use o Didit Test VASP para testar uma troca antes de passar para produção.

Envelope

Os webhooks da Didit usam um corpo plano: os campos do evento ficam ao nível superior, junto aos campos do envelope. Não existe um objeto data aninhado. Cada envio inclui:

Estruturas do payload

transaction.created e transaction.status.updated

Ambos os eventos partilham um único payload, composto por um resumo compacto e pelo bloco action_required (ou null):
O payload é intencionalmente reduzido. Ao recebê-lo, obtenha o registo completo com GET /v3/transactions/{transaction_id}/. Esse pedido devolve o detalhe completo (intervenientes, rule_runs, provider_results, travel_rule, cost_breakdown, decision_reason_code), incluindo o motivo pelo qual o estado mudou.

transaction_rule_suggestions.created

Este evento diz respeito ao seu conjunto de regras, e não a uma transação específica, por isso não inclui nenhum ID de transação. Nunca contém dados pessoais: apenas IDs de sugestões, tipos, títulos e contagens.
Os campos habituais do envelope (event_id, timestamp, application_id, environment) são acrescentados ao corpo.

travel_rule.status.updated

É disparado em cada transição, incluindo a entrada em FINISHED, CANCELLED ou EXPIRED. Quando uma transferência chega a um desses estados, não são enviados mais eventos da Travel Rule para ela. Um evento pode repetir o estado do anterior, por exemplo quando um reenvio volta a não encontrar uma via e a transferência permanece em COUNTERPARTY_VASP_NOT_FOUND. rail é INTERNAL, TRP, GTR, TRUST, VERIFYVASP, SYGNA, EMAIL, TEST_VASP (uma transferência sandbox respondida pelo Didit Test VASP, que também inclui test_vasp: true e test_vasp_scenario), ou "" enquanto nenhuma via estiver selecionada (sempre "" nos registos sunrise). Na criação de uma transação, de um registo sunrise, de um pedido TRP de entrada ou da perna de entrada na via INTERNAL, a Didit envia primeiro transaction.created e depois os eventos travel_rule.status.updated da transação. Uma regra que altere o estado da transação durante esse passo pode também enviar transaction.status.updated antes de transaction.created. Um registo sunrise que se associe a uma transação de depósito que já criou não envia transaction.created. Cada webhook é entregue e tentado novamente de forma independente, por isso um evento reenviado pode ainda chegar depois de um evento posterior. Use transaction_id como chave do seu processador e releia a transação quando precisar do estado atual.

Exemplos de percursos de estado

Aprovação simples

Revisão seguida de aprovação

Verificação reforçada

Transferência Travel Rule

Os dois primeiros eventos vêm do mesmo pedido, e transaction.created é colocado em fila primeiro. Cada webhook é entregue de forma independente, por isso não conte com a ordem de chegada. Uma transferência enviada pela TRUST nunca recebe um evento COMPLETED, porque a TRUST não devolve nada que a Didit possa ler. A transferência fica em AWAITING_COUNTERPARTY até ao prazo de confirmação e depois termina em EXPIRED. Pelas vias GTR, VerifyVASP e Sygna Bridge, a Didit lê a resposta da contraparte a partir da rede, e o evento segue-se a essa resposta.

Verificação da assinatura

Cada entrega é assinada com HMAC-SHA256 usando o segredo partilhado do destino e inclui três cabeçalhos de assinatura, bem como um carimbo temporal:
Consulte a referência de webhooks para o código completo de verificação, incluindo a verificação de atualidade do carimbo temporal.

Novas tentativas e garantias de entrega

  • Em caso de 5xx, 404, timeout ou falha de ligação, a Didit volta a tentar até 2 vezes: cerca de 1 minuto depois da falha inicial e, depois disso, cerca de 4 minutos mais tarde.
  • As entregas repetidas reutilizam o mesmo event_id; deduplique-as com base nele no seu processador.
  • Após a falha final, a entrega desse evento para e a sua organização é notificada; os destinos nunca são desativados em silêncio.
  • Devolva um 2xx rapidamente (coloque o evento em fila e depois processe-o): confirmações lentas aumentam o risco de timeouts e de entregas duplicadas.

Idempotência

Processe cada webhook exatamente uma vez, guardando o event_id no seu próprio armazenamento de deduplicação. Pode ocorrer nova entrega do mesmo evento se o seu endpoint confirmar lentamente ou se a ligação for interrompida a meio do pedido.

Subscrição

Próximos passos

Referência de webhooks

Destinos, assinatura, novas tentativas.

Estados

Máquina de estados completa.

Guia de integração

Como tratar webhooks em produção.
Última modificação em 7 de novembro de 2026