BitMEX API Changes for Travel Rule Compliance

1 month ago 8



The BitMEX withdrawal API has been updated to comply with global Travel Rule regulations. These changes will be rolled out early 2026 and affect all API withdrawals.

To help you prepare, find your essential reference detailing the new Travel Rule fields and API endpoints below. 

To learn more about the Travel Rule and what it means for your trading experience, visit our blog and FAQs.

What is changing?

1. Saved Addresses Are Now Required

All API withdrawals must now use saved addresses from your address book.

The POST /api/v1/user/requestWithdrawal endpoint no longer accepts the following parameters:

  • address - No longer supported

  • network - No longer supported

  • memo - No longer supported

You must now use addressId to reference a saved address in your address book.

2. Travel Rule Information Required

All saved addresses must include:

  • Beneficiary information - Details about who is receiving the funds

  • VASP information - Details about the service provider hosting the destination address

Addresses without this information cannot be used for withdrawals.

How to Update Your Withdrawals?

Step 1: Create or Update Saved Addresses

Use the address book API to create new addresses or update existing ones with travel rule information:

  • Create new addresses: POST /api/v1/address

  • Update existing addresses: PUT /api/v1/address

Note: newly added addresses in the address book are subject to a minimum 24 hour cool-down. Learn more here.

You can also manage addresses via:

  • The BitMEX website at www.bitmex.com/app/addresses

  • The BitMEX mobile application

  • For a step-by-step guide on adding and managing your address book, visit our blog.

Step 2: Use Address IDs for Withdrawals

When making withdrawals, reference the saved address by its id:

{

  "addressId": 12345,

  "currency": "XBt",

  "amount": 10000000,

  "otpToken": "123456"

}


Working with the Address Book

All addresses must include travel rule information before they can be used for withdrawals.

Creating New Addresses

To add a new withdrawal destination:

  1. Via API: Use POST /api/v1/address with the destination address and travel rule information

  2. Via Website: Go to www.bitmex.com/app/addresses and create a new address

  3. Via Mobile App: Use the address book feature in the BitMEX mobile application

Updating Existing Addresses

To add travel rule information to existing saved addresses:

  1. Via API: Use PUT /api/v1/address to update the address with beneficiary and vasp fields

  2. Via Website: Edit your existing address at www.bitmex.com/app/addresses

  3. Via Mobile App: Edit addresses in the BitMEX mobile application

Important: Addresses without complete travel rule information cannot be used for withdrawals and will result in a 400 (Bad Request) error. Additionally, incorrect information may result in the withdrawal being rejected or funds being held by the receiving service provider.


Travel Rule Field Specifications

The beneficiary field

This field describes the person receiving your withdrawal.

If the beneficiary and the withdrawing account are the same person or company, provide the following:

{

  "type": "SELF"

}

If the beneficiary is a person who is not yourself, then please enter some details:

{

  "type": "THIRD_PARTY",

  "entityType": "INDIVIDUAL",

  "firstName": "John",

  "lastName": "Doe"

}

If the beneficiary is a company:

{

  "type": "THIRD_PARTY",

  "entityType": "CORPORATE",

  "fullName": "Acme Corporation"

}

The vasp field

This field describes the service provider of the wallet address.

If this is a self-hosted address, provide the following VASP object:

{

  "addressType": "UNHOSTED"

}

If you are using a wallet hosted by an exchange, you can either provide an identifier and source (id, source) or provide VASP details manually:

To find the VASP id and source you can search with the following endpoint (sign with your API key):

GET /api/compliance/travel-rule/vasps?q={vasp_name}

This will return a list of entities matching the search term, each containing an id and source property.

{

  "addressType": "HOSTED",

  "id": "{vasp_id}",

  "source": "{source_name}"

}

If you cannot find the id and source, you can provide some details manually:

{

  "addressType": "HOSTED",

  "name": "My VASP",

  "website": "https://myvasp.example.com"

}

Note that name and website are both required fields if id and source are not provided.


API Reference

POST /api/v1/user/requestWithdrawal

Request a withdrawal to an external wallet.

Request Parameters

Parameter

Type

Required

Description

addressId

integer

Required

ID of saved address containing destination and travel rule information

currency

string

Required

Currency to withdraw (e.g., "XBt", "USDt")

amount

integer

Required

Amount to withdraw in minor currency units

otpToken

string

Conditional

2FA token. Required for external withdrawals unless destination has skip2FA configured

fee

number

Optional

Network fee (if not specified, default value calculated)

Note: The address, network, and memo parameters are no longer supported. All destination information must be stored in a saved address referenced by addressId. For internal transfers to other BitMEX users, use targetUserId instead of addressId.

Example Request

POST /api/v1/user/requestWithdrawal

{

  "addressId": 12345,

  "currency": "XBt",

  "amount": 50000000,

  "otpToken": "123456"

}

Example Request with Optional Parameters

POST /api/v1/user/requestWithdrawal

{

  "addressId": 67890,

  "currency": "USDt",

  "amount": 25000000,

  "otpToken": "123456",

  "fee": 0.0001

}

Response

{

  "transactID": "b6c6b38e-8f4d-4b6c-9c7f-8e3b7c6d5a4e",

  "account": 123456,

  "currency": "XBt",

  "transactType": "Withdrawal",

  "amount": 50000000,

  "fee": 20000,

  "transactStatus": "Pending",

  "addressId": 12345,

  "tx": null

  "transactTime": "2024-01-15T10:30:00.000Z",

  "walletBalance": 190000000,

  "timestamp": "2024-01-15T10:30:00.000Z"

}


POST /api/v1/address

Create a new saved address with travel rule information.

Request Parameters

Parameter

Type

Required

Description

currency

string

Optional

Currency (e.g., "XBt", "USDt")

network

string

Required

Blockchain network

address

string

Required

Destination address

name

string

Required

Name/label for this address

memo

string

Optional

Destination memo/tag

skipConfirm

boolean

Optional

Skip email confirmation for withdrawals (default: false). Setting must be verified via email confirmation.

skip2FA

boolean

Optional

Skip 2FA for withdrawals (default: false)

otpToken

string

Optional

2FA token to verify skip2FA setting. If not provided, the skip2FA setting can be verified via email confirmation.

beneficiary

object

Required

Beneficiary information (see schema below)

vasp

object

Required

VASP information (see schema below)

Beneficiary Schema

Field

Type

Required

Description

type

string

Required

Either "SELF" or "THIRD_PARTY"

entityType

string

Conditional

"INDIVIDUAL" or "CORPORATE" (required if type is "THIRD_PARTY")

firstName

string

Optional

First name (for individuals)

lastName

string

Conditional

Last name (required for "THIRD_PARTY" individuals)

fullName

string

Conditional

Full legal name (required for "THIRD_PARTY" corporates)

VASP Schema

Field

Type

Required

Description

addressType

string

Required

"HOSTED", "UNHOSTED", or "UNKNOWN"

id

string

Conditional

VASP identifier (required for "HOSTED" if name and website not provided)

source

string

Conditional

Source of VASP identifier (required when id is provided)

name

string

Conditional

VASP name (required for "HOSTED" if id not provided)

website

string

Conditional

VASP website URL (required for "HOSTED" if id not provided)

Example Request: Personal Hardware Wallet

POST /api/v1/address

{

  "currency": "XBt",

  "network": "Bitcoin",

  "address": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh",

  "name": "My Ledger",

  "skipConfirm": true,

  "beneficiary": {

    "type": "SELF"

  },

  "vasp": {

    "addressType": "UNHOSTED"

  },

  "otpToken": "123456"

}

Example Request: Exchange Address with VASP ID

POST /api/v1/address

{

  "currency": "XBt",

  "network": "Bitcoin",

  "address": "3J98t1WpEZ73CNmYviecrnyiWrnqRhWNLy",

  "name": "Binance Hot Wallet",

  "beneficiary": {

    "type": "SELF"

  },

  "vasp": {

    "addressType": "HOSTED",

    "id": "did:vasp:binance",

    "source": "NOTABENE_ADDRESS_HASH"

  }

}

Example Request: Third Party at Exchange

POST /api/v1/address

{

  "currency": "USDt",

  "network": "Ethereum",

  "address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",

  "name": "Supplier Payment Address",

  "beneficiary": {

    "type": "THIRD_PARTY",

    "entityType": "CORPORATE",

    "fullName": "Global Crypto Services Inc"

  },

  "vasp": {

    "addressType": "HOSTED",

    "name": "Coinbase",

    "website": "https://www.coinbase.com"

  }

}

Response

{

  "id": 12345,

  "currency": "XBt",

  "network": "Bitcoin",

  "address": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh",

  "name": "My Ledger",

  "memo": null,

  "skipConfirm": false,

  "skipConfirmVerified": false,

  "skip2FA": false,

  "skip2FAVerified": false,

  "verified": false,

  "cooldownExpires": null,

  "created": "2024-01-15T10:30:00.000Z",

  "userId": 123456

}


For a complete breakdown of these changes and more details, visit our blog and FAQs.

If you have any questions about these upcoming changes, please contact Support.

To be the first to know about our new listings, product launches, giveaways and more, we invite you to join one of our online communities and connect with other traders. For the absolute latest, you can also follow us on Twitter, or read our blog and site announcements.

Read Entire Article