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){
  // ...
}

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

List all currencies and networks

Use this endpoint to list all currencies 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,
        "code": "string",
        "name": "string"
      }
    ]
  }

Response Fields

Name Type Description
currency string Acronym of currency.
type string Type of currency.
addressType string Type of network.
code string Acronym (code) of network.
name string Name of network.

Wire Transfer Deposit

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, it's transaction status will be Pending. Once we have recieved 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 recepient 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

OBSOLETE 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.
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.

OBSOLETE 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.

Get a unique deposit address

You can request a unique address for your wallet, individual 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.

OBSOLETE 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.

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 /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.
additionalAddress string Additional address info of network, if applicable. Used for tag, memo and notes of the network.
clientTag string Unique client's identifier in external system.

OTC Trading

XBO Client API gives you the possibility to execute OTC trading 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 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-01T12:56:01.776Z",
  "validTo": "2022-12-01T12: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(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 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 OTC trading history

Display the desired number of previous records in OTC trading history.

HTTP request

POST /v1/otc-trading/history

Successful response

{
  "items": [
    {
      "id": 0,
      "operationExecutionTime": "2022-12-02T11: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 much records to return.

Response fields

Name Type Description
id int32 Unique transaction ID.
operationExecutionTime string(dateTtime) 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

with XBO Client API you can execute market orders.

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 much 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.
volumeStep float the minimal amount of increment in trade volume.

Place a market order

Use it to trade for a market price, active at the time of order execution.

HTTP Request

POST /v1/spot-trading/orders

Request Body Example

{
  "symbol": "ETH/USDT",
  "type": "Market",
  "side": "Sell",
  "amount": 0.009
}

Parameters

Name Type Required Description
symbol string + Acronym for the trading pair.
type string + Type of the order you are making. Only "Market" type is supported for now.
side string + Are you buying or selling. Can be "Buy" or "Sell".
amount double + The volume of the trade.

Successful Response

{
  "id": 353108531,
  "symbol": ETH/USDT,
  "baseCurrency": ETH,
  "quoteCurrency": USDT,
  "takerCommission": 0.0,
  "makerCommission": 0.0,
  "type": Market,
  "side": Sell,
  "amount": 0.009,
  "price": 1537.24,
  "openTime": "0001-01-01T00:00:00",
  "updatedOn": "0001-01-01T00:00:00",
  "time": 0
}

Response Fields

Name Type Description
id int64 Unique ID of the transaction.
symbol string Acronym for the trading pair.
baseCurrency string Acronym of the base currency in the pair.
quoteCurrency string Acronym of the quote currency in the pair.
makerCommission decimal Commission fee for order maker.
takerCommission decimal Commission fee for order taker.
type string Type of the order you are making. Only "Market" type is supported for now.
side string Are you buying or selling. Can be "Buy" or "Sell".
amount decimal The volume of the trade.
price decimal The price at which the order is executed.
openTime string(dateTtime) Time at which the order was placed.
updatedOn string(dateTtime) Time at which the order was executed.
time int32 Time in ms, passed from order placement to execution.

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.

OBSOLETE 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.
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.

OBSOLETE 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.
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.

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 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.

Mass crypto withdrawal

It is possible to send batches with multiple crypto withdrawal transaction 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 a general info about a certain endpoint. To get detailed information about transaction(s) from the batch, use GET /v1/transactionsendpoint 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.
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 decimal 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 decimal + The ID of 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 json { "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 decimal 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 otal amount of withdrawal for all the transactions in the batch in USD equivalent.
fee decimal Total fee for the withdrawal batch.
feeUsd decimal Total fee for the withdrawal batch in USD equivalent.
draftTransactionCount decimal Transactions in "Draft" status in the batch at the time of response.
pendingTransactionCount decimal Transactions in "Pending" status in the batch at the time of response.
declinedTransactionCount decimal Transactions in "Declined" status in the batch at the time of response.
completedTransactionCount decimal Transactions in "Completed" status in the batch at the time of response.
createdOn string(dateTtime) When the withdrawal batch was created.
updatedOn string(dateTtime) Time of the last withdrawal batch update.

Status of the withdrawal batch can have the following values.

Status Commment
Draft The withdrawal batch is not yet confirmed for further processing.
Processing Processing started, funds are blocked.
Processed Processing ended succesfully, 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 client wants to withdrawal.
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-02T06: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 recieved by client, fee deducted.
amount decimal Amount entered by client.
fee decimal Fee for the withdrawal.
createdDate string(dateTtime) When the withdrawal was created.
currency string Currency of the withdrawal.
status string Status of withdrawal.
reason string Reason of the withdrawal status.

Check Balance

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 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.
dateTo string(dateTtime) End date for the transactions.

Successful response

{
    "total": 1,
    "data": 
      [
        {
            "id": "CTN77926",
            "currency": "XRP",
            "type": "Receive",
            "status": "Completed",
            "createdOn": "2024-02-12T14: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", and "Declined"
createdOn string(dateTtime) 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.
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 much records to return. Record limit per one request is 500 transactions.
dateFrom string(dateTtime) Starting date for the transactions.
dateTo string(dateTtime) End date for the transactions.

Successful response

{
  "data": [
    {
      "id": "string",
      "status": "string",
      "type": "string",
      "paymentMethod": "string",
      "createdOn": "2023-01-05T11:01:48.853Z",
      "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", and "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(dateTtime) 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.

Public Trading Data Statistics

This chapter's reference is aimed to help integrate XBO exchange into trading data aggregation platforms.

Base URL

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

URL needs to be encoded.

As per RESTful design patterns, Public API uses the 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.

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

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.

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 us for more information.

404 Resource is missing. Contact us for more information.

Authentication

No authentication is required. All the endpoints listed are public.

Public Trading Data Endpoints

API endpoints listed below give access to XBO exchange Spot trading data.

Orderbook

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

HTTP Request

[GET] /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 number($decimal) An array containing two elements: the ask price and quantity for each ask order.
asks number($decimal) An array containing two elements: the offer price and quantity for each bid order.
timestamp int32 Unix UTC timestamp in milliseconds. States when the last updated time has occurred.

Currencies

Currencies endpoint is used to provide a detailed summary for each currency available on XBO exchange.

HTTP Request

[GET] /currencies

Successful Response

[
{
    "code": "ALGO",
    "name": "Algorant, Ⱥ",
    "type": "Crypto",
    "isDepositEnabled": true,
    "isWithdrawalEnabled": true,
    "minWithdrawalAmount": 25
  },
  {
    "code": "AOA",
    "name": "Angolan Kwanza, Kz",
    "type": "Fiat",
    "isDepositEnabled": false,
    "isWithdrawalEnabled": false
  },
  {
    "code": "APE",
    "name": "Ape coin, ௐ",
    "type": "Crypto",
    "isDepositEnabled": true,
    "isWithdrawalEnabled": true,
    "minWithdrawalAmount": 12
  }
]

Response Fields

Name Type Description
code string Currency acronym.
name string Full currency name.
type string Type of currency. Can be Fiat or Crypto.
isDepositEnabled boolean Are deposits available for the currency.
isWithdrawalEnabled boolean Are deposits available for the currency.
minWithdrawalAmount boolean Minimum withdrawal amount of a currency.

Trading Pairs

Trading pairs endpoint is used to provide a 24-hour pricing and volume summary for each market pair available on XBO exchange.

HTTP Request

[GET] /trading-pairs

Successful Response

[
  {
    "symbol": "AAVE/EUR",
    "description": "AAVE vs Euro",
    "baseCurrency": "AAVE",
    "quoteCurrency": "EUR",
    "lastPrice": 91.5515,
    "isEnabled": true,
    "last24HTradeVolume": 3674.694,
    "last24HTradeVolumeUsd": 436423.747
  },
  {
    "symbol": "AAVE/USD",
    "description": "AAVE vs US Dollar",
    "baseCurrency": "AAVE",
    "quoteCurrency": "USD",
    "lastPrice": 97.8628,
    "isEnabled": true,
    "last24HTradeVolume": 2942.861,
    "last24HTradeVolumeUsd": 287064.214
  },
  {
    "symbol": "ADA/BTC",
    "description": "Cardano vs Bitcoin",
    "baseCurrency": "ADA",
    "quoteCurrency": "BTC",
    "lastPrice": 0.00000647,
    "isEnabled": true,
    "last24HTradeVolume": 636680.3,
    "last24HTradeVolumeUsd": 221978.59
  }
]

Response Fields

Name Type Description
symbol string Market pair in base currency/quote currency format.
description string Full market pair currency names.
baseCurrency string Acronym of a base currency.
quoteCurrency string Acronym of a quote currency.
lastPrice number($decimal) Last price of base currency based on given quote currency.
isEnabled boolean Is the market enabled for the currency. Can be true or false.
last24HTradeVolume number($decimal) Trading volume for the last 24 hours.
last24HTradeVolumeUsd number($decimal) Trading volume for the last 24 hours in USD equivalent.

Trades

Trades endpoint is used to return data on all recently completed trades for a particular market pair for the last 24 hours.

HTTP Request

[GET] /trades?symbol={symbol}

Parameter

Name Type Required Description
symbol string + Market pair in base currency/quote currency format, divided by encoded slash (%2F). Format example: BTC%2FUSDT

Successful Response

[
    {
    "id": 251209707,
    "symbol": "BTC/USDT",
    "price": 56103.02,
    "volume": 1,
    "quoteVolume": 60244.40,
    "type": "Buy",
    "timeStamp": 1719918009
    },
    {
    "id": 251126073,
    "symbol": "BTC/USDT",
    "price": 56122.76,
    "volume": 1.4363,
    "quoteVolume": 63267.40,
    "type": "Sell",
    "timeStamp": 1719909799
    }
]

Response Fields

Name Type Description
id number($int32) A unique ID associated with the trade for the currency pair transaction.
symbol string Market pair the trading order is associated with. in base currency/quote currency format.
price number($decimal) Transacted price of base currency based on given quote currency.
volume number($decimal) Transaction amount in BASE currency.
quoteVolume number($decimal) Transaction amount in QUOTE currency.
type string Type of the transaction. Can be Buy or Sell.
timeStamp boolean 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 exchange.

HTTP Request

[GET] /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 number($decimal) Symbol of the base coin.
quoteCurrency number($decimal) 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.

API Updates

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

(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.