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

# Daftarkan Alamat Dompet API: Buku Alamat Travel Rule

> Daftarkan dompet Anda ke buku alamat Travel Rule Didit agar transfer INTERNAL masuk ke dompet itu, opsional terverifikasi lewat deklarasi mandiri.



Prompt API untuk Mendaftarkan Alamat
        Salin prompt ke papan klip



      
      

\<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>



      
      

Tempel ke



## OpenAPI

````yaml id/openapi-25.json POST /v3/travel-rule/wallet-addresses/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API Verifikasi Identitas. Lakukan autentikasi dengan header x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/travel-rule/wallet-addresses/:
    post:
      tags:
        - Travel Rule
      summary: Daftarkan alamat dompet
      description: >-
        Tambahkan entri ke buku alamat dompet Travel Rule Anda agar transfer
        masuk melalui INTERNAL-rail dapat dicocokkan dengannya.
      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: Entri yang dibuat.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletAddressEntry'
        '400':
          description: >-
            Dompet duplikat (alamat, chain, dan memo) untuk aplikasi ini, memo
            atau X-address yang tidak dapat dibawa oleh chain, `address` tidak
            ada, `travel_address` tidak valid, `self_declared: true` saat
            `allow_self_declaration` nonaktif, atau `self_declared: true` saat
            `ownership_validation_mode` bernilai `FULL`.
          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: >-
            Alamat dompet. Alamat X XRP disimpan sebagai alamat klasik dan
            tag-nya, sehingga cocok dengan transfer yang mencantumkan salah satu
            bentuk tersebut.
        chain:
          type: string
          maxLength: 32
          description: >-
            Token chain untuk alamat, misalnya `ETH` atau `BTC`. Ketika Didit
            merutekan atau mendaftarkan transfer, Didit mencocokkan entri buku
            alamat pada alamat dompet dan, jika transfer membawa chain, pada
            nilai ini juga, dengan mengabaikan huruf besar/kecil. Chain dari
            transfer adalah `beneficiary_data.chain`, diisi dari chain kripto
            transaksi atau simbol mata uang (misalnya `ETH`) jika Anda tidak
            mengirimkannya, atau `chain` dari pendaftaran setelah deposit, jadi
            gunakan token yang sama di semua tempat. Entri dengan chain kosong
            cocok dengan chain apa pun. Chain yang dikenal disimpan di bawah
            satu pengidentifikasi kanonis apa pun ejaan yang Anda kirimkan:
            "ethereum", "Ethereum", dan "ERC20" semuanya disimpan sebagai ETH,
            "BNB Smart Chain" dan "BEP20" sebagai BNB, "tron" sebagai TRX. Nama
            chain yang tidak dikenal disimpan sebagaimana diberikan.
        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: >-
            Hanya-tulis. Jika true, entri dibuat dalam keadaan kepemilikannya
            sudah diverifikasi melalui bukti SELF_DECLARATION. Mengembalikan 400
            ketika `allow_self_declaration` dinonaktifkan di pengaturan Travel
            Rule Anda.
        travel_address:
          type: string
          description: >-
            Opsional. Travel Address VASP pihak lawan untuk dompet ini, yang
            mengaktifkan perutean TRP untuk aset yang didukung TRP (BTC, ETH,
            dan USDC pada jaringan yang disebutkan). Travel Address yang tidak
            valid mengembalikan 400.
          maxLength: 512
        memo:
          type: string
          maxLength: 256
          description: >-
            Opsional. Tag tujuan atau memo yang merupakan bagian dari dompet.
            XRP: tag tujuan, bilangan bulat dari 0 hingga 4294967295 (angka JSON
            diterima). XLM: memo teks hingga 28 byte, ID 64-bit, atau hash
            32-byte dalam hex. EOS: hingga 256 byte. ATOM: hingga 256 karakter.
            HBAR: hingga 100 byte. Dompet Bitcoin, EVM, Solana, Tron, Litecoin,
            Bitcoin Cash, Dogecoin, dan Lightning tidak menerima memo: jika
            disertakan akan menghasilkan `400`. Alias: `destinationTag` atau
            `destination_tag`.
    WalletAddressEntry:
      type: object
      properties:
        uuid:
          type: string
          format: uuid
        address:
          type: string
          description: >-
            Alamat dompet; `""` untuk entri yang diimpor hanya berdasarkan
            hash-nya. Unik per aplikasi, rantai, dan memo, dengan membandingkan
            alamat tanpa memperhatikan huruf besar/kecil. Setelah Anda menghapus
            entri, Anda dapat mendaftarkan alamat yang sama lagi.
        chain:
          type: string
          description: >-
            Token chain untuk alamat, misalnya `ETH` atau `BTC`. Saat Didit
            merutekan atau mendaftarkan transfer, Didit mencocokkan entri buku
            alamat pada alamat dompet dan, jika transfer menyertakan chain, pada
            nilai ini juga, mengabaikan perbedaan huruf besar/kecil. Chain suatu
            transfer adalah `beneficiary_data.chain`, diisi dari chain kripto
            atau simbol mata uang transaksi (misalnya `ETH`) saat Anda tidak
            mengirimkannya, atau `chain` dari pendaftaran pascadeposit, jadi
            gunakan token yang sama di mana saja. Entri dengan chain kosong
            cocok dengan chain mana pun. Penerima pembayaran Lightning (ID node
            atau Lightning Address) yang terdaftar di bitcoin disimpan dalam
            huruf kecil pada `LIGHTNING`, tempat transfer Lightning dicocokkan.
            Chain yang dikenal disimpan di bawah satu pengidentifikasi kanonik
            apa pun ejaan yang Anda kirimkan: "ethereum", "Ethereum", dan
            "ERC20" semuanya disimpan sebagai ETH, "BNB Smart Chain" dan "BEP20"
            sebagai BNB, "tron" sebagai TRX. Nama chain yang tidak dikenal
            disimpan sebagaimana diberikan.
        holder_vendor_data:
          type: string
          description: Pengenal internal Anda untuk pemegang.
        holder_name:
          type: string
          description: Nama pemegang dompet, digunakan untuk pencocokan nama penerima.
        entity_type:
          type: string
          description: Teks bebas, secara default bernilai "individual".
        is_ownership_verified:
          type: boolean
          description: Hanya-baca. Apakah kepemilikan alamat ini telah terbukti.
        created_at:
          type: string
          format: date-time
        travel_address:
          type: string
          description: >-
            Travel Address milik VASP pihak lawan untuk dompet ini, jika
            diketahui. Memungkinkan Didit merutekan transfer penerima ini
            melalui jalur TRP, untuk aset yang didukung TRP (BTC, ETH, dan USDC
            pada jaringan yang disebutkan).
        address_hash:
          type: string
          description: >-
            Hanya-baca. SHA-256 dari alamat yang diubah menjadi huruf kecil,
            dalam heksadesimal huruf kecil. Entri yang diimpor hanya berdasarkan
            hash-nya akan dicocokkan pada nilai ini.
        memo:
          type: string
          description: >-
            Destination tag atau memo yang merupakan bagian dari dompet di
            jaringan memo (XRP, XLM, EOS, ATOM, HBAR); `""` untuk seluruh
            alamat. Entri dengan memo hanya cocok dengan transfer yang
            mencantumkan memo tersebut; entri tanpa memo cocok dengan seluruh
            alamat.
        receiving_travel_address:
          type: string
          readOnly: true
          description: >-
            Travel Address per-dompet Anda untuk dompet ini: berikan kepada VASP
            pengirim agar permintaan TRP-nya menyebut dompet ini. Kosong untuk
            dompet yang tercatat sebagai milik VASP lain, saat Travel Rule
            dinonaktifkan, dan sebelum profil VASP Anda disimpan.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Kunci API aplikasi Anda, dari Developers -> API keys di Business
        Console. Kunci utama memiliki akses penuh. Kunci bernama dapat diberi
        cakupan: none, read, atau write per sumber daya, dibatasi pada beberapa
        alur kerja atau pada sesi yang disetujui, pada daftar alamat IP, dan
        pada tanggal kedaluwarsa. 401 berarti kuncinya salah, dicabut, atau
        kedaluwarsa; 403 berarti tidak ada kunci yang dikirimkan, kunci tidak
        memiliki akses ke sumber daya atau tindakan ini, atau permintaan datang
        dari alamat di luar daftar IP-nya; 404 pada rute sesi berarti sesi
        berada di luar alur kerja atau status kunci tersebut. Kunci tanpa akses
        media menerima URL gambar, video, dan PDF sebagai null, dan kunci tanpa
        izin tulis sesi menerima tautan sesi dan token sebagai null. Lihat
        https://docs.didit.me/console/api-keys.

````

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