POST /v3/transactions/ e GET /v3/transactions/{transaction_id}/. Os dois endpoints retornam o mesmo objeto TransactionDetail; a referência da API traz o esquema campo a campo, e esta página explica esse esquema.
Estrutura de nível superior
uuid é o identificador estável da Didit e é o que GET /v3/transactions/{transaction_id}/ espera no path; txn_id é o transaction_id que você informou na criação. transaction_number é o número sequencial no escopo da aplicação que o console exibe.
O titular e a contraparte que você enviou não voltam como chaves de nível superior. Eles são as entradas do array parties, diferenciadas por role, e vendor_data no nível superior é uma cópia de conveniência do vendor_data do solicitante.
Campos principais
Campos financeiros
amount/currency— valor da transação conforme enviado.amounté uma string decimal sem zeros à direita ("1500","0.5"), com até 18 casas decimais.currency_type—fiatoucrypto, conforme enviado emcurrency_kind;nullquando omitido.amount_in_default_currency/default_currency_code— o valor pré-convertido que você informou na requisição, devolvido sem alterações;nullquando você não enviou nenhum.preferred_currency_amount/preferred_currency_code—amountconvertido para a moeda preferencial da sua aplicação.nullquando não há taxa de câmbio disponível paracurrencye você não informouamount_in_default_currency.payment_details/payment_txn_id— a referência de pagamento em texto livre e a referência externa do pagamento (por exemplo, um hash de transação em blockchain) enviadas na requisição.
Campos de status
status—APPROVED,IN_REVIEW,DECLINED,AWAITING_USER. As transações são criadas comoAPPROVED; as regras podem alterá-las de forma síncrona.score— pontuação de risco inteira acumulada pelas regras. Quanto maior, mais arriscada.severity—UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL, ounullaté que uma regra ou um provedor a defina.decision_reason_code/decision_reason_label— motivo do status atual, em formato estruturado e legível.environment-liveousandbox, de acordo com a aplicação dona da transação. Uma transaçãosandboxé armazenada, mas nunca avaliada, então umrule_runsvazio significa “não avaliada”, e não “nenhuma regra correspondeu”. Consulte Monitoramento de transações em sandbox.source-LIVEpara transações enviadas pela API ou pelo SDK,IMPORTEDpara transações carregadas pela importação de CSV no console.
Partes
Cada parte da transação é uma entrada emparties. O endpoint de criação registra o titular como APPLICANT e a contraparte opcional como COUNTERPARTY; o enum role também inclui REMITTER e BENEFICIARY. Todas as entradas têm o mesmo formato.
role—APPLICANT,COUNTERPARTY,REMITTER,BENEFICIARY. Use-o como filtro para encontrar o titular.entity_type—individual,company,external,unhostedWallet, conforme enviado.kind—USERouBUSINESSquando a parte está vinculada a um usuário ou empresa da Didit por meio devendor_data; caso contrário,EXTERNAL.country_code/dob— extraídos deaddress.countryedate_of_birthenviados.address/institution_info— os objetos conforme enviados;{}quando omitidos.external_party_snapshot— cópia congelada dos dados da parte para partesEXTERNAL;nullenquanto a parte estiver vinculada a um usuário ou empresa da Didit.
device
device é o device_context que você enviou para essa parte, normalizado em snake_case, acrescido do enriquecimento de IP feito no servidor. Ele é {} quando a requisição não trouxe contexto de dispositivo, portanto trate sempre todas as chaves como opcionais.
Não existe um objeto de enriquecimento separado. Quando a parte trouxe um
network_context.ip_address público, a Didit o resolve na hora e grava os campos enriquecidos no mesmo objeto network_context, preenchendo apenas as chaves que você não informou. As chaves que o resolvedor retornou vazias são omitidas, então um network_context totalmente enriquecido contém as quatro chaves enviadas (ip_address, ip_country_code, latitude, longitude) mais as que tiverem sido resolvidas entre ip_country, ip_state, ip_city, isp, organization, is_vpn_or_tor, is_data_center, time_zone, time_zone_offset, asn_number, asn_organization, connection_type, carrier e proxy_type. is_vpn_or_tor e is_data_center estão sempre presentes após uma resolução bem-sucedida.
O enriquecimento é ignorado, e network_context é retornado exatamente como enviado, quando o IP está ausente ou não é roteável, quando a aplicação está em sandbox ou quando a resolução falhou. ip_country_code é um código ISO 3166-1 alfa-2 quando a Didit o resolveu e, caso contrário, o valor que você enviou; as condições das regras normalizam as duas formas antes de comparar.
Métodos de pagamento
role—SOURCE,DESTINATION,FUNDING,BENEFICIARY. O endpoint de criação atribuiSOURCE/DESTINATIONa partir dedirection: em uma transação de saída, o método do titular é oSOURCEe o da contraparte é oDESTINATION; em uma transação de entrada, é o inverso.payment_method_type—bank_card,bank_account,e_wallet,crypto_wallet,unhosted_wallet,other.fingerprint— SHA-256 sobretype:account_id:issuing_country, estável entre transações para que você possa correlacionar o reúso do mesmo instrumento.nullquando nenhumaccount_idfoi enviado.owner_kind/vendor_data/owner_name— quem é o dono do instrumento, seguindo a mesma convençãoUSER/BUSINESS/EXTERNALdas partes.details— o objetopayment_methodbruto, conforme enviado.
Execuções de regras
rule— UUID da regra executada;rule_title,rule_descriptionerule_categorysão copiados dela.matched— uma execução só é registrada quando as condições da regra corresponderam, então as avaliações em produção sempre trazemmatched: true. Regras avaliadas sem correspondência não deixam nenhuma entrada. Dados de demonstração podem incluir linhas commatched: false.is_test/mode—trueeTESTquando a regra foi executada em modo de teste; uma execução de teste é registrada, mas não tem efeito sobrestatus,scoreouseverity.score_delta/status_target/severity— o que essa execução contribuiu.status_targeté definido quando uma açãochange_statusfoi executada ou quando a pontuação adicionada ultrapassou um limiar.action_summary— um resumo em string das ações que a regra executou, unidas por;(score +30,change_status:IN_REVIEW,add_tag:<name>,add_note,add_to_list,open_case);nullquando a regra não executou nenhuma ação.metadata— o detalhe da avaliação:scope_match, além deconditions[]eaggregations[]. As duas listas usam chaves de valor diferentes:conditions[]— uma entrada por condição comfield,operator,expected_value, ocurrent_valuelido da transação,matched,group_indexegroup_logic.field_sourceé semprenullnas execuções de regras de transação; ele só é classificado para eventos de monitoramento.aggregations[]— uma entrada por agregação de velocidade / contagem / soma commetric,field,operator,expected_value, ocomputed_valueresultante da agregação,window,filters,matchedesample_references. Agregações que só puderam ser calculadas de forma assíncrona trazemcomputed_value: nulledeferred: true.
Alertas
alerts é sempre um array vazio hoje.
Um alerta aberto é uma transação retida, então leia status (IN_REVIEW ou AWAITING_USER). Consulte Alertas.
Atividades
O registro de atividades da transação: criação, notas, revisões manuais e mudanças de status.TRANSACTION_NOTE_ADDED. Não existe um array notes separado.
Documentos
Arquivos anexados à transação pelo console.[] quando não há nenhum.
file_url é uma URL assinada de curta duração: busque-a quando precisar dela, em vez de armazená-la.
Resultados de provedores
Saídas de provedores externos (triagem de hash de transação, triagem de carteiras, monitoramento fiat, triagem de sanções).result_type: FIAT_MONITORING, WALLET_SCREENING, TRANSACTION_SCREENING, TRAVEL_RULE, NETWORK_GRAPH, CUSTOM.
payload.risk_factors é a explicação ordenada de score, ou seja, o que produziu o veredito: primeiro os fatores de alto risco e depois por valor movimentado. Um score alto sem nenhuma entrada is_high_risk significa que o provedor avaliou a entidade com seu próprio modelo de exposição, sem relatar correspondência com sanções ou com uma entidade atribuída. summary informa isso explicitamente. Referência campo a campo: Fatores de risco. Resultados triados antes da existência desse campo omitem a chave.
Na triagem de hash de transações cripto, transaction_flows é preenchido quando o enriquecimento on-chain está disponível. Ele normaliza a atividade da cadeia para que o console possa renderizar tanto a visão geral da transação quanto o grafo de visualização a partir do mesmo payload de resposta.
Fontes de enriquecimento compatíveis:
- Cadeias EVM usam o Blockscout para normalizar a transação principal, as chamadas internas e as transferências de tokens.
- Bitcoin usa o mempool.space para normalizar as entradas e saídas da transação.
- Solana usa o Helius para normalizar transferências nativas de SOL, transferências de tokens SPL e o contexto disponível de eventos de NFT.
transaction_flows[] inclui campos normalizados estáveis (flow_type, from_address, to_address, amount, amount_usd, currency, token_name, token_address, transaction_hash, block_timestamp, index, success), além de metadata específico do provedor.
Exemplos comuns de metadata:
metadata é aditivo e específico do provedor. Não crie integrações críticas que exijam que todas as chaves estejam presentes para todas as cadeias.
Travel Rule
null quando a transação não tem transferência nem verificação de Travel Rule. Ele é preenchido quando você envia travel_rule_details e também quando a Travel Rule está habilitada para a aplicação e a transação foi criada com transaction_category: "travelRule": nesse caso, a Didit inicia a troca por conta própria, com ou sem travel_rule_details, e informa o status aqui. Leia este campo em vez da requisição que você enviou.
Em uma transferência recebida, os dados originator_data e beneficiary_data da contraparte permanecem mascarados (data_masked: true) até que a propriedade da carteira seja confirmada (consulte Dados mascarados da contraparte).
direction, rail, counterparty_vasp, delivery, discovery, reason e next_actions têm o mesmo formato que no endpoint de transferência.
reason e next_actions explicam por que uma transferência COUNTERPARTY_VASP_NOT_FOUND ou COUNTERPARTY_VASP_NOT_REACHABLE está parada e o que a faz avançar, e são "" e [] para qualquer outro status: consulte Por que uma transferência está parada.
Cada linha de GET /v3/transactions/ traz o mesmo bloco.
Consulte Travel Rule.
Snapshot da rede
O próprio grafo armazenado, não uma referência a ele. Ele vem de uma destas fontes:- um
network_snapshotque você enviou com a transação, ou - o grafo que a Didit constrói quando a triagem de carteiras AML é concluída com sucesso para uma transação cripto, mesmo que a requisição não tenha incluído
network_snapshot. Um grafo construído pela triagem substitui um grafo enviado, e uma nova triagem assíncrona o atualiza.
null quando nenhum dos dois existe:
Tags, metadados, props
tags[]: tags anexadas (por ação de regra ou por um analista):{ "uuid", "name", "color", "description", "source" }, em quesourceédiditpara uma tag predefinida ecustompara uma das suas.metadata: um snapshot dos payloadssubjectecounterpartyexatamente como você os enviou no momento da criação, sob essas duas chaves.props: ascustom_propertiesque você forneceu no momento da criação. Cada chave pode ser referenciada nas condições de regra comocustom_values.<key>.
Remediação
Quando uma regra acionaAWAITING_USER, a Didit cria a sessão de verificação vinculada e a retorna em dois campos:
remediation: a sessão vinculada:{ "session_id", "session_token", "url", "status" }. Permanece preenchido durante toda a vida da transação, para que você sempre possa ver como terminou a ação do usuário.action_required: a ação que o usuário deve realizar agora, ounullquando não há nada pendente:{ "type": "verification_session", "url", "session_id", "session_token", "status" }. Redirecione o usuário paraurlou passesession_tokenpara um SDK da Didit. As ações de propriedade de carteira da Travel Rule usam{ "type": "wallet_ownership", "url", "widget_session_id", "expires_at" }e têm precedência quando ambas puderem se aplicar. Quando uma ação de propriedade de carteira está pendente e a contraparte da transferência não pôde ser encontrada, o mesmo bloco também trazreasonenext_actions(consulte descoberta da contraparte).
transaction.created e transaction.status.updated (action_required). Consulte webhooks.
Detalhamento de custos
null até que um recurso faturável tenha sido executado para a transação. Caso contrário, { "total_price", "items": [ { "usage_type", "price", "details" } ] }, com um item por recurso medido (triagem, enriquecimento e assim por diante).
Conversão de moeda
preferred_currency_amount é o amount convertido para a moeda preferida da sua aplicação pela taxa de câmbio média do mercado, a menos que você tenha informado amount_in_default_currency; nesse caso, esse valor já convertido é usado sem alterações. As condições de regra sobre amount comparam o valor na moeda original; use preferred_currency_amount nas condições quando precisar de um único limiar para todas as moedas.
Próximos passos
Enviar transações
Esquema completo da requisição.
Status
O que cada status significa.
Pontuação de risco
Como a pontuação é calculada.