POST /v3/transactions/ e GET /v3/transactions/{transaction_id}/. Ambos os endpoints devolvem o mesmo objeto TransactionDetail; a referência da API contém o esquema campo a campo, e esta página explica-o.
Estrutura de nível superior
uuid é o identificador estável da Didit e é o que GET /v3/transactions/{transaction_id}/ espera no respetivo caminho; txn_id é o transaction_id que forneceu na criação. transaction_number é o número sequencial no âmbito da aplicação, que a consola apresenta.
O sujeito e a contraparte que submeteu não são devolvidos como chaves de nível superior. Estão nas entradas do array parties, distinguidas pelo role, e o vendor_data de nível superior é uma cópia de conveniência do vendor_data do requerente.
Campos principais
Campos financeiros
amount/currency: montante da transação tal como foi enviado.amounté uma string decimal sem zeros finais ("1500","0.5"), com até 18 casas decimais.currency_type:fiatoucrypto, tal como enviado emcurrency_kind;nullquando omitido.amount_in_default_currency/default_currency_code: o montante pré-convertido que indicou no pedido, devolvido tal como foi enviado;nullquando não enviou nenhum.preferred_currency_amount/preferred_currency_code:amountconvertido para a moeda preferida da sua aplicação.nullquando não existe taxa de câmbio disponível paracurrencye não enviouamount_in_default_currency.payment_details/payment_txn_id: a referência de pagamento em texto livre e a referência de pagamento externa (por exemplo, um hash de transação blockchain) do pedido.
Campos de estado
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 mais alta, maior o risco.severity:UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL, ounullaté que uma regra ou um fornecedor a defina.decision_reason_code/decision_reason_label: motivo estruturado e motivo legível para o estado atual.environment:liveousandbox, a partir da aplicação que detém a transação. Uma transaçãosandboxé armazenada mas nunca avaliada, pelo que o seurule_runsvazio significa “não avaliada” e não “nenhuma regra correspondeu”. Consulte Monitorização de transações em sandbox.source:LIVEpara transações enviadas através da API ou do SDK,IMPORTEDpara transações carregadas através da importação de CSV na consola.
Intervenientes
Todos os intervenientes da transação são entradas emparties. O endpoint de criação regista o sujeito como APPLICANT e a contraparte opcional como COUNTERPARTY; o enum role inclui também REMITTER e BENEFICIARY. Todas as entradas têm a mesma estrutura.
role:APPLICANT,COUNTERPARTY,REMITTER,BENEFICIARY. Filtre por este campo para encontrar o sujeito.entity_type:individual,company,external,unhostedWallet, tal como enviado.kind:USERouBUSINESSquando o interveniente está ligado a um utilizador ou a uma empresa da Didit através devendor_data;EXTERNALcaso contrário.country_code/dob: a partir deaddress.countryedate_of_birthenviados.address/institution_info: os objetos tal como foram enviados;{}quando omitidos.external_party_snapshot: cópia congelada dos dados do interveniente para intervenientesEXTERNAL;nullenquanto o interveniente estiver ligado a um utilizador ou a uma empresa da Didit.
device
device é o device_context que enviou para esse interveniente, normalizado para snake_case, com o enriquecimento de IP do lado do servidor. É {} quando o pedido não incluiu contexto de dispositivo, pelo que deve tratar sempre todas as chaves como opcionais.
Não existe um objeto de enriquecimento separado. Quando o interveniente enviou um
network_context.ip_address público, a Didit resolve-o em linha e escreve os campos enriquecidos no mesmo objeto network_context, preenchendo apenas as chaves que não enviou. As chaves que o resolvedor devolveu vazias são omitidas, pelo que um network_context totalmente enriquecido contém as quatro chaves enviadas (ip_address, ip_country_code, latitude, longitude), mais as de 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 que tenham sido resolvidas. 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 é devolvido exatamente como foi enviado, quando o IP está em falta 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 alpha-2 quando a Didit o resolveu e, caso contrário, é o valor que enviou; as condições das regras normalizam ambas as formas antes de comparar.
Métodos de pagamento
role:SOURCE,DESTINATION,FUNDING,BENEFICIARY. O endpoint de criação atribuiSOURCE/DESTINATIONa partir dedirection: numa transação de saída, o método do sujeito é oSOURCEe o da contraparte é oDESTINATION; numa 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 possa correlacionar a reutilização do mesmo instrumento.nullquando não foi enviado nenhumaccount_id.owner_kind/vendor_data/owner_name: quem é o titular do instrumento, seguindo a mesma convençãoUSER/BUSINESS/EXTERNALdos intervenientes.details: o objetopayment_methodoriginal, tal como foi enviado.
Execuções de regras
rule: UUID da regra que foi executada;rule_title,rule_descriptionerule_categorysão copiados dela.matched: uma execução só é registada quando as condições da regra correspondem, pelo que as avaliações em produção têm semprematched: true. As regras avaliadas sem correspondência não deixam registo. Os 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 é registada, mas não tem efeito emstatus,scoreouseverity.score_delta/status_target/severity: o contributo desta execução.status_targeté definido quando foi executada uma açãochange_statusou quando a pontuação acrescentada ultrapassou um limiar.action_summary: string com o resumo das ações executadas pela regra, 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, bem comoconditions[]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; só é classificado para eventos de monitorização.aggregations[]: uma entrada por agregação de velocidade, contagem ou soma, commetric,field,operator,expected_value, ocomputed_valueresultante da avaliação da agregação,window,filters,matchedesample_references. As agregações que só puderam ser calculadas de forma assíncrona têmcomputed_value: nulledeferred: true.
Alertas
alerts é sempre uma lista vazia de momento.
Um alerta aberto corresponde a uma transação retida, por isso consulte status (IN_REVIEW ou AWAITING_USER). Consulte Alertas.
Atividades
O registo de atividade da transação: criação, notas, revisões manuais e alterações de estado.TRANSACTION_NOTE_ADDED; não existe um array notes separado.
Documentos
Ficheiros anexados à transação a partir da consola.[] quando não existe nenhum.
file_url é um URL assinado de curta duração; obtenha-o quando precisar, em vez de o guardar.
Resultados dos prestadores
Resultados devolvidos por prestadores externos (triagem de hashes de transações, triagem de carteiras, monitorização de moeda fiduciária, 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: o que produziu o veredicto, primeiro os fatores de risco elevado e, depois, por valor movimentado. Um score elevado sem entrada is_high_risk significa que o prestador classificou a entidade com base no seu próprio modelo de exposição, sem reportar uma correspondência com sanções ou com entidade atribuída; o summary indica-o explicitamente. Referência campo a campo: Fatores de risco. Os resultados triados antes de existir este campo não incluem a chave.
Na triagem de hashes de transações cripto, transaction_flows é preenchido quando o enriquecimento on-chain está disponível. Normaliza a atividade da cadeia para que a consola possa apresentar, a partir do mesmo payload de resposta, tanto a visão geral da transação como o grafo de visualização.
Fontes de enriquecimento suportadas:
- As cadeias EVM usam o Blockscout para normalizar a transação principal, as chamadas internas e as transferências de tokens.
- O Bitcoin usa o mempool.space para normalizar as entradas e saídas da transação.
- A Solana usa a Helius para normalizar as transferências nativas de SOL, as transferências de tokens SPL e o contexto disponível dos 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 prestador.
Exemplos comuns de metadata:
metadata é aditivo e específico de cada prestador. Não crie integrações críticas que exijam que todas as chaves estejam presentes em todas as cadeias.
Travel Rule
null quando a transação não tem nenhuma transferência nem verificação da Travel Rule. Fica preenchido quando envia travel_rule_details, e também quando a Travel Rule está ativada para a aplicação e a transação foi criada com transaction_category: "travelRule": nesse caso, a Didit inicia a troca por si própria, com ou sem travel_rule_details, e indica aqui o respetivo status. Leia este campo em vez do pedido que enviou.
Numa transferência recebida, os originator_data e beneficiary_data da contraparte permanecem mascarados (data_masked: true) até a propriedade da carteira ser confirmada (consulte Dados da contraparte mascarados).
direction, rail, counterparty_vasp, delivery, discovery, reason e next_actions têm a mesma estrutura que no endpoint de transferência.
reason e next_actions indicam porque é que uma transferência COUNTERPARTY_VASP_NOT_FOUND ou COUNTERPARTY_VASP_NOT_REACHABLE está bloqueada e o que a faz avançar, e têm os valores "" e [] para qualquer outro estado: consulte Porque está bloqueada uma transferência.
Cada linha de GET /v3/transactions/ inclui o mesmo bloco.
Consulte Travel Rule.
Instantâneo da rede
O próprio grafo armazenado, e não uma referência a ele. Provém de uma das seguintes fontes:- um
network_snapshotque enviou com a transação, ou - o grafo que a Didit constrói quando a triagem AML de carteiras é bem-sucedida numa transação cripto, mesmo que o pedido não tenha incluído
network_snapshot. Um grafo construído pela triagem substitui um grafo enviado, e uma nova triagem assíncrona atualiza-o.
null quando nenhum dos dois existe:
Etiquetas, metadados e propriedades
tags[]: etiquetas associadas (por ação de uma regra ou pelo analista):{ "uuid", "name", "color", "description", "source" }, em quesourceédiditpara uma etiqueta predefinida ecustompara uma das suas.metadata: um instantâneo dos payloads desubjectecounterpartyexatamente como os enviou na criação, sob essas duas chaves.props: oscustom_propertiesque forneceu na criação. Cada chave pode ser referenciada nas condições das regras comocustom_values.<key>.
Remediação
Quando uma regra disparaAWAITING_USER, a Didit cria a sessão de verificação associada e devolve-a em dois campos:
remediation: a sessão associada:{ "session_id", "session_token", "url", "status" }. Permanece preenchido durante toda a vida da transação, pelo que pode ver sempre como terminou a ação do utilizador.action_required: a ação que o utilizador tem de executar neste momento, ounullquando não existe nenhuma pendente:{ "type": "verification_session", "url", "session_id", "session_token", "status" }. Redirecione o utilizador paraurlou passesession_tokena um SDK da Didit. As ações de propriedade da carteira da Travel Rule usam{ "type": "wallet_ownership", "url", "widget_session_id", "expires_at" }e têm prioridade quando ambas podem aplicar-se. Quando uma ação de propriedade da carteira está pendente e não foi possível encontrar a contraparte da transferência, o mesmo bloco inclui tambémreasonenext_actions(consulte descoberta da contraparte).
transaction.created e transaction.status.updated (action_required). Consulte webhooks.
Detalhe de custos
null até que uma funcionalidade faturável seja executada para a transação. Caso contrário, { "total_price", "items": [ { "usage_type", "price", "details" } ] }, com um item por funcionalidade contabilizada (triagem, enriquecimento e outras).
Conversão de moeda
preferred_currency_amount é o amount convertido para a moeda preferida da sua aplicação, às taxas médias de mercado, a menos que tenha fornecido amount_in_default_currency, caso em que esse valor já convertido é usado tal como está. As condições de regras sobre amount comparam o montante na moeda de origem; use preferred_currency_amount nas condições quando precisar de um único limiar para todas as moedas.
Próximos passos
Submeter transações
Esquema completo do pedido.
Estados
O que significa cada estado.
Pontuação de risco
Como a pontuação é calculada.