跳转到主要内容
本页介绍 POST /v3/transactions/ 和 GET /v3/transactions/{transaction_id}/ 返回的完整 payload。两个端点返回的是同一个 TransactionDetail 对象;API 参考包含逐字段的架构说明,本页将逐一介绍。

顶层结构

两个标识符描述同一笔交易。uuid 是 Didit 的稳定标识符,也是 GET /v3/transactions/{transaction_id}/ 路径中需要传入的值;txn_id 是你在创建时提供的 transaction_id。transaction_number 是控制台显示的、按应用范围递增的序号。 你提交的主体和交易对手不会作为顶层键返回。它们是 parties 数组中的条目,通过 role 加以区分;顶层的 vendor_data 是申请人 vendor_data 的便捷副本。

关键字段

财务字段

  • amount / currency:提交的交易金额。amount 为十进制字符串,去除末尾零(如 "1500"、"0.5"),最多保留 18 位小数。
  • currency_type:fiat 或 crypto,与提交的 currency_kind 一致;未提交时为 null。
  • amount_in_default_currency / default_currency_code:您在请求中提供的预换算金额,原样回传;未发送时为 null。
  • preferred_currency_amount / preferred_currency_code:amount 按您应用的首选货币换算后的金额。当 currency 没有可用汇率,且您也未提交 amount_in_default_currency 时为 null。
  • payment_details / payment_txn_id:请求中的自由文本付款备注,以及外部付款参考(例如区块链交易哈希)。

状态字段

  • status:APPROVED、IN_REVIEW、DECLINED、AWAITING_USER。交易创建时为 APPROVED;规则可能同步修改其状态。
  • score:规则累计得出的整数风险分数。数值越高,风险越大。
  • severity:UNKNOWN、LOW、MEDIUM、HIGH、CRITICAL,或在规则或服务商设置之前为 null。
  • decision_reason_code / decision_reason_label:当前状态的结构化原因和人类可读原因。
  • environment:live 或 sandbox,取自拥有该交易的应用。sandbox 交易会被存储但不会被评估,因此其空的 rule_runs 表示“未评估”,而非“没有任何规则命中”。参见沙盒中的交易监控。
  • source:LIVE 表示通过 API 或 SDK 提交的交易,IMPORTED 表示通过控制台 CSV 导入加载的交易。

参与方

交易中的每个参与方都是 parties 中的一个条目。创建接口将交易主体记录为 APPLICANT,可选的交易对手记录为 COUNTERPARTY;role 枚举还包括 REMITTER 和 BENEFICIARY。所有条目的结构相同。
  • role:APPLICANT、COUNTERPARTY、REMITTER、BENEFICIARY。可按此字段筛选以找到交易主体。
  • entity_type:individual、company、external、unhostedWallet,按提交时的原样。
  • kind:当参与方通过 vendor_data 关联到 Didit 用户或企业时为 USER 或 BUSINESS;否则为 EXTERNAL。
  • country_code / dob:来自提交的 address.country 和 date_of_birth。
  • address / institution_info:提交时的对象原样保存;未提交时为 {}。
  • external_party_snapshot:EXTERNAL 参与方的参与方数据冻结副本;参与方已关联到 Didit 用户或企业时为 null。

device

device 是您为该参与方提交的 device_context,已规范化为 snake_case,并附加服务端 IP 富化信息。请求未包含设备上下文时为 {},因此请始终将每个键都视为可选。 没有单独的富化对象。当参与方提交了公网 network_context.ip_address 时,Didit 会直接在原对象中解析该地址,并将富化字段写入同一个 network_context 对象,且只填充您未提交的键。解析器返回为空的键会被省略,因此完整富化的 network_context 包含四个提交的键(ip_address、ip_country_code、latitude、longitude),以及成功解析出的 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 和 proxy_type 中的部分或全部。成功解析后,is_vpn_or_tor 和 is_data_center 始终存在。 以下情况会跳过富化,network_context 将按提交时的原样返回:IP 缺失或不可路由、应用处于沙盒环境,或解析失败。Didit 解析成功时,ip_country_code 为 ISO 3166-1 alpha-2 代码;否则为您提交的值。规则条件在比较前会将两种形式统一规范化。

支付方式

  • role:SOURCE、DESTINATION、FUNDING、BENEFICIARY。创建接口根据 direction 分配 SOURCE / DESTINATION:在转出交易中,交易主体的支付方式为 SOURCE,交易对手的为 DESTINATION;转入时则相反。
  • payment_method_type:bank_card、bank_account、e_wallet、crypto_wallet、unhosted_wallet、other。
  • fingerprint:对 type:account_id:issuing_country 计算的 SHA-256,在不同交易间保持稳定,便于您关联同一支付工具的重复使用。未提交 account_id 时为 null。
  • owner_kind / vendor_data / owner_name:支付工具的所有者信息,遵循与参与方相同的 USER / BUSINESS / EXTERNAL 约定。
  • details:提交时的原始 payment_method 对象。

规则运行记录

  • rule:运行规则的 UUID;rule_title、rule_description、rule_category 均从该规则复制而来。
  • matched:只有当规则的条件命中时才会记录运行,因此生产环境评估始终带有 matched: true。评估后未命中的规则不会留下记录。演示数据中可能包含 matched: false 的记录。
  • is_test / mode:规则以测试模式运行时为 true 和 TEST;测试运行会被记录,但不会影响 status、score 或 severity。
  • score_delta / status_target / severity:本次运行所贡献的内容。当执行了 change_status 操作,或新增分数超过阈值时,会设置 status_target。
  • action_summary:规则所执行操作的字符串摘要,各项以 ; 连接(score +30、change_status:IN_REVIEW、add_tag:<name>、add_note、add_to_list、open_case);规则未执行任何操作时为 null。
  • metadata:评估详情,包括 scope_match,以及 conditions[] 和 aggregations[]。这两个列表使用不同的值键:
    • conditions[]:每个条件一个条目,包含 field、operator、expected_value、从交易中读取的 current_value、matched、group_index 和 group_logic。在交易规则运行中,field_source 始终为 null;仅在监控事件中才会对其进行分类。
    • aggregations[]:每个频次 / 计数 / 求和聚合一个条目,包含 metric、field、operator、expected_value、聚合计算得出的 computed_value、window、filters、matched 和 sample_references。只能异步计算的聚合会携带 computed_value: null 和 deferred: true。

警报

alerts 目前始终为空数组。 未关闭的警报表示交易已被挂起,因此请改为读取 status(IN_REVIEW 或 AWAITING_USER)。参见 警报。

活动

交易的活动日志:创建、备注、人工审核和状态变更。
分析师备注以 TRANSACTION_NOTE_ADDED 条目的形式出现在此处,没有单独的 notes 数组。

文件

从控制台附加到交易的文件。没有文件时为 []。
file_url 是短期有效的签名 URL;需要时再获取,请勿将其存储下来。

供应商结果

外部供应商的输出(交易哈希筛查、钱包筛查、法币监控、制裁筛查)。
result_type:FIAT_MONITORING、WALLET_SCREENING、TRANSACTION_SCREENING、TRAVEL_RULE、NETWORK_GRAPH、CUSTOM。 payload.risk_factors 是对 score 的排序解释,说明得出该结论的原因:风险较高的驱动因素排在前面,其次按涉及的转移价值排序。如果 score 较高但没有 is_high_risk 条目,说明供应商是依据其自身的风险敞口模型对该实体进行评级的,并未报告制裁或已归属实体的匹配;summary 会明确说明这一点。逐字段说明参见 风险因素。在该字段推出之前筛查的结果不包含此键。 对于加密货币交易哈希筛查,链上数据补充可用时会填充 transaction_flows。它会对链上活动进行标准化处理,使控制台能够基于同一响应 payload 同时渲染交易概览和可视化图谱。 支持的数据补充来源:
  • EVM 链使用 Blockscout 标准化主交易、内部调用和代币转账。
  • Bitcoin 使用 mempool.space 标准化交易输入和输出。
  • Solana 使用 Helius 标准化原生 SOL 转账、SPL 代币转账,以及可用的 NFT 事件上下文。
每个 transaction_flows[] 条目都包含稳定的标准化字段(flow_type、from_address、to_address、amount、amount_usd、currency、token_name、token_address、transaction_hash、block_timestamp、index、success),以及特定于供应商的 metadata。 常见的 metadata 示例:
metadata 是可追加的,且因供应商而异。请勿构建关键集成,使其要求每条链都必须包含所有键。

Travel Rule

当交易没有 Travel Rule 转账或检查时,此字段为 null。当您提交 travel_rule_details 时会填充此字段;当应用已启用 Travel Rule 且交易以 transaction_category: "travelRule" 创建时,同样会填充此字段:此时 Didit 会自行发起交换,无论是否提供 travel_rule_details,并在此处报告其 status。请读取此字段,而不是您发送的请求。 对于入站转账,交易对手的 originator_data 和 beneficiary_data 在钱包所有权确认之前保持脱敏(data_masked: true)(参见 脱敏的交易对手数据)。
direction、rail、counterparty_vasp、delivery、discovery、reason 和 next_actions 的结构与转账端点中的相同。 reason 和 next_actions 说明 COUNTERPARTY_VASP_NOT_FOUND 或 COUNTERPARTY_VASP_NOT_REACHABLE 转账卡住的原因以及推动其继续的方法;对于其他任何状态,二者分别为 "" 和 []。参见 转账卡住的原因。 GET /v3/transactions/ 的每一行都包含相同的数据块。 参见 Travel Rule。

网络快照

存储的图谱本身,而不是对它的引用。它来自以下任一来源:
  • 您随交易提交的 network_snapshot,或
  • 加密交易的 AML 钱包筛查 成功时 Didit 构建的图谱,即使请求中未携带 network_snapshot 也是如此。由筛查构建的图谱会替换已提交的图谱,异步重新筛查会刷新它。
两者都不存在时为 null:
控制台交易详情页面渲染的是同一图谱。

标签、元数据、props

  • tags[]:已附加的标签(通过规则操作或由分析师添加):{ "uuid", "name", "color", "description", "source" },其中 source 为 didit 表示预设标签,为 custom 表示您自定义的标签。
  • metadata:创建时您提交的 subject 和 counterparty payload 的快照,位于这两个键之下。
  • props:创建时您提供的 custom_properties。每个键都可以在规则条件中以 custom_values.<key> 的形式引用。

补救

当规则触发 AWAITING_USER 时,Didit 会创建关联的验证会话,并通过两个字段返回:
  • remediation:关联会话:{ "session_id", "session_token", "url", "status" }。在交易的整个生命周期内都会保持有值,因此您始终可以查看用户操作的结束情况。
  • action_required:用户当前必须执行的操作;没有待处理事项时为 null:{ "type": "verification_session", "url", "session_id", "session_token", "status" }。将用户重定向到 url,或将 session_token 提供给 Didit SDK。Travel Rule 钱包所有权操作使用 { "type": "wallet_ownership", "url", "widget_session_id", "expires_at" },当两种操作都可能适用时优先采用此操作。当钱包所有权操作待处理且无法找到转账的交易对手时,同一数据块还会包含 reason 和 next_actions(参见 交易对手发现)。
同样的两个字段也会出现在 transaction.created 和 transaction.status.updated Webhook payload 中(action_required)。参见 Webhook。

费用明细

在计费功能为该交易运行之前为 null。否则为 { "total_price", "items": [ { "usage_type", "price", "details" } ] },每个计量功能对应一项(如筛查、数据补充等)。

货币换算

preferred_currency_amount 是将 amount 按中间市场汇率换算为您应用的首选货币后得到的金额,除非您提供了 amount_in_default_currency,此时直接使用该预先换算的值。针对 amount 的规则条件比较的是原始金额。如果您需要在不同货币之间使用同一个阈值,请在条件中使用 preferred_currency_amount。

后续步骤

提交交易

完整的请求结构。

状态

每个状态的含义。

风险评分

评分的计算方式。
最后修改于 2026年11月7日