POST /v3/transactions/とGET /v3/transactions/{transaction_id}/が返すペイロード全体を説明します。どちらのエンドポイントも同じTransactionDetailオブジェクトを返します。フィールドごとのスキーマはAPIリファレンスに掲載されており、このページではその内容を順に解説します。
トップレベルの構造
uuidはDiditが発行する不変の識別子で、GET /v3/transactions/{transaction_id}/のパスに指定する値です。txn_idは作成時に指定したtransaction_idです。transaction_numberはアプリケーション単位で採番される連番で、コンソールに表示されます。
送信した対象者と取引相手は、トップレベルのキーとしては返されません。これらはparties配列の要素として返され、roleで区別されます。トップレベルのvendor_dataは、申請者のvendor_dataを参照しやすいように複製したものです。
主要フィールド
金額関連フィールド
amount/currency:送信された取引金額です。amountは末尾のゼロを取り除いた10進数の文字列("1500"、"0.5")で、小数点以下は最大18桁です。currency_type:currency_kindで送信されたfiatまたはcryptoです。省略した場合はnullです。amount_in_default_currency/default_currency_code:リクエストで指定した換算済みの金額をそのまま返します。送信しなかった場合はnullです。preferred_currency_amount/preferred_currency_code:amountをアプリケーションの優先通貨に換算した金額です。currencyの為替レートが利用できず、かつamount_in_default_currencyを指定しなかった場合はnullです。payment_details/payment_txn_id:リクエストに含まれる自由記述の支払い参照と、外部の支払い参照(ブロックチェーンのトランザクションハッシュなど)です。
ステータス関連フィールド
status:APPROVED、IN_REVIEW、DECLINED、AWAITING_USERのいずれかです。取引はAPPROVEDで作成され、ルールによって同期的に変更される場合があります。score:ルールによって累積される整数のリスクスコアです。値が大きいほどリスクが高いことを示します。severity:UNKNOWN、LOW、MEDIUM、HIGH、CRITICALのいずれかです。ルールまたはプロバイダーが設定するまではnullです。decision_reason_code/decision_reason_label:現在のステータスの理由を示す、構造化されたコードと人が読める説明です。environment:取引を所有するアプリケーションに基づくliveまたはsandboxです。sandboxの取引は保存されますが評価は一切されないため、rule_runsが空であることは「一致なし」ではなく「未評価」を意味します。詳しくはサンドボックスでのトランザクションモニタリングを参照してください。source:APIまたはSDKで送信された取引はLIVE、コンソールのCSVインポートで読み込まれた取引はIMPORTEDです。
当事者
取引のすべての当事者はpartiesのエントリーとして格納されます。作成エンドポイントは対象者をAPPLICANT、任意の取引相手をCOUNTERPARTYとして記録します。roleのenumにはREMITTERとBENEFICIARYも含まれます。すべてのエントリーは同じ形式です。
role:APPLICANT、COUNTERPARTY、REMITTER、BENEFICIARYのいずれかです。対象者を特定するには、このフィールドでフィルターしてください。entity_type:送信されたindividual、company、external、unhostedWalletのいずれかです。kind:当事者がvendor_dataを通じてDiditのユーザーまたは企業に紐付いている場合はUSERまたはBUSINESS、それ以外の場合はEXTERNALです。country_code/dob:送信されたaddress.countryとdate_of_birthから取得されます。address/institution_info:送信されたオブジェクトそのものです。省略した場合は{}です。external_party_snapshot:EXTERNALの当事者のデータを固定したコピーです。当事者がDiditのユーザーまたは企業に紐付いている間はnullです。
device
deviceは、その当事者について送信されたdevice_contextをsnake_caseに正規化し、サーバー側のIPエンリッチメントを加えたものです。リクエストにデバイスコンテキストが含まれていない場合は{}になるため、すべてのキーを常に省略可能なものとして扱ってください。
独立したエンリッチメントオブジェクトはありません。当事者に公開の
network_context.ip_addressが含まれていた場合、Diditはそれをインラインで解決し、エンリッチされたフィールドを同じnetwork_contextオブジェクトに書き込みます。書き込まれるのは、指定されていないキーのみです。リゾルバーが空で返したキーは省略されるため、完全にエンリッチされたnetwork_contextには、送信された4つのキー(ip_address、ip_country_code、latitude、longitude)に加えて、ip_country、ip_state、ip_city、isp、organization、is_vpn_or_tor、is_data_center、time_zone、time_zone_offset、asn_number、asn_organization、connection_type、carrier、proxy_typeのうち解決できたものが含まれます。解決に成功した場合、is_vpn_or_torとis_data_centerは常に存在します。
IPが存在しないかルーティング不可能な場合、アプリケーションがサンドボックスにある場合、または解決に失敗した場合は、エンリッチメントはスキップされ、network_contextは送信されたとおりに返されます。ip_country_codeは、Diditが解決した場合はISO 3166-1 alpha-2コード、それ以外の場合は送信された値そのものです。ルールの条件は、比較する前に両方の形式を正規化します。
支払い方法
role:SOURCE、DESTINATION、FUNDING、BENEFICIARYのいずれかです。作成エンドポイントはdirectionに基づいてSOURCE/DESTINATIONを割り当てます。送金(outbound)取引では対象者の支払い方法がSOURCE、取引相手の支払い方法がDESTINATIONとなり、入金(inbound)取引ではその逆になります。payment_method_type:bank_card、bank_account、e_wallet、crypto_wallet、unhosted_wallet、otherのいずれかです。fingerprint:type:account_id:issuing_countryに対するSHA-256です。取引をまたいで同じ値になるため、同一の支払い手段の再利用を関連付けられます。account_idが送信されなかった場合はnullです。owner_kind/vendor_data/owner_name:支払い手段の所有者です。当事者と同じUSER/BUSINESS/EXTERNALの規則に従います。details:送信されたpayment_methodオブジェクトそのものです。
ルール実行
rule:実行されたルールのUUIDです。rule_title、rule_description、rule_categoryはこのルールからコピーされます。matched:実行はルールの条件に一致した場合にのみ記録されるため、本番環境での評価では常にmatched: trueになります。評価されたものの一致しなかったルールは、エントリーを残しません。デモデータにはmatched: falseの行が含まれる場合があります。is_test/mode:ルールがテストモードで実行された場合はtrueとTESTです。テスト実行は記録されますが、status、score、severityには影響しません。score_delta/status_target/severity:この実行による寄与です。status_targetは、change_statusアクションが実行された場合、または加算されたスコアがしきい値を超えた場合に設定されます。action_summary:ルールが実行したアクションを;で連結した文字列の要約です(score +30、change_status:IN_REVIEW、add_tag:<name>、add_note、add_to_list、open_case)。ルールがアクションを実行しなかった場合はnullです。metadata:評価の詳細です。scope_matchに加えて、conditions[]とaggregations[]を含みます。2つのリストでは値のキーが異なります。conditions[]:条件ごとに1つのエントリーで、field、operator、expected_value、取引から読み取られたcurrent_value、matched、group_index、group_logicを含みます。取引のルール実行ではfield_sourceは常にnullです。これが分類されるのはモニタリングイベントの場合のみです。aggregations[]:velocity・件数・合計の集計ごとに1つのエントリーで、metric、field、operator、expected_value、集計の評価結果であるcomputed_value、window、filters、matched、sample_referencesを含みます。非同期でしか計算できなかった集計には、computed_value: nullとdeferred: trueが設定されます。
アラート
alertsは現時点では常に空の配列です。
未解決のアラートは保留中の取引を意味するため、代わりにstatus(IN_REVIEWまたはAWAITING_USER)を確認してください。詳しくはアラートを参照してください。
アクティビティ
取引のアクティビティログです。作成、メモ、手動レビュー、ステータス変更が記録されます。TRANSACTION_NOTE_ADDEDエントリとしてここに表示されます。別途notes配列はありません。
書類
コンソールから取引に添付されたファイルです。添付がない場合は[]です。
file_urlは有効期間の短い署名付きURLです。保存せず、必要なときに取得してください。
プロバイダー結果
外部プロバイダーの出力(トランザクションハッシュのスクリーニング、ウォレットスクリーニング、法定通貨モニタリング、制裁スクリーニング)です。result_type:FIAT_MONITORING、WALLET_SCREENING、TRANSACTION_SCREENING、TRAVEL_RULE、NETWORK_GRAPH、CUSTOM。
payload.risk_factorsはscoreの根拠をランク順に示したもので、判定を生んだ要因を、高リスク要因を先に、その後は移動額の大きい順に並べます。scoreが高いのにis_high_riskのエントリがない場合、プロバイダーが制裁や帰属エンティティとの一致を報告せず、独自のエクスポージャーモデルでエンティティを評価したことを意味します。その旨はsummaryに明記されます。フィールドごとの詳細はリスク要因を参照してください。このフィールドの導入前にスクリーニングされた結果には、このキーは含まれません。
暗号資産のトランザクションハッシュのスクリーニングでは、オンチェーンのエンリッチメントが利用可能な場合にtransaction_flowsが設定されます。チェーン上のアクティビティを正規化することで、コンソールは同じレスポンスペイロードから取引の概要と可視化グラフの両方を描画できます。
対応しているエンリッチメントソース:
- EVMチェーンはBlockscoutを使用し、メインの取引、内部呼び出し、トークン転送を正規化します。
- Bitcoinはmempool.spaceを使用し、取引の入力と出力を正規化します。
- SolanaはHeliusを使用し、ネイティブSOLの転送、SPLトークンの転送、利用可能なNFTイベントのコンテキストを正規化します。
transaction_flows[]項目には、安定した正規化フィールド(flow_type、from_address、to_address、amount、amount_usd、currency、token_name、token_address、transaction_hash、block_timestamp、index、success)に加えて、プロバイダー固有のmetadataが含まれます。
主なmetadataの例:
metadataには追加のキーが含まれる場合があり、プロバイダーごとに異なります。すべてのチェーンですべてのキーが存在することを前提とした重要な連携は構築しないでください。
トラベルルール
取引にトラベルルールの送金やチェックがない場合はnullです。travel_rule_detailsを送信した場合に設定されるほか、アプリケーションでトラベルルールが有効になっており、取引がtransaction_category: "travelRule"で作成された場合にも設定されます。この場合、Diditはtravel_rule_detailsの有無にかかわらず自らやり取りを開始し、そのstatusをここに報告します。送信したリクエストではなく、このフィールドを参照してください。
受信送金では、ウォレットの所有権が確認されるまで、取引相手のoriginator_dataとbeneficiary_dataはマスクされたまま(data_masked: true)です(マスクされた取引相手データを参照)。
direction、rail、counterparty_vasp、delivery、discovery、reason、next_actionsは、送金エンドポイントと同じ形式です。
reasonとnext_actionsは、COUNTERPARTY_VASP_NOT_FOUNDまたはCOUNTERPARTY_VASP_NOT_REACHABLEの送金が停止している理由と、先に進めるための方法を示します。それ以外のステータスでは""と[]です。送金が停止する理由を参照してください。
GET /v3/transactions/の各行にも同じブロックが含まれます。
詳しくはトラベルルールを参照してください。
ネットワークスナップショット
保存されたグラフそのものであり、グラフへの参照ではありません。次のいずれかに由来します。- 取引とともに送信した
network_snapshot、または - 暗号資産取引でAMLウォレットスクリーニングが成功したときにDiditが構築するグラフ(リクエストに
network_snapshotが含まれていない場合も同様)。スクリーニングで構築されたグラフは送信されたグラフを置き換え、非同期の再スクリーニングで更新されます。
nullです。
タグ、メタデータ、props
tags[]:付与されたタグ(ルールアクションまたはアナリストによるもの)です:{ "uuid", "name", "color", "description", "source" }。sourceはプリセットタグの場合はdidit、独自のタグの場合はcustomです。metadata:作成時に送信したsubjectとcounterpartyのペイロードを、送信したとおりにその2つのキーの下に保存したスナップショットです。props:作成時に指定したcustom_propertiesです。各キーはルール条件でcustom_values.<key>として参照できます。
是正対応
ルールがAWAITING_USERをトリガーすると、Diditは紐付けられた検証セッションを作成し、2つのフィールドで返します。
remediation:紐付けられたセッションです:{ "session_id", "session_token", "url", "status" }。取引が存在する間は常に値が保持されるため、ユーザーのアクションがどのように終わったかをいつでも確認できます。action_required:ユーザーが今すぐ行う必要があるアクションで、保留中のものがなくなるとnullになります:{ "type": "verification_session", "url", "session_id", "session_token", "status" }。ユーザーをurlにリダイレクトするか、session_tokenをDidit SDKに渡してください。トラベルルールのウォレット所有権アクションは{ "type": "wallet_ownership", "url", "widget_session_id", "expires_at" }を使用し、両方が該当しうる場合はこちらが優先されます。ウォレット所有権アクションが保留中で、送金の取引相手が見つからなかった場合は、同じブロックにreasonとnext_actionsも含まれます(取引相手の検出を参照)。
transaction.createdおよびtransaction.status.updatedのWebhookペイロード(action_required)にも含まれます。Webhookを参照してください。
コスト内訳
取引に対して課金対象の機能が実行されるまではnullです。実行後は{ "total_price", "items": [ { "usage_type", "price", "details" } ] }となり、従量課金の機能(スクリーニング、エンリッチメントなど)ごとに1項目が含まれます。
通貨換算
preferred_currency_amountは、amountをアプリケーションの優先通貨に仲値レートで換算した金額です。ただし、amount_in_default_currencyを指定した場合は、その換算済みの値がそのまま使用されます。amountに対するルール条件は元の通貨の金額で比較されます。複数の通貨にまたがって1つのしきい値を適用する場合は、条件にpreferred_currency_amountを使用してください。
次のステップ
取引の送信
リクエストスキーマの全容。
ステータス
各ステータスの意味。
リスクスコアリング
スコアの算出方法。