> ## 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 адресной книги Travel Rule

> Didit: добавьте свой кошелёк в адресную книгу Travel Rule, чтобы входящие 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 ru/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: >-
        Добавьте запись в адресную книгу кошельков Travel Rule, чтобы входящие
        переводы по маршруту INTERNAL-rail могли сопоставляться с ней.
      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: >-
            Дублирующийся кошелёк (адрес, блокчейн и memo) для этого приложения,
            memo или X-address, которые блокчейн не может содержать,
            отсутствующий `address`, недействительный `travel_address`,
            `self_declared: true` при отключённом `allow_self_declaration`, либо
            `self_declared: true` при значении `FULL` для
            `ownership_validation_mode`.
          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-address сохраняется как классический адрес и
            его тег, поэтому он сопоставляется с переводами, в которых указана
            любая из этих форм.
        chain:
          type: string
          maxLength: 32
          description: >-
            token блокчейна для адреса, например `ETH` или `BTC`. Когда Didit
            маршрутизирует или регистрирует перевод, сервис сопоставляет записи
            адресной книги по адресу кошелька, а если перевод содержит блокчейн,
            также и по этому значению, без учёта регистра. Блокчейн перевода
            представляет собой `beneficiary_data.chain`, заполняемый из
            криптовалютного блокчейна транзакции или символа валюты (например,
            `ETH`), если вы его не передали, либо `chain` регистрации после
            депозита, поэтому используйте один и тот же token везде. Запись с
            пустым блокчейном соответствует любому блокчейну. Известные
            блокчейны сохраняются под одним каноническим идентификатором
            независимо от переданного написания: "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. Возвращает 400,
            когда `allow_self_declaration` отключён в ваших настройках Travel
            Rule.
        travel_address:
          type: string
          description: >-
            Необязательно. Travel Address контрагента VASP для этого кошелька,
            включающий маршрутизацию TRP для поддерживаемых TRP активов (BTC,
            ETH и USDC в указанной сети). Недействительный Travel Address
            возвращает 400.
          maxLength: 512
        memo:
          type: string
          maxLength: 256
          description: >-
            Необязательно. Destination tag или memo, являющийся частью адреса
            кошелька. XRP: destination tag, целое число от 0 до 4294967295
            (принимается как число JSON). XLM: текстовое memo до 28 байт,
            64-битный идентификатор или 32-байтный хеш в шестнадцатеричном
            формате (hex). EOS: до 256 байт. ATOM: до 256 символов. HBAR: до 100
            байт. Кошельки Bitcoin, EVM, Solana, Tron, Litecoin, Bitcoin Cash,
            Dogecoin и Lightning не поддерживают memo: его указание возвращает
            ошибку `400`. Псевдонимы: `destinationTag` или `destination_tag`.
    WalletAddressEntry:
      type: object
      properties:
        uuid:
          type: string
          format: uuid
        address:
          type: string
          description: >-
            Адрес кошелька; `""` для записи, импортированной только по её хешу.
            Уникален для каждого приложения, сети и memo; сравнение адресов
            выполняется без учёта регистра. После удаления записи вы можете
            зарегистрировать тот же адрес повторно.
        chain:
          type: string
          description: >-
            Токен блокчейна для адреса, например `ETH` или `BTC`. Когда Didit
            маршрутизирует или регистрирует перевод, сервис сопоставляет записи
            адресной книги по адресу кошелька и, если перевод содержит блокчейн,
            также по этому значению без учёта регистра. Блокчейном перевода
            является `beneficiary_data.chain`, заполняемый из криптовалютного
            блокчейна транзакции или символа валюты (например, `ETH`), если вы
            его не передали, либо `chain` регистрации после депозита, поэтому
            используйте один и тот же токен везде. Запись с пустым блокчейном
            совпадает с любым блокчейном. Получатель Lightning (идентификатор
            узла или Lightning Address), зарегистрированный в сети bitcoin,
            сохраняется в нижнем регистре как `LIGHTNING`, по которому
            сопоставляются переводы Lightning. Известные блокчейны сохраняются
            под единым каноническим идентификатором независимо от используемого
            написания: "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: >-
            Travel Address VASP контрагента для этого кошелька, если известен.
            Позволяет Didit маршрутизировать переводы этого получателя через
            рельс TRP для активов, поддерживаемых TRP (BTC, ETH и USDC в
            указанной сети).
        address_hash:
          type: string
          description: >-
            Только для чтения. SHA-256 адреса в нижнем регистре, в
            шестнадцатеричном формате в нижнем регистре. Запись, импортированная
            только по её хэшу, сопоставляется по нему.
        memo:
          type: string
          description: >-
            Destination tag или memo, являющиеся частью кошелька в сети с
            поддержкой memo (XRP, XLM, EOS, ATOM, HBAR); `""` для всего адреса.
            Запись с memo совпадает только с переводами, содержащими это memo;
            запись без memo совпадает со всем адресом целиком.
        receiving_travel_address:
          type: string
          readOnly: true
          description: >-
            Ваш Travel Address для этого кошелька: передайте его отправляющему
            VASP, чтобы его запрос TRP указывал на этот кошелёк. Пусто для
            кошелька, зарегистрированного как кошелёк другого VASP, пока Travel
            Rule отключен, а также до сохранения вашего профиля VASP.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        API-ключ вашего приложения из раздела «Разработчикам» -> «API-ключи» в
        Business Console. Основной ключ имеет полный доступ. Именованный ключ
        может иметь ограниченную область действия: без доступа, чтение или
        запись для каждого ресурса, ограничение определенными сценариями или
        одобренными сессиями, списком IP-адресов и сроком действия. 401
        означает, что ключ неверен, отозван или его срок действия истек; 403
        означает, что ключ не был передан, у ключа нет доступа к этому ресурсу
        или действию, либо запрос поступил с адреса вне его списка IP-адресов;
        404 на маршруте сессии означает, что сессия не входит в сценарии или
        статусы ключа. Ключ без доступа к медиа получает URL изображений, видео
        и PDF как null, а ключ без прав на запись сессий получает ссылки на
        сессии и токены как null. См. https://docs.didit.me/console/api-keys.

````

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