> ## 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 d'enregistrement d'adresse Travel Rule

> Ajoutez un portefeuille que vous contrôlez au carnet d'adresses Travel Rule de Didit pour que les transferts INTERNAL entrants y soient rattachés.



Prompt de l'API d'enregistrement d'adresse de portefeuille
        Copier le prompt dans le presse-papiers



      
      

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



      
      

Coller dans



## OpenAPI

````yaml fr/openapi-25.json POST /v3/travel-rule/wallet-addresses/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de vérification d'identité. Authentifiez-vous avec l'en-tête x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/travel-rule/wallet-addresses/:
    post:
      tags:
        - Travel Rule
      summary: Enregistrer une adresse de portefeuille
      description: >-
        Ajoutez une entrée à votre carnet d'adresses de portefeuilles Travel
        Rule afin que les transferts entrants du rail INTERNAL puissent être mis
        en correspondance avec celle-ci.
      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: L'entrée créée.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletAddressEntry'
        '400':
          description: >-
            Portefeuille en double (adresse, blockchain et mémo) pour cette
            application, mémo ou X-address non pris en charge par la blockchain,
            `address` manquante, `travel_address` invalide, `self_declared:
            true` alors que `allow_self_declaration` est désactivé, ou
            `self_declared: true` alors que `ownership_validation_mode` est
            `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'adresse du portefeuille. Une X-address XRP est stockée sous sa
            forme d'adresse classique et son tag, afin de correspondre aux
            transferts mentionnant l'une ou l'autre forme.
        chain:
          type: string
          maxLength: 32
          description: "Token de la blockchain pour l'adresse, par exemple `ETH` ou `BTC`. Lorsque Didit achemine ou enregistre un transfert, il fait correspondre les entrées du carnet d'adresses sur l'adresse du portefeuille et, si le transfert comporte une blockchain, sur cette valeur également, sans tenir compte de la casse. La blockchain d'un transfert est `beneficiary_data.chain`, renseignée à partir de la blockchain crypto ou du symbole de devise de la transaction (par exemple `ETH`) si vous ne l'envoyez pas, ou à partir du `chain` d'un enregistrement après dépôt\_; utilisez donc le même token partout. Une entrée avec une blockchain vide correspond à n'importe quelle blockchain. Les blockchains connues sont stockées sous un identifiant canonique unique, quelle que soit l'orthographe envoyée\_: \"ethereum\", \"Ethereum\" et \"ERC20\" sont toutes stockées sous forme d'ETH, \"BNB Smart Chain\" et \"BEP20\" sous forme de BNB, \"tron\" sous forme de TRX. Un nom de blockchain inconnu est conservé tel quel."
        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: >-
            En écriture seule. Lorsque la valeur est true, l'entrée est créée
            avec un actionnariat déjà vérifié via une preuve SELF_DECLARATION.
            Renvoie 400 lorsque `allow_self_declaration` est désactivé dans vos
            paramètres Travel Rule.
        travel_address:
          type: string
          description: >-
            Optionnel. La Travel Address du VASP de contrepartie pour ce
            portefeuille, activant le routage TRP pour les actifs pris en charge
            par TRP (BTC, ETH et USDC sur un réseau spécifié). Une Travel
            Address invalide renvoie 400.
          maxLength: 512
        memo:
          type: string
          maxLength: 256
          description: >-
            Facultatif. Le destination tag ou memo associé au portefeuille. XRP
            : un destination tag, un entier de 0 à 4294967295 (un nombre JSON
            est accepté). XLM : un memo texte jusqu'à 28 octets, un identifiant
            64 bits ou un hachage de 32 octets en hexadécimal. EOS : jusqu'à 256
            octets. ATOM : jusqu'à 256 caractères. HBAR : jusqu'à 100 octets.
            Les portefeuilles Bitcoin, EVM, Solana, Tron, Litecoin, Bitcoin
            Cash, Dogecoin et Lightning ne prennent aucun memo : en renseigner
            un renvoie une erreur `400`. Alias : `destinationTag` ou
            `destination_tag`.
    WalletAddressEntry:
      type: object
      properties:
        uuid:
          type: string
          format: uuid
        address:
          type: string
          description: >-
            L'adresse du portefeuille ; `""` pour une entrée importée uniquement
            par son hash. Unique par application, chaîne et mémo, en comparant
            l'adresse sans tenir compte de la casse. Après avoir supprimé une
            entrée, vous pouvez enregistrer à nouveau la même adresse.
        chain:
          type: string
          description: "Token de blockchain pour l'adresse, par exemple `ETH` ou `BTC`. Lorsque Didit achemine ou enregistre un transfert, il fait correspondre les entrées du carnet d'adresses sur l'adresse du portefeuille et, lorsque le transfert comporte une blockchain, sur cette valeur également, sans distinction de casse. La blockchain d'un transfert est `beneficiary_data.chain`, renseignée à partir de la blockchain crypto ou du symbole de devise de la transaction (par exemple `ETH`) si vous ne l'envoyez pas, ou à partir du `chain` d'un enregistrement après dépôt\_; utilisez donc le même token partout. Une entrée avec une blockchain vide correspond à n'importe quelle blockchain. Un bénéficiaire Lightning (un identifiant de nœud ou une adresse Lightning) enregistré sur bitcoin est stocké en minuscules sur `LIGHTNING`, où les transferts Lightning sont mis en correspondance. Les blockchains connues sont stockées sous un identifiant canonique unique, quelle que soit l'orthographe envoyée\_: « ethereum », « Ethereum » et « ERC20 » sont toutes stockées sous ETH, « BNB Smart Chain » et « BEP20 » sous BNB, « tron » sous TRX. Un nom de blockchain inconnu est conservé tel quel."
        holder_vendor_data:
          type: string
          description: Votre identifiant interne pour le titulaire.
        holder_name:
          type: string
          description: >-
            Nom du titulaire du portefeuille, utilisé pour la correspondance du
            nom du bénéficiaire.
        entity_type:
          type: string
          description: Texte libre, valeur par défaut "individual".
        is_ownership_verified:
          type: boolean
          description: >-
            Lecture seule. Indique si la propriété de cette adresse a été
            prouvée.
        created_at:
          type: string
          format: date-time
        travel_address:
          type: string
          description: >-
            La Travel Address du VASP de la contrepartie pour ce portefeuille,
            si elle est connue. Permet à Didit d'acheminer les transferts de ce
            bénéficiaire via le canal TRP, pour les actifs pris en charge par
            TRP (BTC, ETH et USDC sur un réseau désigné).
        address_hash:
          type: string
          description: >-
            Lecture seule. SHA-256 de l'adresse en minuscules, au format
            hexadécimal en minuscules. Une entrée importée uniquement par son
            hachage est mise en correspondance sur cette valeur.
        memo:
          type: string
          description: >-
            Le tag de destination ou mémo faisant partie du portefeuille sur un
            réseau à mémo (XRP, XLM, EOS, ATOM, HBAR) ; `""` pour l'adresse
            entière. Une entrée avec un mémo ne correspond qu'aux transferts
            mentionnant ce mémo ; une entrée sans mémo correspond à l'adresse
            entière.
        receiving_travel_address:
          type: string
          readOnly: true
          description: >-
            Votre Travel Address par portefeuille pour ce portefeuille :
            transmettez-la au VASP donneur d'ordre pour que sa demande TRP
            désigne ce portefeuille. Vide pour un portefeuille enregistré comme
            appartenant à un autre VASP, tant que Travel Rule est désactivé et
            avant l'enregistrement de votre profil VASP.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La clé API de votre application, issue de Développeurs -> Clés API dans
        la Business Console. La clé principale dispose d'un accès complet. Une
        clé nommée peut être restreinte : aucun, lecture ou écriture par
        ressource, limitée à certains workflows ou aux sessions approuvées, à
        une liste d'adresses IP et à une date d'expiration. 401 signifie que la
        clé est incorrecte, révoquée ou expirée ; 403 signifie qu'aucune clé n'a
        été envoyée, que la clé n'a pas accès à cette ressource ou action, ou
        que la requête provient d'une adresse hors de sa liste d'IP ; 404 sur
        une route de session signifie que la session est hors des workflows ou
        des statuts de la clé. Une clé sans accès aux médias reçoit les URL
        d'images, de vidéos et de PDF à null, et une clé sans accès en écriture
        aux sessions reçoit les liens et tokens de session à null. Voir
        https://docs.didit.me/console/api-keys.

````

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