> ## 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.

# トラベルルール テストVASP受信転送トリガーAPI

> サンドボックス専用：Didit Test VASPからアプリケーションへトラベルルールの受信転送を送信させ、自社の判定、受信箱、所有確認フローの動作を確認できます。



テストVASPインバウンド送金トリガーAPIプロンプト
        プロンプトをクリップボードにコピー



      
      

\<pre>

\`Make the Didit Test VASP send my sandbox application an inbound Travel Rule transfer, to exercise the receiving side of an exchange before going live.

Endpoint:
POST https://verification.didit.me/v3/travel-rule/test-vasp/inbound/

Authentication:
Use the x-api-key header with my SANDBOX application's API key. A live application receives 400.

Request body (application/json):
\{
"beneficiary_wallet_address": "0xYourSandboxWallet",  // required: the destination wallet address
"scenario": "accept",                                // optional: accept (default) or name_mismatch
"chain": "ETH",                                      // optional
"amount": "1",                                       // optional, decimal string
"currency": "ETH",                                   // optional
"reference": "demo-001"                              // optional: repeat calls with it return the first transfer
}

Behavior:
\- The transfer is decided by the same logic a real inbound transfer runs, against my wallet address book: a verified wallet with the holder's name completes, an unverified wallet waits for ownership, a wallet with no matching address book entry is booked ON_HOLD, and name_mismatch ends as COUNTERPARTY_MISMATCHED_DATA.
\- Nothing leaves Didit. travel_rule.status.updated webhooks fire with environment "sandbox", test_vasp true and the scenario name.

What to read from the response:
\- transaction_id, txn_id - the booked inbound transaction.
\- travel_rule_status and detail - how my application decided it.
\- travel_rule - the full transfer.

Full guide: /transaction-monitoring/travel-rule#testing-without-network-credentials.`

\</pre>



      
      

貼り付け先



## OpenAPI

````yaml ja/openapi-25.json POST /v3/travel-rule/test-vasp/inbound/
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/travel-rule/test-vasp/inbound/:
    post:
      tags:
        - Travel Rule
      summary: Didit Test VASPからのインバウンド送金をトリガーする（サンドボックス）
      description: >-
        サンドボックスアプリケーション専用です。Didit Test
        VASPがアプリケーションにインバウンドのトラベルルール送金を送信するため、本番稼働前に取引所の受信側をエンドツーエンドで試せます。この送金は、ネットワークからの実際のインバウンド送金がウォレットアドレス帳に対して実行されるのと同じロジックで記帳・判定されるため、受信箱、判定、ウォレット所有確認フローは本番と同じように動作します。Diditの外部には何も送信されません。本番アプリケーションは400を受け取ります。同じ`reference`を再度送信すると、2件目の送金ではなく、最初の呼び出しで記帳された送金が返されます。
      operationId: triggerTravelRuleTestVaspInbound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleTestVaspInboundRequest'
            example:
              beneficiary_wallet_address: 0xYourSandboxWallet
              scenario: accept
              amount: '1'
              reference: demo-001
      responses:
        '201':
          description: 受信送金が記帳され、判定されました。同じ`reference`で繰り返すと、同じボディが返されます。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleTestVaspInboundResponse'
        '400':
          description: >-
            リクエストボディが無効である、`scenario`が不明またはサポートされていない、またはアプリケーションが本番環境のアプリケーションです。
          content:
            application/json:
              schema:
                type: object
        '409':
          description: 送金を登録できませんでした。たとえば、アプリケーションでトラベルルールが有効になっていない場合です。
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            https://verification.didit.me/v3/travel-rule/test-vasp/inbound/ \
              -H 'x-api-key: YOUR_SANDBOX_API_KEY' -H 'Content-Type: application/json' \
              -d '{"beneficiary_wallet_address":"0xYourSandboxWallet","scenario":"accept","reference":"demo-001"}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.transactions.travel_rule.trigger_test_vasp_inbound(
                beneficiary_wallet_address="0xYourSandboxWallet",
                scenario="accept",
                amount="1",
                reference="demo-001",
            )
            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.travelRule.triggerTestVaspInbound({
              beneficiary_wallet_address: "0xYourSandboxWallet",
              scenario: "accept",
              amount: "1",
              reference: "demo-001",
            });

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.TravelRule.TriggerTestVASPInbound(ctx, didit.TravelRuleTestVASPInboundRequest{\n\tBeneficiaryWalletAddress: \"0xYourSandboxWallet\",\n\tScenario:                 didit.Some(didit.TravelRuleTestVASPInboundRequestScenario(\"accept\")),\n\tAmount:                   didit.String(\"1\"),\n\tReference:                didit.String(\"demo-001\"),\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.TravelRuleTestVaspInboundRequest;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.transactions().travelRule().triggerTestVaspInbound(TravelRuleTestVaspInboundRequest.builder()
                    .beneficiaryWalletAddress("0xYourSandboxWallet")
                    .scenario(TravelRuleTestVaspInboundRequest.Scenario.of("accept"))
                    .amount("1")
                    .reference("demo-001")
                    .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->travelRule->triggerTestVaspInbound([
                'beneficiary_wallet_address' => '0xYourSandboxWallet',
                'scenario' => 'accept',
                'amount' => '1',
                'reference' => 'demo-001',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            result = didit.transactions.travel_rule.trigger_test_vasp_inbound(
              beneficiary_wallet_address: "0xYourSandboxWallet",
              scenario: "accept",
              amount: "1",
              reference: "demo-001"
            )
            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.TravelRule.TriggerTestVaspInboundAsync(new
            TravelRuleTestVaspInboundRequest

            {
                BeneficiaryWalletAddress = "0xYourSandboxWallet",
                Scenario = new TravelRuleTestVaspInboundRequestScenario("accept"),
                Amount = "1",
                Reference = "demo-001",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    TravelRuleTestVaspInboundRequest:
      type: object
      required:
        - beneficiary_wallet_address
      properties:
        beneficiary_wallet_address:
          type: string
          description: >-
            送金先のウォレットアドレスです。Didit Test
            VASPはこのアドレスに送信し、資産のチェーン上でウォレットアドレス帳と照合されます。一致するエントリがないウォレットも受け付けられ、受信取引はON_HOLDとして記帳されます。
        scenario:
          type: string
          enum:
            - accept
            - name_mismatch
          default: accept
          description: >-
            Didit Test
            VASPが申告する受取人の情報です。`accept`は保有者本人の氏名を申告し、`name_mismatch`はどの保有者とも一致しない氏名を申告します。判定そのものは常にお客様が行います。
        chain:
          type: string
          default: ETH
          description: 資産のチェーン。
        amount:
          type: string
          default: '1'
          description: 10進数の文字列で表した金額。
        currency:
          type: string
          default: ETH
          description: 資産コード。
        reference:
          type: string
          description: 任意の冪等性キーです。同じ値で繰り返し呼び出すと、最初の呼び出しで記帳された送金が返されます。
    TravelRuleTestVaspInboundResponse:
      type: object
      properties:
        transaction_id:
          type: string
          format: uuid
          description: 受信した送金のDidit取引UUIDです。
        txn_id:
          type: string
          description: Diditが生成したtxn_idです。
        scenario:
          type: string
          description: 実行されたシナリオです。
        travel_rule_status:
          type: string
          description: アプリケーション自身の判定で決まったステータス。
        detail:
          type: string
          description: 送金がそのステータスに確定した理由。
        test_vasp:
          type: boolean
          description: 常にtrueです。送信者はDidit Test VASPでした。
        travel_rule:
          $ref: '#/components/schemas/TravelRuleTransferDetail'
    TravelRuleTransferDetail:
      type: object
      description: >-
        所有権確認エンドポイントおよび完了/キャンセルエンドポイントから返される完全な送金オブジェクト。受信送金のウォレット所有権が未確認の間、取引相手の`originator_data`と`beneficiary_data`はマスクされた状態で返され（各単語の最初の文字のみが残り、ウォレット、チェーン、VASPのルーティング情報は判読可能なままです）、`data_masked`はtrueになります。
      properties:
        uuid:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - AWAITING_COUNTERPARTY
            - ON_HOLD
            - COMPLETED
            - FINISHED
            - CANCELLED
            - EXPIRED
            - COUNTERPARTY_MISMATCHED_DATA
            - COUNTERPARTY_VASP_NOT_FOUND
            - COUNTERPARTY_VASP_NOT_REACHABLE
            - UNCONFIRMED_OWNERSHIP
            - COUNTERPARTY_VASP_GENERAL_DECLINE
            - NOT_ENOUGH_COUNTERPARTY_DATA
            - NOT_APPLICABLE
        direction:
          type: string
          enum:
            - INBOUND
            - OUTBOUND
        rail:
          type: string
          nullable: true
          enum:
            - INTERNAL
            - TRP
            - GTR
            - TRUST
            - VERIFYVASP
            - SYGNA
            - EMAIL
            - TEST_VASP
            - null
          description: >-
            送金のルーティングに使われたレール。レールが選択されなかった場合はnullです（例:
            しきい値未満、取引相手のウォレットがセルフホスト型ウォレット、入金後の登録、到達可能な取引相手がいない場合）。INTERNALは双方がDiditのアプリケーションであることを意味し、EMAILはメールで送信された受け取りリンクで取引相手に到達したことを意味します。TEST_VASPは、Didit
            Test
            VASPがサンドボックスの送金に応答したことを意味します。GTR、VERIFYVASP、SYGNAでは、Diditはネットワークのレスポンスから、または5分ごとのポーリングによって取引相手の回答を読み取ります。TRUSTは送信のみのため、TRUSTの送金は期限切れになるまでAWAITING_COUNTERPARTYのままです。ネットワークのレールは、そのネットワークについてお客様自身のメンバーシップを接続している場合にのみ使用されます。レールは取引作成のレスポンスが返された後に選択されるため、そのレスポンスではnullです。
        protocol:
          type: string
          nullable: true
        ivms_version:
          type: string
          example: ivms101.2023
        required:
          type: boolean
        ownership_confirmed:
          type: boolean
          nullable: true
        deadline_at:
          type: string
          format: date-time
          nullable: true
        timeline:
          type: array
          items:
            type: object
            properties:
              status:
                type: string
              at:
                type: string
                format: date-time
              detail:
                type: string
              name_match:
                allOf:
                  - $ref: '#/components/schemas/TravelRuleNameMatch'
                nullable: true
                description: このエントリが判定した氏名比較で、`detail`と並んで返されます。氏名を比較しなかったエントリには含まれません。
              reason:
                type: string
                description: >-
                  配信の失敗によって発生した遷移のエントリにのみ含まれます。値は`email_undeliverable`または`delivery_failed`で、送金の`reason`が報告する値と同じです。
        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。
        originator_data:
          type: object
          description: 送金人当事者です。受信する送金の場合、取引相手の値は所有権が確認されるまでマスクされます。
        beneficiary_data:
          type: object
          description: 受取人の当事者情報。受信側の送金では、所有権が確認されるまで取引相手の値はマスクされます。
        name_match:
          allOf:
            - $ref: '#/components/schemas/TravelRuleNameMatch'
          nullable: true
          description: >-
            送金の判定を決めた氏名比較です。比較が実行されるまではnullです。当事者がマスクされている間、およびINTERNALのやり取りにおける相手顧客側のコピーでは、`transfer_name`、`compared_name`、`matched_names`、`mismatched_names`は非表示になります。`score`と`matched`は一致しない場合があります。`matched`は厳格度に従い、`score`は2つの氏名全体の類似度を表します。
        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です。
        created_at:
          type: string
          format: date-time
        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'
    TravelRuleNameMatch:
      type: object
      nullable: true
      description: >-
        送金の判定を決めた氏名比較です。比較が実行されるまではnullです。当事者がマスクされている間、およびINTERNALのやり取りにおける相手顧客側のコピーでは、`transfer_name`、`compared_name`、`matched_names`、`mismatched_names`は非表示になります。`score`と`matched`は一致しない場合があります。`matched`は厳格度に従い、`score`は2つの氏名全体の類似度を表します。
      properties:
        score:
          type: integer
          minimum: 0
          maximum: 100
          description: 2つの氏名の類似度(0〜100)。いずれかの氏名が空の場合は0です。
        matched:
          type: boolean
          description: >-
            名前が`strictness`を満たすかどうか。送金の結果はすべてのフィールドを比較する`data_match`に従うため、この値がtrueであっても送金がCOUNTERPARTY_MISMATCHED_DATAになる場合があります。
        method:
          type: string
          enum:
            - none
            - exact_token
            - token_subset
            - token_containment
            - sequence_ratio
          description: >-
            `matched`の判定方法です。none(`NONE`)、exact_token(`STRICT`)、token_subset(`DEFAULT`)、token_containment(`CONTAINS`)、sequence_ratio(`FUZZY`)のいずれかです。
        strictness:
          type: string
          enum:
            - NONE
            - STRICT
            - CONTAINS
            - DEFAULT
            - FUZZY
        compared_with:
          type: string
          enum:
            - wallet_holder
            - counterparty_vasp
          description: >-
            wallet_holder: ウォレットに記録されている保有者。counterparty_vasp:
            取引相手がメールのレスポンスページで回答した名称、またはサンドボックスではDidit Test VASPの回答。
        transfer_name:
          type: string
          description: 送金に記載された名前です。
        compared_name:
          type: string
          description: 比較対象となった名前です。
        matched_names:
          type: array
          items:
            type: string
          description: '`compared_name`に含まれる`transfer_name`の単語。'
        mismatched_names:
          type: array
          items:
            type: string
          description: >-
            `compared_name`にない`transfer_name`の単語、続いて`transfer_name`にない`compared_name`の単語。
    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`で設定）。
    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: 任意。入力が使用する出力のインデックスです。
  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.