Pular para o conteúdo principal
O Monitoramento de transações emite três eventos de webhook que, juntos, cobrem todo o ciclo de vida da transação, além de um quarto evento opcional que anuncia novas sugestões de regras. Todos usam a infraestrutura padrão de webhooks da Didit com assinatura HMAC-SHA256. Consulte a referência de webhooks para destinos, assinatura e testes.

Catálogo de eventos

Eventos de entidade (user.status.updated, business.status.updated) também podem ser disparados em consequência da atividade de transações. Consulte webhooks de entidades.
Aplicações de sandbox não emitem webhooks transaction.created nem transaction.status.updated. Para testar esses eventos, use uma aplicação de produção ou API & Webhooks → Try Webhook no console. As trocas da Travel Rule em sandbox emitem webhooks travel_rule.status.updated com environment: sandbox; use o Didit Test VASP para testar uma troca antes de entrar em produção.

Envelope

Os webhooks da Didit usam um corpo plano: os campos do evento ficam no nível superior, ao lado dos campos do envelope, e não há um objeto data aninhado. Toda entrega inclui:

Formatos de payload

transaction.created e transaction.status.updated

Os dois eventos compartilham um payload: um resumo compacto mais o bloco action_required (ou null):
O payload é propositalmente enxuto. Ao recebê-lo, busque o registro completo com GET /v3/transactions/{transaction_id}/, que retorna todos os detalhes (partes, rule_runs, provider_results, travel_rule, cost_breakdown, decision_reason_code), incluindo por que o status mudou.

transaction_rule_suggestions.created

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

travel_rule.status.updated

É disparado em toda transição, incluindo a passagem para FINISHED, CANCELLED ou EXPIRED. Quando uma transferência chega a um desses status, nenhum outro evento de Travel Rule é enviado para ela. Um evento pode repetir o status do anterior, por exemplo, quando um reenvio novamente não encontra um trilho e a transferência permanece em COUNTERPARTY_VASP_NOT_FOUND. rail é INTERNAL, TRP, GTR, TRUST, VERIFYVASP, SYGNA, EMAIL, TEST_VASP (uma transferência de sandbox respondida pelo Didit Test VASP, que também inclui test_vasp: true e test_vasp_scenario) ou "" enquanto nenhum trilho estiver selecionado (sempre "" em registros sunrise). Na criação de uma transação, em um registro sunrise, em uma consulta TRP de entrada ou no segmento de entrada pelo trilho INTERNAL, a Didit envia primeiro o transaction.created e, depois dele, os eventos travel_rule.status.updated da transação. Uma regra que altera o status da transação durante essa etapa também pode enviar transaction.status.updated antes de transaction.created. Um registro sunrise vinculado a uma transação de depósito que você já criou não envia transaction.created. Cada webhook é entregue e reenviado de forma independente, então um evento reenviado ainda pode chegar depois de um evento posterior. Use transaction_id como chave no seu handler e consulte a transação novamente quando precisar do estado atual.

Exemplos de jornadas de status

Aprovação simples

Revisão seguida de aprovação

Verificação adicional (step-up)

Transferência com Travel Rule

Os dois primeiros eventos vêm da mesma requisição, e o transaction.created entra na fila primeiro. Cada webhook é entregue de forma independente, então não dependa da ordem de chegada. Uma transferência enviada pelo TRUST nunca recebe um evento COMPLETED, porque o TRUST não retorna nada que a Didit consiga ler: ela permanece em AWAITING_COUNTERPARTY até o prazo de confirmação e então termina como EXPIRED. No GTR, no VerifyVASP e no Sygna Bridge, a Didit lê a resposta da contraparte na rede e o evento reflete essa resposta.

Verificação de assinatura

Cada entrega é assinada com HMAC-SHA256 usando o segredo compartilhado do destino e traz três cabeçalhos de assinatura, além de um timestamp:
Consulte a referência de webhooks para ver o código de verificação completo, incluindo a checagem de validade do timestamp.

Novas tentativas e garantias de entrega

  • Em caso de 5xx, 404, timeout ou falha de conexão, a Didit tenta novamente até 2 vezes: cerca de 1 minuto após a falha inicial e, depois, cerca de 4 minutos depois.
  • As entregas repetidas reutilizam o mesmo event_id - faça a deduplicação por ele no seu handler.
  • Após a última falha, a entrega desse evento é interrompida e sua organização é notificada; os destinos nunca são desativados silenciosamente.
  • Retorne um 2xx rapidamente (enfileire e depois processe) - confirmações lentas correm o risco de timeouts e entregas duplicadas.

Idempotência

Processe cada webhook exatamente uma vez armazenando o event_id no seu próprio repositório de deduplicação. O mesmo evento pode ser entregue novamente quando seu endpoint confirma o recebimento com lentidão ou se desconecta no meio da requisição.

Inscrição

Próximos passos

Referência de webhooks

Destinos, assinatura, novas tentativas.

Status

Máquina de estados completa.

Guia de integração

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