Didit Travel Rule API

The Travel Rule API from Didit — 11 operation(s) for travel rule.

OpenAPI Specification

didit-travel-rule-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification Billing Travel Rule API
  description: Identity verification API. Authenticate with x-api-key header.
servers:
- url: https://verification.didit.me
tags:
- name: Travel Rule
paths:
  /v3/travel-rule/settings/:
    get:
      summary: Get Travel Rule settings
      description: Read the application's Travel Rule settings and VASP profile. Auto-creates a default (disabled) settings row and an empty profile on first read.
      operationId: getTravelRuleSettings
      tags:
      - Travel Rule
      security:
      - ApiKeyAuth: []
      x-codeSamples:
      - lang: curl
        label: curl
        source: "curl -X GET https://verification.didit.me/v3/travel-rule/settings/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
      responses:
        '200':
          description: Current Travel Rule settings and VASP profile.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleSettingsDetail'
              examples:
                Disabled (default):
                  value:
                    is_enabled: false
                    jurisdiction: EU
                    name_matching_strictness: DEFAULT
                    confirmation_timeout_hours: 48
                    timeout_outcome: HOLD
                    threshold_amount: '0.00'
                    legal_name: ''
                    lei: ''
                    compliance_email: ''
                    is_discoverable: true
    put:
      summary: Update Travel Rule settings
      description: 'Upsert the application''s Travel Rule settings and VASP profile. Partial update — only send the fields you want to change. Setting `is_enabled: true` requires a non-blank `legal_name` (already stored or included in the same request), otherwise returns 400.'
      operationId: updateTravelRuleSettings
      tags:
      - Travel Rule
      security:
      - ApiKeyAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleSettingsUpdate'
            example:
              is_enabled: true
              legal_name: Origin CASP SL
              jurisdiction: EU
              name_matching_strictness: DEFAULT
              confirmation_timeout_hours: 48
              timeout_outcome: HOLD
              is_discoverable: true
      x-codeSamples:
      - lang: curl
        label: curl
        source: "curl -X PUT https://verification.didit.me/v3/travel-rule/settings/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"is_enabled\": true, \"legal_name\": \"Origin CASP SL\", \"jurisdiction\": \"EU\"}'"
      responses:
        '200':
          description: Updated settings and profile, in the same shape as GET.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleSettingsDetail'
        '400':
          description: Validation error, e.g. enabling without a legal_name.
          content:
            application/json:
              schema:
                type: object
              example:
                legal_name:
                - legal_name is required to enable travel rule.
  /v3/travel-rule/wallet-addresses/:
    get:
      summary: List wallet address book entries
      description: Paginated list of your application's Travel Rule wallet address book, newest first.
      operationId: listTravelRuleWalletAddresses
      tags:
      - Travel Rule
      security:
      - ApiKeyAuth: []
      parameters:
      - name: limit
        in: query
        schema:
          type: integer
          default: 50
          minimum: 1
      - name: offset
        in: query
        schema:
          type: integer
          default: 0
          minimum: 0
      x-codeSamples:
      - lang: curl
        label: curl
        source: "curl -X GET https://verification.didit.me/v3/travel-rule/wallet-addresses/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
      responses:
        '200':
          description: Paginated wallet address book entries.
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                  next:
                    type: string
                    nullable: true
                  previous:
                    type: string
                    nullable: true
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/WalletAddressEntry'
    post:
      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
      tags:
      - Travel Rule
      security:
      - ApiKeyAuth: []
      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
      x-codeSamples:
      - lang: curl
        label: curl
        source: "curl -X POST https://verification.didit.me/v3/travel-rule/wallet-addresses/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"address\": \"0xBeneficiaryWallet01\", \"chain\": \"ethereum\", \"holder_name\": \"Ana Diaz\", \"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.
  /v3/travel-rule/wallet-addresses/{entry_uuid}/:
    patch:
      summary: Update wallet address holder metadata
      description: Partial update of holder_name, holder_vendor_data, entity_type, and travel_address. Setting travel_address attaches a TRP routing address to the entry; invalid values are rejected with 400. The response echoes only these four fields.
      operationId: updateTravelRuleWalletAddress
      tags:
      - Travel Rule
      security:
      - ApiKeyAuth: []
      parameters:
      - name: entry_uuid
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WalletAddressEntryUpdate'
            example:
              holder_name: Ana Updated
              travel_address: ta...
      x-codeSamples:
      - lang: curl
        label: curl
        source: "curl -X PATCH https://verification.didit.me/v3/travel-rule/wallet-addresses/{entry_uuid}/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"holder_name\": \"Ana Updated\", \"travel_address\": \"ta...\"}'"
      responses:
        '200':
          description: The updated fields.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletAddressEntryUpdate'
    delete:
      summary: Soft-delete a wallet address
      description: Soft-deletes the entry (deleted_at is set). The address is freed up for re-registration; ownership proofs are retained for audit.
      operationId: deleteTravelRuleWalletAddress
      tags:
      - Travel Rule
      security:
      - ApiKeyAuth: []
      parameters:
      - name: entry_uuid
        in: path
        required: true
        schema:
          type: string
          format: uuid
      x-codeSamples:
      - lang: curl
        label: curl
        source: "curl -X DELETE https://verification.didit.me/v3/travel-rule/wallet-addresses/{entry_uuid}/ \\\n  -H 'x-api-key: YOUR_API_KEY'"
      responses:
        '204':
          description: Deleted.
  /v3/travel-rule/vasps/:
    get:
      summary: Search the VASP directory
      description: Paginated search across discoverable Didit customers with Travel Rule enabled, plus VASPs catalogued in the internal counterparty registry. Excludes your own application's profile.
      operationId: listTravelRuleVasps
      tags:
      - Travel Rule
      security:
      - ApiKeyAuth: []
      parameters:
      - name: search
        in: query
        schema:
          type: string
        description: Case-insensitive substring match on VASP name.
      - name: limit
        in: query
        schema:
          type: integer
          default: 50
          minimum: 1
      - name: offset
        in: query
        schema:
          type: integer
          default: 0
          minimum: 0
      x-codeSamples:
      - lang: curl
        label: curl
        source: "curl -X GET 'https://verification.didit.me/v3/travel-rule/vasps/?search=Bene' \\\n  -H 'x-api-key: YOUR_API_KEY'"
      responses:
        '200':
          description: Paginated, name-sorted VASP directory results.
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                  next:
                    type: string
                    nullable: true
                  previous:
                    type: string
                    nullable: true
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/VaspDirectoryEntry'
  /v3/transactions/{transaction_id}/travel-rule/:
    patch:
      summary: Finish, cancel, or resend a Travel Rule transfer
      description: 'Provide `payment_txn_id` to report the on-chain hash and move an outbound COMPLETED transfer to FINISHED (its INTERNAL-rail counterpart also moves to FINISHED), `{"action": "cancel"}` to cancel a non-terminal transfer, or `{"action": "resend"}` to re-run routing for an outbound transfer stuck in COUNTERPARTY_VASP_NOT_FOUND, COUNTERPARTY_VASP_NOT_REACHABLE, or NOT_ENOUGH_COUNTERPARTY_DATA (improve the counterparty data first, e.g. add a travel_address to the destination wallet entry).'
      operationId: patchTravelRuleTransfer
      tags:
      - Travel Rule
      security:
      - ApiKeyAuth: []
      parameters:
      - name: transaction_id
        in: path
        required: true
        description: Didit-stable transaction UUID that owns the transfer.
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleTransferPatchRequest'
            examples:
              Finish:
                value:
                  payment_txn_id: 0xchainhash
              Cancel:
                value:
                  action: cancel
              Resend:
                value:
                  action: resend
      x-codeSamples:
      - lang: curl
        label: curl
        source: "curl -X PATCH https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"payment_txn_id\": \"0xchainhash\"}'"
      responses:
        '200':
          description: The updated transfer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleTransferDetail'
        '400':
          description: Neither payment_txn_id nor a supported action (cancel, resend) was provided.
        '409':
          description: The transfer is not in a state that allows this operation (e.g. not COMPLETED/outbound for finish, already terminal for cancel, or not an outbound transfer in a resendable status for resend).
  /v3/transactions/{transaction_id}/travel-rule/ownership/:
    post:
      summary: Confirm or deny wallet ownership
      description: Called by the beneficiary's application when its INTERNAL-rail transfer is UNCONFIRMED_OWNERSHIP. Confirming marks the matching wallet address book entry as ownership-verified and runs the beneficiary name match on both sides of the transfer; denying declines both sides.
      operationId: confirmTravelRuleOwnership
      tags:
      - Travel Rule
      security:
      - ApiKeyAuth: []
      parameters:
      - name: transaction_id
        in: path
        required: true
        description: Didit-stable transaction UUID that owns the transfer (the beneficiary side's transaction).
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleOwnershipConfirmRequest'
            example:
              confirmed: true
      x-codeSamples:
      - lang: curl
        label: curl
        source: "curl -X POST https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/ownership/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"confirmed\": true}'"
      responses:
        '200':
          description: The updated transfer. originator_data/beneficiary_data are omitted until ownership_confirmed is true on an inbound transfer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleTransferDetail'
        '409':
          description: The transfer is not currently UNCONFIRMED_OWNERSHIP, or its matching wallet address book entry was deleted.
  /v3/travel-rule/pickup/{token}/:
    get:
      summary: Get email-rail pickup info
      description: Public, unauthenticated. Lets a non-Didit counterparty VASP preview the pending exchange from the emailed pickup link. The token itself is the authentication.
      operationId: getTravelRulePickup
      tags:
      - Travel Rule
      security: []
      parameters:
      - name: token
        in: path
        required: true
        schema:
          type: string
      x-codeSamples:
      - lang: curl
        label: curl
        source: curl https://verification.didit.me/v3/travel-rule/pickup/{token}/
      responses:
        '200':
          description: Pickup preview.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRulePickupInfo'
        '404':
          description: Unknown token.
        '410':
          description: The pickup window has closed (expired, or the transfer already left AWAITING_COUNTERPARTY).
  /v3/travel-rule/pickup/{token}/respond/:
    post:
      summary: Respond to an email-rail pickup
      description: Public, unauthenticated. Accepts or declines the exchange from the emailed pickup link. On accept, beneficiary_name is checked against the originator's name_matching_strictness policy.
      operationId: respondTravelRulePickup
      tags:
      - Travel Rule
      security: []
      parameters:
      - name: token
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRulePickupRespondRequest'
            example:
              decision: accept
              beneficiary_name: Carlos Ruiz
      x-codeSamples:
      - lang: curl
        label: curl
        source: "curl -X POST https://verification.didit.me/v3/travel-rule/pickup/{token}/respond/ \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"decision\": \"accept\", \"beneficiary_name\": \"Carlos Ruiz\"}'"
      responses:
        '200':
          description: The resulting exchange status.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
              example:
                status: COMPLETED
        '404':
          description: Unknown token.
        '410':
          description: The pickup window has closed.
  /v3/travel-rule/inbound/:
    post:
      summary: Register an after-deposit (sunrise) inbound transfer
      description: Register Travel Rule data for a crypto deposit that already settled on-chain before any exchange took place. Creates an inbound travelRule transaction (or reuses an unclaimed deposit) and resolves the transfer against your wallet address book. A transaction.created webhook fires for newly-created transactions.
      operationId: registerTravelRuleInbound
      tags:
      - Travel Rule
      security:
      - ApiKeyAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleInboundRequest'
            example:
              chain: ethereum
              txid: 0xdeposit-hash
              wallet_address: 0xYourDepositWallet
              amount: '500.00'
              currency: USDC
              originator_data:
                name: Origin CASP SL
              beneficiary_data:
                name: Ana Diaz
              originating_vasp:
                name: Origin CASP SL
                lei: ''
                travel_address: ta...
      x-codeSamples:
      - lang: curl
        label: curl
        source: "curl -X POST https://verification.didit.me/v3/travel-rule/inbound/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"chain\":\"ethereum\",\"txid\":\"0xdeposit-hash\",\"wallet_address\":\"0xYourDepositWallet\",\"amount\":\"500.00\",\"currency\":\"USDC\"}'"
      responses:
        '200':
          description: An existing unclaimed deposit was reused (created is false).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleInboundResponse'
        '201':
          description: A new inbound transaction and transfer were created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleInboundResponse'
  /v3/travel-rule/widget-session/:
    post:
      summary: Mint a wallet-ownership widget session
      description: Mint a hosted wallet-ownership widget URL/token. Send the customer to the returned url to prove control of a wallet (message signing, Satoshi test, screenshot, or self-declaration). The widget is web-only in this release - open the url in the system browser or a custom tab, never inside a mobile SDK webview.
      operationId: createTravelRuleWidgetSession
      tags:
      - Travel Rule
      security:
      - ApiKeyAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleWidgetSessionCreate'
            example:
              wallet_address: 0xBeneficiaryWallet01
              chain: ethereum
              holder_name: Ana Diaz
              vendor_data: user-042
              transaction_id: 22222222-3333-4444-5555-666666666666
              expires_in_minutes: 60
      x-codeSamples:
      - lang: curl
        label: curl
        source: "curl -X POST https://verification.didit.me/v3/travel-rule/widget-session/ \\\n  -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \\\n  -d '{\"wallet_address\":\"0xBeneficiaryWallet01\",\"chain\":\"ethereum\",\"holder_name\":\"Ana Diaz\"}'"
      responses:
        '201':
          description: The minted widget session.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetSessionResponse'
  /v3/travel-rule/widget/{token}/:
    get:
      summary: Get wallet-ownership widget context
      description: 'Public read endpoint keyed by the widget session token - no API key required. Returns the widget context plus the status of every proof, so you can poll it to detect completion; completed_at becomes non-null once a proof is verified. A SATOSHI_TEST proof can sit at status PENDING while its deposit is seen on-chain but unconfirmed - a background job automatically rechecks it and completes it once the deposit confirms, so no client action is needed while it waits. Each proof carries the fields its method needs: deposit_address, expected_amount, and its own expires_at for SATOSHI_TEST; challenge for MESSAGE_SIGNING. Prefer the travel_rule.status.updated webhook over polling when the session is linked to a transfer.'
      operationId: getTravelRuleWidgetContext
      tags:
      - Travel Rule
      security: []
      parameters:
      - name: token
        in: path
        required: true
        description: Opaque session token returned when the widget session was minted.
        schema:
          type: string
      x-codeSamples:
      - lang: curl
        label: curl
        source: curl https://verification.didit.me/v3/travel-rule/widget/{token}/
      responses:
        '200':
          description: The widget context and proof statuses.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetContext'
        '404':
          description: Unknown token.
        '410':
          description: The session expired without completing.
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.
    TravelRuleWidgetSessionCreate:
      type: object
      required:
      - wallet_address
      - chain
      properties:
        wallet_address:
          type: string
          description: The wallet address to verify.
        chain:
          type: string
          description: Chain identifier for the address, e.g. "ethereum", "bitcoin", "solana".
        holder_name:
          type: string
          description: Name of the wallet holder, used for the beneficiary name match.
        vendor_data:
          type: string
          description: Your internal identifier for the holder, carried onto the created address-book entry.
        transaction_id:
          type: string
          format: uuid
          description: Optional. Didit transaction UUID of a Travel Rule transfer to advance when the proof verifies.
        satoshi_deposit_address:
          type: string
          description: Optional. A deposit address you control; supplying it enables the SATOSHI_TEST proof method.
        callback_url:
          type: string
          description: Optional. Where the widget returns the customer after completion.
        expires_in_minutes:
          type: integer
          description: Optional. Lifetime of the minted link, in minutes. Automatically extended to cover the Satoshi test window when SATOSHI_TEST is offered.
    TravelRuleWidgetSessionResponse:
      type: object
      properties:
        widget_session_id:
          type: string
          format: uuid
        token:
          type: string
          description: Opaque session token embedded in the widget URL.
        url:
          type: string
          description: The hosted wallet-ownership widget URL. Open it verbatim in the system browser (never inside a mobile SDK webview).
        expires_at:
          type: string
          format: date-time
    TravelRulePickupRespondRequest:
      type: object
      required:
      - decision
      properties:
        decision:
          type: string
          enum:
          - accept
          - decline
        beneficiary_name:
          type: string
          description: Required in practice for decision=accept; run through the originator's name_matching_strictness policy.
    VaspDirectoryEntry:
      type: object
      properties:
        name:
          type: string
        lei:
          type: string
        jurisdiction:
          type: string
        dd_status:
          type: string
          enum:
          - NOT_STARTED
          - IN_PROGRESS
          - COMPLETED
          - REJECTED
        dd_score:
          type: integer
        reachable_rails:
          type: array
          items:
            type: string
            enum:
            - INTERNAL
            - TRP
            - GTR
            - EMAIL
        is_didit_customer:
          type: boolean
          description: true for discoverable Didit applications (dd_status is always COMPLETED, dd_score always 0 for these); false for internal counterparty-registry rows, which carry a real due-diligence status and score.
        dd_score_breakdown:
          type: object
          additionalProperties:
            type: integer
          description: Per-component contributions to dd_score (licensing/registry, sanctions/PEP, jurisdiction risk, on-chain analytics risk), all derived from checks Didit runs in-house. Empty for Didit-customer rows.
        dd_assessed_at:
          type: string
          format: date-time
          nullable: true
          description: When the due-diligence assessment last ran. Null for Didit-customer rows.
    TravelRuleTransferDetail:
      type: object
      description: Full transfer object returned by the ownership-confirmation and finish/cancel endpoints. originator_data/beneficiary_data are omitted while PII is masked (see description).
      properties:
        uuid:
          type: string
          format: uuid
        status:
          type: string
          enum:
          - AWAITING_COUNTERPARTY
          - ON_HOLD
          - COMPLETED
          - FINISHED
          - CANCELLED
          - EXPIRED
          - COUNTERPARTY_MISMATCHED_DATA
          - COUNTERPARTY_VASP_NOT_FOUND
          - COUNTERPARTY_VASP_NOT_REACHABLE
          - UNCONFIRMED_OWNERSHIP
          - COUNTERPARTY_VASP_GENERAL_DECLINE
          - NOT_ENOUGH_COUNTERPARTY_DATA
          - NOT_APPLICABLE
        direction:
          type: string
          enum:
          - INBOUND
          - OUTBOUND
        rail:
          type: string
          nullable: true
          enum:
          - INTERNAL
          - TRP
          - GTR
          - EMAIL
          - null
        protocol:
          type: string
          nullable: true
        ivms_version:
          type: string
          example: ivms101.2023
        required:
          type: boolean
        ownership_confirmed:
          type: boolean
          nullable: true
        deadline_at:
          type: string
          format: date-time
          nullable: true
        timeline:
          type: array
          items:
            type: object
            properties:
              status:
                type: string
              at:
                type: string
                format: date-time
              detail:
                type: string
        counterparty_vasp:
          type: object
          nullable: true
          properties:
            name:
              type: string
            lei:
              type: string
            dd_score:
              type: integer
        originator_data:
          type: object
        beneficiary_data:
          type: object
        created_at:
          type: string
          format: date-time
    TravelRuleTransferPatchRequest:
      type: object
      description: 'Provide exactly one of: payment_txn_id (finish), action=cancel, or action=resend.'
      properties:
        payment_txn_id:
          type: string
          description: The on-chain transaction hash. Requires the transfer to be an outbound transfer in COMPLETED status.
        action:
          type: string
          enum:
          - cancel
          - resend
          description: '"cancel" cancels a non-terminal transfer. "resend" re-runs routing for an outbound transfer stuck in COUNTERPARTY_VASP_NOT_FOUND, COUNTERPARTY_VASP_NOT_REACHABLE, or NOT_ENOUGH_COUNTERPARTY_DATA.'
    TravelRuleOwnershipConfirmRequest:
      type: object
      required:
      - confirmed
      properties:
        confirmed:
          type: boolean
    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.
    TravelRuleSettingsDetail:
      type: object
      properties:
        is_enabled:
          type: boolean
          description: Whether the managed Travel Rule negotiation flow is active for outbound `travelRule` transactions on this application.
        jurisdiction:
          type: string
          maxLength: 8
          description: Your VASP's operating jurisdiction code. Default `"EU"`.
        name_matching_strictness:
          type: string
          enum:
          - NONE
          - STRICT
          - DEFAULT
          - FUZZY
          description: How strictly beneficiary names must match before a transfer can reach COMPLETED.
        confirmation_timeout_hours:
          type: integer
          minimum: 1
          description: Hours an AWAITING_COUNTERPARTY transfer may remain unconfirmed before the periodic sweeper expires it. Default 48.
        timeout_outcome:
          type: string
          enum:
          - HOLD
          - REJECT
          - PROCEED
          description: What happens to the underlying transaction when a transfer expires. Default HOLD.
        threshold_amount:
          type: string
          description: Decimal string. Minimum transfer amount that triggers a managed exchange; transfers below it resolve straight to NOT_APPLICABLE. Defaults to "0.00" (EU TFR applies no minimum amount).
        legal_name:
          type: string
          description: Your VASP's legal name. Required (non-blank) to set is_enabled to true.
        lei:
          type: string
          description: Your Legal Entity Identifier, surfaced in the VASP directory.
        compliance_email:
          type: string
          format: email
          description: Compliance contact email for your VASP profile.
        is_discoverable:
          type: boolean
          description: Whether your VASP profile appears in GET /v3/travel-rule/vasps/ search results and can be reached on the INTERNAL rail. Default true.
        inbound_auto_accept:
          type: boolean
          description: When true, inbound transfers whose beneficiary wallet is a verified address-book entry with a matching name are accepted automatically, without a manual review step. Default false.
        allow_self_declaration:
          type: boolean
 

# --- truncated at 32 KB (41 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/didit/refs/heads/main/openapi/didit-travel-rule-api-openapi.yml