Bridge Travel Rule API

The Travel Rule API from Bridge — 1 operation(s) for travel rule.

OpenAPI Specification

bridge-travel-rule-api-openapi.yml Raw ↑
openapi: 3.0.2
info:
  title: Bridge API Keys Travel Rule API
  description: APIs to move into, out of, and between any form of a dollar
  version: '1'
servers:
- url: https://api.bridge.xyz/v0
  description: The base path for all resources
security:
- ApiKey: []
tags:
- name: Travel Rule
paths:
  /travel_rule_data/{id}:
    post:
      summary: Submit travel rule data.
      tags:
      - Travel Rule
      description: 'Use this endpoint to submit originator, beneficiary, and transfer purpose data for travel rule compliance.

        '
      parameters:
      - $ref: '#/components/parameters/IdempotencyKeyParameter'
      - name: id
        in: path
        required: true
        description: The ID of the resource to associate with this Travel Rule payload. Supported IDs include transfer IDs, virtual account IDs, virtual account event IDs, liquidation address IDs, bridge wallet event IDs, and drain IDs.
        schema:
          type: string
      requestBody:
        description: The Travel Rule payload to associate with the specified resource.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleData'
      responses:
        '200':
          description: Travel Rule data processed successfully
          content:
            application/json:
              schema:
                type: object
                required:
                - message
                properties:
                  message:
                    type: string
                    description: Message indicating the status of the request.
              examples:
                TravelRuleDataProcessed:
                  summary: A successful Travel Rule submission
                  value:
                    message: Travel rule data processed successfully
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
components:
  schemas:
    TravelRuleData:
      type: object
      description: Travel Rule data for a crypto movement. Send this on create or update when the same counterparty should apply to every future use of a reusable resource, or send the same payload with `POST /travel_rule_data/{id}` when it belongs to one specific movement.
      properties:
        originator:
          description: The party sending the crypto.
          allOf:
          - $ref: '#/components/schemas/TravelRuleOriginator'
        beneficiary:
          description: The party receiving the crypto.
          allOf:
          - $ref: '#/components/schemas/TravelRuleBeneficiary'
      example:
        originator:
          name: Jane Smith
          address:
            street_line_1: 123 Market St
            street_line_2: null
            city: San Francisco
            state: CA
            postal_code: '94105'
            country: USA
          identifying_information:
            type: national_id
            number: '1234567890'
            issuing_country: USA
          birth_date: '2000-01-31'
          place_of_birth:
            city: San Francisco
            country: USA
          wallet_type: self_custodied
          wallet_attested_ownership_at: '2026-04-01T12:00:00Z'
        beneficiary:
          is_self: true
          wallet_type: external
    TravelRuleName:
      type: string
      description: Legal name of the originator or beneficiary. Usually omitted when `is_self` is `true`.
    TravelRuleIsSelf:
      type: boolean
      description: Set to `true` when this party is the same person or business as the Bridge customer on the resource. When `true`, Bridge uses the customer's name and address on file instead of relying on `name` and `address` in this payload.
    Error:
      required:
      - code
      - message
      properties:
        code:
          type: string
          minLength: 1
          maxLength: 256
        message:
          type: string
          minLength: 1
          maxLength: 512
        source:
          title: ErrorSource
          required:
          - location
          - key
          properties:
            location:
              type: string
              enum:
              - path
              - query
              - body
              - header
            key:
              type: string
              description: Comma separated names of the properties or parameters causing the error
    TravelRuleWalletAttestedOwnershipAt:
      type: string
      format: date-time
      description: Required when `wallet_type` is `self-custodied` or `hosted`. Must be a timestamp in the past indicating when wallet ownership was attested.
    PlaceOfBirthInput:
      type: object
      description: 'Country (and optionally city) of birth. **EEA / BBSA in-scope customers:** supply when onboarding individuals or associated persons under the [EEA updated requirements](https://apidocs.bridge.xyz/platform/customers/customers/eea-updated-requirements#country-of-birth-and-city-of-birth). This is a sparse address — no street address. At least `country` should be present when the object is sent; `city` is recommended and will be required by EU law in 2027.

        '
      properties:
        country:
          type: string
          minLength: 3
          maxLength: 3
          description: ISO 3166-1 alpha-3 country code for the place of birth.
        city:
          type: string
          minLength: 1
          description: City of birth (recommended for EEA).
    TravelRuleAddress:
      type: object
      description: Address for travel rule submissions. All fields are optional to support partial address data (e.g. country-only).
      properties:
        street_line_1:
          type: string
        street_line_2:
          type: string
        city:
          type: string
        state:
          type: string
          description: ISO 3166-2 subdivision code.
        postal_code:
          type: string
        country:
          description: Three-letter alpha-3 country code as defined in the ISO 3166-1 spec.
          type: string
          minLength: 3
          maxLength: 3
    TravelRuleOriginator:
      type: object
      description: Travel Rule details for originator crypto movement.
      properties:
        is_self:
          $ref: '#/components/schemas/TravelRuleIsSelf'
        name:
          $ref: '#/components/schemas/TravelRuleName'
        address:
          description: Mailing or legal address of the originator. Usually omitted when `is_self` is `true`.
          allOf:
          - $ref: '#/components/schemas/TravelRuleAddress'
        wallet_type:
          $ref: '#/components/schemas/TravelRuleWalletType'
        wallet_attested_ownership_at:
          $ref: '#/components/schemas/TravelRuleWalletAttestedOwnershipAt'
        identifying_information:
          allOf:
          - $ref: '#/components/schemas/IdentifyingInformation'
          description: 'List of identification objects for the originator. Do **not** include `image_front` or `image_back` fields in this context; those are not accepted in Travel Rule submissions.

            '
        birth_date:
          type: string
          description: Date of birth in format yyyy-mm-dd.
          minLength: 10
          maxLength: 10
        place_of_birth:
          $ref: '#/components/schemas/PlaceOfBirthInput'
        legal_entity_identifier:
          type: string
          description: The Legal Entity Identifier (LEI) or equivalent (e.g. VAT number) of the originator. Provide this when the originator is a legal entity rather than an individual.
    TravelRuleBeneficiary:
      type: object
      description: Travel Rule details for beneficiary crypto movement.
      properties:
        is_self:
          $ref: '#/components/schemas/TravelRuleIsSelf'
        name:
          $ref: '#/components/schemas/TravelRuleName'
        address:
          description: Mailing or legal address of the beneficiary. Usually omitted when `is_self` is `true`.
          allOf:
          - $ref: '#/components/schemas/TravelRuleAddress'
        wallet_type:
          $ref: '#/components/schemas/TravelRuleWalletType'
        wallet_attested_ownership_at:
          $ref: '#/components/schemas/TravelRuleWalletAttestedOwnershipAt'
        legal_entity_identifier:
          type: string
          description: The Legal Entity Identifier (LEI) or equivalent (e.g. VAT number) of the beneficiary. Provide this when the beneficiary is a legal entity rather than an individual.
    TravelRuleWalletType:
      type: string
      description: Indicates the custody model for the wallet. Use `self_custodied` for customer-owned wallets (customer controls private keys), `hosted` for wallets managed by a developer or regulated entity on behalf of the customer, or `external` for wallets belonging to external exchanges or smart contracts.
      enum:
      - hosted
      - external
      - self_custodied
    IdentifyingInformation:
      writeOnly: true
      type: array
      title: Identification Information
      items:
        type: object
        required:
        - issuing_country
        - type
        properties:
          type:
            type: string
            description: 'Tax identification number type or government-issued ID document type (see enum). Country-specific tax and national ID lists: [Individuals](https://apidocs.bridge.xyz/docs/individual-tax-identification-numbers-by-country), [Businesses](https://apidocs.bridge.xyz/docs/business-tax-identification-numbers-by-country).


              **EEA / BBSA (policy in `eea_requirements.rb`):** In-scope individuals and UBOs need **both** a valid national-ID-type entry and a valid TIN per [EEA updated requirements](https://apidocs.bridge.xyz/platform/customers/customers/eea-updated-requirements). In-scope businesses need business registration **and** business tax ID types per country tables there. **TIN issuing country** must match residence (individuals) or incorporation (businesses). **Foreign tax** outside the incorporation country: set `has_foreign_tax_registration` on the business customer and add TIN objects per jurisdiction ([foreign tax / tax residency](https://apidocs.bridge.xyz/platform/customers/customers/eea-updated-requirements#tax-residency-status-foreign-tax-registry)).

              '
            enum:
            - drivers_license
            - matriculate_id
            - military_id
            - national_id
            - passport
            - permanent_residency_id
            - state_or_provincial_id
            - visa
            - abn
            - acn
            - ahv
            - ak
            - aom
            - arbn
            - avs
            - bc
            - bce
            - bin
            - bir
            - bp
            - brn
            - bsn
            - bvn
            - cc
            - cdi
            - cedula_juridica
            - cf
            - cif
            - cin
            - cipc
            - cn
            - cnp
            - cnpj
            - cpf
            - cpr
            - crc
            - crib
            - crn
            - cro
            - cui
            - cuil
            - curp
            - cuit
            - cvr
            - edrpou
            - ein
            - embg
            - emirates_id
            - en
            - fin
            - fn
            - gstin
            - gui
            - hetu
            - hkid
            - hn
            - ic
            - ico
            - id
            - id_broj
            - idno
            - idnp
            - idnr
            - if
            - iin
            - ik
            - inn
            - ird
            - itin
            - itr
            - iva
            - jmbg
            - kbo
            - kvk
            - matricule
            - mf
            - mn
            - ms
            - mst
            - nic
            - nicn
            - nie
            - nif
            - nin
            - nino
            - nip
            - nipc
            - nipt
            - nit
            - npwp
            - nric
            - nrn
            - nrt
            - ntn
            - nuit
            - nzbn
            - oib
            - orgnr
            - other
            - pan
            - partita_iva
            - pesel
            - pib
            - pin
            - pk
            - ppsn
            - qid
            - rc
            - regon
            - rfc
            - ricn
            - rif
            - rn
            - rnc
            - rnokpp
            - rp
            - rrn
            - rtn
            - ruc
            - rut
            - si
            - sin
            - siren
            - siret
            - spi
            - ssm
            - ssn
            - steuer_id
            - strn
            - tckn
            - tfn
            - tin
            - tpin
            - trn
            - ucn
            - uen
            - uic
            - uid
            - usc
            - ust_idnr
            - utr
            - vat
            - vkn
            - voen
            - y_tunnus
          issuing_country:
            type: string
            description: The ISO 3166-1 (three-character) country code that issued the provided document.
          number:
            type: string
            description: The unique identifier of the document. Required if this document is being used as a tax identification number (e.g., you are providing a passport or national_id with no other identification).
          description:
            type: string
            description: A description describing the provided document. This field is required when `other` is selected.
          expiration:
            type: string
            description: The expiration date of the given document in yyyy-mm-dd format.
          image_front:
            type: string
            description: 'This field is optionally accepted for tax_id types, but required for government_id types. Base64 encoded image* of the front side of the provided document, following the data-uri scheme i.e. data:image/[type];base64,[base_64_encoded_file_contents], with a minimum size of 200px x 200px \n\n*Maximum File Size: 15MB\n\n*Valid file types: .pdf, .jpeg, .jpg, .png, .heic, .tif


              _Note: When combined with an `image_back`, the combined size of both images must not exceed 24MB._

              '
          image_back:
            type: string
            description: 'Base64 encoded image* of the back side of the provided document, following the data-uri scheme i.e. data:image/[type];base64,[base_64_encoded_file_contents], with a minimum size of 200px x 200px \n\n*Maximum File Size: 15MB\n\n*Valid file types: .pdf, .jpeg, .jpg, .png, .heic, .tif


              _Note: When combined with an `image_front`, the combined size of both images must not exceed 24MB._

              '
  responses:
    AuthenticationError:
      description: Missing or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            MissingTokenError:
              summary: No Api-Key header
              description: The header may be missing or misspelled.
              value:
                code: required
                location: header
                name: Api-Key
                message: Missing Api-Key header
            InvalidTokenError:
              summary: Invalid key in Api-Key header
              value:
                code: invalid
                location: header
                name: Api-Key
                message: Invalid Api-Key header
    NotFoundError:
      description: No resource found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            NotFoundErrorExample:
              summary: Invalid customer id
              value:
                code: Invalid
                message: Unknown customer id
    BadRequestError:
      description: Request containing missing or invalid parameters.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            BadCustomerRequestErrorExample:
              summary: Bad customer request
              value:
                code: bad_customer_request
                message: fields missing from customer body.
                name: first_name,ssn
    UnexpectedError:
      description: Unexpected error. User may try and send the request again.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            UnexpectedError:
              summary: An unexpected error
              value:
                errors:
                - code: unexpected
                  message: An expected error occurred, you may try again later
  parameters:
    IdempotencyKeyParameter:
      in: header
      name: Idempotency-Key
      required: true
      schema:
        type: string
  securitySchemes:
    ApiKey:
      type: apiKey
      name: Api-Key
      in: header