curl -X PUT https://verification.didit.me/v3/travel-rule/settings/ \
-H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
-d '{"is_enabled": true, "legal_name": "Origin CASP SL", "jurisdiction": "EU"}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.travel_rule.update_settings(
is_enabled=True,
legal_name="Origin CASP SL",
jurisdiction="EU",
name_matching_strictness="DEFAULT",
confirmation_timeout_hours=48,
timeout_outcome="HOLD",
is_discoverable=True,
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.travelRule.updateSettings({
is_enabled: true,
legal_name: "Origin CASP SL",
jurisdiction: "EU",
name_matching_strictness: "DEFAULT",
confirmation_timeout_hours: 48,
timeout_outcome: "HOLD",
is_discoverable: true,
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.TravelRule.UpdateSettings(ctx, didit.TravelRuleSettingsUpdate{
IsEnabled: didit.Bool(true),
LegalName: didit.String("Origin CASP SL"),
Jurisdiction: didit.String("EU"),
NameMatchingStrictness: didit.Some(didit.TravelRuleSettingsUpdateNameMatchingStrictness("DEFAULT")),
ConfirmationTimeoutHours: didit.Int(48),
TimeoutOutcome: didit.Some(didit.TravelRuleSettingsUpdateTimeoutOutcome("HOLD")),
IsDiscoverable: didit.Bool(true),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
import me.didit.types.TravelRuleSettingsUpdate;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.travelRule().updateSettings(TravelRuleSettingsUpdate.builder()
.isEnabled(true)
.legalName("Origin CASP SL")
.jurisdiction("EU")
.nameMatchingStrictness(TravelRuleSettingsUpdate.NameMatchingStrictness.of("DEFAULT"))
.confirmationTimeoutHours(48L)
.timeoutOutcome(TravelRuleSettingsUpdate.TimeoutOutcome.of("HOLD"))
.isDiscoverable(true)
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->travelRule->updateSettings([
'is_enabled' => true,
'legal_name' => 'Origin CASP SL',
'jurisdiction' => 'EU',
'name_matching_strictness' => 'DEFAULT',
'confirmation_timeout_hours' => 48,
'timeout_outcome' => 'HOLD',
'is_discoverable' => true,
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.travel_rule.update_settings(
is_enabled: true,
legal_name: "Origin CASP SL",
jurisdiction: "EU",
name_matching_strictness: "DEFAULT",
confirmation_timeout_hours: 48,
timeout_outcome: "HOLD",
is_discoverable: true
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.TravelRule.UpdateSettingsAsync(new TravelRuleSettingsUpdate
{
IsEnabled = true,
LegalName = "Origin CASP SL",
Jurisdiction = "EU",
NameMatchingStrictness = new TravelRuleSettingsUpdateNameMatchingStrictness("DEFAULT"),
ConfirmationTimeoutHours = 48,
TimeoutOutcome = new TravelRuleSettingsUpdateTimeoutOutcome("HOLD"),
IsDiscoverable = true,
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"is_enabled": true,
"jurisdiction": "<string>",
"name_matching_strictness": "NONE",
"confirmation_timeout_hours": 2,
"timeout_outcome": "HOLD",
"threshold_amount": "<string>",
"ownership_validation_mode": "FULL",
"simplified_validation_threshold": "<string>",
"data_sharing_fields": {
"individual": [
"name"
],
"company": [
"name"
]
},
"matching_rules": {
"individual": {
"name": "NONE",
"date_of_birth": "NONE",
"address": "NONE",
"account": "NONE"
},
"company": {
"name": "NONE",
"address": "NONE",
"account": "NONE"
}
},
"legal_name": "<string>",
"lei": "<string>",
"compliance_email": "jsmith@example.com",
"is_discoverable": true,
"inbound_auto_accept": true,
"allow_self_declaration": true,
"allow_screenshot_proof": true,
"auto_wallet_verification": true,
"vasp_attribution_enabled": true,
"counterparty_screening_enabled": true,
"sunrise_policy": "",
"sunrise_jurisdictions": [
"<string>"
],
"non_responsive_policy": "",
"travel_address": "<string>",
"disabled_networks": [],
"networks": {
"gtr": {
"rail": "GTR",
"mode": "own",
"state": "own_membership",
"reason": "own_membership_connected",
"platform_available": true,
"connected": true,
"participant": {
"mode": "platform",
"status": "not_requested",
"participant_code": "<string>",
"requested_at": "2023-11-07T05:31:56Z",
"activated_at": "2023-11-07T05:31:56Z",
"last_error": "<string>"
},
"vasps_reachable": 123,
"routed_30d": 123
},
"trust": {
"rail": "GTR",
"mode": "own",
"state": "own_membership",
"reason": "own_membership_connected",
"platform_available": true,
"connected": true,
"participant": {
"mode": "platform",
"status": "not_requested",
"participant_code": "<string>",
"requested_at": "2023-11-07T05:31:56Z",
"activated_at": "2023-11-07T05:31:56Z",
"last_error": "<string>"
},
"vasps_reachable": 123,
"routed_30d": 123
},
"verifyvasp": {
"rail": "GTR",
"mode": "own",
"state": "own_membership",
"reason": "own_membership_connected",
"platform_available": true,
"connected": true,
"participant": {
"mode": "platform",
"status": "not_requested",
"participant_code": "<string>",
"requested_at": "2023-11-07T05:31:56Z",
"activated_at": "2023-11-07T05:31:56Z",
"last_error": "<string>"
},
"vasps_reachable": 123,
"routed_30d": 123
},
"sygna": {
"rail": "GTR",
"mode": "own",
"state": "own_membership",
"reason": "own_membership_connected",
"platform_available": true,
"connected": true,
"participant": {
"mode": "platform",
"status": "not_requested",
"participant_code": "<string>",
"requested_at": "2023-11-07T05:31:56Z",
"activated_at": "2023-11-07T05:31:56Z",
"last_error": "<string>"
},
"vasps_reachable": 123,
"routed_30d": 123
}
},
"didit_network": {
"listed": true,
"missing": [
"travel_rule_off"
],
"compliance_email_confirmed": true
}
}{
"legal_name": [
"legal_name is required to enable travel rule."
]
}更新 Travel Rule 设置 API:启用与配置
Didit 支持通过部分更新启用 Travel Rule,并配置您的 VASP 资料、协商策略、证明方式以及网络退出选项。
curl -X PUT https://verification.didit.me/v3/travel-rule/settings/ \
-H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
-d '{"is_enabled": true, "legal_name": "Origin CASP SL", "jurisdiction": "EU"}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.travel_rule.update_settings(
is_enabled=True,
legal_name="Origin CASP SL",
jurisdiction="EU",
name_matching_strictness="DEFAULT",
confirmation_timeout_hours=48,
timeout_outcome="HOLD",
is_discoverable=True,
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.travelRule.updateSettings({
is_enabled: true,
legal_name: "Origin CASP SL",
jurisdiction: "EU",
name_matching_strictness: "DEFAULT",
confirmation_timeout_hours: 48,
timeout_outcome: "HOLD",
is_discoverable: true,
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.TravelRule.UpdateSettings(ctx, didit.TravelRuleSettingsUpdate{
IsEnabled: didit.Bool(true),
LegalName: didit.String("Origin CASP SL"),
Jurisdiction: didit.String("EU"),
NameMatchingStrictness: didit.Some(didit.TravelRuleSettingsUpdateNameMatchingStrictness("DEFAULT")),
ConfirmationTimeoutHours: didit.Int(48),
TimeoutOutcome: didit.Some(didit.TravelRuleSettingsUpdateTimeoutOutcome("HOLD")),
IsDiscoverable: didit.Bool(true),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
import me.didit.types.TravelRuleSettingsUpdate;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.travelRule().updateSettings(TravelRuleSettingsUpdate.builder()
.isEnabled(true)
.legalName("Origin CASP SL")
.jurisdiction("EU")
.nameMatchingStrictness(TravelRuleSettingsUpdate.NameMatchingStrictness.of("DEFAULT"))
.confirmationTimeoutHours(48L)
.timeoutOutcome(TravelRuleSettingsUpdate.TimeoutOutcome.of("HOLD"))
.isDiscoverable(true)
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->travelRule->updateSettings([
'is_enabled' => true,
'legal_name' => 'Origin CASP SL',
'jurisdiction' => 'EU',
'name_matching_strictness' => 'DEFAULT',
'confirmation_timeout_hours' => 48,
'timeout_outcome' => 'HOLD',
'is_discoverable' => true,
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.travel_rule.update_settings(
is_enabled: true,
legal_name: "Origin CASP SL",
jurisdiction: "EU",
name_matching_strictness: "DEFAULT",
confirmation_timeout_hours: 48,
timeout_outcome: "HOLD",
is_discoverable: true
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.TravelRule.UpdateSettingsAsync(new TravelRuleSettingsUpdate
{
IsEnabled = true,
LegalName = "Origin CASP SL",
Jurisdiction = "EU",
NameMatchingStrictness = new TravelRuleSettingsUpdateNameMatchingStrictness("DEFAULT"),
ConfirmationTimeoutHours = 48,
TimeoutOutcome = new TravelRuleSettingsUpdateTimeoutOutcome("HOLD"),
IsDiscoverable = true,
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"is_enabled": true,
"jurisdiction": "<string>",
"name_matching_strictness": "NONE",
"confirmation_timeout_hours": 2,
"timeout_outcome": "HOLD",
"threshold_amount": "<string>",
"ownership_validation_mode": "FULL",
"simplified_validation_threshold": "<string>",
"data_sharing_fields": {
"individual": [
"name"
],
"company": [
"name"
]
},
"matching_rules": {
"individual": {
"name": "NONE",
"date_of_birth": "NONE",
"address": "NONE",
"account": "NONE"
},
"company": {
"name": "NONE",
"address": "NONE",
"account": "NONE"
}
},
"legal_name": "<string>",
"lei": "<string>",
"compliance_email": "jsmith@example.com",
"is_discoverable": true,
"inbound_auto_accept": true,
"allow_self_declaration": true,
"allow_screenshot_proof": true,
"auto_wallet_verification": true,
"vasp_attribution_enabled": true,
"counterparty_screening_enabled": true,
"sunrise_policy": "",
"sunrise_jurisdictions": [
"<string>"
],
"non_responsive_policy": "",
"travel_address": "<string>",
"disabled_networks": [],
"networks": {
"gtr": {
"rail": "GTR",
"mode": "own",
"state": "own_membership",
"reason": "own_membership_connected",
"platform_available": true,
"connected": true,
"participant": {
"mode": "platform",
"status": "not_requested",
"participant_code": "<string>",
"requested_at": "2023-11-07T05:31:56Z",
"activated_at": "2023-11-07T05:31:56Z",
"last_error": "<string>"
},
"vasps_reachable": 123,
"routed_30d": 123
},
"trust": {
"rail": "GTR",
"mode": "own",
"state": "own_membership",
"reason": "own_membership_connected",
"platform_available": true,
"connected": true,
"participant": {
"mode": "platform",
"status": "not_requested",
"participant_code": "<string>",
"requested_at": "2023-11-07T05:31:56Z",
"activated_at": "2023-11-07T05:31:56Z",
"last_error": "<string>"
},
"vasps_reachable": 123,
"routed_30d": 123
},
"verifyvasp": {
"rail": "GTR",
"mode": "own",
"state": "own_membership",
"reason": "own_membership_connected",
"platform_available": true,
"connected": true,
"participant": {
"mode": "platform",
"status": "not_requested",
"participant_code": "<string>",
"requested_at": "2023-11-07T05:31:56Z",
"activated_at": "2023-11-07T05:31:56Z",
"last_error": "<string>"
},
"vasps_reachable": 123,
"routed_30d": 123
},
"sygna": {
"rail": "GTR",
"mode": "own",
"state": "own_membership",
"reason": "own_membership_connected",
"platform_available": true,
"connected": true,
"participant": {
"mode": "platform",
"status": "not_requested",
"participant_code": "<string>",
"requested_at": "2023-11-07T05:31:56Z",
"activated_at": "2023-11-07T05:31:56Z",
"last_error": "<string>"
},
"vasps_reachable": 123,
"routed_30d": 123
}
},
"didit_network": {
"listed": true,
"missing": [
"travel_rule_off"
],
"compliance_email_confirmed": true
}
}{
"legal_name": [
"legal_name is required to enable travel rule."
]
}授权
您的应用 API 密钥,可在 Business Console 的“开发者 -> API 密钥”中获取。主密钥拥有完整访问权限。指定名称的密钥可设置作用域:针对每个资源设为无权限、只读或读写,限定于特定工作流或已通过的会话、限定于 IP 地址列表,以及设置到期日期。401 表示密钥错误、已撤销或已过期;403 表示未发送密钥、密钥无权访问该资源或操作,或请求来自其 IP 列表之外的地址;在会话路由上返回 404 表示该会话不在该密钥允许的工作流或状态范围内。没有媒体访问权限的密钥获取到的图片、视频和 PDF URL 将为 null;没有会话写入权限的密钥获取到的会话链接和 token 将为 null。请参阅 https://docs.didit.me/console/api-keys。
请求体
所有字段均为可选;PUT 执行部分更新。
255208CONTAINS 接受一个名字中的所有词语均出现在另一个名字中。
NONE, STRICT, CONTAINS, DEFAULT, FUZZY x >= 1HOLD, REJECT, PROCEED 您 VASP 档案的合规联系人邮箱。只有在通过邮件发送的链接(POST /v3/travel-rule/settings/compliance-email/confirmation/)确认该地址后,Didit 网络才会列出您的档案;更改此地址需要重新确认。
您的 VASP 资料是否可以在 Didit 网络中被列出:可被其他 Didit 客户在 GET /v3/travel-rule/vasps/ 中检索到,并可通过 INTERNAL 轨道触达。列出还需要拥有已上线应用、开启 Travel Rule、提供法定名称以及经过确认的合规邮箱;didit_network 会指出缺少哪些项。默认值为 true。
十进制字符串,大于或等于零,以您应用的默认货币计。触发托管交换的最低转账金额。
请参阅同名的响应字段。
FULL, SIMPLIFIED, AUTOMATED 十进制字符串,0 或更大。
按实体类型合并:省略的实体类型将保留其当前选项。如果所选选项无法满足您所在 jurisdiction 制度(欧盟 TFR 或 FATF 第 16 号建议)的汇款人义务(包括空列表),将被拒绝并返回 400。
Show child attributes
Show child attributes
按主体类型以及其内部字段进行合并。若字段未被该主体类型进行比对(例如针对 company 的 date_of_birth),则会被拒绝并返回 400。
Show child attributes
Show child attributes
为 true 时,钱包所有权小组件提供屏幕截图上传作为所有权证明方式。默认为 true。
对交易对手 VASP 进行可选的制裁和负面新闻筛查,按企业 AML 筛查价格按次计费。开启后,Didit 会筛查出站交易所触达的交易对手(复用 30 天内的筛查结果),您也可以使用 POST /v3/travel-rule/vasps/{vasp_id}/screening/ 对其进行筛查。默认为 false:不进行任何筛查或计费。
HOLD、REJECT、PROCEED,或为空以遵循 timeout_outcome。参见同名的响应字段。
, HOLD, REJECT, PROCEED HOLD、REJECT、PROCEED,或为空以遵循 timeout_outcome。参见同名的响应字段。
, HOLD, REJECT, PROCEED 已选择退出平台成员资格的网络。这不会停用您已关联的自有成员资格,也不会配置不可用的网络。
GTR, TRUST, VERIFYVASP, SYGNA 响应
已更新设置和个人资料,结构与 GET 相同。
此应用上出向 travelRule 交易的托管 Travel Rule 协商流程是否处于活动状态。
您的 VASP 运营管辖区代码。默认为 "EU"。Didit 会将其映射到标记在您 Travel Rule 交易上的规管机制 travel_rule_regime(例如 EU 或欧盟成员国代码将变为 eu),交易规则可据此进行匹配。一旦 Didit 网络列出您的资料,其他 Didit 客户将在 VASP 目录中将其视为您的管辖区。
8转账达到 COMPLETED 状态前,收款人姓名必须匹配的严格程度。CONTAINS 接受一个名称的所有词均出现在另一个名称中的情况。
NONE, STRICT, CONTAINS, DEFAULT, FUZZY AWAITING_COUNTERPARTY 状态的转账在被定期清理程序过期前可保持未确认的小时数。默认为 48。
x >= 1转账过期时对底层交易的处理方式。默认值为 HOLD。当 sunrise_policy 和 non_responsive_policy 适用且已设置时,以它们为准。
HOLD, REJECT, PROCEED 十进制字符串,以您应用的默认货币计。触发托管交换的最低转账金额;低于该金额的转账直接解析为 NOT_APPLICABLE。Didit 会比对换算为您默认货币后的交易金额,或您发送的 amount_in_default_currency;当无可用的换算金额时,该阈值不适用。默认为 "0.00"(欧盟 TFR 不适用最低金额限制)。
钱包所有权所需的证明力度。FULL 始终需要证明(签名消息、测试存款或经过审核的截图),绝不单凭终端用户的陈述。SIMPLIFIED 在低于 simplified_validation_threshold 时接受自主声明,高于该阈值时需要证明。AUTOMATED 允许地址簿和先前的证明自行响应,当 allow_self_declaration 为 true 时包含自主声明。默认值为 AUTOMATED。
FULL, SIMPLIFIED, AUTOMATED 十进制字符串,默认为 "0.00"。在 SIMPLIFIED 模式下,低于此金额(以阈值货币计)的转账接受自主申报。未标明该货币金额的转账视为高于该金额。
Didit 就您自己的用户按实体类型向交易对手 VASP 发送的字段。无论列表内容如何,始终会发送 name 和 wallet_address。您未选择过的实体类型将共享所有字段。空列表也是一种选择:仅共享姓名和钱包。
Show child attributes
Show child attributes
按实体类型,交易对手数据的各个字段与您持有的数据进行比对的严格程度。省略的字段将保留其默认值。NONE 跳过比对,STRICT 要求词语完全一致,CONTAINS 接受一个值的所有词均出现在另一个值中,DEFAULT 为标准子集匹配,FUZZY 接受相近的拼写(对于出生日期,允许日和月调换)。
Show child attributes
Show child attributes
您的 VASP 法定名称。将 is_enabled 设为 true 时必填(非空)。
您的法人实体标识符(LEI),展示在 VASP 名录中。
您 VASP 档案的合规联系人邮箱。只有在通过邮件发送的链接(POST /v3/travel-rule/settings/compliance-email/confirmation/)确认该地址后,Didit 网络才会列出您的档案;更改此地址需要重新确认。
您的 VASP 资料是否可以在 Didit 网络中被列出:可被其他 Didit 客户在 GET /v3/travel-rule/vasps/ 中检索到,并可通过 INTERNAL 轨道触达。列出还需要拥有已上线应用、开启 Travel Rule、提供法定名称以及经过确认的合规邮箱;didit_network 会指出缺少哪些项。默认值为 true。
为 true 时,如果入账 TRP 问询的收款人钱包是地址簿中经过验证且姓名匹配的条目,则该问询会自动获批。为 false 时,该问询将在 ON_HOLD 中等待您通过所有权 endpoint 进行批准或拒绝。INTERNAL 轨道和充值后转账不受影响。默认为 true。
为 true 时,钱包所有权小组件提供自我声明作为备用证明方式。默认为 true。
为 true 时,钱包所有权小组件提供屏幕截图上传作为所有权证明方式。默认为 true。
为 true 时,提交需要终端用户提供钱包控制证明的出账 Travel Rule 转账会自动生成绑定到该交易的钱包所有权小组件会话,并将其放入交易的 action_required 块中。默认为 true。
为 true 时,任何无法由任何轨道路由的出账 Travel Rule 转账都将通过区块链分析进行归因:目标钱包将解析为其所属的 VASP,该实体将记录在转账和 VASP 目录中,并且轨道将使用归因名称重新运行一次。默认为 true。
对交易对手 VASP 进行可选的制裁和负面新闻筛查,按企业 AML 筛查价格按次计费。开启后,Didit 会筛查出站交易所触达的交易对手(复用 30 天内的筛查结果),您也可以使用 POST /v3/travel-rule/vasps/{vasp_id}/screening/ 对其进行筛查。默认为 false:不进行任何筛查或计费。
当交易对手是 sunrise_jurisdictions 中尚未强制实施 Travel Rule 的司法管辖区目录条目时,过期转账对其交易的处理方式:HOLD 将其移至审核,REJECT 将其拒绝,PROCEED 保持其状态不变。留空(默认值)则遵循 timeout_outcome。在 non_responsive_policy 之前生效。
, HOLD, REJECT, PROCEED 只读。Didit 视为处于 Travel Rule 日出期的国家/地区(ISO 3166 alpha-2),在此期间适用 sunrise_policy。目前包括 CO、KH 和 VN。任何其他司法管辖区,以及为空或未知的管辖区,均遵循 timeout_outcome。
当交易对手是响应状态为 UNRESPONSIVE 的目录条目时,过期转账对其交易的处理方式:HOLD、REJECT 或 PROCEED(与 timeout_outcome 相同)。留空(默认值)则遵循 timeout_outcome。当两者均符合条件时,sunrise_policy 优先适用。
, HOLD, REJECT, PROCEED 只读。您所在 VASP 专属的 Travel Address,即其他 VASP 用于联系您的编码入站 TRP 查询 endpoint。当 is_enabled 为 false 时为空。
已选择退出平台成员资格的网络。这不会停用您已关联的自有成员资格,也不会配置不可用的网络。
GTR, TRUST, VERIFYVASP, SYGNA 按网络列出:此应用将如何发送以及为何无法发送。默认不包含任何网络(包括 GTR):网络可通过您自己已连接的成员资格访问,或者在 Didit 在该网络上的成员资格生效且您自己在该网络上的参与方处于活跃状态后,通过 Didit 的成员资格访问。非实时健康状态或投递检查。
Show child attributes
Show child attributes
Didit 网络是否收录了您的 VASP 资料(以便其他 Didit 客户能在名录中找到并能通过 INTERNAL 轨道联系到它),以及其目前仍欠缺的各项条件。
Show child attributes
Show child attributes