交易类别
每笔交易都有一个transaction_category,它决定规则和分析如何处理该交易:
交易详情
transaction_details 对象包含财务数据:
主体与交易对手
每笔交易都有一个主体(必填)和一个可选的交易对手。两者使用相同的主体模型:
当
address 为对象时,Didit 会从 address.country 推导该主体的 country_code。当 address 为字符串时,该主体的 country_code 返回 null。
当 vendor_data 与现有用户或企业匹配时,Didit 会自动将交易关联到该实体的档案,从而支持跨会话规则评估和交易频率检查。
在响应中,两个主体会通过 parties 数组返回,角色分别为 APPLICANT 和 COUNTERPARTY。
支付方式
为每个主体附加一个payment_method,用于描述该方的支付工具:
在
travelRule 交易中,在交易对手的支付方式上设置 method_type: "unhosted_wallet"(别名 type),即表示该交易对手钱包为自托管钱包。
启用 Travel Rule 且以应用默认货币计算的金额不低于 threshold_amount 时,转账会直接进入 UNCONFIRMED_OWNERSHIP 状态,并进入所有权证明流程。请参阅已声明的自托管钱包。
对于加密货币交易,请在 account_id 中填写钱包地址,并将 currency_kind 设置为 crypto,以便自动执行区块链筛查。方向决定筛查哪个钱包:入账的转账前筛查使用 counterparty.payment_method.account_id 中的发送方钱包;出账筛查使用 counterparty.payment_method.account_id 中的目标钱包。如果您在 transaction_details.payment_reference_id 中提交了区块链哈希,则入账交易筛查需要在 subject.payment_method.account_id 中填写您的服务入金地址,而出账交易筛查需要在 counterparty.payment_method.account_id 中填写目标钱包。
加密货币筛查覆盖设置
在请求的顶层使用include_crypto_screening,可以覆盖控制台中 交易 > 设置 配置的默认值:
设备上下文
在主体(以及可选的交易对手)上提供设备信息,以驱动设备情报规则。请求字段为每一方中的device_context;也接受驼峰式别名 device,SDK 的传输格式即使用该别名。响应会在 parties 数组中的每一方下以 device 返回该信息。
browser_family 和 platform 不会从 user_agent 推导。若要使设备情报规则生效,必须将它们作为顶层键显式放在 device_context 内传递。如果您使用 Didit SDK,这些字段会自动收集。userAgent、browserFamily、browserVersion、osFamily、osVersion、acceptLang、sessionId、sessionAgeMs。network_context 子对象接受 ip、countryCode3、lat、lon 别名,顶层的 ipInfo 块也会并入 network_context。
设备上下文可启用例如以下规则:多账户检测(同一指纹出现在不同主体上)、新浏览器与新 IP 组合检测、低会话时长的高额转账检测,以及基于位置的风险评分。
自定义属性
在custom_properties 对象中添加任意其他键值对。规则可以在其条件中引用这些字段,适用于传递特定业务上下文,例如商品类别、商户 ID 或渠道。
custom_values.<key> 引用每个键。例如,上述 payload 与 custom_values.product_category eq "electronics" 匹配。在 Console 规则构建器中,近期摄入的交易中出现过的键会显示在条件字段选择器的 自定义属性 下,同一组中的 输入自定义属性 允许您手动输入任意键(区分大小写)。详情请参阅 规则与评分。
请求示例
响应
API 会返回已创建的交易及其初始评估结果:
完整的请求和响应结构请参阅 API 参考;带注释的 payload 示例说明请参阅 响应结构参考。
将交易分配给审核员
使用具有write:transactions 权限的 API 密钥,将待审核交易分配给应用的某位成员,或取消分配。
每次变更都会以 TRANSACTION_ASSIGNED 的形式记录在交易时间线上。
两种调用都接受
assignee_email,即已登录 Didit 的应用成员的邮箱。传递 null 或空字符串即可取消分配。
批量调用还接受 transaction_ids,即 1 至 500 个交易 UUID 的列表。
uuid、transaction_number、assignee 和 changed(当交易已经分配给该审核员时为 false)。若交易在应用中不存在,则返回 404。
批量调用返回 transactions(每项结构与上述相同)、updated_count 和 not_found_transaction_ids。
使用 assignee 过滤交易列表,该参数为逗号分隔的列表,任一值匹配即可:me、unassigned、rules(仅由规则决定,不涉及审核员)或成员邮箱。
幂等性
txn_id(即您发送的 transaction_id)在每个应用中都是唯一的。
重复提交已存在的 transaction_id 会返回 400,并在 transaction_id 字段上返回 A transaction with this transaction_id already exists.;两个完全相同的请求并发时,第二个请求会收到 409。两种响应都不会返回已存在的交易。
要安全地重试,请将针对重复 transaction_id 的 400 或 409 视为“已创建”,然后查询已存在的交易,而不是重新提交:使用第一次响应中的 uuid,通过 GET /v3/transactions/{uuid}/ 读取交易;或者使用 transaction.created Webhook 中与您的 txn_id 一同返回的 transaction_id(即 Didit uuid)。
请始终在您的系统中生成 txn_id(例如您自己的交易数据库 ID、UUID 或确定性哈希值)。
历史数据回填
将txn_date 设为过去的时间即可导入历史交易。默认情况下仍会评估规则。如果在批量加载历史数据时希望跳过规则评估,请使用控制台 CSV 导入的 dry-ingest 模式。参阅集成指南。
后续步骤
规则与评分
提交的交易如何根据规则进行评估。
响应结构
带注释的完整响应 payload。
加密货币筛查
对加密货币交易自动进行钱包和交易筛查。
Travel Rule
为虚拟资产转账附加 Travel Rule 合规数据。
IP 信息补充
可供规则使用的 IP 派生上下文。
API 参考
创建交易 endpoint 的完整请求结构。