Withdrawals under the Travel Rule Threshold

When the amount of digital assets transferred is under 1,000 euros, your transaction does not need to comply with the Travel Rule. You can complete the transaction in two different ways depending on whether the beneficiary is registered in Bitso's system:

Each withdrawal is associated with a taxonomy that identifies a currency, a method, and an integration with a payment gateway. You must specify this metadata in the request body, which includes: asset, currency, method, network, and protocol.

To determine the specific values of these taxonomy parameters for the particular currency you want to withdraw, make an HTTP call to the following endpoint, which retrieves the withdrawal methods for the currency at hand:

GET https://api-stage.bitso.com/v3/withdrawal_methods/{currency}

🚀 You're ready to make your transaction when you have solved the taxonomy parameters. To execute a withdrawal under 1,000 euros for either a registered or not-registered account, complete the following HTTP request using the appropriate body parameters:

POST https://api-stage.bitso.com/v3/withdrawals

Body Parameters

  • address: Destination address where the withdrawal is to be deposited.
  • amount: The amount of cryptocurrency to be withdrawn from the Bitso account. It must be a positive number smaller than 1,000 euros, representing the exact quantity of the cryptocurrency unit (for example, BTC, ETH, USDT).
  • asset: The digital asset in a network. In most cases, it is the same as the withdrawal currency. In some cases, for example, USD, you can use a 1:1 paired asset like usdp or usdc.
  • contact_id: Bitso-generated, unique identifier of the beneficiary. You get this identifier back when you register the beneficiary.
  • currency: The currency to withdraw using the available balance.
  • destination_tag: When funds first reach a concentrator account (omnibus account), the destination tag enables to indicate the specific wallet where the deposit is to be placed. Required only in XRP and Stellar.
  • max_fee: Maximum fee that the user is willing to pay for the transaction. Because of the volatility of blockchain fees, they could be larger than the withdrawn amount. Setting a limit prevents high transaction fees.
  • method: Withdrawal method, for example, btc, rp, ltc, eth, and the like.
  • network: Network through which the withdrawal is processed.
  • origin_id: A client-generated unique value that the server uses to recognize subsequent retries of the same request. This idempotency key helps prevent duplicated withdrawals from being processed. Valid character set: a to z (lower and uppercase), 0 to 9, and underscore, _. Dash, -, is not supported. Maximum length = 40 characters. This parameter is optional. Formerly, this field was called client_withdrawal_id, a name now deprecated and must not be used.
  • protocol: A specific mechanism, protocol, or standard used in a network.

Withdrawal Providing the Beneficiary's Digital Address

You need to use the beneficiary's digital address when they are not registered. The following objects exemplify the request body parameters for different digital currencies.

In Tether USD (USDT), a cryptocurrency stablecoin pegged to the U.S. dollar, you can complete withdrawals over the Ethereum and Tron networks. The Tron network is known for its speed and efficiency, confirming the USDT transaction in seconds at significantly lower transaction fees. The example below provides a request body for each network available. For transactions on the Tron network, you need the destination address of a wallet that supports non-Ethereum blockchains, for instance, TronLink.

For USD Coin (USDC), another cryptocurrency stablecoin pegged to the U.S. dollar, the example is for the Ethereum network. Look into the additional blockchains supported aside from Ethereum in the article, USDC Multi-Network Support.

{
  "address": "destination address",
  "destination_tag": "5403767",
  "amount": "amount < 1,000 euros",
  "asset": "xrp",
  "currency": "xrp",
  "method": "rp",
  "network": "rp",
  "protocol": "ripple",
  "origin_id": "android-cffbb40c5900c395d9244ed5",
  "max_fee": "0.15538100"
}
{
  "address": "destination address",
  "amount": "amount < 1,000 euros",
  "asset": "ada",
  "currency": "ada",
  "method": "ada",
  "network": "cardano",
  "protocol": "ada",
  "origin_id": "android-cffbb40c5900c395d9244ed5",
  "max_fee": "0.15538100"
}
{
  "address": "destination address",
  "amount": "amount < 1,000 euros",
  "asset": "btc",
  "currency": "btc",
  "method": "btc",
  "network": "btc",
  "protocol": "btc",
  "origin_id": "android-cffbb40c5900c395d9244ed5",
  "max_fee": "0.15538100"
}
# Request body for the Ethereum network
{
    "address": "destination address",
    "amount": "amount < 1,000 euros",
    "asset": "usdt",
    "currency":"usdt",
    "method": "eth_erc20",
    "network":"eth",
    "protocol":"erc20",
    "max_fee":"1", 
    "origin_id":"21112341" 
}

# Request body for the Tron network
{
  "address":"destination address",
  "amount":"amount < 1,000 euros",
  "asset":"usdt",
  "currency":"usdt",
  "method":"trx_trc20",
  "network":"tron",
  "protocol":"trc20",
  "max_fee":"3",
  "origin_id":"d1f866f6ec79df"
}
{
    "address": "destination address",   
    "amount": "amount < 1,000 euros",
    "asset": "usdc",
    "currency": "usd", 
    "method": "eth_erc20", 
    "network": "eth",
    "protocol": "erc20", 
    "max_fee": "0.34",
    "origin_id": "00fbb40c1111f375d9244f77"
}

Withdrawal Providing the Beneficiary's ID

For the case where you have already registered the beneficiary, use the request body shown below. It includes the variable contact_id, returned by the create contact call. Recall that when you set up a beneficiary, the system stores the transaction's taxonomy and the beneficiary's address.

If you don't have the contact ID, then retrieve your contacts list or do a filtered search. For more details, see the section, Retrieve Your Contacts List.

{
  "amount": "amount < 1,000 euros",
  "origin_id": "android-cffbb40c5900c395d9244ed5",
  "max_fee": "0.15538100",
  "contact_id": 20395
}

Withdrawal Request's Response

A successful withdrawal of funds returns the response object shown below. The field withdrawal_address represents the destination address.

{
    "success": true,
    "payload": {
        "wid": "21f90f7ed6d549f475d23cf659b5642a",
        "status": "pending",
        "created_at": "2022-08-03T16:21:32+0000",
        "currency": "btc",
        "method": "btc",
        "method_name": "Bitcoin",
        "amount": "0.00102999",
        "asset": "btc",
        "network": "btc",
        "protocol": "btc",
        "integration": "bitgo-v2",
        "details": {
            "origin_id": "android-cffbb40c5900c395d9244ed5",
            "withdrawal_address": "******2kgdygjrsqtzq2n0yrf2493p83kkfj******",
            "tx_hash": ""
        }
    }
}
{
    "success": true,
    "payload": {
        "wid": "85eb7f9f0cef6423a28129832f4ae12e",
        "status": "pending",
        "created_at": "2022-08-08T19:50:44+0000",
        "currency": "ada",
        "method": "ada",
        "method_name": "Cardano",
        "amount": "1.15588100",
        "asset": "ada",
        "network": "cardano",
        "protocol": "ada",
        "integration": "fblocks-v1",
        "details": {
            "origin_id": "android-cffbb40c5900c395d9244ed5",
            "withdrawal_address": "******2kgdygjrsqtzq2n0yrf2493p83kkfj******",
            "tx_hash": "",
            "tx_url": "https://explorer.cardano.org/en/transaction?id="
        }
    }
}
{
    "success": true,
    "payload": {
        "wid": "a8a66720df5298dad99cd7cd258578f3",
        "status": "pending",
        "created_at": "2023-07-10T20:00:38+00:00",
        "currency": "usdt",
        "method": "trx_trc20",
        "method_name": "Tron TRC20 Token",
        "amount": "13.00",
        "asset": "usdt",
        "network": "tron",
        "protocol": "trc20",
        "integration": "fblocks-v1",
        "details": {
            "withdrawal_address": "*******2r9tya9NTp5qzVgQvmqAf******",
            "tx_hash": ""
        }
    }
}

Getting a Withdrawal's Details

The payload returned by the create withdrawal call includes the variable wid, which stores the identifier of the transaction. This ID can help you track the transaction by making the following HTTP call, which returns detailed information on a user's funds withdrawal:

GET https://api-stage.bitso.com/v3/withdrawals/{wid}

If you do not specify a withdrawal identifier, then it lists all of your withdrawals. Visit Listing Withdrawals to learn other ways to filter your search using query parameters.

Another variable included in the payload is status, which reports the withdrawal's state. Withdrawals can be in one of four possible states:

  • PENDING: Bitso is currently processing the withdrawal request and has not sent the transaction to the blockchain. The system found enough balance to fund the payout from your wallet, so it has created the transaction and has set this initial status.
  • PROCESSING: Bitso sent the withdrawal to the blockchain and it is being processed there, not yet validated by the network.
  • COMPLETE: The blockchain network validated the withdrawal; the funds are now in the target wallet or account.
  • FAILED: The system could not complete the withdrawal; the funds remain in the original wallet or account.

A successful retrieval of a withdrawal's details returns the response object shown below.

{
    "success": true,
    "payload": [
        {
            "wid": "21f90f7ed6d549f475d23cf659b5642a",
            "status": "complete",
            "created_at": "2022-08-03T16:21:32+0000",
            "currency": "btc",
            "method": "btc",
            "method_name": "Bitcoin",
            "amount": "0.00102999",
            "asset": "btc",
            "network": "btc",
            "protocol": "btc",
            "integration": "bitgo-v2",
            "details": {
                "origin_id": "android-cffbb40c5900c395d9244ed5",
                "withdrawal_address": "******2kgdygjrsqtzq2n0yrf2493p83kkfj******",
                "tx_hash": "abfb21dfaf4a628abd05468ac5ad858e1989aa7ad8fefc1bdc3b980d57b16358"
            }
        }
    ]
}
{
    "success": true,
    "payload": [
        {
            "wid": "cc3292d11cf587ca0a22aa5c83195867",
            "status": "complete",
            "created_at": "2024-09-25T14:45:44+00:00",
            "currency": "usdt",
            "method": "eth_erc20",
            "method_name": "Ether ERC20 Token",
            "amount": "35.16",
            "asset": "usdt",
            "network": "eth",
            "protocol": "erc20",
            "integration": "fblocks-v1",
            "details": {
                "withdrawal_address": "0x1D8cEe1Db767Bc1561Fc981B6FFdeE0d1C2FAE2F",
                "tx_hash": "0x29239ec522cb4cc915089db4b034b1ecac6d244e279c00e7672e636c4fb7cc60",
                "tx_url": "https://etherscan.io/tx/0x29239ec522cb4cc915089db4b034b1ecac6d244e279c00e7672e636c4fb7cc60",
                "fee": "5.16",
                "amount_to_send": "30.00"
            }
        }
    ]
}

Did this page help you?