curl -X POST 'https://verification.didit.me/v3/transactions/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"transaction_id": "your-txn-2026-05-17-001",
"transaction_category": "finance",
"transaction_details": {
"direction": "outbound",
"amount": 1500,
"currency": "EUR",
"action_type": "withdrawal"
},
"subject": {
"entity_type": "individual",
"vendor_data": "user-12345",
"full_name": "Maria Garcia"
}
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.transactions.create(
transaction_id="your-txn-2026-05-17-001",
transaction_category="finance",
transaction_details={
"direction": "outbound",
"amount": 1500.0,
"currency": "EUR",
"action_type": "withdrawal",
},
subject={
"entity_type": "individual",
"vendor_data": "user-12345",
"full_name": "Maria Garcia",
},
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.transactions.create({
transaction_id: "your-txn-2026-05-17-001",
transaction_category: "finance",
transaction_details: {
direction: "outbound",
amount: 1500.0,
currency: "EUR",
action_type: "withdrawal",
},
subject: {
entity_type: "individual",
vendor_data: "user-12345",
full_name: "Maria Garcia",
},
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Transactions.Create(ctx, didit.TransactionsCreateParams{
TransactionID: "your-txn-2026-05-17-001",
TransactionCategory: "finance",
TransactionDetails: didit.TransactionsCreateParamsTransactionDetails{
Direction: "outbound",
Amount: 1500.0,
Currency: "EUR",
ActionType: didit.String("withdrawal"),
},
Subject: didit.TransactionsCreateParamsSubject{
EntityType: didit.String("individual"),
VendorData: "user-12345",
FullName: "Maria Garcia",
},
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
import me.didit.types.TransactionsCreateParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.transactions().create(TransactionsCreateParams.builder()
.transactionId("your-txn-2026-05-17-001")
.transactionCategory(TransactionsCreateParams.TransactionCategory.of("finance"))
.transactionDetails(TransactionsCreateParams.TransactionDetails.builder()
.direction(TransactionsCreateParams.TransactionDetails.Direction.of("outbound"))
.amount(1500.0)
.currency("EUR")
.actionType("withdrawal")
.build())
.subject(TransactionsCreateParams.Subject.builder()
.entityType("individual")
.vendorData("user-12345")
.fullName("Maria Garcia")
.build())
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->transactions->create([
'transaction_id' => 'your-txn-2026-05-17-001',
'transaction_category' => 'finance',
'transaction_details' => [
'direction' => 'outbound',
'amount' => 1500.0,
'currency' => 'EUR',
'action_type' => 'withdrawal',
],
'subject' => [
'entity_type' => 'individual',
'vendor_data' => 'user-12345',
'full_name' => 'Maria Garcia',
],
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.transactions.create(
transaction_id: "your-txn-2026-05-17-001",
transaction_category: "finance",
transaction_details: {
direction: "outbound",
amount: 1500.0,
currency: "EUR",
action_type: "withdrawal",
},
subject: {
entity_type: "individual",
vendor_data: "user-12345",
full_name: "Maria Garcia",
}
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Transactions.CreateAsync(new TransactionsCreateParams
{
TransactionId = "your-txn-2026-05-17-001",
TransactionCategory = "finance",
TransactionDetails = new()
{
Direction = "outbound",
Amount = 1500.0,
Currency = "EUR",
ActionType = "withdrawal",
},
Subject = new()
{
EntityType = "individual",
VendorData = "user-12345",
FullName = "Maria Garcia",
},
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"uuid": "abcdef12-3456-4890-abcd-ef1234567890",
"environment": "live",
"transaction_number": 4123,
"txn_id": "your-txn-2026-05-17-001",
"txn_date": "2026-05-17T08:42:00Z",
"zone_id": "Europe/Madrid",
"transaction_type": "finance",
"action_type": "withdrawal",
"direction": "OUTBOUND",
"status": "APPROVED",
"source": "LIVE",
"amount": "1500",
"currency": "EUR",
"currency_type": "fiat",
"amount_in_default_currency": "1620.45",
"default_currency_code": "USD",
"preferred_currency_amount": "1620.45",
"preferred_currency_code": "USD",
"payment_details": "Withdrawal to crypto wallet",
"payment_txn_id": null,
"score": 0,
"severity": null,
"decision_reason_code": null,
"decision_reason_label": null,
"vendor_data": "user-12345",
"metadata": {
"subject": {
"entity_type": "individual",
"vendor_data": "user-12345",
"full_name": "Maria Garcia",
"address": {},
"institution_details": {},
"device_context": {}
},
"counterparty": {}
},
"props": {},
"tags": [],
"parties": [
{
"uuid": "b1111111-2222-4333-8444-555555555555",
"role": "APPLICANT",
"entity_type": "individual",
"kind": "USER",
"vendor_data": "user-12345",
"full_name": "Maria Garcia",
"first_name": null,
"last_name": null,
"country_code": null,
"dob": null,
"address": {},
"institution_info": {},
"device": {},
"external_party_snapshot": null
}
],
"payment_methods": [],
"documents": [],
"activities": [
{
"uuid": "d4e5f6a7-8901-4bcd-9ef0-123456789abc",
"activity_type": "TRANSACTION_CREATED",
"source": "TRANSACTION",
"status": "APPROVED",
"title": "withdrawal",
"description": "Transaction recorded.",
"metadata": {},
"occurred_at": "2026-05-17T08:42:11Z"
}
],
"alerts": [],
"rule_runs": [],
"provider_results": [],
"travel_rule": null,
"network_snapshot": null,
"remediation": null,
"action_required": null,
"cost_breakdown": null
}创建交易 API:KYT 交易提交
向 Didit KYT 提交交易,进行风险评分、筛查和 Travel Rule 处理。每月包含 1,000 笔交易,之后每笔 $0.001。
curl -X POST 'https://verification.didit.me/v3/transactions/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"transaction_id": "your-txn-2026-05-17-001",
"transaction_category": "finance",
"transaction_details": {
"direction": "outbound",
"amount": 1500,
"currency": "EUR",
"action_type": "withdrawal"
},
"subject": {
"entity_type": "individual",
"vendor_data": "user-12345",
"full_name": "Maria Garcia"
}
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.transactions.create(
transaction_id="your-txn-2026-05-17-001",
transaction_category="finance",
transaction_details={
"direction": "outbound",
"amount": 1500.0,
"currency": "EUR",
"action_type": "withdrawal",
},
subject={
"entity_type": "individual",
"vendor_data": "user-12345",
"full_name": "Maria Garcia",
},
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.transactions.create({
transaction_id: "your-txn-2026-05-17-001",
transaction_category: "finance",
transaction_details: {
direction: "outbound",
amount: 1500.0,
currency: "EUR",
action_type: "withdrawal",
},
subject: {
entity_type: "individual",
vendor_data: "user-12345",
full_name: "Maria Garcia",
},
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Transactions.Create(ctx, didit.TransactionsCreateParams{
TransactionID: "your-txn-2026-05-17-001",
TransactionCategory: "finance",
TransactionDetails: didit.TransactionsCreateParamsTransactionDetails{
Direction: "outbound",
Amount: 1500.0,
Currency: "EUR",
ActionType: didit.String("withdrawal"),
},
Subject: didit.TransactionsCreateParamsSubject{
EntityType: didit.String("individual"),
VendorData: "user-12345",
FullName: "Maria Garcia",
},
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
import me.didit.types.TransactionsCreateParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.transactions().create(TransactionsCreateParams.builder()
.transactionId("your-txn-2026-05-17-001")
.transactionCategory(TransactionsCreateParams.TransactionCategory.of("finance"))
.transactionDetails(TransactionsCreateParams.TransactionDetails.builder()
.direction(TransactionsCreateParams.TransactionDetails.Direction.of("outbound"))
.amount(1500.0)
.currency("EUR")
.actionType("withdrawal")
.build())
.subject(TransactionsCreateParams.Subject.builder()
.entityType("individual")
.vendorData("user-12345")
.fullName("Maria Garcia")
.build())
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->transactions->create([
'transaction_id' => 'your-txn-2026-05-17-001',
'transaction_category' => 'finance',
'transaction_details' => [
'direction' => 'outbound',
'amount' => 1500.0,
'currency' => 'EUR',
'action_type' => 'withdrawal',
],
'subject' => [
'entity_type' => 'individual',
'vendor_data' => 'user-12345',
'full_name' => 'Maria Garcia',
],
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.transactions.create(
transaction_id: "your-txn-2026-05-17-001",
transaction_category: "finance",
transaction_details: {
direction: "outbound",
amount: 1500.0,
currency: "EUR",
action_type: "withdrawal",
},
subject: {
entity_type: "individual",
vendor_data: "user-12345",
full_name: "Maria Garcia",
}
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Transactions.CreateAsync(new TransactionsCreateParams
{
TransactionId = "your-txn-2026-05-17-001",
TransactionCategory = "finance",
TransactionDetails = new()
{
Direction = "outbound",
Amount = 1500.0,
Currency = "EUR",
ActionType = "withdrawal",
},
Subject = new()
{
EntityType = "individual",
VendorData = "user-12345",
FullName = "Maria Garcia",
},
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"uuid": "abcdef12-3456-4890-abcd-ef1234567890",
"environment": "live",
"transaction_number": 4123,
"txn_id": "your-txn-2026-05-17-001",
"txn_date": "2026-05-17T08:42:00Z",
"zone_id": "Europe/Madrid",
"transaction_type": "finance",
"action_type": "withdrawal",
"direction": "OUTBOUND",
"status": "APPROVED",
"source": "LIVE",
"amount": "1500",
"currency": "EUR",
"currency_type": "fiat",
"amount_in_default_currency": "1620.45",
"default_currency_code": "USD",
"preferred_currency_amount": "1620.45",
"preferred_currency_code": "USD",
"payment_details": "Withdrawal to crypto wallet",
"payment_txn_id": null,
"score": 0,
"severity": null,
"decision_reason_code": null,
"decision_reason_label": null,
"vendor_data": "user-12345",
"metadata": {
"subject": {
"entity_type": "individual",
"vendor_data": "user-12345",
"full_name": "Maria Garcia",
"address": {},
"institution_details": {},
"device_context": {}
},
"counterparty": {}
},
"props": {},
"tags": [],
"parties": [
{
"uuid": "b1111111-2222-4333-8444-555555555555",
"role": "APPLICANT",
"entity_type": "individual",
"kind": "USER",
"vendor_data": "user-12345",
"full_name": "Maria Garcia",
"first_name": null,
"last_name": null,
"country_code": null,
"dob": null,
"address": {},
"institution_info": {},
"device": {},
"external_party_snapshot": null
}
],
"payment_methods": [],
"documents": [],
"activities": [
{
"uuid": "d4e5f6a7-8901-4bcd-9ef0-123456789abc",
"activity_type": "TRANSACTION_CREATED",
"source": "TRANSACTION",
"status": "APPROVED",
"title": "withdrawal",
"description": "Transaction recorded.",
"metadata": {},
"occurred_at": "2026-05-17T08:42:11Z"
}
],
"alerts": [],
"rule_runs": [],
"provider_results": [],
"travel_rule": null,
"network_snapshot": null,
"remediation": null,
"action_required": null,
"cost_breakdown": null
}授权
您的应用 API 密钥,可在 Business Console 的“开发者 -> API 密钥”中获取。主密钥拥有完整访问权限。指定名称的密钥可设置作用域:针对每个资源设为无权限、只读或读写,限定于特定工作流或已通过的会话、限定于 IP 地址列表,以及设置到期日期。401 表示密钥错误、已撤销或已过期;403 表示未发送密钥、密钥无权访问该资源或操作,或请求来自其 IP 列表之外的地址;在会话路由上返回 404 表示该会话不在该密钥允许的工作流或状态范围内。没有媒体访问权限的密钥获取到的图片、视频和 PDF URL 将为 null;没有会话写入权限的密钥获取到的会话链接和 token 将为 null。请参阅 https://docs.didit.me/console/api-keys。
请求体
您对此交易的唯一标识符(最多 128 个字符)。
"your-txn-2026-05-17-001"
交易类别。也接受驼峰命名别名(travelRule、userPlatformEvent、gamblingBet 等);对于多词类别,存储/回显的值为 camelCase。
finance, kyc, travel_rule, user_event, audit_trail_event, gambling_bet, gambling_limit_change, gambling_bonus_change, travelRule "finance"
交易的核心财务详情。
Show child attributes
Show child attributes
交易的主体(申请人)。
Show child attributes
Show child attributes
交易发生的时间。如果省略,则默认为当前时间。
IANA 时区标识符,例如 Europe/Madrid。
交易对手(可选)。
Show child attributes
Show child attributes
附加到交易的任意键值对。可以在规则条件中通过字段路径 custom_values.<key> 引用每个键。
{
"merchant_id": "test",
"bank_name": "test_2"
}
Travel Rule 数据。启用 Travel Rule 且 transaction_category 为 travel_rule 时,Didit 会自行执行信息交换:忽略 status、protocol、required 和 obligations_count,并使用 originator_data、beneficiary_data 和 metadata。否则 Didit 会将这些值存储为被动的 Travel Rule 记录。开启 Travel Rule 期间,达到或超过您阈值的出账转账必须携带其制度所要求的信息(欧盟 TFR 或 FATF 第 16 号建议),并在您发送的一侧进行检查:缺少字段会在 travel_rule_details.originator_data 或 travel_rule_details.beneficiary_data 下返回 400,例如“欧盟 TFR 要求提供汇款人姓名。”
Show child attributes
Show child attributes
预计算的网络图谱快照。
Show child attributes
Show child attributes
用于加密货币区块链分析筛查的逐笔交易覆盖项。当为 true 时,无论应用默认设置如何,都会执行加密货币筛查。当为 false 时,即使在应用设置中已启用,也会跳过加密货币筛查。省略或为 null 时,使用在控制台中配置的应用级默认设置。加密货币筛查需要 transaction_details.direction、currency_kind: "crypto"、一条链/币种,以及根据交易方向选取的钱包地址:入账转账前筛查使用 counterparty.payment_method.account_id,入账交易哈希筛查使用 subject.payment_method.account_id,出账筛查使用 counterparty.payment_method.account_id。当 transaction_details.payment_reference_id 包含区块链交易哈希时,Didit 会执行交易筛查并在可用时返回交易摘要增强信息。
响应
交易已提交并受监控。响应体为完整的交易详情(结构与 GET /v3/transactions/{transaction_id}/ 相同),反映已应用的规则结果。
单个交易的完整监控记录,由 GET /v3/transactions/{transaction_id}/ 和 POST /v3/transactions/ 返回。
Didit 稳定的交易标识符。用作后续调用的 {transaction_id}。
拥有该交易的应用的环境。sandbox 交易会被存储,但绝不会被评估、筛查、通知或计费,因此其空的 rule_runs 表示“未评估”。
live, sandbox 控制台中显示的应用范围内连续交易序号(例如 4123)。
您在创建时提供的 transaction_id(最多 128 个字符)。每个应用唯一。
交易发生的时间(来自 transaction_at;默认为提交时间)。
创建时提供的 IANA 时区标识符。
存储的顶级类别:finance、kyc、travelRule、userPlatformEvent、gamblingBet、gamblingLimitChange、gamblingBonusChange、auditTrailEvent。请注意,即使以 snake_case 提交,包含多个单词的值也会以 camelCase 形式返回。
类别内的子类型(例如 deposit、withdrawal、transfer)。未提供时默认为该类别。
相对于主体的方向。无论提交时的大小写如何,均以大写形式存储(输入时接受 in/out/inbound/outbound)。
INBOUND, OUTBOUND 当前监控裁决结果。创建交易时的状态为 APPROVED;规则可能会同步将其更改为 IN_REVIEW/DECLINED。
APPROVED, IN_REVIEW, DECLINED, AWAITING_USER 记录的生成来源:通过 API 或 SDK 提交的交易为 LIVE,通过控制台导入加载的交易为 IMPORTED。
LIVE, IMPORTED 作为十进制字符串的交易金额,已去除末尾零(例如 "1500"、"0.5"、"0.123456789012345678")。最多 18 位小数。
amount 的货币代码。接受任何 ISO 4217 字母代码(例如 EUR、USD、NGN)以及加密资产符号(例如 BTC)。建议使用当前流通的代码。并非每个接受的代码都有汇率:当该代码没有可用汇率时(例如 ISO 会计单位 XSU,或 Didit 未定价的加密资产符号),自动换算将失败,并且 preferred_currency_amount 将返回 null,除非请求提供了预先换算的 amount_in_default_currency。
fiat 或 crypto,与在 currency_kind 中提交的内容一致。
您提供的预先换算金额,为去除了末尾零的十进制数字符串。
amount 在可用时折算为应用的首选货币。
提交内容中的自由文本付款参考号或附言。
来自 payment_reference_id 的外部支付系统参考标识(例如区块链交易哈希)。
规则累计的风险评分(通常为 0–100)。数值越高 = 风险越大。
由规则/提供商设置的分类风险严重程度(UNKNOWN、LOW、MEDIUM、HIGH、CRITICAL)。在设置该值之前为 null。
UNKNOWN, LOW, MEDIUM, HIGH, CRITICAL 当前 status 的机器可读原因。
decision_reason_code 的便于人类阅读的标签。
申请人 vendor_data 的便捷副本。
创建时提交的 subject 和 counterparty payload 快照。
您在创建时提供的 custom_properties。每个键都可以在规则条件中通过 custom_values.<key> 访问。
附加到交易的标签(手动或通过规则)。
Show child attributes
Show child attributes
交易当事方(申请人、交易对手)。
Show child attributes
Show child attributes
关联至交易的支付方式。
Show child attributes
Show child attributes
从控制台附加到交易的文件。若无则为 []。
Show child attributes
Show child attributes
活动日志条目(创建、备注、人工审核、状态变更)。
Show child attributes
Show child attributes
当前始终为空。未结警报是指状态为 IN_REVIEW 或 AWAITING_USER 的交易。
Show child attributes
Show child attributes
逐条规则的执行结果:触发了哪条规则,以及产生了怎样的评分影响。
Show child attributes
Show child attributes
原始供应商 payload(AML 筛查、区块链分析等)。
Show child attributes
Show child attributes
Travel Rule 转账或核验。在提交了 travel_rule_details 时填充,以及在启用了 Travel Rule 且创建交易时使用了 transaction_category: travelRule 时填充(即使没有 travel_rule_details,Didit 也会自行发起信息交换)。不存在转账或核验时为 null。在入账转账中,交易对手的 originator_data 和 beneficiary_data 保持掩码状态(data_masked: true),直到钱包所有权得到确认。
Show child attributes
Show child attributes
规则引擎使用的相关交易/关联方图谱快照。可以随交易提交的 network_snapshot,也可以是 Didit 从成功的 AML 钱包筛查中构建的图谱(会替换提交的快照)。两者均不存在时为 null。
Show child attributes
Show child attributes
需要重新验证时向用户提供的补救会话。已被规范字段 action_required 取代;保留以向后兼容。
Show child attributes
Show child attributes
完成此交易所需的待处理终端用户操作,若无则为 null。Didit SDK 默认会自动启动该操作,并在其完成时刷新交易。共有两种变体,通过 type 进行区分:verification_session(由规则操作创建的托管验证会话)和 wallet_ownership(为需要钱包控制权证明的 Travel Rule 转账自动生成的钱包所有权微件会话,受 auto_wallet_verification Travel Rule 设置管控)。当两者均适用时,wallet_ownership 具有更高优先级,因为它会阻断 Travel Rule 交互。
- Verification session
- Wallet ownership
Show child attributes
Show child attributes
此交易的费用:total_price 和 items,每项收费一条记录,均包含 usage_type、price、details 和 created_at。对同一笔交易重新筛查会产生一个新条目。