事件目录
实体级事件(
user.status.updated、business.status.updated)也可能因交易活动而触发,详见实体 Webhook。
沙盒应用不会发出
transaction.created 或 transaction.status.updated Webhook。如需测试这些事件,请使用生产应用,或在控制台中使用 API & Webhooks → Try Webhook。Travel Rule 沙盒交换会发出 environment: sandbox 的 travel_rule.status.updated Webhook。正式上线前,请使用 Didit Test VASP 测试交换流程。信封结构
Didit 的 Webhook 采用扁平结构:事件字段与信封字段并列位于顶层,没有嵌套的data 对象。每次投递都包含以下字段:
Payload 结构
transaction.created 和 transaction.status.updated
这两个事件共用同一种 payload:一个精简摘要,外加 action_required 块(若无则为 null):
GET /v3/transactions/{transaction_id}/ 获取完整记录。返回内容包括完整详情(参与方、rule_runs、provider_results、travel_rule、cost_breakdown、decision_reason_code),以及状态发生变化的原因。
transaction_rule_suggestions.created
该事件针对的是您的规则集,而非某一笔交易,因此不包含交易 ID。
事件内容绝不包含个人数据,仅包括建议 ID、类型、标题和数量。
通用信封字段(
event_id、timestamp、application_id、environment)同样会添加到请求体中。
travel_rule.status.updated
FINISHED、CANCELLED 或 EXPIRED。转账一旦到达其中任一状态,便不会再为其发送任何 Travel Rule 事件。
事件的状态可能与上一个事件相同,例如重新发送时仍未找到通道,转账保持在 COUNTERPARTY_VASP_NOT_FOUND。
rail 的取值为 INTERNAL、TRP、GTR、TRUST、VERIFYVASP、SYGNA、EMAIL、TEST_VASP(由 Didit Test VASP 应答的沙盒转账,同时带有 test_vasp: true 和 test_vasp_scenario),或在未选定通道时为 ""(sunrise 注册始终为 "")。
在创建交易、sunrise 注册、入站 TRP 查询或 INTERNAL 通道的入站段中,Didit 会先发送 transaction.created,再发送该交易的 travel_rule.status.updated 事件。若某条规则在此步骤中改变了交易状态,也可能在 transaction.created 之前发送 transaction.status.updated。
附加到您已创建的存款交易上的 sunrise 注册,不会发送 transaction.created。
每个 Webhook 都独立投递和重试,因此被重试的事件可能晚于之后的事件到达。请以 transaction_id 为键处理事件,需要了解当前状态时,重新读取该交易。
状态流转示例
直接通过
先审核后通过
升级验证
Travel Rule 转账
transaction.created 先入队。每个 Webhook 都独立投递,因此不要依赖到达顺序。
通过 TRUST 发送的转账永远不会收到 COMPLETED 事件,因为 TRUST 不会返回 Didit 可读取的任何内容:转账会停留在 AWAITING_COUNTERPARTY,直到确认截止时间,然后以 EXPIRED 结束。通过 GTR、VerifyVASP 和 Sygna Bridge 发送时,Didit 会从网络中读取交易对手的应答,事件随之发出。
签名验证
每次投递都会使用目标的共享密钥进行 HMAC-SHA256 签名,并附带三个签名请求头和一个时间戳:重试与投递保证
- 遇到
5xx、404、超时或连接失败时,Didit 最多重试 2 次:首次失败约 1 分钟后重试一次,之后再过约 4 分钟重试一次。 - 重试的投递会复用相同的
event_id,请在您的处理程序中据此去重。 - 最后一次失败后,该事件的投递停止,并会通知您的组织;Webhook 目标绝不会被静默禁用。
- 请尽快返回
2xx(先入队,再处理)。ACK 响应缓慢可能导致超时和重复投递。
幂等性
请将event_id 存入您自己的去重存储,以确保每个 Webhook 仅被处理一次。当您的端点响应 ACK 缓慢或在请求过程中断开连接时,同一事件可能会被重新投递。
订阅
后续步骤
Webhook 参考
Webhook 目标、签名与重试。
状态
完整的状态机。
集成指南
在生产环境中处理 Webhook。