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

# Registra indirizzo wallet API: rubrica Travel Rule

> Con Didit aggiungi alla rubrica Travel Rule un wallet di tua proprietà, opzionalmente preverificato con autodichiarazione.



Prompt API per la registrazione di un indirizzo wallet
        Copia il prompt negli appunti



      
      

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



      
      

Incolla in



## OpenAPI

````yaml it/openapi-25.json POST /v3/travel-rule/wallet-addresses/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API di verifica dell'identità. Autenticati con l'intestazione x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/travel-rule/wallet-addresses/:
    post:
      tags:
        - Travel Rule
      summary: Registra un indirizzo wallet
      description: >-
        Aggiungi una voce alla tua rubrica degli indirizzi wallet per la Travel
        Rule in modo che i trasferimenti in entrata tramite il canale
        INTERNAL-rail possano essere risolti rispetto a essa.
      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: La voce creata.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletAddressEntry'
        '400':
          description: >-
            Wallet duplicato (indirizzo, blockchain e memo) per questa
            applicazione, un memo o X-address che la blockchain non può
            supportare, un `address` mancante, un `travel_address` non valido,
            `self_declared: true` mentre `allow_self_declaration` è disattivato,
            oppure `self_declared: true` mentre `ownership_validation_mode` è
            `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: >-
            L'indirizzo del wallet. Un indirizzo X-address XRP viene memorizzato
            come indirizzo classico e relativo tag, in modo da corrispondere ai
            trasferimenti che specificano uno dei due formati.
        chain:
          type: string
          maxLength: 32
          description: >-
            Token della blockchain per l'indirizzo, ad esempio `ETH` o `BTC`.
            Quando Didit instrada o registra un trasferimento, confronta le voci
            della rubrica sull'indirizzo del wallet e, quando il trasferimento
            include una blockchain, anche su questo valore, ignorando maiuscole
            e minuscole. La blockchain di un trasferimento è
            `beneficiary_data.chain`, compilata a partire dalla blockchain
            crypto o dal simbolo di valuta della transazione (ad esempio `ETH`)
            quando non la invii, oppure la `chain` di una registrazione
            post-deposito, quindi usa lo stesso token ovunque. Una voce con una
            blockchain vuota corrisponde a qualsiasi blockchain. Le blockchain
            note sono memorizzate sotto un unico identificatore canonico
            indipendentemente dall'ortografia inviata: "ethereum", "Ethereum" e
            "ERC20" sono tutte memorizzate come ETH, "BNB Smart Chain" e "BEP20"
            come BNB, "tron" come TRX. Il nome di una blockchain sconosciuta
            viene mantenuto così come fornito.
        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: >-
            Sola scrittura. Quando true, la voce viene creata con l'assetto
            proprietario già verificato tramite una prova SELF_DECLARATION.
            Restituisce 400 quando `allow_self_declaration` è disattivato nelle
            impostazioni della Travel Rule.
        travel_address:
          type: string
          description: >-
            Opzionale. Il Travel Address del VASP della controparte per questo
            wallet, abilitando l'instradamento TRP per gli asset gestiti da TRP
            (BTC, ETH e USDC su una rete specificata). Un Travel Address non
            valido restituisce 400.
          maxLength: 512
        memo:
          type: string
          maxLength: 256
          description: >-
            Opzionale. Il destination tag o memo che fa parte del wallet. XRP:
            un destination tag, un numero intero da 0 a 4294967295 (è accettato
            un numero JSON). XLM: un memo di testo fino a 28 byte, un ID a 64
            bit o un hash a 32 byte in esadecimale. EOS: fino a 256 byte. ATOM:
            fino a 256 caratteri. HBAR: fino a 100 byte. I wallet Bitcoin, EVM,
            Solana, Tron, Litecoin, Bitcoin Cash, Dogecoin e Lightning non
            accettano memo: specificarne uno restituisce `400`. Alias:
            `destinationTag` o `destination_tag`.
    WalletAddressEntry:
      type: object
      properties:
        uuid:
          type: string
          format: uuid
        address:
          type: string
          description: >-
            L'indirizzo del wallet; `""` per una voce importata solo tramite il
            suo hash. Univoco per applicazione, rete e memo, confrontando
            l'indirizzo senza fare distinzione tra maiuscole e minuscole. Dopo
            aver eliminato una voce, puoi registrare nuovamente lo stesso
            indirizzo.
        chain:
          type: string
          description: >-
            Token di chain per l'indirizzo, ad esempio `ETH` o `BTC`. Quando
            Didit instrada o registra un trasferimento, associa le voci della
            rubrica in base all'indirizzo e, quando il trasferimento include una
            chain, anche su questo valore, ignorando maiuscole e minuscole. La
            chain di un trasferimento è `beneficiary_data.chain`, compilata a
            partire dalla chain crypto o dal simbolo della valuta della
            transazione (ad esempio `ETH`) quando non la invii, oppure la
            `chain` di una registrazione successiva al deposito, quindi usa lo
            stesso token ovunque. Una voce con una chain vuota corrisponde a
            qualsiasi chain. Un beneficiario Lightning (un id di nodo o un
            indirizzo Lightning) registrato su bitcoin viene memorizzato in
            minuscolo su `LIGHTNING`, dove vengono associati i trasferimenti
            Lightning. Le chain note vengono memorizzate con un identificatore
            canonico indipendentemente da come vengono scritte: "ethereum",
            "Ethereum" ed "ERC20" sono tutte memorizzate come ETH, "BNB Smart
            Chain" e "BEP20" come BNB, "tron" come TRX. Un nome di chain
            sconosciuto viene mantenuto così come fornito.
        holder_vendor_data:
          type: string
          description: Il tuo identificatore interno per il titolare.
        holder_name:
          type: string
          description: >-
            Nome del titolare del wallet, utilizzato per la corrispondenza del
            nome del beneficiario.
        entity_type:
          type: string
          description: Testo libero, il valore predefinito è "individual".
        is_ownership_verified:
          type: boolean
          description: >-
            Sola lettura. Indica se la proprietà di questo indirizzo è stata
            comprovata.
        created_at:
          type: string
          format: date-time
        travel_address:
          type: string
          description: >-
            Il Travel Address del VASP di controparte per questo wallet, se
            noto. Consente a Didit di instradare i trasferimenti di questo
            beneficiario tramite il canale TRP, per gli asset supportati da TRP
            (BTC, ETH e USDC su una rete specifica).
        address_hash:
          type: string
          description: >-
            Sola lettura. SHA-256 dell'indirizzo in caratteri minuscoli, in
            formato esadecimale minuscolo. Una voce importata unicamente tramite
            il suo hash viene confrontata in base a questo valore.
        memo:
          type: string
          description: >-
            Il destination tag o memo che fa parte del wallet su una rete con
            memo (XRP, XLM, EOS, ATOM, HBAR); `""` per l'intero indirizzo. Una
            voce con un memo corrisponde solo ai trasferimenti che indicano tale
            memo; una voce senza memo corrisponde all'intero indirizzo.
        receiving_travel_address:
          type: string
          readOnly: true
          description: >-
            Il tuo Travel Address per questo wallet: forniscilo al VASP mittente
            affinché la sua richiesta TRP indichi questo wallet. Vuoto per un
            wallet registrato come appartenente a un altro VASP, quando la
            Travel Rule è disattivata e prima che il tuo profilo VASP sia
            salvato.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La chiave API della tua applicazione, da Developers -> API keys nella
        Business Console. La chiave primaria ha accesso completo. Una chiave con
        nome può avere un ambito definito: nessuno, lettura o scrittura per
        risorsa, limitata ad alcuni workflow o a sessioni approvate, a un elenco
        di indirizzi IP e a una data di scadenza. 401 indica che la chiave è
        errata, revocata o scaduta; 403 indica che non è stata inviata alcuna
        chiave, che la chiave non ha accesso a questa risorsa o azione, oppure
        che la richiesta proviene da un indirizzo non incluso nel suo elenco IP;
        404 su una route di sessione indica che la sessione non rientra nei
        workflow o negli stati previsti dalla chiave. Una chiave senza accesso
        ai media riceve gli URL di immagini, video e PDF come null, e una chiave
        senza permessi di scrittura sulle sessioni riceve link e token di
        sessione come null. Consulta https://docs.didit.me/console/api-keys.

````

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