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 objetodata 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):
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
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
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: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
2xxrapidamente (enfileire e depois processe) - confirmações lentas correm o risco de timeouts e entregas duplicadas.
Idempotência
Processe cada webhook exatamente uma vez armazenando oevent_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.