Transfers

Submit deposit travel rule information

Changed on

Submit travel rule information for a deposit transfer held pending compliance review.

Required fields vary by jurisdiction and may include originator name, address, date of birth, personal ID, and VASP information.

If the submitted information satisfies all jurisdictional requirements, status will be completed and the transfer will proceed. Otherwise, status will be incomplete and missingFields will indicate which fields still need to be provided.

post/v2/transfers/{transferId}/travel-rule

Request

  • Base URL: https://api.cdp.coinbase.com/platform
  • URL: https://api.cdp.coinbase.com/platform/v2/transfers/{transferId}/travel-rule
  • Auth: HTTP bearer

Path parameters

transferIdstring required
Example:transfer_af2937b0-9846-4fe7-bfe9-ccc22d935114

The unique identifier of the transfer.

Headers

X-Idempotency-Keystring

An optional string request header for making requests safely retryable. When included, duplicate requests with the same key will return identical responses. Refer to our Idempotency docs for more information on using idempotency keys.

Request body

isSelfboolean

Indicates whether the user attests that the originating wallet belongs to them.

isIntermediaryboolean

Indicates whether Coinbase is acting as the intermediary Virtual Asset Service Provider (VASP), and your organization is acting as an originating VASP on behalf of your own end customer.

Background:

The Travel Rule (FATF Recommendation 16) requires VASPs to collect and share certain information about virtual asset transfers. If your organization is a VASP, and you are acting on behalf of your end customer, you must provide additional Travel Rule data to satisfy compliance requirements.

Set to true when your organization is itself a VASP acting on behalf of your own end customer (the true originator).

Set to false (or omit) when your organization is not itself a VASP acting on behalf of an end customer — for example, if the virtual assets involved are your organization's own funds.

Impact on required fields:

When isIntermediary is true, you must provide the originator object with the following details:

  • The originator's (i.e. your end customer's) name
  • The originator's address
  • Your organization's VASP information (virtualAssetServiceProvider object with identifier, name, and address)

In certain jurisdictions, personalId and dateOfBirth must also reflect the original sender's identity — not your organization's. These fields will not be auto-populated from any internal KYC data when isIntermediary is true.

attestVerifiedWalletOwnershipboolean

When true, you attest that the originating wallet's ownership has been verified out-of-band. Instructs Coinbase to skip the wallet verification check for this travel-rule submission.

Only valid when isIntermediary is true. You can only attest to the originating wallet's ownership when your organization is acting as the originating VASP on behalf of your end customer, and Coinbase is acting as the intermediary VASP. Returns a 400 error if set to true when isIntermediary is false or omitted.

Example request

{
  "isSelf": false,
  "isIntermediary": true,
  "attestVerifiedWalletOwnership": true,
  "originator": {
    "name": "John Doe",
    "address": {
      "line1": "123 Main St",
      "city": "San Francisco",
      "state": "CA",
      "postCode": "94105",
      "countryCode": "US"
    },
    "financialInstitution": "PayPal, Inc.",
    "virtualAssetServiceProvider": {
      "identifier": "5493001KJTIIGC8Y1R17",
      "name": "Fidelity Digital Asset Services, LLC"
    },
    "personalId": "123-45-6789",
    "dateOfBirth": {
      "day": "15",
      "month": "08",
      "year": "1990"
    },
    "walletType": "custodial"
  },
  "beneficiary": {
    "name": "Jane Smith"
  }
}

Response

Successfully submitted travel rule information.

status'incomplete' | 'completed' required

The status of a travel rule submission.

missingFieldsstring[]

List of field paths that are still required to complete travel rule compliance. Each entry is a dot-separated path (e.g., "originator.name", "originator.address.countryCode"). Empty when status is "completed".

reasonstring

Additional context about the current status. Present when status is incomplete to explain what needs to be fixed before the transfer can proceed.

Example response

{
  "status": "incomplete",
  "missingFields": [
    "originator.address.countryCode"
  ]
}

Changes

    • warning

      added the new incompatible_event_types enum value to the response property for the response status

    • warning

      added the new incompatible_event_types enum value to the response property for the response status

    • warning

      added the new incompatible_event_types enum value to the response property for the response status

    • warning

      added the new invalid_webhook_headers enum value to the response property for the response status

    • warning

      added the new invalid_webhook_headers enum value to the response property for the response status

    • warning

      added the new invalid_webhook_headers enum value to the response property for the response status

    • warning

      added the new invalid_webhook_url enum value to the response property for the response status

    • warning

      added the new invalid_webhook_url enum value to the response property for the response status

    • warning

      added the new invalid_webhook_url enum value to the response property for the response status

    • warning

      added the new mandate_action_pending enum value to the response property for the response status

    • warning

      added the new mandate_action_pending enum value to the response property for the response status

    • warning

      added the new mandate_action_pending enum value to the response property for the response status

    • warning

      added the new mandate_canceled enum value to the response property for the response status

    • warning

      added the new mandate_canceled enum value to the response property for the response status

    • warning

      added the new mandate_canceled enum value to the response property for the response status

    • warning

      added the new mandate_expired enum value to the response property for the response status

    • warning

      added the new mandate_expired enum value to the response property for the response status

    • warning

      added the new mandate_expired enum value to the response property for the response status

    • warning

      added the new mandate_invalid_status enum value to the response property for the response status

    • warning

      added the new mandate_invalid_status enum value to the response property for the response status

    • warning

      added the new mandate_invalid_status enum value to the response property for the response status

    • warning

      added the new mandate_policy_violation enum value to the response property for the response status

    • warning

      added the new mandate_policy_violation enum value to the response property for the response status

    • warning

      added the new mandate_policy_violation enum value to the response property for the response status

    • warning

      added the new mandate_revoked enum value to the response property for the response status

    • warning

      added the new mandate_revoked enum value to the response property for the response status

    • warning

      added the new mandate_revoked enum value to the response property for the response status

    • warning

      added the new subscription_limit_exceeded enum value to the response property for the response status

    • warning

      added the new subscription_limit_exceeded enum value to the response property for the response status

    • warning

      added the new subscription_limit_exceeded enum value to the response property for the response status

    • warning

      added the new mfa_challenge_not_found enum value to the response property for the response status

    • warning

      added the new mfa_challenge_not_found enum value to the response property for the response status

    • warning

      added the new mfa_challenge_not_found enum value to the response property for the response status

    • warning

      added the new operation_in_progress enum value to the response property for the response status

    • warning

      added the new operation_in_progress enum value to the response property for the response status

    • warning

      added the new operation_in_progress enum value to the response property for the response status