> ## 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で管理下のウォレットをトラベルルールのアドレス帳に追加し、INTERNALレール経由の受信送金をそのウォレットに紐付けます。自己申告による事前検証も可能です。



ウォレットアドレス登録APIプロンプト
        プロンプトをクリップボードにコピー



      
      

\<pre>

\`Register a wallet address in the application's Travel Rule address book so inbound INTERNAL-rail transfers can resolve against it.

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

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

Request body (application/json):
\{
"address": "0x8ba1f109551bD432803012645Ac136ddd64DBA72",   // required; one entry per address (case-insensitive) and chain (exact text) in the application, a duplicate returns 400
"chain": "ETH",                        // optional; use the same chain token your transfers carry (ETH, BTC), or leave blank to match any chain
"memo": "",                            // optional destination tag or memo on XRP, XLM, EOS, ATOM, HBAR (alias: destinationTag); part of the wallet's identity there
"holder_name": "Ana Diaz",             // used for the beneficiary name match
"holder_vendor_data": "user-042",      // your internal id for the holder
"entity_type": "individual",           // free text, defaults to "individual"
"travel_address": "taiwwrTeRpaRbqpQXB9A1JiLtdE686XtYRC316kPuQzbJSTgv7ndnF4ceHM7CReVGuzqcCCu5RfUHdL1FffHhdf3dzQDEgKAUMtAuD6uteY",   // optional: the counterparty VASP's travel address for this wallet, so outbound BTC, ETH and USDC transfers to it can route over TRP
"self_declared": true                  // write-only, POST only: create the entry already verified via a SELF_DECLARATION proof
}

Behavior:
\- self_declared: true creates the entry already ownership-verified - inbound transfers to it skip UNCONFIRMED_OWNERSHIP entirely and go straight to the name match.
It requires allow_self_declaration: true in Travel Rule settings, otherwise 400.
\- Without it, verify ownership later via the wallet-ownership widget (POST /v3/travel-rule/widget-session/).
\- Matching is scoped by chain.
When a transfer carries a chain, an entry matches only if its chain equals that chain (case-insensitive) or the entry's chain is blank.
Chain names are not translated: an entry with chain "ethereum" does not match a transfer with chain "ETH".
A transfer takes its chain from beneficiary_data.chain, else transaction_details.crypto_params.crypto_chain, else custom_properties.crypto_chain, else the currency, uppercased and used only when it is a chain Didit recognises (for example ETH or BTC).
Register entries with the same token your transfers carry (ETH, BTC), or leave chain blank to match any chain.
Inbound TRP inquiries ignore the chain: they match by address, or by the holder_name of a verified entry when the inquiry carries no address.
Confirming ownership with POST /v3/transactions/{transaction_id}/travel-rule/ownership/ also matches by address only.
\- On a memo network the memo is part of the wallet: an entry with a memo matches only transfers naming that memo, an entry without one matches the whole address. A transfer that names no memo never reaches an entry that has one.
\- An XRP X-address is stored as its classic address and its tag. A Lightning payee (node id or Lightning Address) registered on bitcoin is stored lowercased on the LIGHTNING chain, where Lightning transfers are matched.
\- The response carries address_hash (SHA-256 of the lowercased address, hex). To register many wallets at once, or by hash only, use POST /v3/travel-rule/wallet-addresses/import/.

Failure modes:
\- 400 - an entry with this address, chain and memo already exists: {"address": ["A wallet address entry with this address and chain already exists."]}.
\- 400 - a memo or X-address the chain cannot carry, missing address, an invalid travel_address ("Invalid travel address."), or self_declared: true while allow_self_declaration is off.
\- 403 - missing x-api-key (a wrong, revoked or expired key gets 401).

Full guide: /transaction-monitoring/travel-rule#wallet-address-book.`

\</pre>



      
      

貼り付け先



## OpenAPI

````yaml ja/openapi-25.json POST /v3/travel-rule/wallet-addresses/
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/wallet-addresses/:
    post:
      tags:
        - Travel Rule
      summary: ウォレットアドレスを登録する
      description: トラベルルールのウォレットアドレス帳にエントリを追加し、INTERNALレール経由の受信送金をアドレス帳と照合できるようにします。
      operationId: createTravelRuleWalletAddress
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WalletAddressEntryCreate'
            example:
              address: 0xBeneficiaryWallet01
              chain: ETH
              holder_name: Ana Diaz
              holder_vendor_data: user-042
              self_declared: true
      responses:
        '201':
          description: 作成されたエントリ。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletAddressEntry'
        '400':
          description: >-
            このアプリケーションで重複するウォレット（アドレス、チェーン、メモ）、チェーンが扱えないメモまたはXアドレス、`address`の欠落、無効な`travel_address`、`allow_self_declaration`がオフの状態での`self_declared:
            true`、または`ownership_validation_mode`が`FULL`の状態での`self_declared:
            true`。
          content:
            application/json:
              schema:
                type: object
              examples:
                Duplicate entry:
                  value:
                    address:
                      - >-
                        A wallet address entry with this address and chain
                        already exists.
                Invalid travel address:
                  value:
                    travel_address:
                      - Invalid travel address.
                Self-declaration disabled:
                  value:
                    self_declared:
                      - >-
                        Self-declared ownership is disabled for this
                        application.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            https://verification.didit.me/v3/travel-rule/wallet-addresses/ \
              -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
              -d '{"address": "0xBeneficiaryWallet01", "chain": "ETH", "holder_name": "Ana Diaz", "self_declared": true}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.travel_rule.wallet_addresses.create(
                address="0xBeneficiaryWallet01",
                chain="ETH",
                holder_vendor_data="user-042",
                holder_name="Ana Diaz",
                self_declared=True,
            )
            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.walletAddresses.create({
              address: "0xBeneficiaryWallet01",
              chain: "ETH",
              holder_vendor_data: "user-042",
              holder_name: "Ana Diaz",
              self_declared: true,
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.WalletAddresses.Create(ctx, didit.WalletAddressEntryCreate{\n\tAddress:          \"0xBeneficiaryWallet01\",\n\tChain:            didit.String(\"ETH\"),\n\tHolderVendorData: didit.String(\"user-042\"),\n\tHolderName:       didit.String(\"Ana Diaz\"),\n\tSelfDeclared:     didit.Bool(true),\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.WalletAddressEntryCreate;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.travelRule().walletAddresses().create(WalletAddressEntryCreate.builder()
                    .address("0xBeneficiaryWallet01")
                    .chain("ETH")
                    .holderVendorData("user-042")
                    .holderName("Ana Diaz")
                    .selfDeclared(true)
                    .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->walletAddresses->create([
                'address' => '0xBeneficiaryWallet01',
                'chain' => 'ETH',
                'holder_vendor_data' => 'user-042',
                'holder_name' => 'Ana Diaz',
                'self_declared' => true,
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.travel_rule.wallet_addresses.create(
              address: "0xBeneficiaryWallet01",
              chain: "ETH",
              holder_vendor_data: "user-042",
              holder_name: "Ana Diaz",
              self_declared: true
            )
            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.TravelRule.WalletAddresses.CreateAsync(new
            WalletAddressEntryCreate

            {
                Address = "0xBeneficiaryWallet01",
                Chain = "ETH",
                HolderVendorData = "user-042",
                HolderName = "Ana Diaz",
                SelfDeclared = true,
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    WalletAddressEntryCreate:
      type: object
      required:
        - address
      properties:
        address:
          type: string
          maxLength: 128
          description: ウォレットアドレス。XRPのXアドレスはクラシックアドレスとタグとして保存されるため、どちらの形式を指定した送金とも一致します。
        chain:
          type: string
          maxLength: 32
          description: >-
            アドレスのチェーントークンです（例:
            `ETH`、`BTC`）。Diditが送金をルーティングまたは登録する際、アドレス帳のエントリーをウォレットアドレスで照合し、送金にチェーンが含まれる場合はこの値でも照合します（大文字と小文字は区別しません）。送金のチェーンは`beneficiary_data.chain`（送信しない場合は取引の暗号資産チェーンまたは通貨シンボル（例:
            `ETH`）から補完されます）、または入金後登録の`chain`です。そのため、すべての箇所で同じトークンを使用してください。チェーンが空のエントリーは、すべてのチェーンに一致します。既知のチェーンは、送信された表記にかかわらず1つの正規の識別子で保存されます。"ethereum"、"Ethereum"、"ERC20"はすべてETHとして、"BNB
            Smart
            Chain"と"BEP20"はBNBとして、"tron"はTRXとして保存されます。未知のチェーン名は送信されたとおりに保持されます。
        holder_vendor_data:
          type: string
          maxLength: 255
        holder_name:
          type: string
          maxLength: 255
        entity_type:
          type: string
          default: individual
          maxLength: 16
        self_declared:
          type: boolean
          default: false
          description: >-
            書き込み専用。trueの場合、エントリーはSELF_DECLARATION証明によって所有権が検証済みの状態で作成されます。トラベルルール設定で`allow_self_declaration`がオフの場合は400を返します。
        travel_address:
          type: string
          description: >-
            任意。このウォレットに対する取引相手VASPのトラベルアドレスです。TRPが扱う資産（BTC、ETH、および指定ネットワーク上のUSDC）でTRPルーティングが可能になります。無効なトラベルアドレスの場合は400が返されます。
          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`。
    WalletAddressEntry:
      type: object
      properties:
        uuid:
          type: string
          format: uuid
        address:
          type: string
          description: >-
            ウォレットアドレス。ハッシュのみでインポートされたエントリの場合は`""`。アプリケーション、チェーン、メモごとに一意で、アドレスは大文字と小文字を区別せずに比較されます。エントリを削除した後は、同じアドレスを再登録できます。
        chain:
          type: string
          description: >-
            アドレスのチェーントークン（例:
            `ETH`、`BTC`）。Diditが送金をルーティングまたは登録する際は、ウォレットアドレスでアドレス帳のエントリーを照合し、送金にチェーンが含まれる場合はこの値でも大文字・小文字を区別せずに照合します。送金のチェーンは`beneficiary_data.chain`です。送信しなかった場合は取引の暗号資産チェーンまたは通貨シンボル（例:
            `ETH`）から設定され、入金後の登録の場合はその`chain`が使われます。そのため、すべての箇所で同じトークンを使用してください。チェーンが空のエントリーは、どのチェーンにも一致します。bitcoinで登録されたLightningの受取先（ノードIDまたはLightning
            Address）は、小文字に変換されて`LIGHTNING`に保存され、Lightningの送金はそこで照合されます。既知のチェーンは、送信した表記にかかわらず1つの正規識別子で保存されます。"ethereum"、"Ethereum"、"ERC20"はすべてETHとして、"BNB
            Smart
            Chain"と"BEP20"はBNBとして、"tron"はTRXとして保存されます。不明なチェーン名は指定されたとおりに保持されます。
        holder_vendor_data:
          type: string
          description: 保有者に対するお客様の内部識別子です。
        holder_name:
          type: string
          description: 受取人名の照合に使用されるウォレット保有者の名前。
        entity_type:
          type: string
          description: 自由記述のテキスト。デフォルトは"individual"です。
        is_ownership_verified:
          type: boolean
          description: 読み取り専用。このアドレスの所有権が証明済みかどうか。
        created_at:
          type: string
          format: date-time
        travel_address:
          type: string
          description: >-
            このウォレットに対する取引相手VASPのトラベルアドレス(判明している場合)。これにより、TRPが扱うアセット(BTC、ETH、および指定されたネットワーク上のUSDC)について、Diditはこの受取人への送金をTRPレール経由でルーティングできます。
        address_hash:
          type: string
          description: >-
            読み取り専用。小文字化したアドレスのSHA-256を、小文字の16進数で表したものです。ハッシュのみでインポートされたエントリーは、この値で照合されます。
        memo:
          type: string
          description: >-
            メモ型ネットワーク（XRP、XLM、EOS、ATOM、HBAR）でウォレットの一部となる宛先タグまたはメモです。アドレス全体の場合は`""`です。メモ付きのエントリはそのメモを指定した送金にのみ一致し、メモなしのエントリはアドレス全体に一致します。
        receiving_travel_address:
          type: string
          readOnly: true
          description: >-
            このウォレット用の、ウォレットごとのトラベルアドレスです。送信側VASPに渡すと、そのTRP照会でこのウォレットが指定されます。他のVASPのウォレットとして記録されたウォレットの場合、トラベルルールが無効な間、およびVASPプロファイルを保存する前は空です。
  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.