> ## 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：トラベルルール

> Didit Management APIで、データ交換が行われる前にオンチェーンで決済済みとなった暗号資産の入金に、トラベルルール情報を登録します。入金後に行うサンライズフローです。



着信Sunrise送金登録APIのプロンプト
        プロンプトをクリップボードにコピー



      
      

\<pre>

\`Register Travel Rule data for a crypto deposit that settled on-chain BEFORE any exchange took place - because the sending VASP was unreachable at the time (the sunrise problem), or when backfilling historical deposits.

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

Authentication:
Use the x-api-key header with my Didit API key. You are the beneficiary VASP.

Request body (application/json):
\{
"chain": "ETH",                        // required; stored lowercased and matched case-insensitively against your address-book entries' chain
"txid": "0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060",   // dedupe key: same txid + wallet_address returns the existing transfer
"wallet_address": "0x8ba1f109551bD432803012645Ac136ddd64DBA72",   // an XRP X-address is split into its classic address and tag
"memo": "",                              // optional destination tag or memo: on a shared deposit address it names your customer
"amount": "500.00",
"currency": "USDC",
"originator_data": { "name": "Origin CASP SL" },      // flat originator details from the sender, if known (name or full_name, first_name, last_name, vendor_data)
"beneficiary_data": { "name": "Ana Diaz" },           // flat beneficiary details (your customer); name is matched against the entry's holder_name
"originating_vasp": { "name": "Origin CASP SL", "lei": "984500ABCDEF12345634", "travel_address": "taHg7hkTmJ4mTpdQxn61H9cyx6RreB2jrDHeB3pkioRRBgKQaSAGUzp73FVsmEXXJVxdAuCCWiBEFMkcB4MCtcyjnpbyEbTeSHwym394NMS7ev" },  // optional sender identity
"utxo": { "inputs": [ { "address": "bc1q...", "amount": "0.5" } ], "outputs": [ { "address": "bc1q...", "amount": "0.25" } ] }  // optional, BTC/LTC/BCH/DOGE only
}

Behavior:
\- Creates an inbound travelRule transaction (or reuses an unclaimed recorded deposit) and resolves it against your wallet address book, by the address and its memo (an entry with exactly that memo first, else one for the whole address; a deposit without a memo never reaches an entry that has one):
\- no matching entry -> ON_HOLD
\- entry exists, ownership unproven -> UNCONFIRMED_OWNERSHIP
\- name does not match the entry's holder_name -> COUNTERPARTY_MISMATCHED_DATA
\- verified entry + name match -> COMPLETED then immediately FINISHED (the deposit already settled).
\- The address-book match is chain-scoped: an entry matches when its chain equals the request chain (case-insensitive) or the entry's chain is blank, and "ethereum" does not match "ETH".
\- Resolve ON_HOLD (and UNCONFIRMED_OWNERSHIP) with POST /v3/transactions/{transaction_id}/travel-rule/ownership/.
\{"confirmed": true} registers or verifies the wallet entry and runs the name match; {"confirmed": false} declines the transfer.
ON_HOLD does not change the transaction status by itself; only a rule that acts on the Travel Rule status changes it (for example the opt-in library preset travel-rule-pending-action sets AWAITING_USER).
\- Naming originating_vasp keeps the sender's identity on this transfer (metadata.originating_vasp, and the transfer's originator VASP in GET /v3/travel-rule/transfers/); it never creates or changes a shared VASP directory entry.
originating_vasp.lei must be a valid 20-character LEI (ISO 17442) or blank, and originating_vasp.travel_address must be a valid travel address or blank.
An inbound TRP inquiry does not create or change its sender's directory entry either.
\- Webhooks: when a new transaction was created, transaction.created is sent first and travel_rule.status.updated follows for each status transition.
Each webhook is delivered and retried on its own, so do not rely on arrival order; key on transaction_id.
\- Billing: there is no base fee.
A newly created deposit is screened and charged the Wallet Verification & Screening rate only when crypto monitoring is enabled and chain is one Didit can screen (btc, eth, sol, trx, matic, bnb, ltc, xrp, bch, doge, or their full names such as bitcoin or ethereum).
Sandbox applications are never charged.
\- utxo: the sender's wallet is originator_data.wallet_address when you declare it, else the input address that contributed the most. The result is on travel_rule.chain_details.

What to read from the response:
\- transaction_id - the Didit transaction uuid, used in /v3/transactions/{transaction_id}/ calls.
\- txn_id - tr-in-{first 80 characters of txid}-{12 hex characters} for a new transaction, or the existing txn_id of a reused recorded deposit.
\- created - true (201) when this call registered the deposit, false (200) when the same txid + wallet_address was already registered.
\- travel_rule - the full transfer object: uuid, status, direction, rail, protocol, ivms_version, required, ownership_confirmed, deadline_at, timeline, counterparty_vasp, originator_data, beneficiary_data, delivery, discovery, reason, next_actions, created_at.
beneficiary_data includes the wallet_address and the lowercased chain.
originator_data and beneficiary_data stay masked in the response (data_masked: true) until wallet ownership is confirmed.
\- travel_rule.status - the resolved state (see above).

Failure modes:
\- 400 - a missing required field (chain, txid, wallet_address, amount, currency), an invalid originating_vasp.lei, or an invalid travel address ("Invalid travel address.").
\- 403 - missing x-api-key (a wrong, revoked or expired key gets 401).

Full guide: /transaction-monitoring/travel-rule#after-deposit-sunrise-registration.`

\</pre>



      
      

貼り付け先



## OpenAPI

````yaml ja/openapi-25.json POST /v3/travel-rule/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/inbound/:
    post:
      tags:
        - Travel Rule
      summary: 入金後（サンライズ）の受信送金を登録する
      description: >-
        交換が行われる前にすでにオンチェーンで決済された暗号資産の入金について、トラベルルールのデータを登録します。受信のtravelRule取引を作成し（または未請求の入金を再利用し）、ウォレットのアドレス帳と照合して送金を解決します。新規作成された取引の場合、Diditはまずtransaction.createdを送信し、その後にtravel_rule.status.updatedのWebhookを送信します。
      operationId: registerTravelRuleInbound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleInboundRequest'
            example:
              chain: ETH
              txid: 0xdeposit-hash
              wallet_address: 0xYourDepositWallet
              amount: '500.00'
              currency: USDC
              originator_data:
                name: Origin CASP SL
              beneficiary_data:
                name: Ana Diaz
              originating_vasp:
                name: Origin CASP SL
                lei: ''
                travel_address: >-
                  ta9JbXbsBSuS5ozArJRFVgvBHMVnDGUnrPPChSZYQsuZTn3kPrJXUQ7RSLUEJ5KjyPvr8C9sAxmPtZfGsQVKCi4n8ShxP9BkbDdbtjtA9aumNybAZ1BxC
      responses:
        '200':
          description: >-
            このtxidとwallet_addressの送金はすでに登録されています。既存の送金が変更されずに返されます(createdはfalse)。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleInboundResponse'
        '201':
          description: 新しいトラベルルール送金が、新しい受信取引または既存の未請求の入金に対して登録されました（createdはtrue）。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleInboundResponse'
        '400':
          description: >-
            必須フィールド（`chain`、`txid`、`wallet_address`、`amount`、`currency`）が欠落している、`originating_vasp.lei`が有効なLEIではない、`originating_vasp.travel_address`が有効なトラベルアドレスではない、チェーンが扱えないメモ、Xアドレスまたは`utxo`、あるいはオブジェクトではない`originator_data`
            / `beneficiary_data`。
          content:
            application/json:
              examples:
                Missing field:
                  value:
                    txid:
                      - This field is required.
                Invalid LEI:
                  value:
                    originating_vasp:
                      lei:
                        - >-
                          Invalid LEI: expected 20 alphanumeric characters (ISO
                          17442).
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST https://verification.didit.me/v3/travel-rule/inbound/ \
              -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
              -d '{"chain":"ETH","txid":"0xdeposit-hash","wallet_address":"0xYourDepositWallet","amount":"500.00","currency":"USDC"}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.travel_rule.register_inbound(
                chain="ETH",
                txid="0xdeposit-hash",
                wallet_address="0xYourDepositWallet",
                amount="500.00",
                currency="USDC",
                originator_data={"name": "Origin CASP SL"},
                beneficiary_data={"name": "Ana Diaz"},
                originating_vasp={
                    "name": "Origin CASP SL",
                    "lei": "",
                    "travel_address": "ta9JbXbsBSuS5ozArJRFVgvBHMVnDGUnrPPChSZYQsuZTn3kPrJXUQ7RSLUEJ5KjyPvr8C9sAxmPtZfGsQVKCi4n8ShxP9BkbDdbtjtA9aumNybAZ1BxC",
                },
            )
            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.travelRule.registerInbound({
              chain: "ETH",
              txid: "0xdeposit-hash",
              wallet_address: "0xYourDepositWallet",
              amount: "500.00",
              currency: "USDC",
              originator_data: { name: "Origin CASP SL" },
              beneficiary_data: { name: "Ana Diaz" },
              originating_vasp: {
                name: "Origin CASP SL",
                lei: "",
                travel_address: "ta9JbXbsBSuS5ozArJRFVgvBHMVnDGUnrPPChSZYQsuZTn3kPrJXUQ7RSLUEJ5KjyPvr8C9sAxmPtZfGsQVKCi4n8ShxP9BkbDdbtjtA9aumNybAZ1BxC",
              },
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.RegisterInbound(ctx, didit.TravelRuleInboundRequest{\n\tChain:           \"ETH\",\n\tTxid:            \"0xdeposit-hash\",\n\tWalletAddress:   \"0xYourDepositWallet\",\n\tAmount:          \"500.00\",\n\tCurrency:        \"USDC\",\n\tOriginatorData:  didit.Some(map[string]any{\"name\": \"Origin CASP SL\"}),\n\tBeneficiaryData: didit.Some(map[string]any{\"name\": \"Ana Diaz\"}),\n\tOriginatingVASP: didit.Some(didit.TravelRuleInboundRequestOriginatingVASP{\n\t\tName:          didit.String(\"Origin CASP SL\"),\n\t\tLei:           didit.String(\"\"),\n\t\tTravelAddress: didit.String(\"ta9JbXbsBSuS5ozArJRFVgvBHMVnDGUnrPPChSZYQsuZTn3kPrJXUQ7RSLUEJ5KjyPvr8C9sAxmPtZfGsQVKCi4n8ShxP9BkbDdbtjtA9aumNybAZ1BxC\"),\n\t}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import java.util.Map;

            import me.didit.Didit;

            import me.didit.types.TravelRuleInboundRequest;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.travelRule().registerInbound(TravelRuleInboundRequest.builder()
                    .chain("ETH")
                    .txid("0xdeposit-hash")
                    .walletAddress("0xYourDepositWallet")
                    .amount("500.00")
                    .currency("USDC")
                    .originatorData(Map.of("name", "Origin CASP SL"))
                    .beneficiaryData(Map.of("name", "Ana Diaz"))
                    .originatingVasp(TravelRuleInboundRequest.OriginatingVasp.builder()
                            .name("Origin CASP SL")
                            .lei("")
                            .travelAddress("ta9JbXbsBSuS5ozArJRFVgvBHMVnDGUnrPPChSZYQsuZTn3kPrJXUQ7RSLUEJ5KjyPvr8C9sAxmPtZfGsQVKCi4n8ShxP9BkbDdbtjtA9aumNybAZ1BxC")
                            .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->travelRule->registerInbound([
                'chain' => 'ETH',
                'txid' => '0xdeposit-hash',
                'wallet_address' => '0xYourDepositWallet',
                'amount' => '500.00',
                'currency' => 'USDC',
                'originator_data' => ['name' => 'Origin CASP SL'],
                'beneficiary_data' => ['name' => 'Ana Diaz'],
                'originating_vasp' => [
                    'name' => 'Origin CASP SL',
                    'lei' => '',
                    'travel_address' => 'ta9JbXbsBSuS5ozArJRFVgvBHMVnDGUnrPPChSZYQsuZTn3kPrJXUQ7RSLUEJ5KjyPvr8C9sAxmPtZfGsQVKCi4n8ShxP9BkbDdbtjtA9aumNybAZ1BxC',
                ],
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.travel_rule.register_inbound(
              chain: "ETH",
              txid: "0xdeposit-hash",
              wallet_address: "0xYourDepositWallet",
              amount: "500.00",
              currency: "USDC",
              originator_data: { name: "Origin CASP SL" },
              beneficiary_data: { name: "Ana Diaz" },
              originating_vasp: {
                name: "Origin CASP SL",
                lei: "",
                travel_address: "ta9JbXbsBSuS5ozArJRFVgvBHMVnDGUnrPPChSZYQsuZTn3kPrJXUQ7RSLUEJ5KjyPvr8C9sAxmPtZfGsQVKCi4n8ShxP9BkbDdbtjtA9aumNybAZ1BxC",
              }
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Collections.Generic;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await client.TravelRule.RegisterInboundAsync(new
            TravelRuleInboundRequest

            {
                Chain = "ETH",
                Txid = "0xdeposit-hash",
                WalletAddress = "0xYourDepositWallet",
                Amount = "500.00",
                Currency = "USDC",
                OriginatorData = new Dictionary<string, object> { ["name"] = "Origin CASP SL" },
                BeneficiaryData = new Dictionary<string, object> { ["name"] = "Ana Diaz" },
                OriginatingVasp = new TravelRuleInboundRequestOriginatingVasp
                {
                    Name = "Origin CASP SL",
                    Lei = "",
                    TravelAddress = "ta9JbXbsBSuS5ozArJRFVgvBHMVnDGUnrPPChSZYQsuZTn3kPrJXUQ7RSLUEJ5KjyPvr8C9sAxmPtZfGsQVKCi4n8ShxP9BkbDdbtjtA9aumNybAZ1BxC",
                },
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    TravelRuleInboundRequest:
      type: object
      required:
        - chain
        - txid
        - wallet_address
        - amount
        - currency
      properties:
        chain:
          type: string
          description: >-
            入金が決済されたチェーン（例:
            `ETH`）。小文字で保存され、ウォレットアドレス帳のエントリーとは大文字・小文字を区別せずに比較されるため、アドレス帳でも同じチェーントークンを使用してください。
          maxLength: 32
        txid:
          type: string
          description: オンチェーン取引のハッシュ。wallet_addressと組み合わせて重複排除されます。
          maxLength: 128
        wallet_address:
          type: string
          description: 入金を受け取った送金先のウォレットです。XRPのXアドレスはクラシックアドレスとタグに分割されます。
          maxLength: 128
        amount:
          type: string
          description: 入金額。0以上、小数点以下最大18桁の10進数文字列です。
        currency:
          type: string
          description: '入金アセット（例: "USDC"）。'
          maxLength: 16
        originator_data:
          type: object
          description: >-
            送信側VASPから提供された送金人の詳細（判明している場合）で、`{"name":
            "..."}`のようなフラットなオブジェクトです。Diditはここからname（またはfull_name）、first_name、last_name、vendor_dataを読み取ります。
          additionalProperties: true
        beneficiary_data:
          type: object
          description: >-
            受取人（お客様の顧客）の詳細で、`{"name":
            "..."}`のようなフラットなオブジェクトです。Diditはnameを、一致したアドレス帳エントリのholder_nameと照合し、wallet_addressとchainはリクエストの値から設定します。
          additionalProperties: true
        originating_vasp:
          type: object
          description: >-
            送信元VASPの任意の説明です。この送金にのみ保持され（`metadata.originating_vasp`、およびGET
            /v3/travel-rule/transfers/における送金の送金人VASP）、共有VASPディレクトリのエントリを作成、編集、リンクすることは決してありません。
          properties:
            name:
              type: string
              maxLength: 255
            lei:
              type: string
              maxLength: 20
              description: 任意。有効な20文字のISO 17442 LEI、または空。
            travel_address:
              type: string
              description: この送金に記録された、送金人のトラベルアドレスです。
              maxLength: 512
        memo:
          type: string
          maxLength: 256
          description: >-
            任意。メモ型ネットワークにおける入金の宛先タグまたはメモです。共有の入金アドレスでは顧客を区別するためのもので、そのメモに対応するアドレス帳のエントリーが照合されます。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`。
        utxo:
          allOf:
            - $ref: '#/components/schemas/TravelRuleUtxo'
          description: >-
            任意。UTXOチェーンのみ。入金取引の入力と出力です。送信者のウォレットは宣言された`originator_data.wallet_address`、宣言がない場合は最大の入力となります。
    TravelRuleInboundResponse:
      type: object
      properties:
        transaction_id:
          type: string
          format: uuid
          description: 受信した入金のDidit取引UUIDです。
        txn_id:
          type: string
          description: 受信取引のtxn_id。Diditが取引を作成した場合はDiditが生成した値、未請求の入金が再利用された場合はお客様自身の値です。
        created:
          type: boolean
          description: >-
            この呼び出しで送金が登録された場合はtrue(HTTP
            201)、同じtxidとwallet_addressの送金がすでに存在していた場合はfalse(HTTP 200)です。
        travel_rule:
          $ref: '#/components/schemas/TravelRuleTransferDetail'
    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'
    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'
    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: 任意。入力が使用する出力のインデックスです。
    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`で設定）。
  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.