NAV

Introduction

Base URL

The base url is https://api.xbo.com

As per RESTful design patterns, XBO Client API uses following HTTP methods:

When you are making a request, you can pass arguments in it as:

Timestamps and other time-related fields are in milliseconds.

Data in response is listed in chronological order, newest on top.

Parameters for GET endpoints must be sent as a query string.

Parameters For POST, PUT, and DELETE endpoints may be sent as a query string or in the request body with content type application/json. You can mix parameters between both the query string and request body.

Parameters can be sent in any order.

If a parameter is sent in both the query string and request body, the query string parameter will be used.

Postman

We provide postman collections and environments for quick and easy use:

Return codes

200 Successful Request.

201 Created successfully.

400 Bad Request. Check the format of your request for mistakes and try again.

401 Unauthorized. Check if your API key is eligible for using the endpoint.

500 Server Error. Issue on our side. Contact XBO Customer Support for more information.

404 Resource is missing. Contact XBO Customer Support for more information.

Authentication

API Key

To access Client API endpoints you have to obtain API Key and secret. Starting 09/12/2024, We added a possibility for customers to generate and manage Client API credentials directly from Client Area.

For the customers with this functionality enabled, it can be accessed in their account Security settings.

Security Settings

The following API key management functionality is possible within the Client Area: - New API key request. Multiple pairs (key/secret) can be requested for Client API. - Delete the existing API key. - Reset. Delete the existing API key and create a new one.

// C# example
using System.Security.Cryptography;
using System.Text;
using Newtonsoft.Json;

var apiKey = "<apiKey>";
var apiSecret = "<apiSecret>";


var client = new HttpClient
{
    BaseAddress = new Uri("https://api.xbo.com")
};

var pathWithQuery = "/v1/test-api?testParam1=test1&testParam2=test2";
var pathWithOutQuery = "/v1/test-api";
var requestBody = JsonConvert.SerializeObject(
            new
            {
                testProperty1 = "test1",
                testProperty2 = "test12"
            });

var request = new HttpRequestMessage()
{
    Method = HttpMethod.Post,
    Content = new StringContent(requestBody, Encoding.UTF8, "application/json"),
    RequestUri = new Uri($"{pathWithQuery}", UriKind.Relative)
};

using HMACSHA256 hmac = new HMACSHA256(Convert.FromBase64String(apiSecret));
using var sha256 = SHA256.Create();

var contentHash = Convert.ToBase64String(sha256.ComputeHash(Encoding.UTF8.GetBytes(content)));
var timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
var signatureString = $"{timestamp}{request.Method}{pathWithOutQuery}{contentHash}";

var signatureHash = hmac.ComputeHash(Encoding.UTF8.GetBytes(signatureString));
request.Headers.Add("XBO-API-KEY", apiKey);
request.Headers.Add("XBO-API-SIGN", Convert.ToBase64String(signatureHash));
request.Headers.Add("XBO-API-TIMESTAMP", timestamp.ToString());

var response = await client.SendAsync(request);
// ...
//JavaScript example
const crypto = require('crypto');
const request = require('request');

const apiKey = "<apiKey>";
const apiSecret = "<apiSecret>";
const pathWithOutQuery = "/v1/test-api";

const req = {
    method: 'POST',
    url: '/v1/test-api?testParam1=test1&testParam2=test2',
    body: JSON.stringify({testProperty1:"test1",testProperty2:"test2"})
};
const timestamp = Math.floor(Date.now());
const contentHash = crypto.createHash("sha256").update(req.body).digest().toString("base64");
const signatureString = timestamp + req.method + pathWithOutQuery + contentHash;
const signature = crypto.createHmac("sha256",  Buffer.from(apiSecret, "base64")).update(Buffer.from(signatureString,"utf8")).digest().toString("base64");

const options = {
    baseUrl: 'https://api.xbo.com',
    url: req.url,
    method: req.method,
    headers: {
        'XBO-API-SIGN': signature,
        'XBO-API-TIMESTAMP': timestamp,
        'XBO-API-KEY': apiKey,
        'content-type': 'application/json'
    },
    body: req.body
};

request(options,function(err, response){
  // ...
}

//PHP example
<?php

declare(strict_types=1);

$apiKey = '';
$apiSecret = '';
$apiBaseUrl = 'https://api.xbo.com';
$pathWithOutQuery = '/v1/test-api';

$request = [
    'method' => 'POST',
    'url' => $pathWithOutQuery . '?testParam1=test1&testParam2=test2',
    'body' => json_encode(['testProperty1' => 'test1', 'testProperty2' => 'test2']),
];
$timestamp = time();
$signature = generateSignature($apiSecret, $timestamp, $request['url'], $request['method'], $request['body']);

$curl = curl_init();
curl_setopt_array($curl, [
    CURLOPT_URL => $apiBaseUrl . $request['url'],
    CURLOPT_TIMEOUT => 30,
    CURLOPT_CUSTOMREQUEST => $request['method'],
    CURLOPT_POSTFIELDS => $request['body'],
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'XBO-API-KEY: ' . $apiKey,
        'XBO-API-SIGN: ' . $signature,
        'XBO-API-TIMESTAMP: ' . $timestamp,
    ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo 'cURL Error #:' . $err;
} else {
    echo 'Response Code: ' . curl_getinfo($curl, CURLINFO_HTTP_CODE) . PHP_EOL;
    echo 'Response: ' . $response;
}

function generateSignature(
    string $apiSecret,
    int $timestamp,
    string $uriPath,
    string $httpMethod,
    ?string $requestBody = null,
): string {
    $requestBodyHash = '';

    if ($requestBody !== null) {
        $requestBodyHash = base64_encode(hash('sha256', $requestBody, true));
    }

    $signature = sprintf('%d%s%s%s', $timestamp, $httpMethod, $uriPath, $requestBodyHash);
    $hmacKey = base64_decode($apiSecret, true);

    return base64_encode(hash_hmac('sha256', $signature, $hmacKey, true));
}

Make sure to replace <apiKey> and <apiSecret> with your API key and secret respectively.

Making request

All requests to authorized endpoints must contain the following headers:
XBO-API-KEY - API Key
XBO-API-SIGN - Signature (see below)
XBO-API-TIMESTAMP - request timestamp

All request bodies should have content type application/json and be valid JSON

Selecting timestamp

XBO-API-TIMESTAMP must be number of milliseconds since
UNIX Epoch. It should be within 60 seconds of the API service time to be considered as valid.

Signing message

Signature is generated by creating a SHA256 HMAC using the API secret on the string timestamp + method + pathWithQuery + contentHash

Currencies & Networks

Get a list of all currencies and networks

Use this endpoint to get a list of all the currencies allowed by the regulation of your region and, in case of cryptocurrencies, with their networks listed as well.

HTTP Request

GET /v1/currencies/

Successful Response

  {
    "currency": "string",
    "type": "string",
    "networks": [
      {
        "addressType": 0,
        "IsTagRequiredForWithdrawals": false,
        "code": "string",
        "name": "string"
      }
    ]
  }

Response Fields

Name Type Description
currency string Acronym of currency.
type string Type of currency.
addressType string Type of network.
IsTagRequiredForWithdrawals boolean Is TAG, MEMO, or NOTE field required (true) or optional (false) for the currency, in case its addressType is MultipleWithTag, MultipleWithMemo, or MultipleWithNote respectively.
code string Acronym (code) of network.
name string Name of network.

Deposit Fiat

XBO makes it possible to deposit funds to your account via wire transfer.

To initiate the deposit via wire transfer, you need to use the endpoints below in the following order:

  1. Get a list of available bank accounts for your country and currency of choice.
  2. Get a fee quote calculated for your deposit amount.
  3. Initiate a wire transfer deposit with the currency and sum you want to deposit and bank details of your bank.

In the response to the third endpoint you will get XBO bank details, where you need to transfer your funds.

After the wire transfer deposit has been initialized, its transaction status will be Pending. Once we have received the sum of deposit, the funds will appear on your trading account and transaction status will become Completed.

Track your deposit status using Fiat transactions history deposit.

Get a list of available bank accounts

HTTP Request

GET /v1/fiat/deposits/wire-transfer/bank-accounts?countryIso2={countryIso2}&currency={currency}

Parameters

Name Type Required Description
countryIso2 string + Two-letter code of your country, in ISO 3166-2 format.
currency string + Fiat currency in which you want to make a wire transfer. In three-letter ISO 4217 format.

Successful Response (countryIso2=UA,currency=USD)

[
    {
        "id": 5832,
        "minDepositAmount": 5.10,
        "depositFeeFixedAmount": 5.00,
        "depositFeePercentAmount": 1.00,
        "currency": "USD",
        "bankName": "(USD) UA Test Bank",
        "iban": "(USD)UA458247823336334351911799216"
    },
    {
        "id": 5835,
        "minDepositAmount": 7.50,
        "depositFeeFixedAmount": 5.00,
        "depositFeePercentAmount": 0.00,
        "currency": "USD",
        "bankName": "(NEW_USD) UA Test Bank",
        "iban": "(NEW)UA458247823336334351911799216"
    }
]

Response Fields

Name Type Description
id number($int32) Bank unique ID. Use it to calculate the fee in the next endpoint.
minDepositAmount number($decimal) Minimum amount of deposit that can be made to the bank.
depositFeeFixedAmount number($decimal) Fixed deposit fee.
depositFeePercentAmount number($decimal) Deposit amount percentage fee.
currency string Currency that needs to be deposited. In three-letter ISO 4217 format.
bankName string Full bank name.
iban string Bank IBAN.

Fee quote for deposit amount

HTTP Request

POST /v1/fiat/deposits/wire-transfer/fee

Request Body Example

{
  "amount": 100,
  "currency": "USD",
  "countryIso2": "UA",
  "bankAccountId": 5832
}

Parameters

Name Type Required Description
amount number($decimal) + The amount you want to transfer.
currency string + Fiat currency in which you want to make a wire transfer. In three-letter ISO 4217 format.
countryIso2 string + Two-letter code of your country, in ISO 3166-2 format.
bankAccountId number($int32) + ID bank you've chosen to transfer deposit to in the previous endpoint.

Successful Response

{
    "netAmount": 94.00,
    "feeAmount": 6.00,
    "grossAmount": 100.0
}

Response Fields

Name Type Description
netAmount number($decimal) The amount that will be deposited on your XBO account. Fee excluded.
feeAmount number($decimal) The amount of fee that will be deducted from the amount you transfer.
grossAmount number($decimal) Total amount that you want to transfer.

Initiate deposit via wire transfer

HTTP Request

POST /v1/fiat/deposits/wire-transfer

Request Body Example

{
  "netAmount":94.00,
  "feeAmount":6.00,
  "currency":"USD",
  "customerBankName":"string",
  "customerIban":"UA458247823336334361411799216",
  "customerBankCountryIso2":"UA",
  "bankAccountId":5832
}

Parameters

Name Type Required Description
netAmount number($decimal) + The amount that will be deposited on your XBO account. Fee excluded.
feeAmount number($decimal) + The amount of fee that will be deducted from the amount you transfer.
currency string + Fiat currency in which you want to make a wire transfer. In three-letter ISO 4217 format.
customerBankName string + Name of the bank you will be making a wire transfer from.
customerIban string + IBAN of the account you will be making a wire transfer from.
customerBankCountryIso2 string + Two-letter code of your bank's country, according to ISO 3166-2.
bankAccountId number($int32) + ID of the bank you have chosen to transfer deposit to in the first endpoint and calculated the commission for.

Successful Response (make a wire transfer with these recipient details)

{
    "amount": 100.00,
    "recipient": "(USD) Test Account",
    "bankAddress": "(USD) 54/19 AVTOZAVODSKAYA STR 1",
    "bankZip": "(USD) 01001",
    "bankCity": "(USD) Kyiv",
    "bankCountry": "(USD) Ukraine",
    "swiftCode": "(USD) UNJSUAUK",
    "iban": "(USD)UA458247823336334351911799216",
    "paymentReference": "TXN58444",
    "referenceNumber": "(USD)Reference",
    "routingNumber": ""
}

Response Fields

Name Type Description
amount number($decimal) The amount that you need to transfer.
recipient string The name of the bank you need to make wire transfer to (recipient bank).
bankAddress string The address of recipient bank.
bankZip string ZIP code of recipient bank.
bankCity string City of recipient bank.
bankCountry string Country of recipient bank.
swiftCode string SWIFT of recipient bank.
iban string Recipient bank IBAN.
paymentReference string Internal reference of deposit transaction.
referenceNumber string Reference number of recipient bank.
routingNumber string Routing number of recipient bank.

Deposit Crypto

Get a unique deposit address

You can request a unique deposit address for each coin and network.

HTTP Request

POST /v2/deposit-addresses/

Request Body Example

{
    "currency": "BTC",
    "networkCode": "BTC_TEST",
    "addressType": "Additional",
    "clientTag": "tests"
}

Parameters

Name Type Required Description
currency string + Symbol of the cryptocurrency in acronym format, e.g., ETH, BTC, USDT, etc.
networkCode string + The chain network code for the currency, e.g., for USDT - OMNI, ERC20, TRC20.
addressType string + Address type. Can be: Primary, Additional, UniqueTag.
clientTag string Required for "addressType" = "UniqueTag", always empty for "addressType" = "Primary", optional for "addressType" = "Additional" Unique client's identifier in external system.

Successful Response

{
    "currency": "BTC",
    "address": "tb1qpcz67g5fv6y5vhrtvmxmqtnsg2zv5pxclece5n",
    "destinationTag": "string",
    "destinationTagType": "string",
    "addressType": "Additional",
    "clientTag": "testtag1"
}

Response Fields

Name Type Description
currency string Symbol of wallet's currency in acronym format, e.g., ETH, BTC, USDT, etc.
address string One-time Address of the wallet.
destinationTag string Additional address info of network, if applicable. Used for tag, memo and notes of the network.
destinationTagType string Type of the info in destinationTag field.
addressType string Address type. Can be: Primary, Additional, UniqueTag.
clientTag string Unique client's identifier in external system.

Get a list of all crypto addresses

You can request the list of all the cryptowallets belonging to you as an XBO client.

HTTP Request

GET /v2/deposit-addresses/

Parameters

Name Type Required Description
address string Wallet address. Use this parameter, to check if the exact wallet address belongs to your client account, and display its details.
networkCode string The chain network code for the currency, e.g., for USDT - OMNI, ERC20, TRC20.
clientTag string Unique client's identifier in external system.

Successful Response

[
    {
        "currency": "XRP",
        "networkCode": "XRP_TEST",
        "address": "rBo6XnbVWFzfdCxfX9Ym4mmcEQtoMNr3Gh",
        "destinationTag": "1128467660",
        "type": "Additional",
        "clientTag": "12346"
    },
    {
        "currency": "BTC",
        "networkCode": "BTC_TEST",
        "address": "tb1q72xg8d4w0avuzvj3fzerr76vcumve96smnlhvk",
        "destinationTag": "string",
        "type": "UniqueTag",
        "clientTag": "123467"
    }
]

Response Fields

Name Type Description
currency string Symbol of wallet's currency in acronym format, e.g., ETH, BTC, USDT, etc.
networkCode string The chain network code for the currency, e.g., for USDT - OMNI, ERC20, TRC20.
address string Address of the wallet.
destinationTag string Additional address info of network, if applicable. Used for tag, memo and notes of the network.
type string Address type. Can be: Primary, Additional, UniqueTag.
clientTag string Unique client's identifier in external system.

Convert

XBO Client API gives you the possibility to execute Convert transactions.

List currency pairs

See List all currencies and networks for more information.

Request for conversion quote

Send the request to get the conversion rate for your selected currency pair, from the currencies allowed by the regulation of your region in selected amount.

HTTP Request

POST /v1/otc-trading/request-for-quote/

Request Body Example

{
  "fromCurrency": "string",
  "toCurrency": "string",
  "fromAmount": 0,
  "toAmount": 0
}

Parameters

Name Type Required Description
fromCurrency string + Acronym of the currency you want to convert FROM.
toCurrency string + Acronym of the currency you want to convert your existing currency TO.
fromAmount double Select one parameter out of two, otherwise your request will be invalid. Amount of the currency you want to convert FROM.
toAmount double Amount of the currency you want to convert your existing currency TO.

Successful Response

{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "occuredOn": "2022-12-31T12:56:01.776Z",
  "validTo": "2022-12-31T12:56:01.776Z",
  "fromCurrency": "string",
  "toCurrency": "string",
  "amountFrom": 0,
  "amountTo": 0,
  "rate": 0
}

Response Fields

Name Type Description
id string Unique ID of request.
occuredOn string(dateTime) Time when the request reached our server.
validTo string(dateTime) Time until the stated rate is valid. If the time has elapsed, you need to send another request to convert your funds.
fromCurrency string Acronym of the currency you want to convert FROM.
toCurrency string Acronym of the currency you want to convert your existing currency TO.
amountFrom decimal Amount of the currency you want to convert FROM.
amountTo decimal Amount of the currency you want to convert your existing currency TO.
rate decimal Conversion rate, relevant for your request.

Convert funds

Place a conversion order, if you agree with the conversion rate for your selected currency pair.

HTTP Request

POST /v1/otc-trading/convert

Request Body Example

{
  "id": "string",
  "fromCurrency": "string",
  "toCurrency": "string",
  "fromAmount": 0,
  "toAmount": 0
}

Parameters

Name Type Required Description
id string + Unique ID of request-for-quote endpoint response.
fromCurrency string + Acronym of the currency you want to convert FROM.
toCurrency string + Acronym of the currency you want to convert your existing currency TO.
fromAmount decimal + Amount of the currency you want to convert FROM.
toAmount decimal + Amount of the currency you want to convert your existing currency TO.

In response you get the ID of the conversion transaction initiation.

Check balance on wallet

See Check balance for more information.

Get Convert history

Display the desired number of previous records in Convert history.

HTTP Request

GET /v1/otc-trading/history

Successful Response

{
  "items": [
    {
      "id": 0,
      "operationExecutionTime": "2022-12-31T11:19:33.448Z",
      "amountFrom": 0,
      "amountTo": 0,
      "fromCurrency": "string",
      "toCurrency": "string",
      "rate": 0,
      "status": "string"
    }
  ],
  "count": 0
}

Parameters

Name Type Required Description
page int32 + Offset, each page equals count value. For example, to get results 20-30, set page to 2, and count to 10.
count int32 + How many records to return.

Response Fields

Name Type Description
id int32 Unique transaction ID.
operationExecutionTime string(dateTime) Time the transaction was executed.
amountFrom decimal Amount of the currency converted FROM.
amountTo decimal Amount of the currency converted TO.
fromCurrency string Acronym of the currency converted FROM.
toCurrency string Acronym of the currency converted TO.
rate decimal Rate of conversion.
status string Status of the transaction.
count int32 Count of the record.

Spot Trading

XBO Client API gives customer the access to a full range of tools for spot trading, including the possibility to:

Get the list of pairs for trading

Use this endpoint to get a list of asset pairs, available for trading.

HTTP Request

GET /v1/spot-trading/symbols

Parameters

Name Type Required Description
page int32 + Offset, each page equals count value. For example, to get results 20-30, set page to 2, and count to 10.
count int32 + How many records to return.

Successful Response

{
  "total": 617,
  "data": [
    {
      "symbol": "1INCH/BTC",
      "description": "1INCH/BTC",
      "baseCurrency": "1INCH",
      "quoteCurrency": "BTC",
      "minVolumeTrade": 1000,
      "maxVolumeTrade": 27586,
      "precision": 8,
      "volumeStep": 0.1
    },
    {
      "symbol": "1INCH/USD",
      "description": "USD",
      "baseCurrency": "1INCH",
      "quoteCurrency": "USD",
      "minVolumeTrade": 200,
      "maxVolumeTrade": 1000,
      "precision": 8,
      "volumeStep": 0.01
    }
  ]
}

Response Fields

Name Type Description
total int32 Total number of trading pairs.
symbol string Acronym for the trading pair.
description string Description of the pair.
baseCurrency string Acronym of the base currency in the pair.
quoteCurrency string Acronym of the quote currency in the pair.
minVolumeTrade float The minimal amount of trade you can place an order for the pair.
maxVolumeTrade float The maximal amount of trade you can place an order for the pair.
precision int32 The number of decimal places allowed for the price of the trading pair.
volumeStep float The minimal amount of increment in trade volume.

Create an order

Use it to place a market or limit order.

HTTP Request

POST /v1/spot-trading/orders

Request Body Example

{
  "symbol": "BTC/USDT",
  "type": "Limit",
  "side": "Buy",
  "amount": 0.01,
  "price": 29000.00
}

Request Body

Name Type Required Description
symbol string + Trading pair symbol (e.g., BTC/USDT). Only for the currencies allowed by the regulation of your region.
type string + Type of the order you are making. Can be Market or Limit.
side string + Buy or Sell.
amount decimal + The amount of the order, must be > 0.
price decimal Required only for limit orders Price for limit orders.

Successful Response

{
  "id": 444123,
  "symbol": "BTC/USDT",
  "baseCurrency": "BTC",
  "quoteCurrency": "USDT",
  "type": "Limit",
  "side": "Buy",
  "amount": 0.01,
  "initialAmount": 0.01,
  "price": 29000.00,
  "openTime": "2025-05-29T10:00:00Z",
  "updatedOn": "2025-05-29T10:00:00Z",
  "takerCommission": 0,
  "makerCommission": 0,
  "time": 0
}

Response Fields

Name Type Description
id long Unique ID of the transaction.
symbol string Trading pair symbol.
baseCurrency string Symbol of the base currency in the pair.
quoteCurrency string Symbol of the quote currency in the pair.
type string Type of the order you are making.
side string Direction of the order. Can be "Buy" or "Sell".
amount decimal The current amount of the order. Can differ from initialAmount in case of partial order closure.
initialAmount decimal The initially requested amount of the order.
price decimal The price at which the order is executed.
openTime string(dateTime) Time at which the order was placed.
updatedOn string(dateTime) Time at which the order was updated.
makerCommission decimal Commission fee for order maker.
takerCommission decimal Commission fee for order taker.
time int32 Time in ms, passed from order placement to execution in Unix timestamp format.

Response Codes

Code Description
201 Created - order placed.
400 Bad Request - invalid payload.
401 Unauthorized - not authenticated.

Replace Order

Use it to change an existing order's amount and/or price.

HTTP Request

POST /v1/spot-trading/orders/{orderId}/replace

Parameters

Name Type Required Description
orderId long + ID of the order to change.

Request Body

Name Type Required Description
amount decimal + New amount, must be > 0.
price decimal New price. If provided, must be > 0.

Successful Response

{
  "id": 444124,
  "symbol": "BTC/USDT",
  "type": "Limit",
  "side": "Sell",
  "amount": 0.05,
  "price": 31000.00,
  "baseCurrency": "BTC",
  "quoteCurrency": "USDT",
  "takerCommission": 0.001,
  "makerCommission": 0.0005,
  "openTime": "2025-05-29T10:30:00Z",
  "updatedOn": "2025-05-29T10:35:00Z",
  "time": 5000
}

Response Fields

Name Type Description
id long Unique ID of the transaction.
symbol string Trading pair symbol.
type string Type of the order you are making.
side string Direction of the order. Can be "Buy" or "Sell".
amount decimal The current amount of the order.
price decimal The price at which the order is executed.
baseCurrency string Symbol of the base currency in the pair.
quoteCurrency string Symbol of the quote currency in the pair.
makerCommission decimal Commission fee for order maker.
takerCommission decimal Commission fee for order taker.
openTime string(dateTime) Time at which the order was placed.
updatedOn string(dateTime) Time at which the order was updated.
time int32 Time in ms, passed from order placement to execution in Unix timestamp format.

Response Codes

Code Description
201 Created - order replaced.
400 Bad Request - invalid input.
401 Unauthorized - not authenticated.

Cancel Order

Cancels an existing order by ID.

HTTP Request

DELETE /v1/spot-trading/orders/{orderId}

Parameters

Name Type Required Description
orderId long + ID of the order to cancel.

Response Codes

Code Description
200 OK - order successfully cancelled.
400 Bad Request - invalid ID/state.
401 Unauthorized - not authenticated.

Get Open Orders

Returns a paginated list of all currently open orders for the authenticated customer.

HTTP Request

GET /v1/spot-trading/orders

Parameters

Name Type Required Description
orderId long Filter by order ID.
symbol string Trading pair symbol (e.g., BTC/USDT).
side string Order action: Buy or Sell.
from string(dateTime) Start of order creation date.
to string(dateTime) End of order creation date.
page int Page number. Default: 1.
count int Items per page. Default: 100.

Successful Response

{
  "total": 1,
  "items": [
    {
      "id": 101,
      "symbol": "BTC/USDT",
      "baseCurrency": "BTC",
      "quoteCurrency": "USDT",
      "takerCommission": 0.001,
      "makerCommission": 0.0005,
      "side": "Buy",
      "type": "Limit",
      "amount": 0.5,
      "initialAmount": 1.0,
      "price": 30000.00,
      "openTime": "2024-12-31T12:00:00Z",
      "updatedOn": "2024-12-31T12:05:00Z",
      "time": 3000
    }
  ]
}

Response Fields

Name Type Description
id long Unique ID of the transaction.
symbol string Trading pair symbol.
baseCurrency string Symbol of the base currency in the pair.
quoteCurrency string Symbol of the quote currency in the pair.
type string Type of the order you are making.
side string Direction of the order. Can be "Buy" or "Sell".
amount decimal The current amount of the order.
initialAmount decimal The initially requested amount of the order.
price decimal The price at which the order is executed.
openTime string(dateTime) Time at which the order was placed.
updatedOn string(dateTime) Time at which the order was updated.
makerCommission decimal Commission fee for order maker.
takerCommission decimal Commission fee for order taker.
time int32 Time in ms, passed from order placement to execution in Unix timestamp format.

Response Codes

Code Description
200 OK - returns order list.
400 Bad Request - invalid input.
401 Unauthorized - not authenticated.

Get orders history

Returns a paginated list of closed orders for the authenticated customer.

HTTP Request

GET /v1/spot-trading/trades

Parameters

Name Type Required Description
symbol string Trading pair symbol (e.g., ETH/USDT).
type string Filter by order type: Market, Limit.
status string Filter by order status: Executed, Canceled, PartiallyExecuted.
orderId long Filter by related order ID.
dateFrom string(dateTime) Start of trade date range.
dateTo string(dateTime) End of trade date range.
page int + Page number.
count int + Items per page.

Successful Response

{
  "total": 1,
  "items": [
    {
      "id": 98765,
      "price": 1500.50,
      "amount": 0.3,
      "symbol": "ETH/USDT",
      "type": "Limit",
      "side": "Sell",
      "status": "Executed",
      "baseCurrency": "ETH",
      "quoteCurrency": "USDT",
      "fee": 2.5,
      "feeCurrency": "USDT",
      "feeType": "Taker",
      "openTime": "2025-01-01T10:00:00Z",
      "tradeDate": "2025-01-01T10:02:00Z"
    }
  ]
}

Response Codes

Code Description
200 OK - returns a trade list.
400 Bad Request - invalid filters.
401 Unauthorized - not authenticated.

Orderbook

The orderbook endpoint is used to request a complete level 2 order book, arranged by best asks/bids, for a particular asset pair.

HTTP Request

GET /v1/spot-trading/orderbook/{symbol}?depth={depth}

Parameters

Name Type Required Description
symbol string + Market pair for which the orderbook is requested, divided by encoded slash (%2F). Format example: BTC%2FUSDT
depth number($int32) Orders depth quantity. Depth = 100 means 100 for each bid/ask side. Default depth is 50 Max depth is 250.

Successful Response(BTC%2FUSDT, depth=2)

{
  "bids": [
    [
      50010,
      0.02
    ],
    [
      40020,
      0.15
    ]
  ],
  "asks": [
    [
      70694.8,
      0.0005
    ],
    [
      74000,
      0.0005
    ]
  ],
  "timestamp": 1719881818486
}

Response Fields

Name Type Description
bids array An array of [price, quantity] pairs for each bid order.
asks array An array of [price, quantity] pairs for each ask order.
timestamp int32 Unix UTC timestamp in milliseconds. States when the last updated time has occurred.

Trading pairs Stats

Trading pairs stats endpoint is to provide a statistical overview of market data for all trading pairs on XBO.

HTTP Request

GET /v1/spot-trading/trading-pairs/stats

Successful Response

[

  {
    "symbol": "AAVE/EUR",
    "lastPrice": 91.5615,
    "lowestAsk": 90.5505,
    "highestBid": 92.7372,
    "baseCurrency": "AAVE",
    "quoteCurrency": "EUR",
    "quoteVolume": 357658.30,
    "last24HTradeVolume": 3190.956,
    "last24HTradeVolumeUsd": 436423.747,
    "priceChangePercent24H": 1.22,
    "highestPrice24H": 92.9529,
    "lowestPrice24H": 90.3496
  },
  {
    "symbol": "AAVE/USD",
    "lastPrice": 98.1573,
    "lowestAsk": 97.4062,
    "highestBid": 99.6304,
    "baseCurrency": "AAVE",
    "quoteCurrency": "USD",
    "quoteVolume": 242767.98,
    "last24HTradeVolume": 2697.422,
    "last24HTradeVolumeUsd": 326113.675,
    "priceChangePercent24H": 0.51,
    "highestPrice24H": 99.9398,
    "lowestPrice24H": 97.064
  }
]

Response Fields

Name Type Description
symbol string Market pair in base currency/quote currency format.
lastPrice number($decimal) Last price of base currency based on given quote currency.
lowestAsk number($decimal) Lowest Ask price of base currency based on given quote currency.
highestBid number($decimal) Highest bid price of base currency based on given quote currency.
baseCurrency string Symbol of the base coin.
quoteCurrency string Symbol of the quote coin.
quoteVolume number($decimal) 24 hour trading volume for the pair in QUOTE coin.
last24HTradeVolume number($decimal) 24 hour trading volume for the pair in BASE coin.
last24HTradeVolumeUsd number($decimal) 24 hour trading volume for the pair in BASE coin in USD equivalent.
priceChangePercent24H number($decimal) 24 hour price change of market pair in percent.
highestPrice24H number($decimal) Highest price of base currency based on given quote currency in the last 24 hours.
lowestPrice24H number($decimal) Lowest price of base currency based on given quote currency in the last 24 hours.

Withdraw

You can withdraw your funds using XBO Client API by using the endpoints described below.

Withdrawal Fees

We provide the possibility to select the logic, by which the fee will be charged.

Withdrawal fee can be charged in two ways:

To select the preferred logic, use feeType parameter in request for crypto and fiat withdrawals.

Values of feeType parameter can be: | Value | Description | | --- | --- | | default | If client available amount allows it, fee is charged on top of the requested withdrawal amount, and client gets the exact amount of the requested withdrawal. In case the available balance is only enough for the requested amount, fee will be charged from the requested amount. | | net | Fee is always charged on top of the requested withdrawal amount, and client gets the exact amount of the requested withdrawal. If available balance is not enough for it, withdrawal request will be declined with error. | | gross | Fee is always charged from the requested withdrawal amount. |

feeType parameter is optional. If the parameter is not added to the request, we apply default withdrawal fee charging logic.

Crypto withdrawal fee and minimal withdrawal amount

Travel rules fields are required for EU-based customers for withdrawal amounts $1000 or above.

Use this endpoint to get the:

Use this endpoint to get crypto withdrawal info before creating an actual withdrawal.

HTTP Request

POST /v2/withdrawals/fee

Request Body Example

{
  "amount": 0,
  "currency": "string",
  "networkCode": "string",
  "destinationAddress": "string",
  "destinationAdditionalAddress": "string",
  "feeType": "string"
}

Parameters

Name Type Required Description
amount decimal + The amount the client wants to withdraw.
currency string + Cryptocurrency of the withdrawal.
networkCode string + Network code of the withdrawal.
destinationAddress string + Address, to which you are withdrawing.
destinationAdditionalAddress string Additional address, if applicable.
feeType string The way the fee is charged from the transaction. Can be default, net, gross. See Withdrawal Fees for more information.

Successful Response

"travelRuleBeneficiaryFields" in response indicates that the crypto withdrawal falls under Travel Rule and "beneficiary" object is mandatory for successful execution in compliance with MiCA regulation.

{
  "amount": 100,
  "feeAmount": 5,
  "netAmount": 100,
  "grossAmount": 105,
  "minWithdrawalAmount": 5,
  "travelRuleBeneficiaryFields": [
    {
      "firstName": "string",
      "lastName": "string",
      "countryOfBirthCode": "string",
      "dateOfBirth": "2024-12-20"
    }
  ]
}

Response Fields

Name Type Description
amount decimal The amount entered by client.
feeAmount decimal Fee amount for that withdrawal amount.
netAmount decimal Net amount of the withdrawal, fee deducted.
grossAmount decimal Total amount of the withdrawal, fee included.
minWithdrawalAmount decimal Minimal withdrawal amount, based on withdrawal address.
travelRuleBeneficiaryFields string array Recipient(beneficiary) data: first name, last name, date of birth, country of birth. Required by MiCA regulation Travel Rule for EU region. Is not present in the response for other countries.

Crypto withdrawal

"beneficiary" object in this endpoint is required to initiate a crypto withdrawal over USD 1000 for EU-based customers due to MiCA regulation Travel Rule.

Use this endpoint to make a crypto withdrawal.

HTTP Request

POST /v2/withdrawals

Request Body Example

{   
  "currency": "string",   
  "networkCode": "string",   
  "amount": 0,   
  "destinationAddress": "string",   
  "destinationAdditionalAddress": "string",   
  "referenceId": "string",
  "clientTag": "string",
  "feeType": "string",
  "beneficiary": {
    "firstName": "string",
    "lastName": "string",
    "countryOfBirthCode": "string",
    "dateOfBirth": "2004-12-20"
  }
}

Parameters

Name Type Required Description
currency string + Cryptocurrency of the transaction.
networkCode string + Network code of the transaction.
amount decimal + Amount of transaction.
destinationAddress string + Address, to which you are withdrawing.
destinationAdditionalAddress string Additional address, if applicable.
referenceId string ID of the transaction in external payment system. In case of Crypto Payx withdrawal, it will be a payout intent ID.
clientTag string Unique client's identifier in external system.
feeType string The way the fee is charged from the transaction. Can be default, net, gross. See Withdrawal Fees for more information.

For EU-based customers, if the withdrawal amount is greater than USD 1000, you need to add the "beneficiary" object to the request body (see example) with the following parameters:

Name Type Required Description
firstName string + Recipient(beneficiary) first name.
lastName string + Recipient(beneficiary) last name
countryOfBirthCode string + Recipient(beneficiary) country of birth two-letter code, as per ISO 3166 standard.
dateOfBirth string(date) + Recipient(beneficiary) date of birth in YYYY-MM-DD format.

Successful Response

{   
  "id": 0,   
  "currency": "USDT",   
  "networkCode": "string",
  "grossAmount": 105,
  "netAmount": 100,   
  "amount": 100,   
  "fee": 5,   
  "destinationAddress": "string",   
  "destinationAdditionalAddress": "string",   
  "referenceId": "string",
  "clientTag": "string",
  "beneficiary": 
  {
    "firstName": "John",
    "lastName": "Doe",
    "countryOfBirthCode": "BE",
    "dateOfBirth": "2004-12-20"
  }
}

Response Fields

Name Type Description
id int32 Unique ID of the withdrawal.
currency string Cryptocurrency of the transaction.
networkCode string Network code of the transaction.
grossAmount decimal Total amount of the transaction, fee included.
netAmount decimal Amount of the transaction received by client, fee deducted.
amount decimal Amount entered by client.
fee decimal Fee for the transaction.
destinationAddress string Address, to which the crypto was withdrawn.
destinationAdditionalAddress string Additional address field, if applicable.
referenceId string ID of the transaction in external payment system. In case of Crypto Payx withdrawal, it will be a payout intent ID.
clientTag string Unique client's identifier in external system.

Mass crypto withdrawal

It is possible to send batches with multiple crypto withdrawal transactions for mass processing.

Batch should meet the following requirements:

For multi-destination transactions with UTXO coins, a single UTXO fee will be calculated and applied to the entire batch as one fee, regardless of the number of destination addresses. For general (single transaction) type, each withdrawal within the batch will be charged a separate withdrawal fee, calculated per destination address.

Mass withdrawal is executed by the following flow:

  1. Validating the payment batch draft, so there are no errors in it. Required step. Endpoint.

If even one transaction in the batch has errors, the whole batch will not be validated and will not be available for further processing until the errors are fixed.

  1. Confirm the processing of validated batch draft. Endpoint.

After successful validation, batch draft needs to be confirmed with the separate endpoint to start mass withdrawal processing.

  1. Monitor the batch status in real time. Endpoint.

Using this endpoint will return general info about a certain batch. To get detailed information about transaction(s) from the batch, use GET /v1/transactions endpoint with withdrawalBatchId parameter to filter the response.

Mass withdrawal batch validation

Use this endpoint to validate mass crypto withdrawal batch.

HTTP Request

POST /v1/withdrawals/batches

Request Body Example

[
  {
    "currency": "string",
    "networkCode": "string",
    "amount": "string",
    "destinationAddress": "string",
    "destinationTag": "string",
    "comment": "string",
    "referenceId": "string",
    "beneficiary": 
    {
      "firstName": "string",
      "lastName": "string",
      "countryOfBirthCode": "string",
      "dateOfBirth": "2004-12-20"
    }
  },
  ...,
  {
    "currency": "string",
    "networkCode": "string",
    "amount": "string",
    "destinationAddress": "string",
    "destinationTag": "string",
    "comment": "string",
    "referenceId": "string"
  }
]

Parameters

Name Type Required Description
currency string + Cryptocurrency of the transaction. Only for the currencies allowed by the regulation of your region.
networkCode string + Network code of the transaction.
amount decimal + Amount of transaction.
destinationAddress string + Address, to which you are withdrawing.
destinationTag string Additional address tag, if applicable.
comment string Transaction commentary or note.
referenceId string ID of the transaction in external payment system. In case of Crypto Payx withdrawal, it will be a payout intent ID.

For EU-based customers, if the withdrawal amount is greater than USD 1000, you need to add the "beneficiary" object to the request body (see example) with the following parameters:

Name Type Required Description
firstName string + Recipient(beneficiary) first name.
lastName string + Recipient(beneficiary) last name
countryOfBirthCode string + Recipient(beneficiary) country of birth two-letter code, as per ISO 3166 standard.
dateOfBirth string(date) + Recipient(beneficiary) date of birth in YYYY-MM-DD format.

Successful Response

[
  {
    "id": 2408,
    "currency": "USDT",
    "transactionCount": 123,
    "amount": 540.0,
    "feeAmount": 0.0
  }
]

Response Fields

Name Type Description
id int32 Unique ID of the withdrawal batch. Use it to confirm the draft for further processing.
currency string Currency of withdrawal batch.
transactionCount int32 The amount of separate transactions within the batch.
amount decimal Total withdrawal amount for the transactions in the batch.
feeAmount decimal Total fee for all the transactions in the batch.

In case the batch was verified successfully, it will be created with "Draft" status. Confirm the batch draft to start processing withdrawals.

For more info on batch errors, see Mass withdrawal error handling.

Mass withdrawal batch draft confirmation

Use this endpoint to confirm the verified batch draft.

HTTP Request

POST /v1/withdrawals/batches/{withdrawalBatchId}/confirmation

Parameters

Name Type Required Description
withdrawalBatchId int32 + The ID of the verified batch draft.

In case the confirmation was successful, the response will return 202, status of the batch will change to "Processing", and mass withdrawal will start.

Mass withdrawal batch status

Use this endpoint to check the status of the mass withdrawal batch.

HTTP Request

GET /v1/withdrawals/batches/{withdrawalBatchId}

Parameters

Name Type Required Description
withdrawalBatchId decimal + The ID of mass withdrawal batch.

Successful Response

{
  "id": 2408,
  "status": "Processing",
  "currency": "USDT",
  "amount": 548.0,
  "amountUsd": 548.0,
  "feeAmount": 0.0,
  "feeAmountUsd": 0.0,
  "draftTransactionCount": 0,
  "pendingTransactionCount": 10,
  "declinedTransactionCount": 0,
  "completedTransactionCount": 224,
  "createdOn": "2024-07-02T07:34:49.183Z",
  "updatedOn": "2024-07-02T07:34:49.183Z"
}

Response Fields

Name Type Description
id int32 Unique ID of the withdrawal batch.
status string Status of the withdrawal batch.
currency string Currency of the withdrawal.
amount decimal Total amount of withdrawal for all the transactions in the batch.
amountUsd decimal Total amount of withdrawal for all the transactions in the batch in USD equivalent.
feeAmount decimal Total fee for the withdrawal batch.
feeAmountUsd decimal Total fee for the withdrawal batch in USD equivalent.
draftTransactionCount int32 Transactions in "Draft" status in the batch at the time of response.
pendingTransactionCount int32 Transactions in "Pending" status in the batch at the time of response.
declinedTransactionCount int32 Transactions in "Declined" status in the batch at the time of response.
completedTransactionCount int32 Transactions in "Completed" status in the batch at the time of response.
createdOn string(dateTime) When the withdrawal batch was created.
updatedOn string(dateTime) Time of the last withdrawal batch update.

Status of the withdrawal batch can have the following values.

Status Comment
Draft The withdrawal batch is not yet confirmed for further processing.
Processing Processing started, funds are blocked.
Processed Processing ended successfully, withdrawals sent.
Declined Error processing batch, funds are not locked.

Mass withdrawal error handling

Mass withdrawal batch has the following validation requirements per field.

Parameter Validation
Currency Should not be empty. Can contain only digits and letters.
Network Should not be empty. Can contain only digits, letters, '.', '-' and '_'.
Amount Should not be empty. Should be a positive number in format '1234.567' with max precision 8.
DestinationAddress Should not be empty. Should not be longer than 250 characters. Can contain only digits, letters and symbols ':' or '_'.
DestinationTag Should not be longer than 250 characters. Can contain only digits and letters.
Comment Should not be longer than 32 characters.
ReferenceId Should not be longer than 50 characters.

If there is only one mistake in the mass withdrawal batch, it will not be verified, and will return a response as a sent batch with "code" and "message" fields in the batch root, with the general error description, and "error" field added to each transaction.

In case the transaction has an error in it, this error will be written in that field. In other cases error field will be empty.

Error example

{
    "rows": [
        {
            "error": "",
            "currency": "USDT",
            "networkCode": "BNB_TEST",
            "amount": "100",
            "destinationAddress": "0x0B8395973A1e09E6121Ce76AE1ACf0DBf85161cb"
        },
        {
            "error": "",
            "currency": "USDT",
            "networkCode": "BNB_TEST3242",
            "amount": "100",
            "destinationAddress": "0x0B8395973A1e09E6121Ce76AE1ACf0DBf85161cb"
        },
        {
            "error": "'Amount' should be positive number in format '1234.567' with max precision 8",
            "currency": "USDT",
            "networkCode": "BNB_TEST",
            "amount": "-100",
            "destinationAddress": "0x0B8395973A1e09E6121Ce76AE1ACf0DBf85161cb"
        },
        {
            "error": "",
            "currency": "USDT",
            "networkCode": "BNB_TEST",
            "amount": "-100",
            "destinationAddress": "0x0B8395973A1e09E6121Ce76AE1ACf0DBf85161cb",
            "destinationTag": "sdfs"
        },
        {
            "error": "",
            "currency": "USDT",
            "networkCode": "BNB_TEST",
            "amount": "100",
            "destinationAddress": "0x0B8395973A1e09E6121Ce76AE1ACf0DBf85161cb",
            "destinationTag": "sdfs"
        },
        {
            "error": "",
            "currency": "USDT",
            "networkCode": "BNB_TEST",
            "amount": "100",
            "destinationAddress": "0x0B8395973A1e09E6121Ce76AE1ACf0DBf85161cb"
        }
    ],
    "code": "data-contains-invalid-value",
    "message": "One or more rows in data contains invalid data"
}

Error codes for the batch can be:

Code Description
multiple-currency Transactions in the batch contain multiple currencies.
max-row-count-limit-exceeded More than transaction limit (200) in batch.
data-contains-invalid-value Errors in transaction field data,e.g. typo. See detailed info within the error field for a specific transaction.
not-enough-balance Not enough balance for the mass withdrawal amount.

Fiat withdrawal fee and minimal withdrawal amount

Use this endpoint to get fiat withdrawal info before creating an actual withdrawal.

Use this endpoint to get the:

HTTP Request

POST /v1/fiat/withdrawals/fee

Request Body Example

{
  "amount": 0,
  "currency": "string",
  "bankCountryIso2": "string",
  ​​"feeType": "string"
}

Parameters

Name Type Required Description
amount decimal + The amount the client wants to withdraw.
currency string + Currency of the withdrawal.
bankCountryIso2 string + Two-letter code of your bank's country, according to ISO 3166-2.
feeType string The way the fee is charged from the transaction. Can be default, net, gross. See Withdrawal Fees for more information.

Successful Response

{
  "amount": 100,
  "feeAmount": 5,
  "netAmount": 100,
  "grossAmount": 105,
  "minWithdrawalAmount": 5
}

Response Fields

Name Type Description
amount decimal The amount entered by client.
feeAmount decimal Fee amount for that withdrawal amount.
netAmount decimal Net amount of the withdrawal, fee deducted.
grossAmount decimal Total amount of the withdrawal, fee included.
minWithdrawalAmount decimal Minimal withdrawal amount, based on withdrawal address.

Fiat withdrawal

Use the following endpoint to execute fiat withdrawal.

HTTP Request

POST /v1/fiat/withdrawals

Request Body Example

{
  "amount": 0,
  "currency": "string",
  "iban": "string",
  "bankCountryIso2": "string",
  "recipientName": "string",
  "paymentReason": "string",
  "referenceId": "string",
  "feeType": "string",
}

Parameters

Name Type Required Description
amount decimal + Amount you want to withdraw.
currency string + Currency in which you want to withdraw.
iban string + IBAN of recipient bank.
bankCountryIso2 string + Bank country.
recipientName string + Name of the recipient.
paymentReason string + Payment reason.
referenceId string Client's internal transaction ID. Needs to be unique within our system, not only for client's transactions.
feeType string The way the fee is charged from the transaction. Can be default, net, gross. See Withdrawal Fees for more information.

Successful Response

{
  "id": 0,
  "grossAmount": 105,
  "netAmount": 100,   
  "amount": 100,  
  "fee": 5,
  "createdDate": "2022-12-31T06:47:58.261Z",
  "currency": "string",
  "status": "string",
  "reason": "string"
}

Response Fields

Name Type Description
id int32 Unique ID of the withdrawal.
grossAmount decimal Total amount of the transaction, fee included.
netAmount decimal Amount of the transaction received by client, fee deducted.
amount decimal Amount entered by client.
fee decimal Fee for the withdrawal.
createdDate string(dateTime) When the withdrawal was created. In UTC format.
currency string Currency of the withdrawal.
status string Status of withdrawal.
reason string Reason of the withdrawal status.

Balance

Check account balances

To check your balance on your wallets, use the following endpoint.

HTTP Request

GET /v1/wallet/accounts

Successful Response

{
  "name": "string",
  "type": "string",
  "currency": "string",
  "totalBalance": 0,
  "availableBalance": 0,
  "totalBalanceUsd": 0,
  "availableBalanceUsd": 0
  "availableWithdrawalBalance" : 0,
  "availableWithdrawalBalanceUsd": 0
}

Response Fields

Name Type Description
name string Wallet name.
type string Wallet type.
currency string Wallet currency.
totalBalance decimal Total balance in wallet's currency.
availableBalance decimal Available balance in wallet's currency.
totalBalanceUsd decimal Total wallet's balance equivalent in USD.
availableBalanceUsd decimal Available wallet's balance equivalent in USD.
availableWithdrawalBalance decimal Wallet's balance available for withdrawal. Credit funds are deducted from the available balance.
availableWithdrawalBalanceUsd decimal Wallet's balance available for withdrawal equivalent in USD.

Transaction History

Use the corresponding endpoints below to retrieve the history of transactions of a specific type.

Crypto transactions history

HTTP Request

GET /v1/transactions

Parameters

Name Type Required Description
currency string A specific cryptocurrency of transactions, if needed.
page int32 + Offset, each page equals count value. For example, to get results 20-30, set page to 2, and count to 10.
count int32 + How many records to return. Record limit per one request is 500 transactions.
withdrawalBatchId int32 Show records only for transactions within a specific mass withdrawal batch.
address string Show records only for transactions to a specific destination address.
clientTag string Show records only for transactions with a specific clientTag.
dateFrom string(dateTime) Starting date for the transactions. In UTC format.
dateTo string(dateTime) End date for the transactions. In UTC format.

Successful Response

{
    "total": 1,
    "data": 
      [
        {
            "id": "CTN77926",
            "currency": "XRP",
            "type": "Receive",
            "status": "Completed",
            "createdOn": "2024-02-31T14:06:32.2440677Z",
            "totalAmount": 20.00,
            "executedAmount": 20.00,
            "fee": 0.0,
            "networkCode": "XRP_TEST",
            "networkName": "XRP Testnet",
            "destinationAddress": "rBo6XnbVWFzfdCxfX9Ym4mmcEQtoMNr3Gh",
            "destinationAdditionalAddress": "1128467660",
            "referenceId": "string",
            "traceId": "string",
            "clientTag": "12346",
            "sourceAddress": "string"
        }   
      ]
}

Response Fields

Name Type Description
id string Unique ID of the transaction.
currency string Cryptocurrency of the transaction.
type string Type of the transaction. Can be "Send" or "Receive".
status string Status of the transaction. Can be "Pending", "Completed", or "Declined".
createdOn string(dateTime) When the transaction was created. In UTC format.
totalAmount decimal Gross amount of the transaction.
executedAmount decimal Amount of the transaction, with the fee amount deducted.
fee decimal Fee for the transaction.
networkCode string Network code of the transaction.
networkName string Network name of the transaction.
networkTransactionId string Unique network ID of the transaction.
destinationAddress string Destination address of the transaction.
destinationAdditionalAddress string Additional address field, if applicable.
referenceId string Client's internal transaction ID. Needs to be unique within our system, not only for client's transactions.
traceId string ID of the transaction in external payment system. For example, in case of Crypto Payx transaction, it can be payment intent ID for the deposit, and payout intent ID for the withdrawal.
clientTag string Unique client's identifier in external system.
sourceAddress string Source address of the transaction. Is empty in case of internal transaction.

Fiat transactions history

HTTP Request

GET /v1/fiat/transactions

Parameters

Name Type Required Description
currency string A specific currency of transactions, if needed.
page int32 + Offset, each page equals count value. For example, to get results 20-30, set page to 2, and count to 10.
count int32 + How many records to return. Record limit per one request is 500 transactions.
dateFrom string(dateTime) Starting date for the transactions.
dateTo string(dateTime) End date for the transactions.

Successful Response

{
  "data": [
    {
      "id": "string",
      "status": "string",
      "type": "string",
      "paymentMethod": "string",
      "createdOn": "2024-02-31T11:01:48.8533131Z",
      "totalAmount": 0,
      "executedAmount": 0,
      "fee": 0,
      "currency": "string",
      "lastCreditCardDigits": "string",
      "bankCountryCode": "string",
      "bankAccount": "string",
      "bankName": "string",
      "acquirerBank": "string",
      "acquirerAddress": "string",
      "acquirerSwift": "string",
      "acquirerAccount": "string",
      "referenceId": "string"
    }
  ],
  "total": 0
}

Response Fields

Name Type Description
id string Unique ID of the transaction.
status string Status of the transaction. Can be "Pending", "Completed", or "Declined".
type string Type of the transaction. Can be "Deposit" or "Withdrawal".
paymentMethod string Payment method of the transaction. Can be "CreditCard","Apm","WireTransfer" or 0, if "type"="Withdrawal"
createdOn string(dateTime) When the transaction was created.
totalAmount decimal Gross amount of the transaction.
executedAmount decimal Amount of the transaction, with the fee amount deducted.
fee decimal Fee for the transaction.
currency string Currency of the transaction.
lastCreditCardDigits string First and last digits of the credit card for the transaction. For "CreditCard" payment method.
bankCountryCode string Bank country code. For "Withdrawal" transaction type or "WireTransfer" payment method.
bankAccount string Bank account number. For "Withdrawal" transaction type or "WireTransfer" payment method.
bankName string Bank name. For "WireTransfer" payment method.
acquirerBank string Acquirer name. For "WireTransfer" payment method.
acquirerAddress string Acquirer address. For "WireTransfer" payment method.
acquirerSwift string Acquirer SWIFT code. For "WireTransfer" payment method.
acquirerAccount string Acquirer account number. For "WireTransfer" payment method.

Earn Products

Use the corresponding endpoints below to manage Earn products and subscriptions.

Get Products List

Returns all Earn products currently available to the requesting customer. Results are filtered based on the customer's jurisdiction — only enabled products and permitted coins are returned. If no products are available, the response returns an empty list.

HTTP Request

GET /v1/earn/products

Successful Response

[
  {
    "id": 0,
    "currencyCode": "string",
    "currencyName": "string",
    "type": "Fix",
    "periodDays": 0,
    "redeemPeriodDays": 0,
    "interestRate": 0,
    "penaltyRate": 0,
    "autoSubscribeEnabled": true,
    "paymentPeriod": "Daily"
  }
]

Response Fields

Name Type Description
id int32 Unique ID of the Earn product.
currencyCode string Currency code for the product (e.g., BTC, ETH).
currencyName string Full name of the currency.
type string Product type. Can be Fix, FixBonded, Flex, or FlexBonded.
periodDays int32 Subscription term length in days. Applicable to Fix and FixBonded products.
redeemPeriodDays int32 Number of days funds are locked after a redemption is requested. Applicable to FixBonded and FlexBonded products. null for Fix and Flex.
interestRate decimal Annual interest rate (APR) offered to the customer. For products with automatic provider rate sync, this reflects the current rate at the time of the request.
penaltyRate decimal Early termination penalty rate.
autoSubscribeEnabled bool Indicates whether auto-renew is available for this product.
paymentPeriod string Reward payment frequency. Can be Daily, Weekly, Monthly, or EndOfSubscription.

Create Subscription

Creates a new Earn subscription for the specified product for the authorized client. Funds are moved from the client's Spot account to the Earn account on success.

For Flex/FlexBonded products, if the client already has an active subscription for the same product and currency, the request is treated as a top-up on the existing subscription rather than creating a new one.

HTTP Request

POST /v1/earn/subscriptions

Request Body Example

{
  "productId": 0,
  "amount": 0,
  "autoRenewEnabled": true
}

Parameters

Name Type Required Description
productId int32 + ID of the Earn product to subscribe to.
amount decimal + Amount to subscribe. Must be within the product's minimum and maximum subscription limits, and large enough to generate a reward greater than 0.
autoRenewEnabled bool Whether the subscription should automatically renew at the end of the term. Applicable to Fix/FixBonded products only; ignored for Flex/FlexBonded.

Successful Response

{
  "id": 0,
  "customerId": 0,
  "productId": 0,
  "productType": "Fix",
  "status": "Active",
  "periodDays": 0,
  "amount": 0,
  "currencyCode": "string",
  "currencyName": "string",
  "autoSubscribeEnabled": true,
  "autoRenewEnabled": true,
  "closedOn": "2026-04-09T06:38:35.399Z"
}

Response Fields

Name Type Description
id int32 Unique ID of the created subscription.
customerId int32 ID of the customer who owns the subscription.
productId int32 ID of the Earn product.
productType string Product type. Can be Fix, FixBonded, Flex, or FlexBonded.
status string Current status of the subscription.
periodDays int32 Subscription term length in days. Applicable to Fix/FixBonded products.
amount decimal Subscribed amount.
currencyCode string Currency code of the subscription.
currencyName string Full name of the currency.
autoSubscribeEnabled bool Whether auto-renew is available for this product.
autoRenewEnabled bool Whether auto-renew is enabled for this subscription. Applicable to Fix/FixBonded products.
closedOn string(dateTime) Date and time when the subscription term ends or was closed. In UTC format. null for open-ended Flex/FlexBonded subscriptions.

Get Subscriptions

Returns all Earn subscriptions belonging to the authenticated customer across all statuses. Supports filtering and pagination.

HTTP Request

GET /v1/earn/subscriptions

Parameters

Name Type Required Description
status string Filter by subscription status. Can be Active, Closed, or Terminated.
productType string Filter by product type. Can be Fix, FixBonded, Flex, or FlexBonded.
currencyCode string Filter by currency code.
page int32 + Offset, each page equals the count value. For example, to get results 20–30, set page to 2 and count to 10.
count int32 + Number of records to return per page.

Successful Response

{
  "data": [
    {
      "id": 0,
      "productId": 0,
      "productType": "Fix",
      "periodDays": 0,
      "redeemPeriodDays": 0,
      "amount": 0,
      "amountUsd": 0,
      "lastDailyReward": 0,
      "lastDailyRewardUsd": 0,
      "calculationDate": "2026-04-09T06:40:01.657Z",
      "accruedReward": 0,
      "paidReward": 0,
      "paidRewardUsd": 0,
      "currencyCode": "string",
      "interestRate": 0,
      "penaltyRate": 0,
      "autoSubscribeEnabled": true,
      "autoRenewEnabled": true,
      "status": "Active",
      "paymentPeriod": "Daily",
      "isStartDayIncluded": true,
      "isNewFlow": true,
      "createdOn": "2026-04-09T06:40:01.657Z",
      "closedOn": "2026-04-09T06:40:01.657Z"
    }
  ],
  "total": 0
}

Response Fields

Name Type Description
data array List of subscription objects.
total int32 Total number of subscriptions matching the request filters.
id int32 Unique ID of the subscription.
productId int32 ID of the Earn product.
productType string Product type. Can be Fix, FixBonded, Flex, or FlexBonded.
periodDays int32 Subscription term length in days. Applicable to Fix/FixBonded products.
redeemPeriodDays int32 Number of days funds are locked after a redemption is requested. Applicable to FixBonded/FlexBonded products. null for Fix/Flex.
amount decimal Current subscription principal amount.
amountUsd decimal Subscription principal amount in USD equivalent.
lastDailyReward decimal Most recent daily reward payout amount.
lastDailyRewardUsd decimal Most recent daily reward in USD equivalent.
calculationDate string(dateTime) Date of the last reward calculation. In UTC format.
accruedReward decimal Total reward accrued but not yet paid out.
paidReward decimal Total reward paid to date.
paidRewardUsd decimal Total paid reward in USD equivalent.
currencyCode string Currency code of the subscription.
interestRate decimal Annual interest rate (APR) applied to this subscription. For Fix/FixBonded, this is the rate locked at creation time.
penaltyRate decimal Early termination penalty rate.
autoSubscribeEnabled bool Whether auto-renew is available for this product.
autoRenewEnabled bool Whether auto-renew is enabled for this subscription. Applicable to Fix/FixBonded products.
status string Current status of the subscription. Can be Active, Closed, Terminated, or PendingRedemption.
paymentPeriod string Reward payment frequency. Can be Daily, Weekly, Monthly, or EndOfSubscription.
isStartDayIncluded bool Whether the subscription start day is counted in the term period.
isNewFlow bool Indicates whether the subscription uses the current platform flow.
createdOn string(dateTime) When the subscription was created. In UTC format.
closedOn string(dateTime) When the subscription was closed. In UTC format. null if still active.

Get Subscription Transactions

Returns all transactions associated with a specific subscription for the authenticated customer. The subscription must belong to the requesting customer, in other case we will return Unauthorized error.

HTTP Request

GET /v1/earn/subscriptions/{subscriptionId}/transactions

Parameters

Name Type Required Description
subscriptionId int32 + The ID of the subscription whose transactions are being requested.
transactionType string Filter by transaction type. Can be TopUp, Redemption, Reward, or Termination.
page int32 + Offset, each page equals the count value. For example, to get results 20–30, set page to 2 and count to 10.
count int32 + Number of records to return per page.

Successful Response

{
  "data": [
    {
      "id": 0,
      "currency": "string",
      "amount": 0,
      "planAmount": 0,
      "amountUsd": 0,
      "terminationFeeAmount": 0,
      "transactionStatus": "Processing",
      "transactionType": "TopUp",
      "subscriptionId": 0,
      "customerId": 0,
      "statusDescription": "string",
      "productType": "Fix",
      "paymentPeriod": "Daily",
      "productPeriodDays": 0,
      "interestRate": 0,
      "redeemFundsUnlockAt": "2026-04-09T06:40:46.565Z",
      "createdOn": "2026-04-09T06:40:46.565Z",
      "updatedOn": "2026-04-09T06:40:46.565Z"
    }
  ],
  "total": 0
}

Response Fields

Name Type Description
data array List of transaction objects.
total int32 Total number of transactions matching the request filters.
id int32 Unique ID of the transaction.
currency string Currency code of the transaction.
amount decimal Actual transaction amount.
planAmount decimal Planned amount for the transaction (e.g., the scheduled reward amount before payout).
amountUsd decimal Transaction amount in USD equivalent.
terminationFeeAmount decimal Penalty fee charged upon early termination. Applicable to Termination transactions.
transactionStatus string Current status of the transaction. Can be Processing, Completed, or Declined.
transactionType string Type of the transaction. Can be TopUp, Redemption, Reward, or Termination.
subscriptionId int32 ID of the subscription this transaction belongs to.
customerId int32 ID of the customer who owns the subscription.
statusDescription string Human-readable description of the transaction status.
productType string Product type of the subscription. Can be Fix, FixBonded, Flex, or FlexBonded.
paymentPeriod string Reward payment frequency of the subscription. Can be Daily, Weekly, Monthly, or EndOfSubscription.
productPeriodDays int32 Term length in days for the product.
interestRate decimal Annual interest rate (APR) applied to the subscription.
redeemFundsUnlockAt string(dateTime) Expected date when redeemed funds will be unlocked. Applicable to FixBonded/FlexBonded redemptions. In UTC format.
createdOn string(dateTime) When the transaction was created. In UTC format.
updatedOn string(dateTime) Time of the last transaction update. In UTC format.

Top Up Subscription

Adds funds to an existing active Flex or FlexBonded subscription. Funds are transferred from the customer's Spot account to the Earn account on success.

HTTP Request

POST /v1/earn/subscriptions/{subscriptionId}/topUp

Request Body Example

{
  "amount": 0
}

Parameters

Name Type Required Description
subscriptionId int32 + The ID of the subscription to top up.
amount decimal + Amount to add to the subscription. Must be within the product's minimum and maximum subscription limits and large enough to generate a reward greater than 0.

Successful Response

{
  "id": 0,
  "customerId": 0,
  "productId": 0,
  "productType": "Fix",
  "status": "Active",
  "periodDays": 0,
  "amount": 0,
  "currencyCode": "string",
  "currencyName": "string",
  "autoSubscribeEnabled": true,
  "autoRenewEnabled": true,
  "closedOn": "2026-04-09T06:38:35.399Z"
}

Response Fields

Name Type Description
id int32 Unique ID of the subscription.
customerId int32 ID of the customer who owns the subscription.
productId int32 ID of the Earn product.
productType string Product type. Can be Fix, FixBonded, Flex, or FlexBonded.
status string Current status of the subscription.
periodDays int32 Subscription term length in days. Applicable to Fix/FixBonded products.
amount decimal Subscribed amount after the top-up.
currencyCode string Currency code of the subscription.
currencyName string Full name of the currency.
autoSubscribeEnabled bool Whether auto-renew is available for this product.
autoRenewEnabled bool Whether auto-renew is enabled for this subscription. Applicable to Fix/FixBonded products.
closedOn string(dateTime) Date and time when the subscription term ends or was closed. In UTC format. null for open-ended Flex/FlexBonded subscriptions.

Update Auto-Renew

Updates the auto-renew setting for a Fix or FixBonded subscription. When enabled, the subscription automatically renews at the end of the term at the current product rate.

HTTP Request

PATCH /v1/earn/subscriptions/{subscriptionId}/autoRenew

Request Body Example

{
  "autoRenewEnabled": true
}

Parameters

Name Type Required Description
subscriptionId int32 + The ID of the subscription to update.
autoRenewEnabled bool + Whether the subscription should automatically renew at the end of the term. Applicable to Fix/FixBonded subscriptions only.

Successful Response

{
  "id": 0,
  "customerId": 0,
  "productId": 0,
  "productType": "Fix",
  "status": "Active",
  "periodDays": 0,
  "amount": 0,
  "currencyCode": "string",
  "currencyName": "string",
  "autoSubscribeEnabled": true,
  "autoRenewEnabled": true,
  "closedOn": "2026-04-09T06:38:35.399Z"
}

Response Fields

Name Type Description
id int32 Unique ID of the subscription.
customerId int32 ID of the customer who owns the subscription.
productId int32 ID of the Earn product.
productType string Product type. Can be Fix, FixBonded, Flex, or FlexBonded.
status string Current status of the subscription.
periodDays int32 Subscription term length in days. Applicable to Fix/FixBonded products.
amount decimal Subscribed amount.
currencyCode string Currency code of the subscription.
currencyName string Full name of the currency.
autoSubscribeEnabled bool Whether auto-renew is available for this product.
autoRenewEnabled bool Updated auto-renew status for this subscription.
closedOn string(dateTime) Date and time when the subscription term ends or was closed. In UTC format. null for open-ended Flex/FlexBonded subscriptions.

Create Redemption

Initiates a redemption request for a FixBonded or FlexBonded subscription. Redeemed funds are locked for the product's configured redeem period before being returned to the customer's Spot account.

For FlexBonded subscriptions, a partial redemption amount may be specified. For FixBonded subscriptions, the full principal is redeemed at the end of the term.

HTTP Request

POST /v1/earn/subscriptions/{subscriptionId}/redemptions

Request Body Example

{
  "amount": 0
}

Parameters

Name Type Required Description
subscriptionId int32 + The ID of the subscription to redeem from.
amount decimal Amount to redeem. Applicable to FlexBonded subscriptions for partial redemptions. For FixBonded, the full principal is redeemed.

Successful Response

{
  "id": 0,
  "customerId": 0,
  "productId": 0,
  "productType": "Fix",
  "status": "Active",
  "periodDays": 0,
  "amount": 0,
  "currencyCode": "string",
  "currencyName": "string",
  "autoSubscribeEnabled": true,
  "autoRenewEnabled": true,
  "closedOn": "2026-04-09T06:38:35.399Z"
}

Response Fields

Name Type Description
id int32 Unique ID of the subscription.
customerId int32 ID of the customer who owns the subscription.
productId int32 ID of the Earn product.
productType string Product type. Can be Fix, FixBonded, Flex, or FlexBonded.
status string Current status of the subscription. Reflects PendingRedemption while the redeem period is in progress.
periodDays int32 Subscription term length in days. Applicable to Fix/FixBonded products.
amount decimal Remaining subscribed amount after the redemption request.
currencyCode string Currency code of the subscription.
currencyName string Full name of the currency.
autoSubscribeEnabled bool Whether auto-renew is available for this product.
autoRenewEnabled bool Whether auto-renew is enabled for this subscription. Applicable to Fix/FixBonded products.
closedOn string(dateTime) Date and time when the subscription term ends or was closed. In UTC format. null for open-ended Flex/FlexBonded subscriptions.

Callback Settings

You, as a merchant, can configure a callback notification URL to receive notifications for deposit status changes, made by your customers.

Merchant can update or remove a previously registered callback URL. Only one active callback URL per merchant is supported at a time.

Callback URL registration is available to both CaaS corporate and other Client API merchants.

If enabled, webhook notification is sent on every deposit status transition: Created, Completed, and Declined.

Webhook notification

Webhook is sent for deposits to both default account and Virtual Wallets. One webhook notification is sent per status change per deposit transaction.

A single deposit may generate multiple webhooks as it progresses through statuses (e.g., CreatedCompleted).

Notification payload includes: transaction ID, currency, deposited amount, source blockchain address, destination deposit address, network code, transaction hash, current transaction status, timestamp of the status change, and Virtual Wallet Reference ID (if exists as a client tag).

For CaaS corporate merchants, notification additionally includes Virtual Wallet Reference ID and Virtual Wallet Name when the deposit is attributed to a Virtual Wallet.

For deposits to default account (both CaaS corporate and standard merchants), Virtual Wallet Reference ID and Virtual Wallet Name fields are absent or null.

All monetary amounts use the same precision as the corresponding currency configuration. Timestamp is in UTC format.

Deposit Created Notification Example

{
  "CustomerId": 1,
  "TransactionId": "546934",
  "Currency": "USDT",
  "NetworkCode": "BNB_TEST",
  "Amount": 10,
  "AmountUsd": 9.9895,
  "SourceAddress": "0x9586180f8D56779ae61c9d6E80c037fB59e47DBc",
  "DestinationAddress": "0x7e7D0330A842b9B440598BaA47597E60689AF90e",
  "TransactionHash": "f50be37f-f932-445d-8fb2-3c2a185bc22d",
  "Status": "Created",
  "NotificationType": "DepositNotification",
  "VirtualWalletReferenceId": "vw_1_a5817155",
  "ProducedOn": "2026-04-06T12:25:03.9314469Z"
}

Get callback URL

Retrieves the currently configured callback notification URL.

HTTP Request

GET /v1/settings/callback-url

Response Fields

Name Type Description
callbackUrl string The webhook endpoint URL configured for notifications.

Response Example

{
  "callbackUrl": "https://example.com/webhooks/xbo"
}

Update callback URL

Modifies the webhook notification URL configuration.

HTTP Request

PUT /v1/settings/callback-url

Parameters

Name Type Required Description
callbackUrl string + The new webhook endpoint URL for receiving notifications.

Request Body Example

{
  "callbackUrl": "https://example.com/webhooks/xbo"
}

Crypto-as-a-service (CaaS)

XBO offers Virtual Wallet functionality to our CaaS corporate clients, which allows them to create multiple segregated wallets under a single merchant account.

Each Virtual Wallet will have its own balance, transaction history, and optional human-readable name, while the merchant retains a unified compliance and operational setup for the optimal workflow.

Merchants can create Virtual Wallets, assign deposit addresses, receive and credit deposits, and execute withdrawals and asset conversion via OTC, all tied to the specific Virtual Wallet.

Use XBO API CaaS endpoints to:

Request a Virtual Wallet

You can request a unique address for your Virtual Wallet, individual for each coin and network.

HTTP Request

[POST] /v1/virtual-wallets

Request Body Example

  {
    "referenceId": "string",
    "name": "string"
  }

Parameters

Name Type Required Description
referenceId string + A unique client identifier. Should be an alphanumeric string with additional "-" and "_" characters allowed, case-insensitive, 64 characters max.
name string + Virtual Wallet human-readable name.

Successful Response

  {
    "referenceId": "string",
    "name": "string"
  }

Response Fields

Name Type Description
referenceId string A unique client identifier.
name string Virtual Wallet human-readable name.

Get a list of all Virtual Wallets

You can request the list of all the Virtual Wallets belonging to you as XBO CaaS corporate client.

HTTP Request

[GET] /v1/virtual-wallets

Successful Response

[
  {
    "referenceId": "string",
    "name": "string"
  },
  {
    "referenceId": "string",
    "name": "string"
  },
]

Response Fields

Name Type Description
referenceId string A unique client identifier.
name string Virtual Wallet human-readable name, if it was defined by the client.

Get a unique Virtual Wallet deposit address

You can request a unique address for your Virtual Wallet, individual for each coin and network.

HTTP Request

[POST] /v1/virtual-wallets/{virtualWalletReferenceId}/deposit-addresses

Request Body Example

{
  "currency": "string",
  "networkCode": "string",
  "addressType": "Primary",
  "clientTag": "string"
}

Parameters

Name Type Required Description
virtualWalletReferenceId string + referenceId of the Virtual Wallet for which the deposit address needs to be created.
currency string + Symbol of the cryptocurrency in acronym format, e.g., ETH, BTC, USDT, etc.
networkCode string + The chain network code for the currency, e.g., for USDT - OMNI, ERC20, TRC20.
addressType string + Address type. Can be: Primary, Additional, UniqueTag.
clientTag string Required for "addressType" = "UniqueTag", always empty for "addressType" = "Primary", optional for "addressType" = "Additional" Unique client's identifier in external system.

Successful Response

{
    "currency": "BTC",
    "address": "tb1qpcz67g5fv6y5vhrtvmxmqtnsg2zv5pxclece5n",
    "destinationTag": "string",
    "destinationTagType": "string",
    "addressType": "Additional",
    "clientTag": "testtag1",
    "virtualWalletReferenceId": "string"
}

Response Fields

Name Type Description
currency string Symbol of wallet's currency in acronym format, e.g., ETH, BTC, USDT, etc.
address string One-time Address of the wallet.
destinationTag string Additional address info of network, if applicable. Used for tag, memo and notes of the network.
destinationTagType string Type of the info in destinationTag field.
addressType string Address type. Can be: Primary, Additional, UniqueTag.
clientTag string Unique client's identifier in external system.
virtualWalletReferenceId string referenceId of the Virtual Wallet for which the deposit address is created.

Get Virtual Wallet deposit addresses list

Request the list of all the deposit addresses for the specific Virtual Wallet.

HTTP Request

GET /v1/virtual-wallets/{virtualWalletReferenceId}/deposit-addresses?address={address}&networkCode={networkCode}&clientTag={clientTag}

Parameters

Name Type Required Description
virtualWalletReferenceId string + referenceId of the Virtual Wallet for which you want the deposit addresses to be retreived.
address string Wallet address. Use this parameter to retreive a specific deposit address.
networkCode string The chain network code for the currency, e.g., for USDT - OMNI, ERC20, TRC20.
clientTag string Unique client's identifier in external system.

Successful Response

[
    {
    "currency": "string",
    "networkCode": "string",
    "address": "string",
    "destinationTag": "string",
    "type": "Primary",
    "clientTag": "string",
    "virtualWalletReferenceId": "string"
    }
]

Response Fields

Name Type Description
currency string Symbol of the address currency in acronym format, e.g., ETH, BTC, USDT, etc.
networkCode string The chain network code for the currency.
address string Address of the wallet.
destinationTag string Additional address info of network, if applicable.
type string Address type. Can be: Primary, Additional, UniqueTag.
clientTag string Unique client's identifier in external system.
virtualWalletReferenceId string referenceId of the Virtual Wallet for which the deposit address is created.

Check Virtual Wallet Balance

To check your balance on your Virtual Wallet, use the following endpoint.

HTTP Request

[GET] /v1/virtual-wallets/{virtualWalletReferenceId}/accounts

Parameters

Name Type Required Description
virtualWalletReferenceId string + referenceId of the Virtual Wallet to retreive the balance.

Successful response

{
  "name": "string",
  "type": "string",
  "currency": "string",
  "totalBalance": 0,
  "availableBalance": 0,
  "totalBalanceUsd": 0,
  "availableBalanceUsd": 0,
  "availableWithdrawalBalance" : 0,
  "availableWithdrawalBalanceUsd": 0,
  "virtualWalletReferenceId": "string"
}

Response Fields

Name Type Description
name string Wallet name.
type string Wallet type.
currency string Wallet currency.
totalBalance decimal Total balance in wallet's currency.
availableBalance decimal Available balance in wallet's currency.
totalBalanceUsd decimal Total wallet's balance equivalent in USD.
availableBalanceUsd decimal Available wallet's balance equivalent in USD.
availableWithdrawalBalance decimal Wallet's balance available for withdrawal. Credit funds are deducted from the available balance.
availableWithdrawalBalanceUsd decimal Wallet's balance available for withdrawal equivalent in USD.
virtualWalletReferenceId string referenceId of the Virtual Wallet for which the balance is retreived.

Get a Withdrawal Fee for Virtual Wallet

Use this endpoint to get the:

Use this endpoint to get withdrawal fee info before creating an actual withdrawal.

HTTP Request

[POST] /v1/virtual-wallets/{virtualWalletReferenceId}/withdrawals/fee

Request Body Example

{
  "amount": 0,
  "currency": "string",
  "networkCode": "string",
  "destinationAddress": "string",
  "destinationAdditionalAddress": "string",
  "feeType": "string"
}

Parameters

Name Type Required Description
virtualWalletReferenceId string + referenceId of the Virtual Wallet to request the withdrawal fee info.
amount decimal + The amount the client wants to withdraw.
currency string + Cryptocurrency of the withdrawal.
networkCode string + Network code of the withdrawal.
destinationAddress string + Address, to which you are withdrawing.
destinationAdditionalAddress string Additional address, if applicable.
feeType string The way the fee is charged from the transaction. Can be default, net, gross. See Withdrawal Fees for more information.

"travelRuleBeneficiaryFields" in response indicates that the crypto withdrawal falls under Travel Rule and "beneficiary" object is mandatory for successful execution in compliance with MiCA regulation.

Successful response

{
  "amount": 100,
  "feeAmount": 5,
  "netAmount": 100,
  "grossAmount": 105,
  "minWithdrawalAmount": 5,
  "virtualWalletReferenceId": "string",
  "travelRuleBeneficiaryFields": 
      [
        "firstName": "string",
        "lastName": "string",
        "countryOfBirthCode": "string",
        "dateOfBirth": "1980-02-23"
      ]
}

Response Fields

Name Type Description
amount decimal The amount entered by client.
feeAmount decimal Fee amount for that withdrawal amount.
netAmount decimal Net amount of the withdrawal, fee deducted.
grossAmount decimal Total amount of the withdrawal, fee included.
minWithdrawalAmount decimal Minimal withdrawal amount, based on withdrawal address.
virtualWalletReferenceId string referenceId of the Virtual Wallet for which the withdrawal fee info is retreived.
travelRuleBeneficiaryFields string array Recipient(beneficiary) data: first name, last name, date of birth, country of birth. Required by MiCA regulation Travel Rule for EU region. Is not present in the response for other countries.

Create a Virtual Wallet Withdrawal

Use this endpoint to initiate a withdrawal from Virtual Wallet.

HTTP Request

[POST] /v1/virtual-wallets/{virtualWalletReferenceId}/withdrawals

Request Body Example

{
  "currency": "string",
  "networkCode": "string",
  "amount": 0,
  "destinationAddress": "string",
  "destinationAdditionalAddress": "string",
  "referenceId": "string",
  "clientTag": "string",
  "feeType": "Default",
  "beneficiary": {
    "firstName": "string",
    "lastName": "string",
    "dateOfBirth": "1980-02-23",
    "countryOfBirthCode": "string"
  }
}

Parameters

Name Type Required Description
virtualWalletReferenceId string + referenceId of the Virtual Wallet for the withdrawal
currency string + Cryptocurrency of the transaction.
networkCode string + Network code of the transaction.
amount decimal + Amount of transaction.
destinationAddress string + Address, to which you are withdrawing.
destinationAdditionalAddress string Additional address, if applicable.
referenceId string ID of the transaction in external payment system.
clientTag string Unique client's identifier in external system.
feeType string The way the fee is charged from the transaction. Can be default, net, gross. See Withdrawal Fees for more information.

For EU-based customers, if the withdrawal amount is greater than USD 1000, you need to add the "beneficiary" object to the request body (see example) with the following parameters:

Name Type Required Description
firstName string + Recipient(beneficiary) first name.
lastName string + Recipient(beneficiary) last name
countryOfBirthCode string + Recipient(beneficiary) country of birth two-letter code, as per ISO 3166 standard.
dateOfBirth string(date) + Recipient(beneficiary) date of birth in YYYY-MM-DD format.

Successful response

{
  "id": 0,
  "currency": "string",
  "networkCode": "string",
  "amount": 0,
  "grossAmount": 0,
  "netAmount": 0,
  "fee": 0,
  "destinationAddress": "string",
  "destinationAdditionalAddress": "string",
  "referenceId": "string",
  "clientTag": "string",
  "virtualWalletReferenceId": "string"
}

Response Fields

Name Type Description
id int32 Unique ID of the withdrawal.
currency string Cryptocurrency of the transaction.
networkCode string Network code of the transaction.
grossAmount decimal Total amount of the transaction, fee included.
netAmount decimal Amount of the transaction recieved by client, fee deducted.
amount decimal Amount entered by client.
fee decimal Fee for the transaction.
destinationAddress string Address, to which the crypto was withdrawn.
destinationAdditionalAddress string Additional address field, if applicable.
referenceId string ID of the transaction in external payment system. In case of Crypto Payx withdrawal, it will be a payout intent ID.
clientTag string Unique client's identifier in external system.
virtualWalletReferenceId string referenceId of the Virtual Wallet used for withdrawal.

Get Virtual Wallet transactions history

Get transaction history for the Virtual Wallet

HTTP Request

[GET] /v1/virtual-wallets/{virtualWalletReferenceId}/transactions

Parameters

Name Type Required Description
virtualWalletReferenceId string + referenceId of the Virtual Wallet to retreive the transaction history.
currency string A specific currency of transactions, if needed.
page int32 Offset , each page equals count value. For example, to get results 20-30, set page to 2, and count to 10.
count int32 How much records to return. Record limit per one request is 500 transactions.
withdrawalBatchId int32 Show records only for the transactions within a specific mass withdrawal batch.
address string Show records only for the transactions to specific destination address, if needed.
clientTag string Show records only for the transactions to specific clientTag, if needed.
dateFrom string(dateTtime) Starting date for the transactions. In UTC format.
dateTo string(dateTtime) End date for the transactions. In UTC format.

Successful response

{
    "total": 1,
    "data": 
      [
        {
            "id": "CTN77926",
            "currency": "XRP",
            "type": "Receive",
            "status": "Completed",
            "createdOn": "2024-02-31T14:06:32.2440677Z",
            "totalAmount": 20.00,
            "executedAmount": 20.00,
            "fee": 0.0,
            "networkCode": "XRP_TEST",
            "networkName": "XRP Testnet",
            "destinationAddress": "rBo6XnbVWFzfdCxfX9Ym4mmcEQtoMNr3Gh",
            "destinationAdditionalAddress": "1128467660",
            "referenceId": "string",
            "traceId": "string",
            "clientTag": "12346",
            "sourceAddress": "string",
            "withdrawalBatchId": 0,
            "virtualWalletReferenceId": "string"
        }   
      ]
}

Response Fields

Name Type Description
id string Unique ID of the transaction.
currency string Cryptocurrency of the transaction.
type string Type of the transaction. Can be "Send" or "Receive"
status string Status of the transaction. Can be Pending, Completed, and Declined
createdOn string(dateTtime) When the transaction was created. In UTC format.
totalAmount decimal Gross amount of the transaction.
executedAmount decimal Amount of the transaction, with the fee amount deducted.
fee decimal Fee for the transaction.
networkCode string Network code of the transaction.
networkName string Network name of the transaction.
networkTransactionId string Unique network ID of the transaction.
destinationAddress string Destination address of the transaction.
destinationAdditionalAddress string Additional address field, if applicable.
referenceId string Client's internal transaction ID. Needs to be unique within our system, not only for client's transactions.
traceId string ID of the transaction in external payment system.
clientTag string Unique client's identifier in external system.
sourceAddress string Source address of the transaction. is empty in case of internal transaction.
withdrawalBatchId int32 A specific mass withdrawal batch for the transaction, if applicable.
virtualWalletReferenceId string referenceId of the Virtual Wallet for which the transaction history is retreived.

List all currencies and networks

Use this endpoint to list all the currencies allowed by the regulation of your region and, in case of cryptocurrencies, with their networks listed as well.

HTTP Request

[GET] /v1/virtual-wallets/currencies

Successful Response

  [
  {
    "currency": "string",
    "type": "string",
    "decimalPlaces": 0,
    "networks": [
      {
        "addressType": "Single",
        "code": "string",
        "name": "string",
        "isTagRequiredForWithdrawals": true
      }
    ]
  }
]

Response Fields

Name Type Description
currency string Acronym of currency.
type string Type of currency.
addressType string Type of network.
IsTagRequiredForWithdrawal boolean Is TAG, MEMO or NOTE field required(true) or optional(false) for the currency, in case its addressType is MultipleWithTag, MultipleWithMemo, MultipleWithNote respectively.
code string Acronym (code) of network.
name string Name of network.

Request for a Virtual Wallet asset conversion quote

Send the request to get the conversion rate for your selected asset pair and amount.

HTTP Request

[POST] /v1/virtual-wallets/{virtualWalletReferenceId}/otc-trading/request-for-quote

Request Body Example

{
  "fromCurrency": "string",
  "toCurrency": "string",
  "fromAmount": 0,
  "toAmount": 0
}

Parameters

Name Type Required Description
virtualWalletReferenceId string + referenceId of the Virtual Wallet to request the conversion quote.
fromCurrency string + Acronym of the currency you want to convert FROM.
toCurrency string + Acronym of the currency you want to convert your existing currency TO.
fromAmount double One of fromAmount or toAmount Amount of the currency you want to convert FROM.
toAmount double One of fromAmount or toAmount Amount of the currency you want to convert your existing currency TO.

Successful response


{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "occuredOn": "2026-03-02T08:42:56.985Z",
  "validTo": "2026-03-02T08:42:56.985Z",
  "fromCurrency": "string",
  "toCurrency": "string",
  "amountFrom": 0,
  "amountTo": 0,
  "rate": 0,
  "virtualWalletReferenceId": "{virtualWalletReferenceId}"
}

Response Fields

Name Type Description
id string Unique request ID.
occuredOn string(dateTtime) Time when the request reached our server.
validTo string(dateTtime) Time until the stated rate is valid. If the time has elapsed, you need to send another quote request.
fromCurrency string Acronym of the currency you want to convert FROM.
toCurrency string Acronym of the currency you want to convert your existing currency TO.
amountFrom decimal Amount of the currency you want to convert FROM.
amountTo decimal Amount of the currency you want to convert your existing currency TO.
rate decimal Conversion rate, relevant for your request.
virtualWalletReferenceId string referenceId of the Virtual Wallet for which the conversion quote is requested.

Execute Virtual Wallet conversion via OTC

If you agree with the quote for the conversion, place a conversion order.

HTTP Request

[POST] /v1/virtual-wallets/{virtualWalletReferenceId}/otc-trading/convert

Request Body Example

{
  "id": "string",
  "fromCurrency": "string",
  "toCurrency": "string",
  "fromAmount": 0,
  "toAmount": 0
}

Parameters

Name Type Required Description
virtualWalletReferenceId string + referenceId of the Virtual Wallet to execute the conversion for. Must be the same as the one used to request the conversion quote.
id string + Unique ID of request-for-quote endpoint response.
fromCurrency string + Acronym of the currency you want to convert FROM.
toCurrency string + Acronym of the currency you want to convert TO.
fromAmount decimal + Amount of the currency you want to convert FROM.
toAmount decimal + Amount of the currency you want to convert TO.

In response you get the ID of the conversion transaction initiation.

Get Virtual Wallet conversion history

Display the desired number of previous records in a specific Virtual Wallet's conversion history.

HTTP request

[GET] /v1/virtual-wallets/{virtualWalletReferenceId}/otc-trading/history?page={page}&count={count}

Parameters

Name Type Required Description
virtualWalletReferenceId string + referenceId of the Virtual Wallet to get the conversion history.
page int32 + Offset , each page equals count value. For example, to get results 20-30, set page to 2, and count to 10.
count int32 + How much records to return.

Successful response

{
  "items": [
    {
      "id": 0,
      "operationExecutionTime": "2022-12-31T11:19:33.448Z",
      "amountFrom": 0,
      "amountTo": 0,
      "fromCurrency": "string",
      "toCurrency": "string",
      "rate": 0,
      "status": "string"
    }
  ],
  "count": 0
}

Response fields

Name Type Description
id int32 Unique conversion ID.
operationExecutionTime string(dateTtime) TIme the conversion was executed.
amountFrom decimal Amount of the currency converted FROM.
amountTo decimal Amount of the currency converted TO.
fromCurrency string Acronym of the currency converted FROM.
toCurrency string Acronym of the currency converted TO.
rate decimal Rate of conversion.
status string Status of the conversion.
count int32 total count of the records displayed.

API Updates

Keep yourself up to date on new and updated API features.

(09/04/2026)

Deposit callback notifications

We have added a functionality, which allows merchants, including CaaS corporate clients, to receive real-time notifications for their end-customers deposit status changes via a preconfigured callback.

See Callback Settings for more info.

Earn products management via API

We have extended XBO Client API with the endpoints that allow our clients to view and manage available Earn products.

See Earn products for more info.

(16/03/2026)

Crypto-as-a-Service. Virtual Wallet

XBO offers Virtual Wallet functionality to our CaaS corporate clients, which allows them to create multiple segregated wallets under a single merchant account.

Each Virtual Wallet will have its own balance, transaction history, and optional human-readable name, while the merchant retains a unified compliance and operational setup for the optimal workflow.

Merchants can create Virtual Wallets, assign deposit addresses, receive and credit deposits, and execute withdrawals and asset conversion via OTC, all tied to the specific Virtual Wallet.

See Crypto-as-a-service (CaaS) for more info

(02/06/2025)

Full spot trading order lifecycle support

We have added a full support of limit orders trading as well as extended the toolset for spot trading via XBO Client API.

Now XBO Client API clients have the possibility to:

Withdrawal address and network validation

In case of withdrawal, we now validate the client destination address and network and return an error in case their withdrawal address does not match the network entered by them.

(27/03/2025)

Restrict available currencies by regulation

To comply with the MiCA regulation in EU region, we will now return an error on an attempt to use regulation-restricted currencies in XBO Client API endpoints.

Error Example:

{
    "code": "operation-for-currency-not-allowed",
    "message": "{Currency} is not allowed due to regulation requirements"
}

(30/01/2025)

Optional MEMO/TAG/NOTE supported

We've extended relevant endpoints with IsTagRequiredForWithdrawal parameter, stating whether MEMO/TAG/NOTE field is required for the currencies with addressType:MultipleWithTag, MultipleWithMemo, MultipleWithNote. |

(26/12/2024)

Travel rule data collection

To comply with the MiCA regulation in EU region, Travel Rule data is going to be collected for the crypto withdrawals that exceed $1,000.

Endpoint updates: - Crypto withdrawal fee and minimal withdrawal amount - Crypto withdrawal - Mass withdrawal batch validation

(9/12/2024)

API key management via Client Area

API keys can be generated and managed in your Client Areа Security settings.

(24/10/2024)

Mass payments via API

We extended API functionality to make it possible to send a batch with up to 200 withdrawals within a single request using API endpoints.

Mass withdrawal functionality will support both general (single transaction) and multidestination (some types of coins like BTC with the UTXO network) transaction types. It will be possible to mix transaction types within one batch.

For multi-destination transactions within the UTXO network, a single UTXO fee will be calculated and applied to the entire batch as one fee, regardless of the number of destination addresses. For general (single transaction) type. Each withdrawal within the batch will be charged a separate withdrawal fee, calculated per destination address.

(17/09/2024)

Forbid Credit In funds withdrawal

With the release we validate withdrawal transactions to make sure clients can’t withdraw credit funds.

In case the client tries to withdraw more than the amount available for the withdrawal, we will decline the transaction.

(12/09/2024)

Choose fee charge option for withdrawals

We added a possibility to select a way withdrawal fee is charged upon withdrawal request creation via API.

To do that we added a new feeType request parameter to [POST] /v1/withdrawals endpoint.

Parameter has the following values to select between the following fee charging modes: - default.Default hybrid model. Fee will be calculated on top of the withdrawal request if the balance has enough funds for that. - net.Fee will be charged on top. - gross.Fee will be charged from the amount of withdrawal.

We also added [POST] /v1/fiat/withdrawals/fee endpoint, where clients add withdrawal details in the request, and receive the information on the amounts that will be charged from their balance in case of different fee modes.

(29/08/2024)

Fee amount & minimal withdrawal amount info

We added a possibility to obtain the fee amount in original currency and minimal amount of withdrawal, before executing the withdrawal.

To do that, we added a new [POST] v1/withdrawals/fee endpoint, where clients send the amount they want to withdraw, currency of the withdrawal and recipient wallet address and network, and receive the amount of fee that will be charged for that withdrawal, as well as the minimal amount that can be withdrawn with these parameters.

OTC transaction available balance validation

We have added an additional validation for OTC quote request and conversion via API, which will check the available balance on client’s account, and return fromAmount is greater than Available Balance error, if the available balance is less than the amount client tries to convert.

CoinGecko API updates

We added new parameters to preexisting endpoints, to ensure XBO Public API is compliant with CoinGecko platform listing requirements.

Parameters added are: - For Trades endpoint: - target_volume. 24 hour trading volume for the pair in target coin. - For Trading pairs Stats endpoint: - base_currency. 24 hour trading volume for the pair in base coin. - target_currency. Symbol of the target coin. - target_volume. 24 hour trading volume for the pair in target coin.

Deprecated

The following endpoints are obsolete and supported as legacy only.

[Deprecated] Get wallet address

You can get the address of your wallet in one or more selected currencies using the following endpoint

HTTP Request

GET /v1/deposit-address/{ **currency** }/{ **network** }

Successful Response

{
  "currency": "string",
  "address": "string",
  "additionalAddress": "string",
  "additionalAddressType": "string"
}

Parameters

Name Type Required Description
currency string + Symbol of the cryptocurrency in acronym format, e.g., ETH, BTC, USDT, etc.. Only for the currencies allowed by the regulation of your region.
network string + The chain network code for the currency, e.g., for USDT - OMNI, ERC20, TRC20.

Response Fields

Name Type Description
currency string Symbol of wallet's currency in acronym format, e.g., ETH, BTC, USDT, etc.
address string Address of the wallet.
additionalAddress string Additional address info of network, if applicable. Used for tag, memo and notes of the network.
additionalAddressType string Type of the info in additional address field.

[Deprecated] Get a unique deposit address

You can request a unique address for your wallet, individual for each coin and network.

HTTP Request

POST /v1/deposit-addresses/

Request Body Example

{
  "currency": "string",
  "networkCode": "string"
}

Parameters

Name Type Required Description
currency string + Symbol of the cryptocurrency in acronym format, e.g., ETH, BTC, USDT, etc.
networkCode string + The chain network code for the currency, e.g., for USDT - OMNI, ERC20, TRC20.

Successful Response

{
  "currency": "string",
  "address": "string",
  "additionalAddress": "string",
  "additionalAddressType": "string"
}

Response Fields

Name Type Description
currency string Symbol of wallet's currency in acronym format, e.g., ETH, BTC, USDT, etc.
address string One-time Address of the wallet.
additionalAddress string Additional address info of network, if applicable. Used for tag, memo and notes of the network.
additionalAddressType string Type of the info in additional address field.

[Deprecated] Get a list of all crypto addresses

You can request the list of all the cryptowallets belonging to you as XBO client.

HTTP Request

GET /v1/deposit-addresses/

Parameters

Name Type Required Description
address string Wallet address. Use this parameter, to check if the exact wallet address belongs to your client account, and display its details.
networkCode string The chain network code for the currency, e.g., for USDT - OMNI, ERC20, TRC20.

Successful Response

[
  {
    "currency": "string",
    "networkCode": "string",
    "address": "string",
    "additionalAddress": "string"
  },
  ....
  {
    "currency": "string",
    "networkCode": "string",
    "address": "string",
    "additionalAddress": "string"
  },
]

Response Fields

Name Type Description
currency string Symbol of wallet's currency in acronym format, e.g., ETH, BTC, USDT, etc.
networkCode string The chain network code for the currency, e.g., for USDT - OMNI, ERC20, TRC20.
address string Address of the wallet.
additionalAddress string Additional address info of network, if applicable. Used for tag, memo and notes of the network.

[Deprecated] Crypto withdrawal fee and minimal withdrawal amount

Use this endpoint to get the:

Use this endpoint to get crypto withdrawal info before creating an actual withdrawal.

HTTP Request

[POST] v1/withdrawals/fee

Request Body Example

{
  "amount": 0,
  "currency": "string",
  "networkCode": "string",
  "destinationAddress": "string",
  "destinationAdditionalAddress": "string",
  "feeType": "string"
}

Parameters

Name Type Required Description
amount decimal + The amount the client wants to withdraw.
currency string + Cryptocurrency of the withdrawal. Only for the currencies allowed by the regulation of your region.
networkCode string + Network code of the withdrawal.
destinationAddress string + Address, to which you are withdrawing.
destinationAdditionalAddress string Additional address, if applicable.
feeType string The way the fee is charged from the transaction. Can be default, net, gross. See Withdrawal Fees for more information.

Successful response

{
  "amount": 100,
  "feeAmount": 5,
  "netAmount": 100,
  "grossAmount": 105,
  "minWithdrawalAmount": 5
}

Response Fields

Name Type Description
amount decimal The amount entered by client.
feeAmount decimal Fee amount for that withdrawal amount.
netAmount decimal Net amount of the withdrawal, fee deducted.
grossAmount decimal Total amount of the withdrawal, fee included.
minWithdrawalAmount decimal Minimal withdrawal amount, based on withdrawal address.

[Deprecated] Crypto withdrawal

Use this endpoint to make a crypto withdrawal.

HTTP Request

POST /v1/withdrawals

Request Body Example

{   
    "currency": "string",   
    "networkCode": "string",   
    "amount": 0,   
    "destinationAddress": "string",   
    "destinationAdditionalAddress": "string",   
    "referenceId": "string",
    "clientTag": "string",
    "feeType": "string",
    }

Parameters

Name Type Required Description
currency string + Cryptocurrency of the transaction. Only for the currencies allowed by the regulation of your region.
networkCode string + Network code of the transaction.
amount decimal + Amount of transaction.
destinationAddress string + Address, to which you are withdrawing.
destinationAdditionalAddress string Additional address, if applicable.
referenceId string ID of the transaction in external payment system. In case of Crypto Payx withdrawal, it will be a payout intent ID.
clientTag string Unique client's identifier in external system.
feeType string The way the fee is charged from the transaction. Can be default, net, gross. See Withdrawal Fees for more information.

Successful response

{   
    "id": 0,   
    "currency": "USDT",   
    "networkCode": "string",
    "grossAmount": 105,
    "netAmount": 100,   
    "amount": 100,   
    "fee": 5,   
    "destinationAddress": "string",   
    "destinationAdditionalAddress": "string",   
    "referenceId": "string",
    "clientTag": "string"
}

Response Fields

Name Type Description
id int32 Unique ID of the withdrawal.
currency string Cryptocurrency of the transaction.
networkCode string Network code of the transaction.
grossAmount decimal Total amount of the transaction, fee included.
netAmount decimal Amount of the transaction recieved by client, fee deducted.
amount decimal Amount entered by client.
fee decimal Fee for the transaction.
destinationAddress string Address, to which the crypto was withdrawn.
destinationAdditionalAddress string Additional address field, if applicable.
referenceId string ID of the transaction in external payment system. In case of Crypto Payx withdrawal, it will be a payout intent ID.
clientTag string Unique client's identifier in external system.