curl -X POST https://verification.didit.me/v1/transactions/ \
-H 'X-Transaction-Token: SDK_TOKEN' -H 'Content-Type: application/json' \
-d '{"txnId": "wd-2026-07-07-0042", "type": "travelRule", "info": {"direction": "out", "amount": "0.25", "currency": "ETH", "currencyType": "crypto"}, "subject": {"fullName": "Jane Doe"}, "counterparty": {"fullName": "Ana Diaz", "paymentMethod": {"type": "unhosted_wallet", "accountId": "0xBeneficiaryWallet01"}}, "travelRule": {"status": "AWAITING_COUNTERPARTY", "beneficiaryData": {"wallet_address": "0xBeneficiaryWallet01", "name": "Ana Diaz"}}, "includeCryptoScreening": true}'import { DiditSdk } from '@didit-protocol/sdk-web';
const result = await DiditSdk.shared.submitTransaction({
transactionToken: sdkToken,
transaction: {
txnId: 'wd-2026-07-07-0042',
category: 'travelRule',
details: { direction: 'out', amount: '0.25', currency: 'ETH', currencyType: 'crypto' },
subject: { fullName: 'Jane Doe' },
counterparty: { fullName: 'Ana Diaz', paymentMethod: { type: 'unhosted_wallet', accountId: '0xBeneficiaryWallet01' } },
travelRule: { status: 'AWAITING_COUNTERPARTY', beneficiaryData: { wallet_address: '0xBeneficiaryWallet01', name: 'Ana Diaz' } },
includeCryptoScreening: true
},
onActionCompleted: (refreshed) => console.log(refreshed.status)
});import requests
url = "https://verification.didit.me/v1/transactions/"
payload = {
"txnId": "wd-2026-07-07-0042",
"type": "travelRule",
"info": {
"direction": "out",
"amount": "0.25",
"currency": "ETH",
"currencyType": "crypto",
"cryptoParams": { "crypto_chain": "ETH" }
},
"subject": { "fullName": "Jane Doe" },
"counterparty": {
"fullName": "Ana Diaz",
"paymentMethod": {
"type": "unhosted_wallet",
"accountId": "0xBeneficiaryWallet01"
}
},
"travelRule": {
"status": "AWAITING_COUNTERPARTY",
"beneficiaryData": {
"wallet_address": "0xBeneficiaryWallet01",
"name": "Ana Diaz"
}
},
"includeCryptoScreening": True
}
headers = {
"X-Transaction-Token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v1/transactions/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'txnId' => 'wd-2026-07-07-0042',
'type' => 'travelRule',
'info' => [
'direction' => 'out',
'amount' => '0.25',
'currency' => 'ETH',
'currencyType' => 'crypto',
'cryptoParams' => [
'crypto_chain' => 'ETH'
]
],
'subject' => [
'fullName' => 'Jane Doe'
],
'counterparty' => [
'fullName' => 'Ana Diaz',
'paymentMethod' => [
'type' => 'unhosted_wallet',
'accountId' => '0xBeneficiaryWallet01'
]
],
'travelRule' => [
'status' => 'AWAITING_COUNTERPARTY',
'beneficiaryData' => [
'wallet_address' => '0xBeneficiaryWallet01',
'name' => 'Ana Diaz'
]
],
'includeCryptoScreening' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Transaction-Token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://verification.didit.me/v1/transactions/"
payload := strings.NewReader("{\n \"txnId\": \"wd-2026-07-07-0042\",\n \"type\": \"travelRule\",\n \"info\": {\n \"direction\": \"out\",\n \"amount\": \"0.25\",\n \"currency\": \"ETH\",\n \"currencyType\": \"crypto\",\n \"cryptoParams\": {\n \"crypto_chain\": \"ETH\"\n }\n },\n \"subject\": {\n \"fullName\": \"Jane Doe\"\n },\n \"counterparty\": {\n \"fullName\": \"Ana Diaz\",\n \"paymentMethod\": {\n \"type\": \"unhosted_wallet\",\n \"accountId\": \"0xBeneficiaryWallet01\"\n }\n },\n \"travelRule\": {\n \"status\": \"AWAITING_COUNTERPARTY\",\n \"beneficiaryData\": {\n \"wallet_address\": \"0xBeneficiaryWallet01\",\n \"name\": \"Ana Diaz\"\n }\n },\n \"includeCryptoScreening\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Transaction-Token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://verification.didit.me/v1/transactions/")
.header("X-Transaction-Token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"txnId\": \"wd-2026-07-07-0042\",\n \"type\": \"travelRule\",\n \"info\": {\n \"direction\": \"out\",\n \"amount\": \"0.25\",\n \"currency\": \"ETH\",\n \"currencyType\": \"crypto\",\n \"cryptoParams\": {\n \"crypto_chain\": \"ETH\"\n }\n },\n \"subject\": {\n \"fullName\": \"Jane Doe\"\n },\n \"counterparty\": {\n \"fullName\": \"Ana Diaz\",\n \"paymentMethod\": {\n \"type\": \"unhosted_wallet\",\n \"accountId\": \"0xBeneficiaryWallet01\"\n }\n },\n \"travelRule\": {\n \"status\": \"AWAITING_COUNTERPARTY\",\n \"beneficiaryData\": {\n \"wallet_address\": \"0xBeneficiaryWallet01\",\n \"name\": \"Ana Diaz\"\n }\n },\n \"includeCryptoScreening\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v1/transactions/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Transaction-Token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"txnId\": \"wd-2026-07-07-0042\",\n \"type\": \"travelRule\",\n \"info\": {\n \"direction\": \"out\",\n \"amount\": \"0.25\",\n \"currency\": \"ETH\",\n \"currencyType\": \"crypto\",\n \"cryptoParams\": {\n \"crypto_chain\": \"ETH\"\n }\n },\n \"subject\": {\n \"fullName\": \"Jane Doe\"\n },\n \"counterparty\": {\n \"fullName\": \"Ana Diaz\",\n \"paymentMethod\": {\n \"type\": \"unhosted_wallet\",\n \"accountId\": \"0xBeneficiaryWallet01\"\n }\n },\n \"travelRule\": {\n \"status\": \"AWAITING_COUNTERPARTY\",\n \"beneficiaryData\": {\n \"wallet_address\": \"0xBeneficiaryWallet01\",\n \"name\": \"Ana Diaz\"\n }\n },\n \"includeCryptoScreening\": true\n}"
response = http.request(request)
puts response.read_bodySDKから取引を送信:クライアントサイドKYT
Diditのスコープ付きSDKトークンで、エンドユーザーの端末から監視対象の取引を送信できます。デバイスインテリジェンスを自動で取得し、ウォレットの所有確認が必要な場合はaction_requiredを返します。
curl -X POST https://verification.didit.me/v1/transactions/ \
-H 'X-Transaction-Token: SDK_TOKEN' -H 'Content-Type: application/json' \
-d '{"txnId": "wd-2026-07-07-0042", "type": "travelRule", "info": {"direction": "out", "amount": "0.25", "currency": "ETH", "currencyType": "crypto"}, "subject": {"fullName": "Jane Doe"}, "counterparty": {"fullName": "Ana Diaz", "paymentMethod": {"type": "unhosted_wallet", "accountId": "0xBeneficiaryWallet01"}}, "travelRule": {"status": "AWAITING_COUNTERPARTY", "beneficiaryData": {"wallet_address": "0xBeneficiaryWallet01", "name": "Ana Diaz"}}, "includeCryptoScreening": true}'import { DiditSdk } from '@didit-protocol/sdk-web';
const result = await DiditSdk.shared.submitTransaction({
transactionToken: sdkToken,
transaction: {
txnId: 'wd-2026-07-07-0042',
category: 'travelRule',
details: { direction: 'out', amount: '0.25', currency: 'ETH', currencyType: 'crypto' },
subject: { fullName: 'Jane Doe' },
counterparty: { fullName: 'Ana Diaz', paymentMethod: { type: 'unhosted_wallet', accountId: '0xBeneficiaryWallet01' } },
travelRule: { status: 'AWAITING_COUNTERPARTY', beneficiaryData: { wallet_address: '0xBeneficiaryWallet01', name: 'Ana Diaz' } },
includeCryptoScreening: true
},
onActionCompleted: (refreshed) => console.log(refreshed.status)
});import requests
url = "https://verification.didit.me/v1/transactions/"
payload = {
"txnId": "wd-2026-07-07-0042",
"type": "travelRule",
"info": {
"direction": "out",
"amount": "0.25",
"currency": "ETH",
"currencyType": "crypto",
"cryptoParams": { "crypto_chain": "ETH" }
},
"subject": { "fullName": "Jane Doe" },
"counterparty": {
"fullName": "Ana Diaz",
"paymentMethod": {
"type": "unhosted_wallet",
"accountId": "0xBeneficiaryWallet01"
}
},
"travelRule": {
"status": "AWAITING_COUNTERPARTY",
"beneficiaryData": {
"wallet_address": "0xBeneficiaryWallet01",
"name": "Ana Diaz"
}
},
"includeCryptoScreening": True
}
headers = {
"X-Transaction-Token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v1/transactions/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'txnId' => 'wd-2026-07-07-0042',
'type' => 'travelRule',
'info' => [
'direction' => 'out',
'amount' => '0.25',
'currency' => 'ETH',
'currencyType' => 'crypto',
'cryptoParams' => [
'crypto_chain' => 'ETH'
]
],
'subject' => [
'fullName' => 'Jane Doe'
],
'counterparty' => [
'fullName' => 'Ana Diaz',
'paymentMethod' => [
'type' => 'unhosted_wallet',
'accountId' => '0xBeneficiaryWallet01'
]
],
'travelRule' => [
'status' => 'AWAITING_COUNTERPARTY',
'beneficiaryData' => [
'wallet_address' => '0xBeneficiaryWallet01',
'name' => 'Ana Diaz'
]
],
'includeCryptoScreening' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Transaction-Token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://verification.didit.me/v1/transactions/"
payload := strings.NewReader("{\n \"txnId\": \"wd-2026-07-07-0042\",\n \"type\": \"travelRule\",\n \"info\": {\n \"direction\": \"out\",\n \"amount\": \"0.25\",\n \"currency\": \"ETH\",\n \"currencyType\": \"crypto\",\n \"cryptoParams\": {\n \"crypto_chain\": \"ETH\"\n }\n },\n \"subject\": {\n \"fullName\": \"Jane Doe\"\n },\n \"counterparty\": {\n \"fullName\": \"Ana Diaz\",\n \"paymentMethod\": {\n \"type\": \"unhosted_wallet\",\n \"accountId\": \"0xBeneficiaryWallet01\"\n }\n },\n \"travelRule\": {\n \"status\": \"AWAITING_COUNTERPARTY\",\n \"beneficiaryData\": {\n \"wallet_address\": \"0xBeneficiaryWallet01\",\n \"name\": \"Ana Diaz\"\n }\n },\n \"includeCryptoScreening\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Transaction-Token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://verification.didit.me/v1/transactions/")
.header("X-Transaction-Token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"txnId\": \"wd-2026-07-07-0042\",\n \"type\": \"travelRule\",\n \"info\": {\n \"direction\": \"out\",\n \"amount\": \"0.25\",\n \"currency\": \"ETH\",\n \"currencyType\": \"crypto\",\n \"cryptoParams\": {\n \"crypto_chain\": \"ETH\"\n }\n },\n \"subject\": {\n \"fullName\": \"Jane Doe\"\n },\n \"counterparty\": {\n \"fullName\": \"Ana Diaz\",\n \"paymentMethod\": {\n \"type\": \"unhosted_wallet\",\n \"accountId\": \"0xBeneficiaryWallet01\"\n }\n },\n \"travelRule\": {\n \"status\": \"AWAITING_COUNTERPARTY\",\n \"beneficiaryData\": {\n \"wallet_address\": \"0xBeneficiaryWallet01\",\n \"name\": \"Ana Diaz\"\n }\n },\n \"includeCryptoScreening\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v1/transactions/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Transaction-Token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"txnId\": \"wd-2026-07-07-0042\",\n \"type\": \"travelRule\",\n \"info\": {\n \"direction\": \"out\",\n \"amount\": \"0.25\",\n \"currency\": \"ETH\",\n \"currencyType\": \"crypto\",\n \"cryptoParams\": {\n \"crypto_chain\": \"ETH\"\n }\n },\n \"subject\": {\n \"fullName\": \"Jane Doe\"\n },\n \"counterparty\": {\n \"fullName\": \"Ana Diaz\",\n \"paymentMethod\": {\n \"type\": \"unhosted_wallet\",\n \"accountId\": \"0xBeneficiaryWallet01\"\n }\n },\n \"travelRule\": {\n \"status\": \"AWAITING_COUNTERPARTY\",\n \"beneficiaryData\": {\n \"wallet_address\": \"0xBeneficiaryWallet01\",\n \"name\": \"Ana Diaz\"\n }\n },\n \"includeCryptoScreening\": true\n}"
response = http.request(request)
puts response.read_body承認
バックエンドがPOST /v3/transactions/sdk-token/で発行する有効期間の短いスコープ付きトークン。Didit SDKがデバイス向けの/v1/transactions/エンドポイントで使用します。
ボディ
この取引に対するお客様独自の識別子です(transaction_idに対応、最大128文字)。
"wd-2026-07-07-0042"
取引カテゴリー(transaction_categoryに対応)。例: finance、kyc、travelRule、userPlatformEvent、gamblingBet。
"travelRule"
取引の主要な金融情報(transaction_detailsに対応)。
Show child attributes
Show child attributes
取引の対象者(申請者)。ここではexternalUserIdは無視されます。対象者の身元は常にトークンのvendor_dataに基づいて強制されます。
Show child attributes
Show child attributes
取引が発生した日時(transaction_atに対応)。省略した場合は現在日時になります。
IANAタイムゾーン識別子(time_zoneに対応)。例: Europe/Madrid。
取引の取引相手(任意)。subjectと同じ形式です。ここではexternalUserIdが意味を持ちます。
Show child attributes
Show child attributes
カスタムのキーと値のペア(custom_propertiesに対応)。各キーはルール条件でcustom_values.<key>として参照できます。
トラベルルールの詳細(travel_rule_detailsに対応)。アプリケーションでトラベルルールが有効な場合、Diditは送信されたstatusを無視し、交換を自ら進めます。
Show child attributes
Show child attributes
暗号資産のブロックチェーン分析スクリーニングに対する取引ごとの上書き設定です(include_crypto_screeningに対応します)。
didit-fp-v2デバイスフィンガープリントのペイロードです。SDKが自動的に挿入します。ワイヤーAPIを直接呼び出す場合にのみ関係します。
レスポンス
取引が送信され、モニタリングされています。詳細の形式はGET /v3/transactions/{transaction_id}/と同じで、エンドユーザーがフォローアップのアクションを完了する必要がある場合はaction_requiredブロックを含みます(SDKはデフォルトでこれを自動的に起動します)。
1件の取引に関する完全なモニタリング記録。GET /v3/transactions/{transaction_id}/およびPOST /v3/transactions/から返されます。
Diditの安定した取引識別子です。後続の呼び出しで{transaction_id}として使用します。
取引を所有するアプリケーションの環境。sandboxの取引は保存されますが、評価、スクリーニング、通知、請求は一切行われません。そのため、空のrule_runsは「未評価」を意味します。
live, sandbox Consoleに表示される、アプリケーション単位の取引の連番(例: 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 末尾のゼロを除去した10進数文字列で表した取引金額(例: "1500"、"0.5"、"0.123456789012345678")。小数点以下最大18桁です。
amountの通貨コード。ISO 4217の任意のアルファベットコード(例: EUR、USD、NGN)と暗号資産シンボル(例: BTC)を受け付けます。現在流通しているコードを推奨します。受け付けられるすべてのコードに為替レートがあるわけではありません。コードに為替レートがない場合(たとえばISOの会計単位XSUや、Diditが価格を付けていない暗号資産シンボル)、自動換算は失敗し、リクエストで換算済みのamount_in_default_currencyを指定していない限りpreferred_currency_amountはnullで返されます。
currency_kindで送信されたとおりのfiatまたはcrypto。
指定された事前換算済みの金額。末尾のゼロを除いた10進数の文字列です。
利用可能な場合に、アプリケーションの優先通貨に換算した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ペイロードのスナップショット。
作成時に指定した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
プロバイダーの生のペイロード(AMLスクリーニング、ブロックチェーン分析など)。
Show child attributes
Show child attributes
トラベルルールの送金またはチェック。travel_rule_detailsが送信された場合に設定されるほか、トラベルルールが有効で、取引がtransaction_category: travelRuleで作成された場合にも設定されます(travel_rule_detailsがなくても、Didit自身が交換を開始します)。送金やチェックが存在しない場合はnullです。インバウンド送金では、ウォレットの所有権が確認されるまで、取引相手のoriginator_dataとbeneficiary_dataはマスクされたまま(data_masked: true)になります。
Show child attributes
Show child attributes
ルールエンジンが使用する、関連する取引と当事者のグラフスナップショット。取引とともに送信されたnetwork_snapshot、またはAMLウォレットスクリーニングが成功した際にDiditが構築するグラフ(送信されたものを置き換えます)のいずれかです。どちらも存在しない場合はnullです。
Show child attributes
Show child attributes
再検証が必要な場合にユーザーに提示される是正用のセッションです。正規のブロックであるaction_requiredに置き換えられました。後方互換性のために残されています。
Show child attributes
Show child attributes
この取引を完了するために必要な保留中のエンドユーザーアクション。存在しない場合はnull。Didit SDKはデフォルトでこのアクションを自動的に起動し、完了時に取引を更新します。typeで区別される2つのバリアントがあります。verification_session(ルールのアクションによって作成されたホスト型認証セッション)とwallet_ownership(ウォレット管理の証明が必要なトラベルルール送金のために自動発行されるウォレット所有権ウィジェットセッションで、トラベルルール設定のauto_wallet_verificationによって制御されます)です。両方が該当しうる場合は、トラベルルールの交換をブロックするためwallet_ownershipが優先されます。
- Verification session
- Wallet ownership
Show child attributes
Show child attributes
この取引の費用。total_priceとitemsで構成され、itemsは請求ごとに1件で、それぞれusage_type、price、details、created_atを含みます。同じ取引を再スクリーニングすると新しい項目になります。