跳转到主要内容
通过 创建交易 API 向 Didit 提交交易。每笔交易都包含结构化的主体、支付和上下文数据,规则引擎会实时评估这些数据。
当交易源自终端用户的设备(例如加密货币提现、应用内支付)时,可以考虑使用SDK 交易提交:此时由限定范围的 token 替代 API 密钥,设备信息会自动采集,所需的用户操作(钱包所有权证明、增强验证)会立即触发。

交易类别

每笔交易都有一个 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 的完整请求结构。
最后修改于 2026年11月7日