> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# 取引作成API：KYTへの取引送信

> 取引をDidit KYTに送信し、リスクスコアリング、スクリーニング、トラベルルール処理を行います。月1,000件の取引まで含まれ、以降は1件あたり$0.001です。



取引作成APIプロンプト
        プロンプトをクリップボードにコピー



      
      

\<pre>

\`Submit a transaction for Didit monitoring through the Management API.

Endpoint:
POST https://verification.didit.me/v3/transactions/

Authentication:
Use the x-api-key header with my Didit API key.

Goal:
\- Submit a transaction for KYT (transaction monitoring). Didit runs the configured rules engine, blockchain analytics, and AML screening synchronously and returns the verdict in the response. The full detail (parties, rule runs, provider results, remediation links) is also returned.
\- A Travel Rule transfer is stored in the same call, but Didit contacts the counterparty after the response: travel_rule.status comes back AWAITING_COUNTERPARTY (or NOT_APPLICABLE, UNCONFIRMED_OWNERSHIP, or COMPLETED for your own verified wallet) with travel_rule.protocol null, and every later status change, including COUNTERPARTY_VASP_NOT_FOUND, arrives as a travel_rule.status.updated webhook. Your rules run again when the rail or the status changes.

When to call:
\- At payment authorization, before fanning out funds, to decide allow / hold / decline based on status, score, severity.
\- On post-trade events (gambling bets, audit-trail events, KYC events) for long-running monitoring without a per-transaction decision.
\- On crypto deposits / withdrawals — set transaction_details.currency_kind = "crypto" and provide the relevant wallet address in payment_method.account_id.
\- For Travel Rule, set transaction_category = "travel_rule" and include travel_rule_details (alias travelRule).
travel_rule_details.status is required (400 if missing); when Travel Rule is enabled, Didit runs the exchange and ignores the status you send, and otherwise Didit records the transfer passively with that status.
When the subject is a user with an approved Didit KYC verification and Travel Rule is on, Didit replaces the originator_data fields the verification holds with the verified values (metadata.originator_provenance says which); otherwise it sends originator_data as you provide it, so build it from the identity you verified.
beneficiary_data carries the beneficiary (name, wallet_address, chain) and any routing hints (travel_address, counterparty_vasp_lei, counterparty_vasp_name, counterparty_vasp_email).
If beneficiary_data.chain is empty, Didit takes transaction_details.crypto_params.crypto_chain, else custom_properties.crypto_chain, else the currency, uppercases it, and sets it only when it is a chain Didit recognises (for example ETH or BTC).
\- Chain shapes: on XRP, XLM, EOS, ATOM and HBAR send the destination tag or memo as payment_method.memo (or beneficiary_data.memo); on BTC, LTC, BCH and DOGE send the transaction's inputs and outputs as travel_rule_details.utxo; on bitcoin or Lightning, payment_method.account_id may be a Lightning payment request or Lightning Address. What Didit resolved is on travel_rule.chain_details (see /transaction-monitoring/travel-rule#chain-shapes).

Identifiers:
\- transaction_id (alias txnId) is YOUR identifier (max 128 chars), unique per application.
It becomes txn_id on subsequent calls.
Reusing a transaction_id that already exists returns 400 {"transaction_id": ["A transaction with this transaction_id already exists."]}, and when two identical requests race each other the loser gets 409.
Neither response returns the existing transaction, so to retry safely, treat a 400 or 409 for a duplicate id as already created and look the transaction up instead of resubmitting: GET /v3/transactions/{uuid}/ with the Didit uuid from the first response, or with the transaction_id (the Didit uuid) that the transaction.created webhook carries next to your txn_id.
GET does not accept your txn_id. Sandbox applications do not receive transaction.created or transaction.status.updated, so save the Didit uuid from the create response. Sandbox Travel Rule exchanges do emit travel_rule.status.updated with environment: sandbox.
\- The returned uuid is Didit's stable identifier — use it in GET /v3/transactions/{transaction_id}/.

Linking to entities:
\- subject.vendor_data (and optionally counterparty.vendor_data) are your internal user/business identifiers. They link the transaction to the long-lived User / Business entity assembled from prior verification sessions. Use the SAME vendor_data you supplied when creating the KYC session.

Minimum request body (application/json):
\{
"transaction_id": "your-txn-2026-05-17-001",
"transaction_category": "finance",   // finance | kyc | travel_rule | user_event | audit_trail_event | gambling_bet | gambling_limit_change | gambling_bonus_change
"transaction_details": {
"direction": "outbound",            // "inbound" | "outbound"
"amount": 1500,                     // number or decimal string, up to 18 decimal places (string for exact precision); never negative, because direction carries the sign
"currency": "EUR",                  // any ISO 4217 code (EUR, USD, NGN, ...) or a crypto symbol
"currency_kind": "fiat",            // "fiat" | "crypto" (optional)
"action_type": "withdrawal"         // optional, e.g. deposit/withdrawal/transfer
},
"subject": {                          // APPLICANT party
"entity_type": "individual",        // "individual" | "company"
"vendor_data": "user-12345",        // required
"full_name": "Maria Garcia",        // required
"address": { "country": "ESP" }     // optional
},
"counterparty": { ... },              // optional COUNTERPARTY party (same shape as subject)
"transaction_at": "2026-05-17T08:42:00Z",  // optional, defaults to now
"travel_rule_details": { "status": "AWAITING_COUNTERPARTY", ... }   // optional, for crypto Travel Rule; status is required inside it
}

Currency codes:
\- currency has no enum. Any ISO 4217 alphabetic code (EUR, USD, NGN, ...) and any crypto asset symbol (BTC, ETH, ...) are accepted and stored exactly as you send them, up to 10 characters.
\- Prefer a currently-circulating code. Not every accepted code has an exchange rate: withdrawn currencies and accounting units such as XDR are often still quoted, but when Didit has no rate for the code you send (for example the ISO accounting unit XSU, or a crypto symbol Didit does not price), automatic conversion to your base currency fails and preferred_currency_amount comes back null. A pre-converted amount_in_default_currency is always used as sent when present, so supply it for any code you are not sure has a rate.
\- Set currency_kind = "crypto" for on-chain amounts. The kind gates the transaction's own crypto AML screening: without currency_kind = "crypto" that regular screening step is skipped and no screening fee is estimated or charged for it, even with monitoring enabled or include_crypto_screening = true. Travel Rule attribution is a separate path: on a production application with Travel Rule and VASP attribution enabled, an outbound transaction_category = "travel_rule" request whose beneficiary wallet and chain cannot be reached over any rail triggers a VASP attribution wallet screening, and that screening is billed at the wallet screening price whatever currency_kind is or is not set. The kind does not change the stored decimal scale: up to 18 decimal places are kept either way, but only when amount arrives as a decimal string ("0.123456789012345678"). A JSON number is parsed as a binary float first, so anything beyond about 15 significant digits is rounded before it is stored (0.123456789012345678 is stored as 0.12345678901234568). The kind also decides how the amount is rendered in the transaction PDF. Crypto amounts render with up to 8 decimal places, fiat amounts with their ISO 4217 minor unit (2 for most currencies). Without the kind, RON, MNT and GEL are rendered as fiat because each is both a token and an ISO 4217 currency, so a small token amount can show as 0 in the report.
The VASP attribution screening is skipped when the transaction's own crypto screening already screened that wallet: Didit reuses that result and charges nothing extra.

Example call:
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"}
}'

What to read from the response:
\- uuid — Didit transaction id, use for GET /v3/transactions/{transaction_id}/.
\- status - APPROVED | IN_REVIEW | DECLINED | AWAITING_USER (live verdict; at creation, AWAITING_USER comes from a rule action).
\- score (0–100, higher = riskier) and severity (LOW | MEDIUM | HIGH | CRITICAL).
\- decision_reason_code / decision_reason_label — machine + human verdict reason.
\- parties (role APPLICANT for the subject, COUNTERPARTY for the counterparty; kind USER, BUSINESS or EXTERNAL), cost_breakdown, rule_runs, provider_results (crypto screening results) and network_snapshot.
\- travel_rule - the Travel Rule transfer (status, protocol, required, originator_data, beneficiary_data, direction, rail, counterparty_vasp, delivery, discovery, reason, next_actions), or null; action_required - a pending wallet-ownership or verification step, or null.
reason and next_actions say why a COUNTERPARTY_VASP_NOT_FOUND or COUNTERPARTY_VASP_NOT_REACHABLE transfer is stuck and what moves it on (for example email_undeliverable: update_compliance_email, then resend); they are "" and [] for any other status.

Webhooks:
\- transaction.created fires after this call succeeds.
\- For a travel_rule transaction, travel_rule.status.updated fires for each Travel Rule transition, after transaction.created. Each webhook is delivered and retried on its own, so key on transaction_id rather than on arrival order.
\- transaction.status.updated fires whenever the verdict changes (manual review, async screening, rule re-runs). Subscribe a destination via POST /v3/webhook/destinations/.

Failure modes:
\- 400 - duplicate transaction_id, missing required field (including travel_rule_details.status), an unknown travel_rule_details.status ("Invalid travel rule status: ..."), invalid direction/category enum, or malformed party object.
\- 409 - a concurrent request with the same transaction_id was created first.
\- 403 - missing x-api-key (a wrong, revoked or expired key gets 401), or a key without permission for this action; the body is a { "detail": "..." } envelope.
\- 403 - the organization's balance cannot cover the fees this request would charge: { "detail": "...", "code": "insufficient_credits" }, and nothing is created.
\- 429 — rate limited; back off and retry.

Side effects:
\- Creates the transaction record and runs the synchronous rules + screening pipeline.
\- Links the transaction to the User / Business entity that shares the subject.vendor_data.
\- An outbound travel_rule transaction is billed once, at creation, on one line. It pays the Travel Rule fee ($0.02) when Travel Rule is on and Didit starts an exchange for it (amount at or above threshold_amount, including a transfer to a self-hosted wallet or to the user's own verified wallet). Otherwise it is billed as transaction monitoring (included in the plan's monthly transaction allowance, $0.001 each beyond it): below threshold_amount, a Lightning payment the Travel Rule does not apply to, or data recorded while Travel Rule is disabled. A resend never charges again.
\- An inbound travel_rule transaction pays no base fee, an application that joined Travel Rule free pays none on outbound transactions until it turns outbound billing on, and sandbox applications are never charged.
\- Crypto screening, when it runs, adds the Wallet Verification & Screening charge.

For the full integration shape, see /integration/integration-prompt.`

\</pre>



      
      

貼り付け先



## OpenAPI

````yaml ja/openapi-25.json POST /v3/transactions/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: 本人確認API。x-api-keyヘッダーで認証します。
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/transactions/:
    post:
      tags:
        - Transactions
      summary: 取引を作成
      description: >-
        同期的なAML/リスクモニタリングのために取引を送信します。取引は`APPROVED`として作成され、その後ルール（および該当する場合は暗号資産スクリーニング）がインラインで実行され、返される`status`が`IN_REVIEW`または`DECLINED`に変わることがあります。**`transaction_id`は冪等性キーです**（最大128文字、アプリごとに一意）。再利用すると400が返されます。本番アプリケーションでは、成功時に`transaction.created`のWebhookが送信されます。サンドボックスアプリケーションには請求が発生せず、`transaction.created`および`transaction.status.updated`のWebhookも送信されません。サンドボックスでのトラベルルールのやり取りでは、`environment:
        sandbox`付きの`travel_rule.status.updated`のWebhookが送信されます。トラベルルールの送金は、取引相手に連絡する前に保存されて返されます。`travel_rule.status`は`AWAITING_COUNTERPARTY`（しきい値未満の場合は`NOT_APPLICABLE`、申告されたセルフホスト型ウォレットの場合は`UNCONFIRMED_OWNERSHIP`、相手側ウォレットが自社の検証済みウォレットである場合は`COMPLETED`）として返され、`travel_rule.protocol`はnullになります。その後Diditがレールを選択してやり取りを送信し、送金のその後のすべてのステータス変更（どのレールでも取引相手に到達できない場合の`COUNTERPARTY_VASP_NOT_FOUND`を含む）は`travel_rule.status.updated`のWebhookとして届きます。レールまたはステータスが変わると、ルールが再度実行されます。
      operationId: createTransaction
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                transaction_id:
                  type: string
                  description: この取引に対するお客様独自の識別子です（最大128文字）。
                  example: your-txn-2026-05-17-001
                transaction_at:
                  type: string
                  format: date-time
                  description: 取引が発生した日時。省略した場合は現在日時になります。
                time_zone:
                  type: string
                  description: 'IANAタイムゾーン識別子。例: `Europe/Madrid`。'
                transaction_category:
                  type: string
                  description: >-
                    取引のカテゴリ。キャメルケースのエイリアス（`travelRule`、`userPlatformEvent`、`gamblingBet`など）も受け付けます。複数語のカテゴリでは、保存および返却される値はキャメルケースです。
                  example: finance
                  enum:
                    - finance
                    - kyc
                    - travel_rule
                    - user_event
                    - audit_trail_event
                    - gambling_bet
                    - gambling_limit_change
                    - gambling_bonus_change
                    - travelRule
                transaction_details:
                  type: object
                  description: 取引の主要な金融情報。
                  required:
                    - direction
                    - amount
                    - currency
                  properties:
                    direction:
                      type: string
                      description: >-
                        対象者から見た取引の方向です。大文字と小文字は区別されず、`in`/`out`もエイリアスとして受け付けます。大文字（`INBOUND`/`OUTBOUND`）で返されます。
                      example: outbound
                      enum:
                        - inbound
                        - outbound
                        - in
                        - out
                    amount:
                      type: number
                      description: >-
                        取引金額（小数点以下最大18桁）。正確な精度が重要な場合は、10進数の文字列（例:
                        `"0.123456789012345678"`）として送信してください。JSONの数値はまずバイナリ浮動小数点数として解析されるため、有効桁数約15桁を超える桁は金額の保存前に丸められます。0以上である必要があります。符号は方向で表され、負の金額を送ると`400`が返されます。
                      example: 1500
                    currency:
                      type: string
                      description: >-
                        通貨コード。ISO
                        4217のアルファベットコード（例：`EUR`、`USD`、`NGN`）と暗号資産シンボル（例：`BTC`）を受け付けます。現在流通しているコードを推奨します。受け付けるすべてのコードに為替レートがあるわけではありません。コードに利用可能な為替レートがない場合（例：ISOの会計単位`XSU`や、Diditが価格を算出していない暗号資産シンボル）、自動換算は失敗し、リクエストで換算済みの`amount_in_default_currency`を指定していない限り、`preferred_currency_amount`はnullで返されます。
                      example: EUR
                    currency_kind:
                      type: string
                      description: 通貨が`fiat`と`crypto`のどちらか。
                    amount_in_default_currency:
                      type: number
                      nullable: true
                      description: デフォルト通貨に事前換算した金額。省略した場合は、自動で為替換算が試行されます。0以上である必要があります。
                    default_currency:
                      type: string
                      description: 換算額のデフォルト通貨コードです。現在流通している任意のISO 4217コードを指定できます。
                    payment_details:
                      type: string
                      nullable: true
                      description: 自由記述の支払い参照情報またはメモ。
                    payment_reference_id:
                      type: string
                      nullable: true
                      description: >-
                        外部決済システムの参照番号です。暗号資産のAML取引ハッシュスクリーニングでは、ブロックチェーンの取引ハッシュを送信し、関連するアドレスを`subject.payment_method.account_id`にも指定してください。
                    action_type:
                      type: string
                      nullable: true
                      description: '取引のサブタイプ。例: `deposit`、`withdrawal`、`transfer`。'
                    crypto_params:
                      type: object
                      description: >-
                        通貨（資産シンボル）とは別に指定する暗号資産ネットワークの選択。カスタムトークンのシンボルを記録しても、そのコントラクトのトランザクションハッシュがカバーされることは保証されません。
                      properties:
                        crypto_chain:
                          type: string
                          description: >-
                            スクリーニングに実際に使用されたネットワーク。マネージドスクリーニングは、BTC、ETH、LTC、XRP、BCH、DOGE、TRX、SOL、MATIC、BNB、BASE（Base）、OP（Optimism）、ARB（Arbitrum
                            One）、AVAX（Avalanche
                            C-Chain）、ADA（Cardano）、XLM（Stellar）、HBAR（Hedera）に対応しています。一般的なネットワーク名も使用できます。たとえば、MATICにはPOLYGONまたはPOL、BNBにはBSC、TRXにはTRONを指定できます。複数のネットワークに存在するトークンでは、必ずこの値を指定してください。0xで始まるトランザクションハッシュで送信されたUSDT、USDC、ETHでこの値が指定されていない場合、DiditはEthereum、BNB
                            Chain、Polygon、Base、Arbitrum、Optimismでハッシュを検索し、見つかったネットワークでスクリーニングします。いずれのネットワークにも見つからない場合、その取引はスクリーニングされず、custom_values.aml_screening_statusはFAILEDとなり、理由がcustom_values.aml_screening_errorに設定されます。ウォレットでスクリーニングするUSDTまたはUSDC（トランザクションハッシュなし）でこの値が指定されていない場合、TronのアドレスはTronで、SolanaのアドレスはSolanaでスクリーニングされます。0xアドレスは、上記6つのネットワークのうち、そのアドレスが取引を送信したことがある、またはそのトークンを保有している最初のネットワークでスクリーニングされ、いずれのネットワークでもアクティブでない場合はEthereumでスクリーニングされます。接続プロバイダーの対応範囲は異なります。LIGHTNINGには、対応する接続プロバイダーが必要です。
                          example: BASE
                subject:
                  type: object
                  description: 取引の対象者（申請者）。
                  required:
                    - vendor_data
                    - full_name
                  properties:
                    entity_type:
                      type: string
                      description: エンティティの種類：`individual`または`company`。
                    vendor_data:
                      type: string
                      description: お客様の内部ユーザー/企業識別子です。
                      example: user-12345
                    full_name:
                      type: string
                      description: 対象者の氏名。
                      example: Maria Garcia
                    first_name:
                      type: string
                      description: 対象者の名。
                    last_name:
                      type: string
                      description: 対象者の姓。
                    date_of_birth:
                      type: string
                      format: date
                      description: 生年月日（YYYY-MM-DD）。
                    address:
                      type: object
                      description: 住所オブジェクト。
                      properties:
                        country:
                          type: string
                          description: >-
                            国コード(ISO 3166-1
                            alpha-3を推奨)。当事者の`country_code`にコピーされます。
                        town:
                          type: string
                        state:
                          type: string
                        street:
                          type: string
                        post_code:
                          type: string
                    institution_details:
                      type: object
                      description: 機関の詳細（機関である対象者の場合）。
                      properties:
                        name:
                          type: string
                        code:
                          type: string
                        address:
                          type: object
                    device_context:
                      type: object
                      description: >-
                        取引時に取得されたデバイスコンテキスト。browser_familyとplatformは明示的なトップレベルのキーとして送信する必要があり、user_agentから導出されることはありません。リクエストでは、camelCaseのエイリアスであるdeviceも受け付けます。
                      properties:
                        fingerprint:
                          type: string
                          description: 一意のデバイスフィンガープリント。
                        persistent_device_id:
                          type: string
                          description: セッションをまたいで不変のデバイス識別子(v2フィンガープリントスキーマ)。
                        user_agent:
                          type: string
                          description: ブラウザまたはアプリのユーザーエージェント文字列。CamelCaseのエイリアス：userAgent。
                        browser_family:
                          type: string
                          description: >-
                            ブラウザファミリー（例：Chrome、Firefox、Safari）。明示的に送信する必要があり、user_agentからは導出されません。CamelCaseのエイリアス：browserFamily。
                        browser_version:
                          type: string
                          description: >-
                            ブラウザのバージョン文字列。明示的に送信する必要があります。CamelCaseのエイリアス：browserVersion。
                        platform:
                          type: string
                          description: >-
                            プラットフォーム識別子(web、ios、android、macos、windows、linux)。明示的に送信する必要があります。user_agentからは導出されません。
                        os_family:
                          type: string
                          description: >-
                            オペレーティングシステムのファミリー（例:
                            iOS、Android、Windows）。CamelCaseのエイリアス: osFamily。
                        os_version:
                          type: string
                          description: 'オペレーティングシステムのバージョン文字列です。CamelCaseのエイリアス: osVersion。'
                        accept_language:
                          type: string
                          description: Accept-Languageヘッダーの値。キャメルケースのエイリアス：acceptLang。
                        session_id:
                          type: string
                          description: >-
                            ユーザーの現在のセッションのセッション識別子。メタデータに保存されます。キャメルケースのエイリアスはsessionIdです。
                        session_age_ms:
                          type: number
                          description: >-
                            取引時点でのユーザーセッションの経過時間（ミリ秒）。キャメルケースのエイリアス:sessionAgeMs。
                        network_context:
                          type: object
                          description: >-
                            IPアドレスと位置情報を含むネットワークコンテキスト。トップレベルのipInfoブロックもこのオブジェクトに統合されます。
                          properties:
                            ip_address:
                              type: string
                              description: 'クライアントのIPアドレス。キャメルケースのエイリアス: ip。'
                            ip_country_code:
                              type: string
                              description: >-
                                IPアドレスの位置情報から特定された国（ISO 3166-1
                                alpha-3）。キャメルケースのエイリアス：countryCode3。
                            latitude:
                              type: number
                              description: 'IPの地理的な緯度。CamelCaseのエイリアス: lat。'
                            longitude:
                              type: number
                              description: 'IPの地理的な経度。CamelCaseのエイリアス: lon。'
                    payment_method:
                      type: object
                      description: 対象者が使用した支払い方法。
                      properties:
                        method_type:
                          type: string
                          description: >-
                            支払い方法の種類：`bank_card`、`bank_account`、`crypto_wallet`、`ewallet`、`unhosted_wallet`、`other`。
                        account_id:
                          type: string
                          description: >-
                            口座識別子（例：IBAN、ウォレットアドレス）。暗号資産のスクリーニングでは、この参加者のウォレットアドレスを指定してください。インバウンドのトランザクションハッシュのスクリーニングでは、対象者側にサービスまたは顧客の入金アドレスが必要です。アウトバウンドのスクリーニングでは、取引相手側の送金先ウォレットを使用します。bitcoinまたはLightning上の暗号資産送金では、Lightning支払いリクエスト（BOLT11インボイス、BOLT12オファー、LNURL）またはLightning
                            Addressを指定できます。Diditは、リクエストが示す受取人を口座として保存し（受取人が示されていない場合は""）、リクエストの内容をトラベルルール送金の`chain_details.lightning`に保存します。保存後の長さは最大255文字です。bitcoinまたはLightning上の暗号資産送金では、Lightning支払いリクエスト（BOLT11インボイス、BOLT12オファー、LNURL）またはLightning
                            Addressを指定できます。Diditは、リクエストが示す受取人を口座として保存し（受取人が示されていない場合は""）、リクエストの内容をトラベルルール送金の`chain_details.lightning`に保存します。保存後の長さは最大255文字です。
                        memo:
                          type: string
                          maxLength: 256
                          description: >-
                            メモ型ネットワーク（XRP、XLM、EOS、ATOM、HBAR）でウォレットの一部となる宛先タグまたはメモです。共有された1つの取引所アドレス上では、メモごとに独立した支払い方法になります。XRPでは宛先タグで、0から4294967295までの整数です（JSONの数値も受け付けます）。XLMでは最大28バイトのテキストメモ、64ビットのID、または16進数の32バイトハッシュです。EOSでは最大256バイトです。ATOMでは最大256文字です。HBARでは最大100バイトです。Bitcoin、EVM、Solana、Tron、Litecoin、Bitcoin
                            Cash、Dogecoin、Lightningのウォレットはメモを受け付けず、指定すると`400`になります。エイリアスは`destinationTag`または`destination_tag`です。
                        issuing_country:
                          type: string
                          description: 発行者の国を示すISO 3166-1 alpha-3コード。
                counterparty:
                  type: object
                  description: 取引の取引相手(任意)。
                  properties:
                    entity_type:
                      type: string
                      description: エンティティの種類：`individual`または`company`。
                    vendor_data:
                      type: string
                      description: 取引相手に対するお客様の内部識別子です。
                    full_name:
                      type: string
                      description: 取引相手の氏名。
                    first_name:
                      type: string
                    last_name:
                      type: string
                    date_of_birth:
                      type: string
                      format: date
                    address:
                      type: object
                      description: '`country`（ISO 3166-1 alpha-3）を含む住所オブジェクト。'
                    institution_details:
                      type: object
                    device_context:
                      type: object
                      description: >-
                        取引相手のデバイスコンテキストです。browser_familyとplatformは明示的なトップレベルのキーとして送信する必要があります。これらはuser_agentから導出されません。
                      properties:
                        fingerprint:
                          type: string
                          description: 一意のデバイスフィンガープリント。
                        persistent_device_id:
                          type: string
                          description: セッションをまたいで不変のデバイス識別子(v2フィンガープリントスキーマ)。
                        user_agent:
                          type: string
                          description: ブラウザまたはアプリのユーザーエージェント文字列。CamelCaseのエイリアス：userAgent。
                        browser_family:
                          type: string
                          description: >-
                            ブラウザファミリー（例：Chrome、Firefox、Safari）。明示的に送信する必要があり、user_agentからは導出されません。CamelCaseのエイリアス：browserFamily。
                        browser_version:
                          type: string
                          description: >-
                            ブラウザのバージョン文字列。明示的に送信する必要があります。CamelCaseのエイリアス：browserVersion。
                        platform:
                          type: string
                          description: >-
                            プラットフォーム識別子(web、ios、android、macos、windows、linux)。明示的に送信する必要があります。user_agentからは導出されません。
                        os_family:
                          type: string
                          description: >-
                            オペレーティングシステムのファミリー（例:
                            iOS、Android、Windows）。CamelCaseのエイリアス: osFamily。
                        os_version:
                          type: string
                          description: 'オペレーティングシステムのバージョン文字列です。CamelCaseのエイリアス: osVersion。'
                        accept_language:
                          type: string
                          description: Accept-Languageヘッダーの値。キャメルケースのエイリアス：acceptLang。
                        session_id:
                          type: string
                          description: >-
                            取引相手のセッションのセッション識別子。メタデータに保存されます。キャメルケースのエイリアスはsessionIdです。
                        session_age_ms:
                          type: number
                          description: >-
                            取引時点でのユーザーセッションの経過時間（ミリ秒）。キャメルケースのエイリアス:sessionAgeMs。
                        network_context:
                          type: object
                          description: >-
                            IPアドレスと位置情報を含むネットワークコンテキスト。トップレベルのipInfoブロックもこのオブジェクトに統合されます。
                          properties:
                            ip_address:
                              type: string
                              description: 'クライアントのIPアドレス。キャメルケースのエイリアス: ip。'
                            ip_country_code:
                              type: string
                              description: >-
                                IPアドレスの位置情報から特定された国（ISO 3166-1
                                alpha-3）。キャメルケースのエイリアス：countryCode3。
                            latitude:
                              type: number
                              description: 'IPの地理的な緯度。CamelCaseのエイリアス: lat。'
                            longitude:
                              type: number
                              description: 'IPの地理的な経度。CamelCaseのエイリアス: lon。'
                    payment_method:
                      type: object
                      description: >-
                        取引相手が使用した支払い方法。travelRule取引では、`method_type:
                        "unhosted_wallet"`を指定すると取引相手のウォレットがセルフホスト型として申告されます。この場合、送金は取引相手VASPへのルーティングをスキップして直接`UNCONFIRMED_OWNERSHIP`で作成され、（`auto_wallet_verification`が有効な場合）ウォレット所有権ウィジェットのセッションが自動発行され、取引の`action_required`ブロックで返されます。
                      properties:
                        method_type:
                          type: string
                          description: >-
                            支払い方法の種類：`bank_card`、`bank_account`、`crypto_wallet`、`ewallet`、`unhosted_wallet`、`other`。トラベルルールのためにセルフホスト型ウォレットを申告するには`unhosted_wallet`を使用します。
                        account_id:
                          type: string
                          description: >-
                            口座識別子（例：IBANまたはウォレットアドレス）。bitcoinまたはLightning上の暗号資産送金では、Lightning支払いリクエスト（BOLT11インボイス、BOLT12オファー、LNURL）またはLightning
                            Addressを指定できます。Diditは、リクエストが示す受取人を口座として保存し（受取人が示されていない場合は""）、リクエストの内容をトラベルルール送金の`chain_details.lightning`に保存します。保存後の長さは最大255文字です。bitcoinまたはLightning上の暗号資産送金では、Lightning支払いリクエスト（BOLT11インボイス、BOLT12オファー、LNURL）またはLightning
                            Addressを指定できます。Diditは、リクエストが示す受取人を口座として保存し（受取人が示されていない場合は""）、リクエストの内容をトラベルルール送金の`chain_details.lightning`に保存します。保存後の長さは最大255文字です。
                        memo:
                          type: string
                          maxLength: 256
                          description: >-
                            メモ型ネットワーク（XRP、XLM、EOS、ATOM、HBAR）でウォレットの一部となる宛先タグまたはメモです。共有された1つの取引所アドレス上では、メモごとに独立した支払い方法になります。XRPでは宛先タグで、0から4294967295までの整数です（JSONの数値も受け付けます）。XLMでは最大28バイトのテキストメモ、64ビットのID、または16進数の32バイトハッシュです。EOSでは最大256バイトです。ATOMでは最大256文字です。HBARでは最大100バイトです。Bitcoin、EVM、Solana、Tron、Litecoin、Bitcoin
                            Cash、Dogecoin、Lightningのウォレットはメモを受け付けず、指定すると`400`になります。エイリアスは`destinationTag`または`destination_tag`です。
                        issuing_country:
                          type: string
                custom_properties:
                  type: object
                  description: >-
                    取引に付与する任意のキーと値のペア。各キーは、ルール条件でフィールドパス`custom_values.<key>`を使って参照できます。
                  additionalProperties: true
                  example:
                    merchant_id: test
                    bank_name: test_2
                travel_rule_details:
                  type: object
                  description: >-
                    トラベルルールのデータ。トラベルルールが有効で、transaction_categoryがtravel_ruleの場合は、Didit自身が交換を実行します。この場合、status、protocol、required、obligations_countは無視され、originator_data、beneficiary_data、metadataが使用されます。それ以外の場合、Diditはこれらの値を受動的なトラベルルール記録として保存します。トラベルルールが有効な間は、設定したしきい値以上のアウトバウンド送金に、その規制（EU
                    TFRまたはFATF勧告16）が求める情報を含める必要があり、送信した側について確認されます。フィールドが不足している場合は、`travel_rule_details.originator_data`または`travel_rule_details.beneficiary_data`の下で400が返されます。例：「EU
                    TFR requires the originator name.」
                  required:
                    - status
                  properties:
                    status:
                      type: string
                      description: >-
                        travel_rule_detailsを送信する場合は必須です。トラベルルールの送金ステータスのいずれか（例:
                        AWAITING_COUNTERPARTY、COMPLETED、NOT_APPLICABLE）を指定します。小文字およびcamelCaseの表記、ならびに従来の値UNKNOWN、COMPLIANT、PENDING_ACTION、PENDING_COUNTERPARTY、FAILED、EXEMPTも受け付けられ、対応する値にマッピングされます。それ以外の値を指定すると400が返されます。
                    protocol:
                      type: string
                    required:
                      type: boolean
                    obligations_count:
                      type: integer
                    originator_data:
                      type: object
                      description: >-
                        送金人当事者です。フラットなフィールド、またはIVMS
                        101形式の1人の人物として指定します。承認済みのKYC認証を持つユーザーの場合、Diditは認証が保持するフィールドを認証済みの値で置き換えます（`metadata.originator_provenance`を参照）。オブジェクトである必要があり、それ以外は`400`になります。メモを使用するネットワークでは、`memo`キーで送金人ウォレットのメモまたはタグを指定します。
                    beneficiary_data:
                      type: object
                      description: >-
                        受取人の当事者情報。フラットなフィールド、またはIVMS
                        101の人物1件として指定します。オブジェクトである必要があり、それ以外の場合は`400`になります。送金をルーティングするため、Diditは`wallet_address`（空の場合は`counterparty.payment_method.account_id`から補完）、`chain`（`transaction_details.crypto_params.crypto_chain`から補完、または`currency`がサポート対象のチェーンを示す場合はそこから補完）、`name`（`counterparty.full_name`にフォールバック）、`travel_address`、`counterparty_vasp_name`、`counterparty_vasp_lei`、`counterparty_vasp_email`を読み取ります。メモ方式のネットワークでは、`memo`で受取人ウォレットのメモまたはタグを指定します。`wallet_address`と`memo`は取引相手の支払い方法より優先されます。
                    metadata:
                      type: object
                    utxo:
                      allOf:
                        - $ref: '#/components/schemas/TravelRuleUtxo'
                      description: >-
                        任意。UTXOチェーン（BTC、LTC、BCH、DOGE）のみ。取引の入力と出力です。送金人ウォレットと受取人の出力を宣言しない場合、Diditはこれらから推定します。
                    originator:
                      type: object
                      description: >-
                        IVMS
                        101の送金人ブロックです。`originatorPersons`（`naturalPerson`または`legalPerson`を1つ。法人の場合、当事者は企業になります）と`accountNumber`（ウォレットアドレス）で構成されます。`originator_data`オブジェクトが空の場合に、その値として使用されます。形式が不正なブロックには、そのパスをキーとした400が返されます（例:
                        `originator.originatorPersons`）。
                    beneficiary:
                      type: object
                      description: >-
                        IVMS
                        101の受取人ブロックです。`beneficiaryPersons`（`naturalPerson`または`legalPerson`を1つ。法人の場合、当事者は企業になります）と`accountNumber`（ウォレットアドレス）で構成されます。`beneficiary_data`オブジェクトが空の場合に、その値として使用されます。形式が不正なブロックには、そのパスをキーとした400が返されます（例:
                        `beneficiary.beneficiaryPersons`）。
                    ivms101:
                      type: object
                      description: >-
                        `originator`ブロックと`beneficiary`ブロックを1つのIVMS
                        101オブジェクトにまとめたものです（`IVMS101`も受け付けます）。トップレベルのブロックがラッパー内のブロックより優先されます。
                network_snapshot:
                  type: object
                  description: 事前に計算されたネットワークグラフのスナップショット。
                  properties:
                    nodes:
                      type: array
                      items:
                        type: object
                    edges:
                      type: array
                      items:
                        type: object
                    metrics:
                      type: object
                include_crypto_screening:
                  type: boolean
                  nullable: true
                  description: >-
                    暗号資産のブロックチェーン分析スクリーニングに対する取引ごとの上書き設定です。`true`の場合、アプリケーションのデフォルトに関係なく暗号資産スクリーニングが実行されます。`false`の場合、アプリケーションの設定で有効になっていても暗号資産スクリーニングはスキップされます。省略した場合または`null`の場合は、Consoleで設定したアプリケーションレベルのデフォルトが使用されます。暗号資産スクリーニングには、`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は取引スクリーニングを実行し、利用可能な場合は取引サマリーのエンリッチメント情報を返します。
              required:
                - transaction_id
                - transaction_category
                - transaction_details
                - subject
            examples:
              Minimal fiat withdrawal:
                summary: 法定通貨の送金(アウトバウンド)で受け付けられる最小限のペイロード
                value:
                  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
              Crypto outbound with screening:
                summary: アンホステッドウォレットへの外部への暗号資産出金（オプトインのスクリーニング）
                value:
                  transaction_id: your-txn-2026-05-17-002
                  transaction_category: finance
                  include_crypto_screening: true
                  transaction_details:
                    direction: outbound
                    amount: 0.5
                    currency: BTC
                    currency_kind: crypto
                    amount_in_default_currency: 32500
                    default_currency: USD
                    action_type: withdrawal
                  subject:
                    entity_type: individual
                    vendor_data: user-12345
                    full_name: Maria Garcia
                    payment_method:
                      method_type: crypto_wallet
                      account_id: bc1qexampleexchangewalletaddressxyz
                      issuing_country: ESP
                  counterparty:
                    entity_type: individual
                    payment_method:
                      method_type: unhosted_wallet
                      account_id: bc1qexampleexternalwalletaddressabc
              Travel Rule transfer:
                summary: トラベルルールの送金人・受取人データを含む、外部への暗号資産送金
                value:
                  transaction_id: your-txn-2026-05-17-003
                  transaction_category: travel_rule
                  transaction_details:
                    direction: outbound
                    amount: 25000
                    currency: USDT
                    currency_kind: crypto
                    action_type: transfer
                  subject:
                    entity_type: individual
                    vendor_data: user-12345
                    full_name: Maria Garcia
                    date_of_birth: '1992-03-14'
                    address:
                      country: ESP
                      town: Madrid
                      street: Calle Mayor 1
                      post_code: '28013'
                  counterparty:
                    entity_type: individual
                    full_name: John Beneficiary
                    institution_details:
                      name: Beneficiary VASP, Inc.
                      code: BVASP-US
                  travel_rule_details:
                    status: AWAITING_COUNTERPARTY
                    protocol: IVMS101
                    required: true
                    originator_data:
                      name: Maria Garcia
                    beneficiary_data:
                      name: John Beneficiary
      responses:
        '201':
          description: >-
            取引が送信され、モニタリングされています。本文は取引の完全な詳細（`GET
            /v3/transactions/{transaction_id}/`と同じ形式）で、すでに適用されたルールの結果を反映しています。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionDetail'
              examples:
                Approved with no rule hits:
                  value:
                    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
                Flagged for review:
                  value:
                    uuid: abcdef12-3456-4890-abcd-ef1234567891
                    environment: live
                    transaction_number: 4124
                    txn_id: your-txn-2026-05-17-002
                    txn_date: '2026-05-17T08:42:00Z'
                    zone_id: Europe/Madrid
                    transaction_type: finance
                    action_type: withdrawal
                    direction: OUTBOUND
                    status: IN_REVIEW
                    source: LIVE
                    amount: '0.5'
                    currency: BTC
                    currency_type: crypto
                    amount_in_default_currency: '32500'
                    default_currency_code: USD
                    preferred_currency_amount: '32500'
                    preferred_currency_code: USD
                    payment_details: Withdrawal to crypto wallet
                    payment_txn_id: null
                    score: 78
                    severity: HIGH
                    decision_reason_code: WALLET_HIGH_RISK
                    decision_reason_label: Destination wallet flagged as high risk
                    vendor_data: user-12345
                    metadata:
                      subject:
                        entity_type: individual
                        vendor_data: user-12345
                        full_name: Maria Garcia
                        address: {}
                        institution_details: {}
                        device_context: {}
                      counterparty: {}
                    props:
                      order_id: ord-9988
                    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: []
                    alerts:
                      - uuid: a7b8c9d0-1234-4abc-9def-567890abcdef
                        title: Destination wallet flagged as high risk
                        description: Provider risk score exceeded the configured threshold.
                        severity: HIGH
                        status: OPEN
                        source: RULE
                        metadata: {}
                        created_at: '2026-05-17T08:42:12Z'
                        due_at: null
                    rule_runs:
                      - uuid: e5f6a7b8-9012-4cde-af01-23456789abcd
                        rule: f6a7b8c9-0123-4def-b012-3456789abcde
                        rule_title: High-risk wallet screening
                        rule_description: null
                        rule_category: crypto
                        matched: true
                        is_test: false
                        mode: ACTIVE
                        severity: HIGH
                        score_delta: 78
                        status_target: IN_REVIEW
                        action_summary: score +78; change_status:IN_REVIEW
                        metadata: {}
                        created_at: '2026-05-17T08:42:12Z'
                    provider_results: []
                    travel_rule: null
                    network_snapshot: null
                    remediation: null
                    action_required: null
                    cost_breakdown: null
        '400':
          description: バリデーションに失敗しました（必須フィールドの欠落、`transaction_id`の重複、不明なenum値、無効な通貨など）。
          content:
            application/json:
              examples:
                Missing required field:
                  value:
                    transaction_details:
                      amount:
                        - This field is required.
                Duplicate transaction_id:
                  value:
                    transaction_id:
                      - A transaction with this transaction_id already exists.
                Invalid category:
                  value:
                    non_field_errors:
                      - Unsupported transaction category.
                Missing subject identity:
                  value:
                    subject:
                      - subject.vendor_data and subject.full_name are required.
                Blocklisted participant:
                  value:
                    vendor_data:
                      - >-
                        The individual 'user-12345' is in the blocklist and
                        cannot participate in transactions.
        '403':
          description: >-
            APIキーがない、無効、または失効しているか、このアプリケーションの取引を送信する権限がキーにありません。キーがない場合は`403`を返し、誤った、失効した、または期限切れのキーの場合は`401`を返します。
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
        '409':
          description: >-
            このリクエストの処理中に、同じ`transaction_id`を持つ別のリクエストが取引を作成したため、同時に送信された2件のうち1件のみが成功します。再送信せずに、既存の取引を参照してください。
          content:
            application/json:
              examples:
                Concurrent duplicate:
                  value:
                    detail: A transaction with this transaction_id already exists.
        '429':
          description: レート制限を超過しました。間隔を空け、`Retry-After`で示された時間が経過してから再試行してください。
          content:
            application/json:
              examples:
                Throttled:
                  value:
                    detail: Request was throttled. Expected available in 30 seconds.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            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"
                }
              }'
        - lang: python
          label: Python
          source: |-
            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)
        - lang: javascript
          label: Node.js
          source: |-
            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);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.Create(ctx, didit.TransactionsCreateParams{\n\tTransactionID:       \"your-txn-2026-05-17-001\",\n\tTransactionCategory: \"finance\",\n\tTransactionDetails: didit.TransactionsCreateParamsTransactionDetails{\n\t\tDirection:  \"outbound\",\n\t\tAmount:     1500.0,\n\t\tCurrency:   \"EUR\",\n\t\tActionType: didit.String(\"withdrawal\"),\n\t},\n\tSubject: didit.TransactionsCreateParamsSubject{\n\t\tEntityType: didit.String(\"individual\"),\n\t\tVendorData: \"user-12345\",\n\t\tFullName:   \"Maria Garcia\",\n\t},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            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);
        - lang: php
          label: PHP
          source: |-
            <?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());
        - lang: ruby
          label: Ruby
          source: |-
            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_h
        - lang: csharp
          label: .NET
          source: >-
            using 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));
components:
  schemas:
    TravelRuleUtxo:
      type: object
      description: >-
        UTXO送金(BTC、LTC、BCH、DOGE)のインプットとアウトプットです。これらのチェーンでのみ受け付けられ、それ以外のチェーンでは`400`になります。Diditはこれらから、送金人ウォレット(宣言されたもの、なければ最も多く拠出したインプットアドレス)と受取人アウトプット(宣言されたもの、なければおつりとしてインプットアドレスに戻していない唯一のアウトプット、それもなければ送金額を支払っている唯一のアウトプット)を推定します。結果は送金の`chain_details`に含まれます。
      required:
        - outputs
      properties:
        inputs:
          type: array
          maxItems: 1000
          items:
            $ref: '#/components/schemas/TravelRuleUtxoEntry'
          description: 任意。入力がない場合、送金人は推定されず、おつりの出力も認識されません。
        outputs:
          type: array
          minItems: 1
          maxItems: 1000
          items:
            $ref: '#/components/schemas/TravelRuleUtxoEntry'
    TransactionDetail:
      type: object
      description: >-
        1件の取引に関する完全なモニタリング記録。`GET /v3/transactions/{transaction_id}/`および`POST
        /v3/transactions/`から返されます。
      properties:
        uuid:
          type: string
          format: uuid
          description: Diditの安定した取引識別子です。後続の呼び出しで`{transaction_id}`として使用します。
        environment:
          type: string
          enum:
            - live
            - sandbox
          description: >-
            取引を所有するアプリケーションの環境。`sandbox`の取引は保存されますが、評価、スクリーニング、通知、請求は一切行われません。そのため、空の`rule_runs`は「未評価」を意味します。
        transaction_number:
          type: integer
          description: 'Consoleに表示される、アプリケーション単位の取引の連番（例: `4123`）。'
        txn_id:
          type: string
          description: 作成時に指定した`transaction_id`（最大128文字）。アプリケーションごとに一意です。
        txn_date:
          type: string
          format: date-time
          description: 取引が発生した日時（`transaction_at`の値。デフォルトは送信日時）。
        zone_id:
          type: string
          nullable: true
          description: 作成時に指定されたIANAタイムゾーン識別子。
        transaction_type:
          type: string
          description: >-
            保存されている最上位カテゴリー:
            `finance`、`kyc`、`travelRule`、`userPlatformEvent`、`gamblingBet`、`gamblingLimitChange`、`gamblingBonusChange`、`auditTrailEvent`。複数語の値は、snake_caseで送信した場合でもcamelCaseで返される点に注意してください。
        action_type:
          type: string
          description: >-
            カテゴリ内のサブタイプ（例:
            `deposit`、`withdrawal`、`transfer`）。指定しない場合はカテゴリがデフォルトになります。
        direction:
          type: string
          enum:
            - INBOUND
            - OUTBOUND
          description: >-
            対象者から見た方向です。送信時の大文字・小文字にかかわらず大文字で保存されます（入力では`in`/`out`/`inbound`/`outbound`を受け付けます）。
        status:
          type: string
          enum:
            - APPROVED
            - IN_REVIEW
            - DECLINED
            - AWAITING_USER
          description: >-
            現在のモニタリング判定。取引は`APPROVED`で作成され、ルールによって同期的に`IN_REVIEW`/`DECLINED`に変更される場合があります。
        source:
          type: string
          enum:
            - LIVE
            - IMPORTED
          description: レコードの発生元：APIまたはSDKで送信された取引は`LIVE`、コンソールのインポートで読み込まれた取引は`IMPORTED`。
        amount:
          type: string
          description: >-
            末尾のゼロを除去した10進数文字列で表した取引金額（例:
            `"1500"`、`"0.5"`、`"0.123456789012345678"`）。小数点以下最大18桁です。
        currency:
          type: string
          description: >-
            `amount`の通貨コード。ISO 4217の任意のアルファベットコード（例:
            `EUR`、`USD`、`NGN`）と暗号資産シンボル（例:
            `BTC`）を受け付けます。現在流通しているコードを推奨します。受け付けられるすべてのコードに為替レートがあるわけではありません。コードに為替レートがない場合（たとえばISOの会計単位`XSU`や、Diditが価格を付けていない暗号資産シンボル）、自動換算は失敗し、リクエストで換算済みの`amount_in_default_currency`を指定していない限り`preferred_currency_amount`はnullで返されます。
        currency_type:
          type: string
          nullable: true
          description: '`currency_kind`で送信されたとおりの`fiat`または`crypto`。'
        amount_in_default_currency:
          type: string
          nullable: true
          description: 指定された事前換算済みの金額。末尾のゼロを除いた10進数の文字列です。
        default_currency_code:
          type: string
          nullable: true
        preferred_currency_amount:
          type: string
          nullable: true
          description: 利用可能な場合に、アプリケーションの優先通貨に換算した`amount`です。
        preferred_currency_code:
          type: string
          nullable: true
        payment_details:
          type: string
          nullable: true
          description: 送信内容に含まれる自由記述の支払い参照情報またはメモ。
        payment_txn_id:
          type: string
          nullable: true
          description: '`payment_reference_id`から取得した外部決済システムの参照番号です（例: ブロックチェーンの取引ハッシュ）。'
        score:
          type: integer
          description: ルールによって累積されたリスクスコア(通常0~100)。値が高いほどリスクが高くなります。
        severity:
          type: string
          nullable: true
          enum:
            - UNKNOWN
            - LOW
            - MEDIUM
            - HIGH
            - CRITICAL
          description: >-
            ルールまたはプロバイダーが設定するカテゴリ別のリスク重大度（`UNKNOWN`、`LOW`、`MEDIUM`、`HIGH`、`CRITICAL`）。いずれかによって設定されるまでは`null`です。
        decision_reason_code:
          type: string
          nullable: true
          description: 現在の`status`の機械可読な理由。
        decision_reason_label:
          type: string
          nullable: true
          description: '`decision_reason_code`の人が読めるラベル。'
        vendor_data:
          type: string
          nullable: true
          description: 申請者の`vendor_data`の便宜上のコピー。
        metadata:
          type: object
          description: 作成時に送信された`subject`および`counterparty`ペイロードのスナップショット。
        props:
          type: object
          description: >-
            作成時に指定した`custom_properties`です。各キーはルールの条件内で`custom_values.<key>`として参照できます。
        tags:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              name:
                type: string
              color:
                type: string
              description:
                type: string
                nullable: true
              source:
                type: string
                enum:
                  - didit
                  - custom
                description: タグがDiditのプリセットかカスタムタグか。
          description: 取引に付与されたタグ(手動またはルールによる)。
        parties:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              role:
                type: string
                enum:
                  - APPLICANT
                  - REMITTER
                  - BENEFICIARY
                  - COUNTERPARTY
                description: 関係者の役割。作成エンドポイントは`APPLICANT`（対象者）と`COUNTERPARTY`を割り当てます。
              entity_type:
                type: string
                enum:
                  - individual
                  - company
                  - external
                  - unhostedWallet
              kind:
                type: string
                enum:
                  - USER
                  - BUSINESS
                  - EXTERNAL
                description: >-
                  `USER`/`BUSINESS`の当事者は、`vendor_data`を介してDiditが所有するエンティティに紐付きます。`EXTERNAL`の当事者には、背後にDiditのエンティティがありません。
              vendor_data:
                type: string
                nullable: true
                description: お客様の内部ユーザー/企業識別子です。
              full_name:
                type: string
                nullable: true
              first_name:
                type: string
                nullable: true
              last_name:
                type: string
                nullable: true
              country_code:
                type: string
                nullable: true
                description: 送信された`address.country`から取得した国コード(通常はISO 3166-1 alpha-3)。
              dob:
                type: string
                format: date
                nullable: true
                description: 送信された`date_of_birth`の生年月日。
              address:
                type: object
                description: 送信されたとおりの住所オブジェクト。省略された場合は`{}`です。
              institution_info:
                type: object
                description: 送信されたとおりの機関の詳細。省略した場合は`{}`です。
              device:
                type: object
                description: >-
                  正規化されたデバイスコンテキスト。IPが指定された場合は、network_context配下にサーバー側のIPエンリッチメント（位置情報、VPN/データセンターのフラグ）が含まれます。
                properties:
                  fingerprint:
                    type: string
                    description: 一意のデバイスフィンガープリント。
                  persistent_device_id:
                    type: string
                    description: セッションをまたいで不変のデバイス識別子(v2フィンガープリントスキーマ)。
                  user_agent:
                    type: string
                    description: ブラウザまたはアプリのユーザーエージェント文字列。
                  browser_family:
                    type: string
                    description: ブラウザーファミリー（例：Chrome、Firefox、Safari）。
                  browser_version:
                    type: string
                    description: ブラウザのバージョン文字列。
                  platform:
                    type: string
                    description: プラットフォーム識別子(web、ios、android、macos、windows、linux)。
                  os_family:
                    type: string
                    description: 'オペレーティングシステムのファミリー（例: iOS、Android、Windows）。'
                  os_version:
                    type: string
                    description: オペレーティングシステムのバージョン文字列です。
                  accept_language:
                    type: string
                    description: Accept-Languageヘッダーの値。
                  session_id:
                    type: string
                    description: セッション識別子（メタデータに保存）。
                  session_age_ms:
                    type: number
                    description: セッションの経過時間（ミリ秒）。
                  network_context:
                    type: object
                    description: IPアドレスと位置情報を含むネットワークコンテキスト。
                    properties:
                      ip_address:
                        type: string
                        description: クライアントのIPアドレス。
                      ip_country_code:
                        type: string
                        description: IPアドレスの位置情報から特定された国（ISO 3166-1 alpha-3）。
                      latitude:
                        type: number
                        description: IPの地理的な緯度。
                      longitude:
                        type: number
                        description: IPの地理的な経度。
              external_party_snapshot:
                type: object
                nullable: true
                description: >-
                  `EXTERNAL`当事者の当事者データの固定コピー。当事者がDiditのユーザーまたは企業にリンクされている間は`null`です。
          description: 取引の当事者（申請者、取引相手）。
        payment_methods:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              payment_method_type:
                type: string
                enum:
                  - bank_card
                  - bank_account
                  - e_wallet
                  - crypto_wallet
                  - unhosted_wallet
                  - other
              label:
                type: string
                nullable: true
              fingerprint:
                type: string
                nullable: true
                description: >-
                  `type:account_id:issuing_country`に対するSHA-256。同一の手段の再利用を関連付けるための安定した識別子です。
              account_id:
                type: string
                nullable: true
                description: 口座識別子（IBAN、ウォレットアドレス、カードトークンなど）。
              issuing_country:
                type: string
                nullable: true
              owner_kind:
                type: string
                enum:
                  - USER
                  - BUSINESS
                  - EXTERNAL
              vendor_data:
                type: string
                nullable: true
                description: 所有するユーザー/企業に対するお客様の識別子です。
              owner_name:
                type: string
                nullable: true
              institution_info:
                type: object
              details:
                type: object
                description: 送信されたままの生の`payment_method`オブジェクト。
              external_owner_snapshot:
                type: object
                nullable: true
              role:
                type: string
                enum:
                  - SOURCE
                  - DESTINATION
                  - FUNDING
                  - BENEFICIARY
                description: >-
                  この手段が取引でどのように使われたか。作成エンドポイントは方向に基づいて`SOURCE`/`DESTINATION`を割り当てます（送信：対象者
                  = SOURCE、受信：対象者 = DESTINATION）。
          description: 取引に紐づく支払い方法。
        documents:
          type: array
          description: コンソールから取引に添付されたファイル。ない場合は`[]`です。
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              label:
                type: string
                nullable: true
              note:
                type: string
                nullable: true
              uploaded_by:
                type: string
                nullable: true
              created_at:
                type: string
                format: date-time
              files:
                type: array
                items:
                  type: object
                  properties:
                    uuid:
                      type: string
                      format: uuid
                    file_url:
                      type: string
                      format: uri
                      nullable: true
                      description: 有効期間の短い署名付きダウンロードURL。保存せず、必要なときに取得してください。
                    original_filename:
                      type: string
                      nullable: true
                    file_size:
                      type: integer
                      nullable: true
        activities:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              activity_type:
                type: string
                description: >-
                  例：`TRANSACTION_CREATED`、`TRANSACTION_NOTE_ADDED`、`TRANSACTION_STATUS_CHANGED`。
              source:
                type: string
              status:
                type: string
                nullable: true
              title:
                type: string
                nullable: true
              description:
                type: string
                nullable: true
              metadata:
                type: object
              occurred_at:
                type: string
                format: date-time
          description: アクティビティログのエントリ（作成、メモ、手動レビュー、ステータスの変更）。
        alerts:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              title:
                type: string
              description:
                type: string
                nullable: true
              severity:
                type: string
                enum:
                  - UNKNOWN
                  - LOW
                  - MEDIUM
                  - HIGH
                  - CRITICAL
              status:
                type: string
                enum:
                  - OPEN
                  - INVESTIGATING
                  - AWAITING_USER
                  - PENDING_SAR
                  - SAR_FILED
                  - RESOLVED
                  - DISMISSED
              source:
                type: string
                enum:
                  - RULE
                  - PROVIDER
                  - MANUAL
              metadata:
                type: object
              created_at:
                type: string
                format: date-time
              due_at:
                type: string
                format: date-time
                nullable: true
          description: 現在は常に空です。未対応のアラートとは、ステータスが`IN_REVIEW`または`AWAITING_USER`の取引です。
        rule_runs:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              rule:
                type: string
                format: uuid
                description: 実行されたルールのUUID。
              rule_title:
                type: string
              rule_description:
                type: string
                nullable: true
              rule_category:
                type: string
              matched:
                type: boolean
                description: >-
                  ルールの条件がこの取引に一致したかどうか。実行記録は一致したルールについてのみ残るため、本番の評価では常に`true`になります。
              is_test:
                type: boolean
                description: ルールがTESTモードで実行された場合はtrue（ステータス/スコアには影響しません）。
              mode:
                type: string
                enum:
                  - ACTIVE
                  - DISABLED
                  - TEST
              severity:
                type: string
                nullable: true
              score_delta:
                type: integer
                description: このルールの`add_score`アクションによって加算されたスコア。
              status_target:
                type: string
                nullable: true
                description: '`change_status`アクションで設定されたステータス（設定された場合）。'
              action_summary:
                type: string
                nullable: true
                description: >-
                  ルールが実行したアクションの概要で、`; `で連結されます（例：`score +30;
                  change_status:IN_REVIEW;
                  add_tag:high_risk_country`）。構成要素：`score
                  +N`、`change_status:<STATUS>`、`add_tag:<name>`、`add_note`、`add_to_list`、`open_case`。ルールがアクションを実行しなかった場合は`null`です。
              metadata:
                type: object
                description: >-
                  評価の詳細:`scope_match`、`conditions[]`、`aggregations[]`。各条件エントリには、`field`、`operator`、`expected_value`、取引から読み取った`current_value`、`matched`、`group_index`、`group_logic`が含まれます。各集計エントリ(velocity
                  / count /
                  sum)には、`metric`、`field`、`operator`、`expected_value`、集計の評価結果である`computed_value`、`window`、`filters`、`matched`、`sample_references`が含まれます。遅延された非同期集計では`computed_value:
                  null`および`deferred:
                  true`となります。ネストされた条件グループは、`operator`が`any_of`または`all_of`で`field`がnullの1つの`conditions[]`エントリであり、メンバーの結果はそのエントリ自身の`conditions`の下に格納されます。
              created_at:
                type: string
                format: date-time
          description: ルールごとの実行結果です。どのルールが発動し、スコアにどのような影響を与えたかを示します。
        provider_results:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              provider:
                type: string
              result_type:
                type: string
                enum:
                  - FIAT_MONITORING
                  - WALLET_SCREENING
                  - TRANSACTION_SCREENING
                  - TRAVEL_RULE
                  - NETWORK_GRAPH
                  - CUSTOM
              status:
                type: string
              severity:
                type: string
                nullable: true
              score:
                type: integer
              summary:
                type: string
                nullable: true
              payload:
                type: object
                description: プロバイダーの生のレスポンスペイロード。
              created_at:
                type: string
                format: date-time
          description: プロバイダーの生のペイロード（AMLスクリーニング、ブロックチェーン分析など）。
        travel_rule:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/TransactionTravelRule'
          description: >-
            トラベルルールの送金またはチェック。`travel_rule_details`が送信された場合に設定されるほか、トラベルルールが有効で、取引が`transaction_category:
            travelRule`で作成された場合にも設定されます（`travel_rule_details`がなくても、Didit自身が交換を開始します）。送金やチェックが存在しない場合は`null`です。インバウンド送金では、ウォレットの所有権が確認されるまで、取引相手の`originator_data`と`beneficiary_data`はマスクされたまま（`data_masked:
            true`）になります。
        network_snapshot:
          type: object
          nullable: true
          description: >-
            ルールエンジンが使用する、関連する取引と当事者のグラフスナップショット。取引とともに送信された`network_snapshot`、またはAMLウォレットスクリーニングが成功した際にDiditが構築するグラフ(送信されたものを置き換えます)のいずれかです。どちらも存在しない場合は`null`です。
          properties:
            uuid:
              type: string
              format: uuid
            nodes:
              type: array
              items:
                type: object
            edges:
              type: array
              items:
                type: object
            metrics:
              type: object
        remediation:
          type: object
          nullable: true
          description: >-
            再検証が必要な場合にユーザーに提示される是正用のセッションです。正規のブロックである`action_required`に置き換えられました。後方互換性のために残されています。
          properties:
            session_id:
              type: string
            session_token:
              type: string
            url:
              type: string
              format: uri
            status:
              type: string
        action_required:
          type: object
          nullable: true
          description: >-
            この取引を完了するために必要な保留中のエンドユーザーアクション。存在しない場合はnull。Didit
            SDKはデフォルトでこのアクションを自動的に起動し、完了時に取引を更新します。`type`で区別される2つのバリアントがあります。`verification_session`（ルールのアクションによって作成されたホスト型認証セッション）と`wallet_ownership`（ウォレット管理の証明が必要なトラベルルール送金のために自動発行されるウォレット所有権ウィジェットセッションで、トラベルルール設定の`auto_wallet_verification`によって制御されます）です。両方が該当しうる場合は、トラベルルールの交換をブロックするため`wallet_ownership`が優先されます。
          oneOf:
            - $ref: '#/components/schemas/TransactionVerificationSessionAction'
            - $ref: '#/components/schemas/TransactionWalletOwnershipAction'
          discriminator:
            propertyName: type
            mapping:
              verification_session: '#/components/schemas/TransactionVerificationSessionAction'
              wallet_ownership: '#/components/schemas/TransactionWalletOwnershipAction'
        cost_breakdown:
          type: object
          nullable: true
          description: >-
            この取引の費用。`total_price`と`items`で構成され、itemsは請求ごとに1件で、それぞれ`usage_type`、`price`、`details`、`created_at`を含みます。同じ取引を再スクリーニングすると新しい項目になります。
    TravelRuleUtxoEntry:
      type: object
      description: UTXO取引の入力または出力1件。チェーンに記録されたとおりの内容です。
      required:
        - address
      properties:
        address:
          type: string
          maxLength: 128
        amount:
          type: string
          nullable: true
          description: その通貨自体の単位（satoshiではなくBTC）での10進数文字列。任意。
          example: '0.0125'
        txid:
          type: string
          maxLength: 128
          description: 任意。入力が使用する取引です。
        vout:
          type: integer
          nullable: true
          minimum: 0
          description: 任意。入力が使用する出力のインデックスです。
    TransactionTravelRule:
      type: object
      description: >-
        取引のトラベルルール送金です。`GET /v3/transactions/{transaction_id}/`、`POST
        /v3/transactions/`の`201`、および`GET
        /v3/transactions/`の各行で返されます。`direction`、`rail`、`counterparty_vasp`、`delivery`、`discovery`、`reason`、`next_actions`は`PATCH
        /v3/transactions/{transaction_id}/travel-rule/`と同じ形式のため、取引を1回読み取るだけで、送金が停滞している理由と、先へ進めるための操作がわかります。
      properties:
        uuid:
          type: string
          format: uuid
        status:
          type: string
        protocol:
          type: string
          nullable: true
        required:
          type: boolean
        obligations_count:
          type: integer
        originator_data:
          type: object
          description: 送金人当事者です。受信する送金の場合、取引相手の値は所有権が確認されるまでマスクされます。
        beneficiary_data:
          type: object
          description: 受取人の当事者情報。受信側の送金では、所有権が確認されるまで取引相手の値はマスクされます。
        name_match:
          type: object
          nullable: true
          description: 送金の判定を決めた氏名比較(スコアと厳格度)です。比較が実行されるまではnullです。比較された名前は当事者とともにマスクされます。
        data_match:
          $ref: '#/components/schemas/TravelRuleDataMatch'
        mismatched_fields:
          type: array
          items:
            type: string
          description: '`data_match.mismatched_fields`のショートカット。相違がない場合は空です。'
        data_unmasked:
          $ref: '#/components/schemas/TravelRuleDataUnmasked'
        data_masked:
          type: boolean
          description: このレスポンスで取引相手の個人データがマスクされている間はtrueです。
        metadata:
          type: object
        direction:
          type: string
          enum:
            - INBOUND
            - OUTBOUND
          description: この送金がやり取りのどちら側にあたるか。
        rail:
          type: string
          nullable: true
          description: >-
            送金に使われたレール:
            `INTERNAL`、`TRP`、`GTR`、`TRUST`、`VERIFYVASP`、`SYGNA`または`EMAIL`（サンドボックスのアプリケーションでDidit
            Test VASPが応答した場合は`TEST_VASP`）。レールが選択されるまでは`null`です。
        counterparty_vasp:
          type: object
          nullable: true
          properties:
            name:
              type: string
            lei:
              type: string
            dd_score:
              type: integer
              description: 0から100までのデューデリジェンススコアで、値が高いほど良好です。VASPディレクトリと同じ尺度です。
            dd_score_breakdown:
              type: object
              description: >-
                dd_scoreへのコンポーネントごとの寄与。VASPディレクトリと同様に、コンポーネント（jurisdiction、verification、protocol、lei、history、essentials、responsiveness）ごとに1つのオブジェクトがあり、それぞれ{points,
                max, reason, detail}を含みます。取引相手が評価されるまでは{}です。
              additionalProperties:
                type: object
                properties:
                  points:
                    type: number
                    description: このコンポーネントに付与されるポイント。
                  max:
                    type: integer
                    description: このコンポーネントが付与できる最大ポイントです。
                  reason:
                    type: string
                    description: コンポーネントの判定を示す機械可読コード。
                  detail:
                    type: string
                    description: 付与されたポイントの理由を示す、人が読める形式の説明。
            dd_assessed_at:
              type: string
              format: date-time
              nullable: true
              description: デューデリジェンス評価が最後に実行された日時。取引相手が評価されるまではnull。
          description: 取引相手のディレクトリエントリ。送金に紐付けられたものがない場合は`null`です。
        delivery:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/TravelRuleDelivery'
          description: >-
            この送金が他の当事者に送信する義務を負う最新のメッセージ。一度も義務が生じていない場合（例:
            `threshold_amount`未満の場合や、申告済みのセルフホスト型ウォレットの場合）は`null`です。
        discovery:
          type: array
          description: >-
            Diditが取引相手をどのように探索したかを示します。実行されたステップごとに1エントリです。受信送金など、探索が実行されなかった場合は空です。
          items:
            $ref: '#/components/schemas/TravelRuleDiscoveryStep'
        reason:
          type: string
          description: >-
            `COUNTERPARTY_VASP_NOT_FOUND`または`COUNTERPARTY_VASP_NOT_REACHABLE`の送金が停止している理由です。その他のステータスでは`""`です。`COUNTERPARTY_VASP_NOT_REACHABLE`の場合に限り、配信の失敗がまず理由を決定します：`email_undeliverable`（メールプロバイダーがコンプライアンスメールを拒否し、試行できるアドレスが残っていない。送信時、リマインダー時、または後から報告された恒久的なバウンスのいずれか）または`delivery_failed`（配信中のレールが完全に失敗した。ネットワークレールがメッセージを拒否したか再試行回数を使い切った、`TRP`のIDホストが応答しなかった、または取引相手の`TRP`ホストが照会を受け付けなかった）。それ以外の場合は`discovery`トレースが理由を決定します：`awaiting_end_user`（Diditが到達できる取引相手を指定したステップがない）、`directory_match_no_route`（ステップが経路のないディレクトリ上のVASPを指定した）、`picked_member_without_proven_wallet`（エンドユーザーが、ウォレットの管理を証明していないDiditの顧客を選択した）、またはトレースが他の理由を示さない場合は`no_directory_match`です。再送すると送金が先に進むため、理由はクリアされます。[送金が停止する理由](/ja/transaction-monitoring/travel-rule#送金が停止している理由)を参照してください。
        next_actions:
          type: array
          description: >-
            送金を先に進めるためのアクションです。`COUNTERPARTY_VASP_NOT_FOUND`または`COUNTERPARTY_VASP_NOT_REACHABLE`以外のステータスでは`[]`です。`email_undeliverable`では`update_compliance_email`、次に`resend`が提示されます。`delivery_failed`では`resend`が提示されます。検出に関する理由では`select_counterparty_vasp`、`declare_self_hosted`、`add_vasp_hint`、`resend`が提示されます。
          items:
            $ref: '#/components/schemas/TravelRuleNextAction'
        chain_details:
          $ref: '#/components/schemas/TravelRuleChainDetails'
    TransactionVerificationSessionAction:
      title: Verification session
      type: object
      properties:
        type:
          type: string
          enum:
            - verification_session
        url:
          type: string
          format: uri
          description: エンドユーザー向けに開くホスト型検証URLです。
        session_id:
          type: string
          format: uuid
          description: 認証セッションID。
        session_token:
          type: string
          description: セッショントークン。モバイルSDKがフローをネイティブに起動する際に使用します。
        status:
          type: string
          description: 認証セッションのステータス。
      required:
        - type
        - url
    TransactionWalletOwnershipAction:
      title: Wallet ownership
      type: object
      properties:
        type:
          type: string
          enum:
            - wallet_ownership
        url:
          type: string
          format: uri
          description: >-
            ホスト型ウォレット所有権ウィジェットのURLです。実際のブラウザ画面で開いてください。モバイルではSFSafariViewControllerまたはChrome
            Custom Tabを使用し、埋め込みWebViewは決して使用しないでください。
        widget_session_id:
          type: string
          format: uuid
          description: ウォレット所有権ウィジェットのセッションID。
        expires_at:
          type: string
          format: date-time
          description: ウィジェットセッションの有効期限。
      required:
        - type
        - url
    TravelRuleDataMatch:
      type: object
      nullable: true
      description: >-
        送金の当事者データと、相手側がウォレット保有者について把握している情報とのフィールドごとの比較。フィールド名と結果のみを示し、値は一切含まないため、取引相手のデータがマスクされている間も読み取ることができます。比較が実行されるまではnullです。
      properties:
        matched:
          type: boolean
          description: 比較したフィールドに差異がない場合はtrue。
        mismatched_fields:
          type: array
          items:
            type: string
            enum:
              - name
              - date_of_birth
              - address
              - account
          description: 差異のあるフィールドです。
        fields:
          type: object
          description: >-
            当事者のエンティティ種別について比較されたフィールドごとに1エントリー（`name`、`date_of_birth`、`address`、`account`。企業には`date_of_birth`はありません）。
          additionalProperties:
            type: object
            properties:
              result:
                type: string
                enum:
                  - matched
                  - mismatched
                  - not_compared
                description: ルールが`NONE`の場合、またはいずれかの側にそのフィールドの値がない場合は`not_compared`。
              strictness:
                type: string
                enum:
                  - NONE
                  - STRICT
                  - CONTAINS
                  - DEFAULT
                  - FUZZY
    TravelRuleDataUnmasked:
      type: object
      nullable: true
      description: 取引相手のデータのマスクが解除された時点の監査記録です。データがまだマスクされている間、および外部への送金の場合はnullです。
      properties:
        at:
          type: string
          format: date-time
        reason:
          type: string
          enum:
            - ownership_confirmed
            - wallet_proof
            - address_book_match
            - own_verified_wallet
            - inquiry_approved
            - known_payment_method
            - travel_address
          description: >-
            所有を確認した根拠:
            ownership_confirmed（コンソールまたはAPIを通じたお客様による確認）、wallet_proof（ウィジェットでのウォレット証明、またはINTERNALの受信送金。作成時に設定されます）、address_book_match（検証済みのアドレス帳ウォレット）、own_verified_wallet（ユーザー自身の検証済みウォレット）、inquiry_approved（受信したTRP照会、またはGTRもしくはSygnaメッセージをお客様が承認したこと）、known_payment_method（ユーザーがすでに支払いに使用したウォレット）、travel_address（ウォレットごとのトラベルアドレスがそのウォレットを指定したこと）のいずれかです。
        actor:
          type: string
          description: 確認した主体：コンソールユーザーのメールアドレス、またはAPIキーのラベル。自動判定の場合は空欄です。
    TravelRuleDelivery:
      type: object
      description: >-
        移転が相手側に送るべき最新メッセージの状況です。Diditは、移転を作成または変更したリクエストがレスポンスを返した後に取引相手に連絡するため、このオブジェクトはそのメッセージが届いたかどうかを示します。キュー待ち、送信中、エラー後の再試行待ち、配信済み、または失敗のいずれかです。ネットワークが回復する可能性のある失敗（時間内に応答がない、接続の失敗、HTTP
        `408`、`429`、`5xx`）は、30秒後、2分後、10分後、30分後、1時間後に再試行されます。最初のメッセージ（`kind:
        SEND`）が、ネットワークに拒否された、または6回目の試行も失敗したために最終的に失敗した場合、移転は`COUNTERPARTY_VASP_NOT_REACHABLE`に移行し、その`timeline`に`last_error`が記録されます。それ以外のメッセージが最終的に失敗した場合は、`timeline`に記録されます。やり取りそのものについては、引き続き移転の`status`が信頼できる情報源です。
      required:
        - kind
        - status
        - rail
        - attempts
        - last_error
        - next_attempt_at
        - delivered_at
      properties:
        kind:
          type: string
          enum:
            - SEND
            - ANSWER
            - TXID
            - CANCEL
            - POLL
          description: >-
            メッセージが運ぶ内容です。`SEND`:
            送金における取引相手への最初のメッセージです（送信。経路は送信時に選択されます）。`ANSWER`:
            お客様の承認または拒否で、問い合わせてきたネットワークに返す必要があります（受信）。`TXID`:
            お客様が送金を完了した後の、オンチェーンの取引ハッシュです。`CANCEL`:
            お客様が送金をキャンセルした後の、キャンセル通知です。`POLL`:
            ステータス照会を提供するネットワークへの照会で、送金が取引相手を待っている間、5分ごとに繰り返されます。
        status:
          type: string
          enum:
            - QUEUED
            - SENDING
            - RETRYING
            - DELIVERED
            - FAILED
          description: >-
            `QUEUED`：送信待ちです。`SENDING`：送信を試行中です。`RETRYING`：試行が失敗し、次の試行は`next_attempt_at`に実行されます。`DELIVERED`：相手側がメッセージを受け取りました。`FAILED`：相手側がメッセージを拒否したか、最後の試行が失敗しました。
        rail:
          type: string
          enum:
            - INTERNAL
            - TRP
            - GTR
            - TRUST
            - VERIFYVASP
            - SYGNA
            - EMAIL
            - ''
          description: メッセージを運ぶレール。最初のメッセージについてDiditがレールを選択するまでは空です。
        attempts:
          type: integer
          minimum: 0
          description: このメッセージでこれまでに行われた試行回数。ステータスポーリング以外のメッセージは最大6回まで試行されます。
        last_error:
          type: string
          description: >-
            最後の試行で発生した失敗の種類です。失敗がない場合は`""`です。例：`email undeliverable`、`trp
            identity endpoint unreachable`、`trp transfer inquiry delivery
            failed`。取引相手自身の回答が含まれることはなく、その回答は送金の`timeline`に残ります。

            GTRがエラーを返した場合は、GTR自身のステータスコードとメッセージが含まれます。レスポンス本文が含まれることはありません。
          example: email undeliverable
        next_attempt_at:
          type: string
          format: date-time
          nullable: true
          description: メッセージが`QUEUED`または`RETRYING`の間に、次の試行が実行される日時。
        delivered_at:
          type: string
          format: date-time
          nullable: true
          description: 相手側がメッセージを受け取った日時。
    TravelRuleDiscoveryStep:
      type: object
      description: >-
        Diditがアウトバウンド送金のために実行した取引相手探索の1ステップで、実行された順に並びます。ルートを持つVASPを特定した最初のステップでチェーンが終了します。
      properties:
        step:
          type: string
          enum:
            - internal_address_book
            - wallet_attribution
            - network_lookup
            - customer_hint
            - end_user
          description: >-
            `internal_address_book`:
            送付先ウォレットの管理権を証明した別のDidit顧客。`wallet_attribution`:
            ウォレットのブロックチェーン分析による帰属情報。`network_lookup`:
            どのVASPがそのアドレスを保有しているかを回答できるネットワーク。`customer_hint`:
            `beneficiary_data`で送信したVASP名、LEIまたは法域。`end_user`:
            エンドユーザー（またはお客様）が選択した取引相手、または選択の依頼。
        outcome:
          type: string
          enum:
            - match
            - miss
            - skipped
          description: >-
            `match`: ステップが取引相手を特定しました。`miss`: 実行されましたが見つかりませんでした。`skipped`:
            実行できず、`reason`に理由が示されます。
        reason:
          type: string
          description: >-
            機械可読な理由です。一致した場合は`""`になります。値は`no_proven_internal_wallet`、`attribution_disabled`、`already_attributed`、`no_attributed_entity`、`directory_match_no_route`、`gtr_address_lookup_runs_on_dispatch`、`no_membership`、`network_switched_off`、`no_network_address_lookup`、`no_directory_match`、`awaiting_end_user`、`picked_member_without_proven_wallet`のいずれかです。
        vasp:
          type: string
          format: uuid
          nullable: true
          description: ステップでVASPが指定された場合の、そのディレクトリ上のVASPです。
        rail:
          type: string
          nullable: true
          description: ステップで取引相手が見つかった場合に、その取引相手に届くレール。
        at:
          type: string
          format: date-time
    TravelRuleNextAction:
      type: object
      description: >-
        `COUNTERPARTY_VASP_NOT_FOUND`または`COUNTERPARTY_VASP_NOT_REACHABLE`の送金を先に進める要素1つです。[送金が停止している理由](/ja/transaction-monitoring/travel-rule#送金が停止している理由)を参照してください。
      properties:
        action:
          type: string
          enum:
            - select_counterparty_vasp
            - declare_self_hosted
            - add_vasp_hint
            - update_compliance_email
            - resend
          description: >-
            `select_counterparty_vasp`:
            エンドユーザーがウォレット所有権ウィジェットで送金先のVASPを選択するか、お客様が`action=beneficiary_vasp`でPATCHします。`declare_self_hosted`:
            エンドユーザーがウィジェットでウォレットをセルフホスト型として申告します。`add_vasp_hint`:
            VASP名、LEI、またはトラベルアドレス（例:
            送金先ウォレットのアドレス帳エントリーの`travel_address`）で取引相手をDiditに伝え、再送信します。`update_compliance_email`と`resend`は`PATCH
            /v3/transactions/{transaction_id}/travel-rule/`の`action`値で、それぞれ取引相手のコンプライアンス用メールアドレスを再度指定し、ルーティングを再実行します。
        url:
          type: string
          format: uri
          description: >-
            ウォレット所有権ウィジェットのリンク。取引にウィジェットセッションが開いている間、`select_counterparty_vasp`と`declare_self_hosted`で返されます。
      required:
        - action
    TravelRuleChainDetails:
      type: object
      description: >-
        送金のチェーンが2つのウォレットをどのように示すか（1つのアドレスが別のアドレスに支払う形態にとどまらない場合）。アカウント型チェーンの送金（EVM、Solana、Tron）では2つのアドレスがそのままウォレットとなるため、空（`{}`）になります。照合、ルーティング、アドレス帳は、まずここからウォレットを読み取ります。
      properties:
        chain:
          type: string
          description: 正規チェーン(例:`BTC`、`XRP`、Lightning送金の場合は`LIGHTNING`)。
        shape:
          type: string
          enum:
            - utxo
            - memo
            - lightning
        originator:
          $ref: '#/components/schemas/TravelRuleChainSide'
        beneficiary:
          $ref: '#/components/schemas/TravelRuleChainSide'
        utxo:
          type: object
          description: 'UTXO送金の場合: 保存されている入力と出力(金額は10進数の文字列)、およびDiditが各出力を何として解釈したか。'
          properties:
            inputs:
              type: array
              items:
                $ref: '#/components/schemas/TravelRuleUtxoEntry'
            outputs:
              type: array
              items:
                $ref: '#/components/schemas/TravelRuleUtxoEntry'
            change_output_indexes:
              type: array
              items:
                type: integer
              description: 入力アドレスへ資金を戻す出力。
            beneficiary_output_index:
              type: integer
              nullable: true
              description: 受取人に支払うアウトプット。判別できなかった場合はnullです。
        lightning:
          type: object
          description: >-
            Lightning送金の場合:
            支払いリクエストの内容。常に`kind`(`bolt11`、`bolt12_offer`、`bolt12_invoice`、`bolt12_invoice_request`、`lnurl`、`lightning_address`、`node_id`または`unknown`)を含みます。BOLT11インボイスでは`network`、`payee_node_id`、`payment_hash`、`amount_msat`、`created_at`、`expires_at`が加わり、BOLT12文字列では`blinded_paths`と`payee_node_id`が、LNURLまたはLightning
            Addressではその`domain`が加わります。ネットワーク経由での解決は一切行わず、リクエストをデコードするだけです。
          additionalProperties: true
        warnings:
          type: array
          items:
            type: string
            enum:
              - declared_originator_not_an_input
              - declared_beneficiary_not_an_output
              - beneficiary_output_ambiguous
              - beneficiary_output_amount_differs
          description: >-
            確認が必要なUTXOの不整合です。申告された送金人が入力に含まれていない、申告された受取人が出力に含まれていない、受取人の出力を1つに特定できない、または受取人の出力の支払額が取引に記載された金額と異なる場合が該当します。
        not_applicable_reason:
          type: string
          enum:
            - LIGHTNING_NO_PAYEE_IDENTIFIER
            - LIGHTNING_BOLT12_BLINDED_PAYEE
            - LIGHTNING_LNURL_NAMES_NO_PAYEE
          description: >-
            支払いリクエストに受取人が指定されていないアウトバウンドのLightning送金の場合:
            送金が`NOT_APPLICABLE`となる理由。`LIGHTNING_NO_PAYEE_IDENTIFIER`(リクエストに受取人ノードが指定されていない、またはデコードできなかった)、`LIGHTNING_BOLT12_BLINDED_PAYEE`(オファーが受取人をブラインドパスの背後に隠している)、`LIGHTNING_LNURL_NAMES_NO_PAYEE`(LNURLが受取人ではなくサービスを指定している)のいずれかです。同じコードが送金の最後の`timeline`エントリの冒頭にも記載されます。
    TravelRuleChainSide:
      type: object
      description: Diditがチェーンデータから解決した、一方の当事者のウォレットです。
      properties:
        address:
          type: string
          description: >-
            ウォレット。メモ型ネットワークではクラシックアドレス(XRPのXアドレスはクラシックアドレスとタグに分割されます)、Lightningでは受取人のノードIDまたはLightning
            Addressです。
        memo:
          type: string
          description: ウォレットの一部となる宛先タグまたはメモです。ない場合は`""`です。
        source:
          type: string
          enum:
            - declared
            - x_address
            - largest_input
            - only_non_change_output
            - amount_match
            - invoice_payee
            - updated
          description: >-
            ウォレットの取得元です。`declared`（リクエストで指定）、`x_address`（XRPのX-addressから分割）、`largest_input`（最も多く拠出したUTXO入力アドレス）、`only_non_change_output`（おつりではない唯一のUTXO出力）、`amount_match`（送金額を支払う唯一のUTXO出力）、`invoice_payee`（Lightningの支払いリクエストが指定する受取人）、`updated`（後から`action:
            update_originator_wallet`で設定）。
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        お客様のアプリケーションのAPIキーです。Business ConsoleのDevelopers -> API
        keysで取得できます。プライマリキーはフルアクセス権を持ちます。名前付きキーにはスコープを設定できます。リソースごとのアクセス権（なし、読み取り、書き込み）、一部のワークフローまたは承認済みセッションへの限定、IPアドレスのリストへの限定、有効期限の設定です。401は、キーが誤っている、失効している、または期限切れであることを意味します。403は、キーが送信されていない、キーにこのリソースやアクションへのアクセス権がない、またはIPリスト外のアドレスからリクエストが送信されたことを意味します。セッションのルートでの404は、セッションがキーのワークフローまたはステータスの対象外であることを意味します。メディアへのアクセス権がないキーでは、画像、動画、PDFのURLがnullで返されます。セッションの書き込み権限がないキーでは、セッションのリンクとトークンがnullで返されます。詳細は次を参照してください:
        https://docs.didit.me/console/api-keys

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.