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

# Register Wallet Address

> Add an entry to your Travel Rule wallet address book so inbound INTERNAL-rail transfers can resolve against it.

export const AgentPromptAccordion = ({prompt, title = "AI Agent Integration Prompt"}) => {
  const [copied, setCopied] = React.useState(false);
  const handleCopy = e => {
    e.stopPropagation();
    if (!prompt) return;
    navigator.clipboard.writeText(prompt.trim()).then(() => {
      setCopied(true);
      setTimeout(() => setCopied(false), 2000);
    });
  };
  const agents = ["Claude Code", "Codex", "Cursor", "Devin", "Windsurf", "GitHub Copilot"];
  return <div className="didit-agent-card">
      {}
      <div className="didit-agent-titlebar">
        <div className="didit-agent-dots" aria-hidden="true">
          <span className="didit-agent-dot didit-agent-dot-red"></span>
          <span className="didit-agent-dot didit-agent-dot-yellow"></span>
          <span className="didit-agent-dot didit-agent-dot-green"></span>
        </div>
        <span className="didit-agent-filename">{title}</span>
        <button type="button" className={`didit-agent-copy ${copied ? "didit-agent-copy-copied" : ""}`} onClick={handleCopy} title="Copy prompt to clipboard" aria-label={copied ? "Copied!" : "Copy prompt to clipboard"}>
          {copied ? <>
              <svg width="13" height="13" viewBox="0 0 16 16" fill="none">
                <path d="M3 8.5l3.5 3.5L13 4" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
              </svg>
              <span>Copied</span>
            </> : <>
              <svg width="13" height="13" viewBox="0 0 16 16" fill="none">
                <rect x="5" y="5" width="9" height="9" rx="1.5" stroke="currentColor" strokeWidth="1.5" />
                <path d="M11 5V3.5A1.5 1.5 0 0 0 9.5 2h-6A1.5 1.5 0 0 0 2 3.5v6A1.5 1.5 0 0 0 3.5 11H5" stroke="currentColor" strokeWidth="1.5" />
              </svg>
              <span>Copy</span>
            </>}
        </button>
      </div>

      {}
      <pre className="didit-agent-body"><code>{prompt.trim()}</code></pre>

      {}
      <div className="didit-agent-footer">
        <span className="didit-agent-footer-label">Paste into</span>
        <div className="didit-agent-chips">
          {agents.map(name => <span key={name} className="didit-agent-chip">{name}</span>)}
        </div>
      </div>
    </div>;
};

<AgentPromptAccordion
  title="Register Wallet Address API Prompt"
  prompt={`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": "0xBeneficiaryWallet01",   // required; unique per application among non-deleted entries - duplicate -> 400
"chain": "ethereum",                   // optional free-text chain identifier
"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": "ta...",             // optional: counterparty VASP travel address -> routes this beneficiary 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.
- Without it, verify ownership later via the wallet-ownership widget (POST /v3/travel-rule/widget-session/).
- Matching is by address only, not scoped by chain - avoid registering the same address string for two different chains.

Failure modes:
- 400 - duplicate address among non-deleted entries, or missing address.
- 401 - missing or malformed x-api-key.

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


## OpenAPI

````yaml POST /v3/travel-rule/wallet-addresses/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: Identity verification API. Authenticate with x-api-key header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/travel-rule/wallet-addresses/:
    post:
      tags:
        - Travel Rule
      summary: Register a wallet address
      description: >-
        Add an entry to your Travel Rule wallet address book so inbound
        INTERNAL-rail transfers can resolve against it.
      operationId: createTravelRuleWalletAddress
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WalletAddressEntryCreate'
            example:
              address: 0xBeneficiaryWallet01
              chain: ethereum
              holder_name: Ana Diaz
              holder_vendor_data: user-042
              self_declared: true
      responses:
        '201':
          description: The created entry.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletAddressEntry'
        '400':
          description: Duplicate address for this application and chain.
          content:
            application/json:
              schema:
                type: object
              example:
                address:
                  - >-
                    A wallet address entry with this address and chain already
                    exists.
      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": "ethereum", "holder_name": "Ana Diaz", "self_declared": true}'
components:
  schemas:
    WalletAddressEntryCreate:
      type: object
      required:
        - address
      properties:
        address:
          type: string
        chain:
          type: string
        holder_vendor_data:
          type: string
        holder_name:
          type: string
        entity_type:
          type: string
          default: individual
        self_declared:
          type: boolean
          default: false
          description: >-
            Write-only. When true, the entry is created already
            ownership-verified via a SELF_DECLARATION proof.
        travel_address:
          type: string
          description: >-
            Optional. The counterparty VASP's travel address for this wallet,
            enabling TRP routing.
    WalletAddressEntry:
      type: object
      properties:
        uuid:
          type: string
          format: uuid
        address:
          type: string
          description: >-
            The wallet address. Unique per application and chain among
            non-deleted entries.
        chain:
          type: string
          nullable: true
          description: Free-text chain identifier, e.g. "ethereum", "bitcoin".
        holder_vendor_data:
          type: string
          nullable: true
          description: Your internal identifier for the holder.
        holder_name:
          type: string
          nullable: true
          description: Name of the wallet holder, used for the beneficiary name match.
        entity_type:
          type: string
          description: Free text, defaults to "individual".
        is_ownership_verified:
          type: boolean
          description: Read-only. Whether ownership of this address has been proven.
        created_at:
          type: string
          format: date-time
        self_declared:
          type: boolean
          description: Whether the entry was created as a self-declared ownership proof.
        travel_address:
          type: string
          nullable: true
          description: >-
            The counterparty VASP's travel address for this wallet, if known.
            Lets Didit route this beneficiary's transfers over the TRP rail.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````