curl
curl -X GET 'https://verification.didit.me/v3/travel-rule/vasps/?search=counterparty&reachable=true' \
-H 'x-api-key: YOUR_API_KEY'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
for item in client.travel_rule.list_vasps():
print(item)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
for await (const item of didit.travelRule.listVasps()) {
console.log(item);
}ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
iter := client.TravelRule.ListVASPsAutoPaging(ctx, didit.TravelRuleListVASPsParams{})
for iter.Next() {
fmt.Printf("%+v\n", iter.Current())
}
if err := iter.Err(); err != nil {
log.Fatal(err)
}import me.didit.Didit;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
for (var item : client.travelRule().listVasps()) {
System.out.println(item);
}<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
foreach ($didit->travelRule->listVasps() as $item) {
print_r($item->toArray());
}require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
didit.travel_rule.list_vasps.auto_paging_each do |item|
puts item.to_h
endusing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
await foreach (var item in await client.TravelRule.ListVaspsAsync())
{
Console.WriteLine(JsonSerializer.Serialize(item));
}{
"count": 123,
"next": "<string>",
"previous": "<string>",
"results": [
{
"id": "0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91",
"kind": "directory",
"name": "Example Counterparty VASP",
"lei": "529900EXAMPLECPTY001",
"jurisdiction": "DE",
"domains": [
"counterparty.example"
],
"reachable": true,
"aliases": [
{
"name": "Example Counterparty",
"kind": "trading_name"
}
],
"networks": [
{
"network": "GTR",
"code": "EXAMPLE01",
"listed_name": "Example Counterparty VASP",
"country": "DE",
"verified_at": "2026-10-12T09:30:00Z",
"last_seen_at": "2026-10-12T09:30:00Z",
"source": "staff"
}
],
"routes": [
{
"rail": "GTR",
"status": "unavailable",
"reason": "no_membership",
"via": ""
},
{
"rail": "EMAIL",
"status": "available",
"reason": "",
"via": "contact"
}
],
"umbrella": null,
"entities": [],
"contacts": [
{
"id": "6c1f9b8e-2d4a-4f7e-8b3c-5a9d0e1f2a3b",
"email": "travelrule@counterparty.example",
"name": "Travel Rule desk",
"source": "staff",
"scope": "platform",
"verified_at": null
}
],
"dd_status": "NOT_STARTED",
"dd_score": 62,
"dd_score_breakdown": {
"jurisdiction": {
"points": 25,
"max": 25,
"reason": "jurisdiction_not_high_risk",
"detail": "DEU is not on the high-risk jurisdiction list"
},
"verification": {
"points": 3.8,
"max": 15,
"reason": "dd_status_not_started",
"detail": "due diligence status NOT_STARTED"
},
"protocol": {
"points": 6,
"max": 15,
"reason": "email_only",
"detail": "reachable over the email fallback only"
},
"lei": {
"points": 10,
"max": 10,
"reason": "lei_valid",
"detail": "valid LEI on record"
},
"history": {
"points": 5,
"max": 10,
"reason": "no_history",
"detail": "no exchange history"
},
"essentials": {
"points": 7.5,
"max": 15,
"reason": "no_essential_checks",
"detail": "no decided essential check yet"
},
"responsiveness": {
"points": 5,
"max": 10,
"reason": "responsiveness_unknown",
"detail": "0 decided recent requests, too few to judge"
}
},
"dd_assessed_at": "2026-10-12T09:30:00Z",
"dd_score_semantic": "higher_is_safer",
"risk_level": "MEDIUM",
"responsiveness": {
"status": "UNKNOWN",
"answered": 0,
"total": 0,
"computed_at": "2026-10-12T09:30:00Z"
},
"essential_checks": {},
"reachable_rails": [
"GTR",
"EMAIL"
],
"is_didit_customer": false,
"decision": {
"decision": "APPROVED",
"reason": "Licensed in DE, questionnaire reviewed",
"decided_by": "",
"updated_at": "2026-10-14T10:05:00Z",
"inherited_from": null
},
"entity_screening": {
"id": "7a1d2c3b-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
"status": "Approved",
"total_hits": 0,
"score": null,
"screened_at": "2026-10-14T09:58:00Z",
"fresh": true,
"flagged": false
},
"questionnaires": [
{
"id": "8b7a6c5d-4e3f-4a2b-9c1d-0e9f8a7b6c5d",
"status": "ANSWERED",
"form_version": "1",
"sent_to": "travelrule@counterparty.example",
"sent_at": "2026-09-02T08:00:00Z",
"expires_at": "2026-10-02T08:00:00Z",
"answered_at": "2026-09-04T15:20:00Z",
"valid_until": "2027-09-04T15:20:00Z",
"current": true,
"answers": {
"legal_name": "Example Counterparty VASP, incorporated in the example jurisdiction.",
"licensing": "Crypto-asset service provider authorised under MiCA by its national regulator, licence active.",
"jurisdictions": "EU and EEA. We do not serve the United States.",
"aml_program": "Written AML/CFT policy, annual independent review, last completed in March 2026.",
"compliance_officer": "Head of Compliance, reachable at compliance@counterparty.example.",
"sanctions_screening": "Customers at onboarding and daily; counterparties on every transfer.",
"transaction_monitoring": "Rule-based monitoring with analyst review; suspicious activity reports filed with the FIU.",
"travel_rule": "TRP and email; we answer requests within one business day.",
"custody": "Segregated customer wallets held with a qualified custodian, insured.",
"ownership": "No shareholder holds 25 percent or more; parent company Example Holding Group.",
"record_keeping": "Five-year record-keeping for Travel Rule and transaction data, as our regulator requires.",
"data_protection": "Encrypted at rest and in transit, stored in the EU."
}
}
]
}
]
}{
"jurisdiction": [
"Use an ISO 3166 alpha-2 or alpha-3 country code."
],
"network": [
"\"SWIFT\" is not a valid choice."
]
}Travel Rule
VASP 目录搜索 API:Travel Rule 路由
通过 Didit 搜索 Travel Rule VASP 目录和 Didit 网络,支持过滤,并查看您的应用与各 VASP 之间的路由。
GET
/
v3
/
travel-rule
/
vasps
/
curl
curl -X GET 'https://verification.didit.me/v3/travel-rule/vasps/?search=counterparty&reachable=true' \
-H 'x-api-key: YOUR_API_KEY'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
for item in client.travel_rule.list_vasps():
print(item)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
for await (const item of didit.travelRule.listVasps()) {
console.log(item);
}ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
iter := client.TravelRule.ListVASPsAutoPaging(ctx, didit.TravelRuleListVASPsParams{})
for iter.Next() {
fmt.Printf("%+v\n", iter.Current())
}
if err := iter.Err(); err != nil {
log.Fatal(err)
}import me.didit.Didit;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
for (var item : client.travelRule().listVasps()) {
System.out.println(item);
}<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
foreach ($didit->travelRule->listVasps() as $item) {
print_r($item->toArray());
}require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
didit.travel_rule.list_vasps.auto_paging_each do |item|
puts item.to_h
endusing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
await foreach (var item in await client.TravelRule.ListVaspsAsync())
{
Console.WriteLine(JsonSerializer.Serialize(item));
}{
"count": 123,
"next": "<string>",
"previous": "<string>",
"results": [
{
"id": "0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91",
"kind": "directory",
"name": "Example Counterparty VASP",
"lei": "529900EXAMPLECPTY001",
"jurisdiction": "DE",
"domains": [
"counterparty.example"
],
"reachable": true,
"aliases": [
{
"name": "Example Counterparty",
"kind": "trading_name"
}
],
"networks": [
{
"network": "GTR",
"code": "EXAMPLE01",
"listed_name": "Example Counterparty VASP",
"country": "DE",
"verified_at": "2026-10-12T09:30:00Z",
"last_seen_at": "2026-10-12T09:30:00Z",
"source": "staff"
}
],
"routes": [
{
"rail": "GTR",
"status": "unavailable",
"reason": "no_membership",
"via": ""
},
{
"rail": "EMAIL",
"status": "available",
"reason": "",
"via": "contact"
}
],
"umbrella": null,
"entities": [],
"contacts": [
{
"id": "6c1f9b8e-2d4a-4f7e-8b3c-5a9d0e1f2a3b",
"email": "travelrule@counterparty.example",
"name": "Travel Rule desk",
"source": "staff",
"scope": "platform",
"verified_at": null
}
],
"dd_status": "NOT_STARTED",
"dd_score": 62,
"dd_score_breakdown": {
"jurisdiction": {
"points": 25,
"max": 25,
"reason": "jurisdiction_not_high_risk",
"detail": "DEU is not on the high-risk jurisdiction list"
},
"verification": {
"points": 3.8,
"max": 15,
"reason": "dd_status_not_started",
"detail": "due diligence status NOT_STARTED"
},
"protocol": {
"points": 6,
"max": 15,
"reason": "email_only",
"detail": "reachable over the email fallback only"
},
"lei": {
"points": 10,
"max": 10,
"reason": "lei_valid",
"detail": "valid LEI on record"
},
"history": {
"points": 5,
"max": 10,
"reason": "no_history",
"detail": "no exchange history"
},
"essentials": {
"points": 7.5,
"max": 15,
"reason": "no_essential_checks",
"detail": "no decided essential check yet"
},
"responsiveness": {
"points": 5,
"max": 10,
"reason": "responsiveness_unknown",
"detail": "0 decided recent requests, too few to judge"
}
},
"dd_assessed_at": "2026-10-12T09:30:00Z",
"dd_score_semantic": "higher_is_safer",
"risk_level": "MEDIUM",
"responsiveness": {
"status": "UNKNOWN",
"answered": 0,
"total": 0,
"computed_at": "2026-10-12T09:30:00Z"
},
"essential_checks": {},
"reachable_rails": [
"GTR",
"EMAIL"
],
"is_didit_customer": false,
"decision": {
"decision": "APPROVED",
"reason": "Licensed in DE, questionnaire reviewed",
"decided_by": "",
"updated_at": "2026-10-14T10:05:00Z",
"inherited_from": null
},
"entity_screening": {
"id": "7a1d2c3b-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
"status": "Approved",
"total_hits": 0,
"score": null,
"screened_at": "2026-10-14T09:58:00Z",
"fresh": true,
"flagged": false
},
"questionnaires": [
{
"id": "8b7a6c5d-4e3f-4a2b-9c1d-0e9f8a7b6c5d",
"status": "ANSWERED",
"form_version": "1",
"sent_to": "travelrule@counterparty.example",
"sent_at": "2026-09-02T08:00:00Z",
"expires_at": "2026-10-02T08:00:00Z",
"answered_at": "2026-09-04T15:20:00Z",
"valid_until": "2027-09-04T15:20:00Z",
"current": true,
"answers": {
"legal_name": "Example Counterparty VASP, incorporated in the example jurisdiction.",
"licensing": "Crypto-asset service provider authorised under MiCA by its national regulator, licence active.",
"jurisdictions": "EU and EEA. We do not serve the United States.",
"aml_program": "Written AML/CFT policy, annual independent review, last completed in March 2026.",
"compliance_officer": "Head of Compliance, reachable at compliance@counterparty.example.",
"sanctions_screening": "Customers at onboarding and daily; counterparties on every transfer.",
"transaction_monitoring": "Rule-based monitoring with analyst review; suspicious activity reports filed with the FIU.",
"travel_rule": "TRP and email; we answer requests within one business day.",
"custody": "Segregated customer wallets held with a qualified custodian, insured.",
"ownership": "No shareholder holds 25 percent or more; parent company Example Holding Group.",
"record_keeping": "Five-year record-keeping for Travel Rule and transaction data, as our regulator requires.",
"data_protection": "Encrypted at rest and in transit, stored in the EU."
}
}
]
}
]
}{
"jurisdiction": [
"Use an ISO 3166 alpha-2 or alpha-3 country code."
],
"network": [
"\"SWIFT\" is not a valid choice."
]
}授权
您的应用 API 密钥,可在 Business Console 的“开发者 -> API 密钥”中获取。主密钥拥有完整访问权限。指定名称的密钥可设置作用域:针对每个资源设为无权限、只读或读写,限定于特定工作流或已通过的会话、限定于 IP 地址列表,以及设置到期日期。401 表示密钥错误、已撤销或已过期;403 表示未发送密钥、密钥无权访问该资源或操作,或请求来自其 IP 列表之外的地址;在会话路由上返回 404 表示该会话不在该密钥允许的工作流或状态范围内。没有媒体访问权限的密钥获取到的图片、视频和 PDF URL 将为 null;没有会话写入权限的密钥获取到的会话链接和 token 将为 null。请参阅 https://docs.didit.me/console/api-keys。
查询参数
名称或别名片段(不区分大小写)、精确的 LEI 或域名(example.com 或其上的 URL)。Didit 网络成员通过其法定名称、LEI 或合规邮箱的域名进行匹配。
Maximum string length:
255仅包含网络成员目录当前列出的目录条目。
可用选项:
GTR, TRUST, VERIFYVASP, SYGNA, TRISA ISO 3166 alpha-2 或 alpha-3 国家/地区代码。任何其他代码均返回 400。
true:仅返回您的应用拥有可用路由的 VASP(包括 Didit 网络成员)。false:仅返回当前无法送达的目录条目。
仅目录条目,或仅 Didit 网络成员。
可用选项:
directory, didit 仅包含 risk_level 为该区间的目录条目。未进行评分的 Didit 网络成员绝不会匹配。
可用选项:
LOW, MEDIUM, HIGH 仅包含 responsiveness.status 为该值的目录条目。Didit 网络成员绝不会匹配。
可用选项:
RESPONSIVE, UNRESPONSIVE, UNKNOWN 必填范围:
x >= 1必填范围:
x >= 0最后修改于 2026年11月7日