Introduction
Last updated: 2024-10-17
Welcome to CEX.IO Spot Trading trader and developer documentation. This document outline system functionality, market details, and APIs.
Latest Changes
Please find the list of changes in API functionality effective from the specified date.
2024-07-12
REST API, WebSocket API - added new Wallet Balance method (REST, WebSocket specifications), which allows Client to retrieve current balances on his CEX.IO Wallet account.
2024-01-31
REST API, WebSocket API - CEX.IO Exchange Plus product has been rebranded as CEX.IO Spot Trading, accompanied by new REST and WebSocket (WS) API endpoints for both public and private interactions.
Clients are advised to transition to the new API endpoints, as the old endpoints will be deactivated in the near future. The specific dates for the deactivation will be communicated separately.
2023-12-20
REST API, WebSocket API - Internal Transfer (REST, WebSocket), Deposit Address (REST, WebSocket), Funds Deposit from Wallet (REST, WebSocket) and Funds Withdrawal to Wallet (REST, WebSocket) methods from now on can be used only with sub-accounts.
General
Accounts
When Client deposits or withdraws funds, or places an order, the Main account is used by default. If Client wants to use multiple accounts, he can create sub-accounts.
Sub-accounts is the option the Client can use at his will. Client can specify the sub-account in his trade order, and that instructs CEX.IO Spot Trading, which sub-account to use to transfer to/from the funds during this order execution. Only one sub-account can be specified for single trade order.
Sub-accounts may be useful for Client if he wishes to distinguish orders by certain criteria, for example trade strategies, portfolios or projects, etc. If Client doesn’t need such option, he can then simply ignore it and use only his main account, without specifying sub-accounts.
When depositing funds to his Spot Trading account, Client can omit sub-accounts, for funds to be transferred to his main account in Spot Trading. Alternatively, Client can specify a sub-account, to which funds should be transferred. Sub-account ID is a string, the length of which should be more than 0 and less than 256.
Client can transfer funds between his sub-accounts via API or by using Spot Trading terminal. Client can view his sub-accounts and main account balances via API or by using Spot Trading terminal.
Deposit and Withdrawal
Spot Trading has its own separate balances (main account or subaccounts), which can be replenished either from CEX.IO Wallet or from external wallet.
To be able to trade via Spot Trading, Client should prepare his CEX.IO account:
- Client should be registered on CEX.IO website and complete required user verification.
- Client can fund his CEX.IO account using any available deposit methods (for example, bank transfer, payment card or crypto transfer).
- Client can withdraw his funds from CEX.IO account using any available withdrawal method (for example, bank transfer, payment card or crypto transfer).
For more details check the "How to Add Funds" and "How to Withdraw Funds" articles in our Knowledge Base.
Limits and Commissions
Internal transfers and transfers between CEX.IO Wallet and CEX.IO Spot Trading are free of charge and not limited. Nevertheless, external deposits have limits, which can be accessed via Processing Info REST/WebSocket requests.
Trading
This section contains information regarding trading principles, type of orders, order requirements and other details.
Order Types
Market
— an order that the Client makes through Spot Trading to buy or sell Symbol immediately at the best price currently available.
Limit
— an order placed by Client through Spot Trading to buy or sell an amount of currency at a specified price or better. Because the limit order is not a market order, it may not be executed if the price set by the Client cannot be met during the period of time, in which the order is left open. After being placed, Limit orders can be:
- Fully executed immediately.
- Not executed immediately, and left open to be fully or partially executed, or cancelled.
- Partially executed immediately and have open outstanding amount waiting to be fully or partially executed, or cancelled.
Stop Limit
— an order to buy or sell an amount of Symbol for defined price when its market price surpasses a stop price point. Once the price surpasses the predefined stop price point, the Stop Limit order becomes a Limit order.
Order TimeinForce
When Client indicates TimeInForce value in the request, he instructs CEX.IO Spot Trading on how long the order should be open after initial placement or execution. TimeInForce should be indicated for all types of orders (Limit, Stop Limit, Market).
Good Till Cancel (GTC)
— the order remains open till either full execution or cancellation. GTC orders can be executed partially.
Immediate or Cancel (IOC)
— the order may be immediately executed (fully or partially) or not immediately executed. An outstanding amount after immediate execution will be cancelled.
Good Till Date (GTD)
— the order remains open till it is either fully executed, or cancelled, or till the time reaches the moment specified in ExpireTime. GTD orders can be partially executed.”
API
Client interacts with CEX.IO Spot Trading through API (Application Programming Interface). There are two available API channels which can be used by Client:
WS (WebSocket)
— this API should be used for trading, receiving information about Client’s accounts balances and receiving market data.REST
— this API should be used for trading and receiving information about Client’s accounts balances.
CEX.IO Spot Trading provides both Public and Private connections. Endpoints are indicated in relevant Sections.
Public API connection is designed for Clients to get acquainted with Spot Trading API connection and smooth further integration with CEX.IO Spot Trading via Private API channels. Thus, Public API has certain limitations restrictions and CEX.IO Spot Trading encourages Clients to integrate via Private API, which presents higher API rate limits, full trading and accounts tracking functionality, more frequent order book updates, additional available API methods etc.
For Public API connection no API keys are required. For Private API connection Client should generate REST\WebSocket API Key with required permission levels via CEX.IO Spot Trading Web Terminal (trade.cex.io/terminal) in the API Keys Management Profile section.
We published public client library to communicate with Spot Trading via REST and WS. You can use it if you have NodeJS or just check realization and adapt it to your programming language. You can check it via the following link
Maintenance period
CEX.IO Spot Trading regularly performs maintenance to ensure proper functionality of the system and deliver the best system performance to Clients. CEX.IO Spot Trading informs Clients in advance about scheduled maintenances. During the ongoing maintenance period:
- CEX.IO Spot Trading may cancel all active Client’s orders.
- CEX.IO Spot Trading may limit acceptance of Client’s new orders.
- CEX.IO Spot Trading may close active WS connections. After maintenance period is over, Client should reconnect in such case.
- Limit other system’s functionality affected during maintenance.
CEX.IO Spot Trading's team does its best to achieve 100% availability of all the services and components. However, in rare cases due to various reasons there can also occur short-time unscheduled maintenance periods.
Nevertheless, in response to API requests Client can receive error messages about temporary unavailability of some services in case of ongoing scheduled or unscheduled maintenance (for example, "market_data is on maintenance", "order_placement is on maintenance", "order_cancellation is on maintenance", "order_status is on maintenance" etc.).
Operating hours
CEX.IO Spot Trading operates 24/7 with no holidays. However, Spot Trading might be unavailable at maintenance periods and unexpected IT system failures.
REST
The REST API has endpoints for getting acquainted with system configuration and public data (Public calls), and also account and order management (Private calls). All requests must be sent to specified URLs (different for Public and Private methods) with POST method. Request parameters must be sent as JSON stringified object in request body. If request is successful, CEX.IO Spot Trading sends response with “ok” parameter and requested information in “data” parameter, which by default is an object (if not otherwise indicated in specification to method)
Public API Calls
REST API Public Endpoint URL
https://trade.cex.io/api/spot/rest-public
API Rate Limit
Public API rate limit is implied in order to protect the system from DDoS attacks and ensuring all Clients can have same level of stable access to CEX.IO Spot Trading API endpoints. Public requests are limited by IP address from which public API requests are made. Request limits are determined from cost associated with each public API call. By default, each public request has a cost of 1 point, but for some specific requests this cost can be higher. See up-to-date request API rate limit cost information in specification of each method.
Response Codes
HTTP Code | Description |
---|---|
200: OK | Request is correct. The body of the response will include the requested data. |
400: Bad Request | There was an error with the request. The action you requested may not exist. |
422: Unprocessable Entity | There was an error with the request. The body of the response will have more info. Some possible reasons: Missing params or The format of data is wrong. |
429: Too Many Requests | This status indicates that the too many requests were sent to Public API endpoint in a given period of time. |
500: Service Unavailable | This status indicates that something is wrong on the server side, additional info will be provided in response. If this status is returned too often, please contact your account manager to clarify or fix the problem. |
Order Book
This method allows Client to receive current order book snapshot for specific trading pair.
HTTP REQUEST
POST /get_order_book
API Rate Limit Cost: 1
Order Book Request Parameters
Get Order Book request for one trading pair.
Request (Client sends request to receive order book snapshot for BTC-USD trading pair)
{
"pair": "BTC-USD"
}
Response (CEX.IO Spot Trading successfully responds to the request with current order book snapshot for BTC-USD trading pair)
{
"ok": "ok",
"data": {
"timestamp": 1676037221433,
"currency1": "BTC",
"currency2": "USD",
"bids": [
[
"21770.5",
"0.00990261"
],
[
"21755.9",
"0.05648272"
],
[
"21752.2",
"25.91719331"
]
],
"asks": [
[
"21840.9",
"26.98043900"
],
[
"21841.0",
"8.51054857"
],
[
"21842.0",
"2.49919136"
],
]
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
pair | Yes | String | Trading pair, for which Client wants to request an Order Book snapshot. Trading pair should contain two currencies in uppercase divided by “-“ symbol. Pair should be listed in traditional direction. For example “BTC-USD”, but not “USD-BTC”. |
Order Book Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
timestamp | Yes | Number | Order book snapshot server time - UTC timestamp in milliseconds. |
currency1 | Yes | String | The first currency in the requested trading pair. |
currency2 | Yes | String | The second currency in the requested trading pair. |
bids | Yes | Array | This array contains a list of bids of the order book. The first value of an array element indicates price level of the Order Book entry, the second value of an array element indicates amount of the Order Book entry. The value in this field can be an empty array in case of no bids are available in the Order Book. |
asks | Yes | Array | This array contains a list of asks of the Order Book. The first value of an array element indicates price level of the Order Book entry, the second value of an array element indicates amount of the Order Book entry. The value in this field can be an empty array in case of no asks are available in the Order Book. |
error | No | Object | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Candles
By using Candles method Client can receive historical OHLCV candles of different resolutions and data types.
Client can indicate additional timeframe and limit filters to make response more precise to Client’s requirements.
HTTP REQUEST
POST /get_candles
API Rate Limit Cost: 1
Candles Request Parameters
Get Candles request for BTC-USD trading pair.
Request (Client sends request to receive 1 bestAsk open candles for BTC-USD traiding pair as of current time)
{
"pair": "BTC-USD",
"fromISO": 1675953089378,
"limit": 1,
"dataType": "bestAsk",
"resolution": "1h"
}
Response (CEX.IO Spot Trading successfully responds to the request, 1 closed 1h candle)
{
"ok": "ok",
"data": {
"timestamp": 1675951200000,
"open": 22945.3,
"high": 23163.4,
"low": 22913,
"close": 22920.1,
"volume": 779,
"resolution": "1h",
"isClosed": true,
"timestampISO": "2023-02-09T14:00:00.000Z"
}
}
Request (Client sends request to receive 1 bestBid open candles for 3 pairs as of current time)
{
"pairsList": ["BTC-USD","ETH-USD","XXX-YYY"],
"toISO": 1676041279412,
"limit": 1,
"dataType": "bestBid",
"resolution": "1h"
},
Response (CEX.IO Spot Trading successfully responds to the request, pairs with 1 open candle for each + unsupported pair message)
{
"ok": "ok",
"data": {
"BTC-USD":[
{ "timestamp": 1676041200000,
"high": 21791.3,
"low": 21772.4,
"close": 21782.6,
"open": 21791.3,
"volume": 36,
"resolution": "1h",
"timestampISO": "2023-02-10T15:00:00.000Z"
}
],
"ETH-USD":[
{ "timestamp": 1676041200000,
"high": 1545.21,
"low": 1543.65,
"close": 1544.95,
"open": 1545.21,
"volume": 34,
"resolution": "1h",
"timestampISO": "2023-02-10T15:00:00.000Z"
}
],
"XXX-YYY":
{ "error":
{
"code": 400,
"reason": "Unsupported pair XXX-YYY"
}
}
}
}
Request (Client sends request to receive last 1 hour bestAsk candle for LUNC-BUSD pair)
{
"pair":"LUNC-BUSD",
"toISO":1676042478383,
"limit":1,
"dataType":"bestAsk",
"resolution":"1h"
},
Response (CEX.IO Spot Trading responds with empty candle, which means no candle is available upon requested parameters)
{
"ok": "ok",
"data": {
"timestamp": 1676041200000,
"resolution": "1h",
"timestampISO": "2023-02-10T15:00:00.000Z"
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
pair | No | String | Trading pair, for which Client wants to receive historical OHLCV candles. Trading pair should contain two currencies in uppercase divided by “-“ symbol. Pair should be listed in traditional direction. For example “BTC-USD”, but not “USD-BTC”. If this field is present and contains valid value, then it means Client wants to receive OHLCV candles for one specific trading pair. If "pair" field is present, then "pairsList" field should be absent. Either "pair" or "pairsList" should be indicated in the request anyway. |
pairsList | No | Array or String | Array with trading pairs, for which Client wants to receive last historical OHLCV candles. At least 1 trading pair should be indicated in this field. If this field is present and contains valid values, then it means Client wants to receive last OHLCV candle for each indicated trading pair in the list. If "pairsList" field is present, then "pair" field should be absent. Either "pairsList" or "pair" should be indicated in the request anyway. |
fromISO | No | Number (UTC timestamp) | The starting moment of time of the requested period for which OHLCV candles should be returned - UTC timestamp in milliseconds. If this field is present and contains valid value, then it means Client wants to receive OHLCV candles, the first one of which includes indicated moment of time. Either "fromISO" or "toISO" should be indicated in the request anyway. |
toISO | No | Number (UTC timestamp) | The last moment of time of the requested period for which OHLCV candles should be returned - UTC timestamp in milliseconds. If this field is present and contains valid value, then it means Client wants to receive OHLCV candles, the last one of which includes indicated moment of time. Either "fromISO" or "toISO" should be indicated in the request anyway. |
limit | No | Number (Integer) | Maximum number of OHLCV candles to be returned in response. Indicated number should be greater than zero. This field is mandatory if at least one of “fromISO” or “toISO” fields is specified in request. This field should be absent if both “fromISO” and “toISO” are specified in request. If “pairsList” field is specified in the request, then the value of this field should equal 1 (only last candle for each requested trading pair will be returned in response). |
dataType | Yes | String | The type of data, on the basis of which returned OHLC prices in candles should be calculated. Allowed values: “bestAsk”, “bestBid”. |
resolution | Yes | String | Timeframe from which OHLCV candles data should be calculated. Allowed values: “1m”, “5m”, “15m”, “30m”, "1h", “2h”, “4h”, “1d”. |
Candles Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
XXX-YYY | No | Object or Array | Represents an array or an object which describes XXX-YYY trading pair candle details if pairsList parameter was indicated in the request. If it represents an array - then candle for XXX-YYY trading pair is presented, if an object - then candle for XXX-YYY trading pair could not be returned and error description is returned inside an object. If pairsList was not indicated in the request, then this parameter should be absent. |
XXX-YYY.N | No | Object | Represents an object with XXX-YYY trading pair candle or error description. |
timestamp | Yes | Number | OHLCV candle timestamp - UTC timestamp in milliseconds. |
open | No | Number (Float) | Opening price of OHLCV candle in quote currency. |
high | No | Number (Float) | Highest price of OHLCV candle in quote currency, which was reached during candle timeframe. |
low | No | Number (Float) | Lowest price of OHLCV candle in quote currency, which was reached during candle timeframe. |
close | No | Number (Float) | Closing price of OHLCV candle in quote currency. |
volume | No | Number | Quantity of price changes within period. |
resolution | Yes | String | Timeframe from which OHLCV candles data should be calculated. Allowed values: “1m”, “5m”, “15m”, “30m”, "1h", “2h”, “4h”, “1d”. |
isClosed | No | Boolean | Indicates whether the specific candle is currently closed. If the value of this field is true, then it means this candle has been already closed. If this field is absent, then it means this candle is still open. |
timestampISO | Yes | String | OHLCV candle date & time in ISO format (“YYYY-MM-DDTHH:mm:ss.SSSZ"). |
error | No | Object | If this field is present, then requested candle can not be returned. Represents human readable error reason of why request is not successful. |
error.code | No | Number | Represents numeric code of occurred error. |
error.reason | No | String | Represents human readable error reason of why candle could not be returned. |
Trade History
This method allows Client to obtain historical data as to occurred trades upon requested trading pair.
Client can supplement Trade History request with additional filter parameters, such as timeframe period, tradeIds range, side etc. to receive trades which match request parameters.
HTTP REQUEST
POST /get_trade_history
API Rate Limit Cost: 1
Trade History Request Parameters
Get Trade History request
Request (Client sends request to receive trade history for BTC-USD trading pair)
{
"pair": "BTC-USD"
}
Response (CEX.IO Spot Trading successfully responds to the request)
{
"ok": "ok",
"data": {
"pageSize": 1000,
"trades": [
{
"tradeId": "1675399566795-0",
"dateISO": "2023-02-03T04:46:06.795Z",
"side": "SELL",
"price": "21149.2",
"amount": "10.00000000"
},
{
"tradeId": "1675401193999-0",
"dateISO": "2023-02-03T05:13:13.999Z",
"side": "BUY",
"price": "25896.0",
"amount": "0.00000001"
},
{
"tradeId": "1675401207800-0",
"dateISO": "2023-02-03T05:13:27.800Z",
"side": "SELL",
"price": "21146.0",
"amount": "0.00000001"
},
]
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
pair | Yes | String | Trading pair, for which Client wants to receive trades history. Trading pair should contain two currencies in uppercase divided by “-“ symbol. Pair should be listed in traditional direction. For example “BTC-USD”, but not “USD-BTC”. |
side | No | String | Side of requested trades. If this field is present, it should contain only one of allowed values: “BUY” or “SELL”. If this field is not indicated in the request, then response would contain trades for "BUY" and "SELL" sides. |
fromDateISO | No | String | The starting moment of time of the requested period in ISO format (YYYY-MM-DDTHH:mm:ss.SSSZ) for which trades are requested. If “fromDateISO” and “pageSize” parameters are not specified in request, then by default last 1000 trades will be returned in response. If this field is present, then “fromTradeId” and “toTradeId” fields should not be indicated in the request. |
toDateISO | No | String | The last moment of time of the requested period in ISO format (YYYY-MM-DDTHH:mm:ss.SSSZ) for which trades are requested. If this field is present, then “fromDateISO” should also be present, “fromTradeId” and “toTradeId” fields should be absent. |
fromTradeId | No | String | Unique trade identifier (tradeId) in CEX.IO Spot Trading system, starting from which subsequent trades should be returned in response. If this field is present, then “fromDateISO” and “toDateISO” fields should not be indicated in the request. |
toTradeId | No | String | Unique trade identifier (tradeId) in CEX.IO Spot Trading system, which should be the last trade returned in response. If this field is present, then “fromTradeId” should also be present, “fromDateISO” and “toDateISO” fields should not be indicated in the request. |
pageSize | No | Number (Integer) | Maximum number of trades, which should be returned in response. If this field is present then the value should be more than zero and not more than 10000. If indicated value is more than 10000, the response will still contain only up to 10000 trades max. If this field is not specified in request, then by default 1000 trades would be returned in response. |
Trade History Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
pageSize | Yes | Number (Integer) | Maximum number of trades, which can be returned in response. |
trades | Yes | Array | An array containing data as to each trade event which satisfies requested criteria. If request is successful, this field should be present in response. It might be an empty array ([]). If this array is empty, then it means there are no trades, which satisfy Client’s request criteria. If there are trades, which satisfy requested criteria, then the elements in array are sorted by “dateISO” value in ascending order (from older to newer, considering “fromDateISO” / “toDateISO” or “fromTradeId” / “toTradeId” if indicated in request). If a few trade events occurred at the same moment of time, then such trade events are sorted additionally by “tradeId” value from lowest to higher sequence number (e.g. first “1677696747571-0”, then “1677696747571-1” etc.) |
trades.X | No | Object | If trade event is available, then represents an object which describes specific Х trade event details. |
trades.X.side | Yes | String | Side of trade event. |
trades.X.dateISO | Yes | String | Date & Time of trade event in ISO format. (YYYY-MM-DDTHH:mm:ss.SSSZ). |
trades.X.price | Yes | String (parseable as float) | Trade execution price. |
trades.X.amount | Yes | String (parseable as float) | Amount of trade in base currency. |
trades.X.tradeId | Yes | String | Unique trade identifier in CEX.IO Spot Trading system. The value in this field should consist of trade UTC timestamp in milliseconds and sequence number separated by ”-” symbol (e.g. “1677696747571-0”). If several trades occurred at the same moment of time, then they differ from each other by incremented sequence number, starting from 0 (e.g. “1677696747571-0”, “1677696747571-1”, “1677696747571-2” etc.). |
error | No | Object | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Ticker
This method is designed to obtain current information about Ticker, including data about current prices, 24h price & volume changes, last trade event etc. of certain assets.
HTTP REQUEST
POST /get_ticker
API Rate Limit Cost: 1
Ticker Request Parameters
Get Ticker request
Request (Client sends request to receive ticker for one pair)
{
"pairs": ["BTC-USD"]
}
Response (CEX.IO Spot Trading successfully responds to the request)
{
"ok": "ok",
"data": {
"BTC-USD":
{ "bestBid": "23771.3",
"bestAsk": "23895.2",
"bestBidChange": "-398.5",
"bestBidChangePercentage": "-1.64",
"bestAskChange": "-362.4",
"bestAskChangePercentage": "-1.49",
"volume30d": "1311.83096457",
"low": "22920.1",
"high": "25379.4",
"volume": "21.14500755",
"quoteVolume": "509738.03240736",
"lastTradeVolume": "0.00493647",
"last": "23771.3",
"lastTradePrice": "23895.2",
"priceChange": "-481.7",
"priceChangePercentage": "-1.98",
"lastTradeDateISO": "2023-02-23T12:26:13.486Z",
"volumeUSD": "286794.97"
}
}
}
Get Ticker request
Request (Client sends request to receive ticker for multiple pairs)
{
"e": "get_ticker",
"oid": "16781762556482_get_ticker",
"data": {
"pairs": ["ADA-USD", "BTC-USD", "ETH-USD", "SHIB-USD"]
}
}
Response (CEX.IO Spot Trading successfully responds to the request)
{
"ok": "ok",
"data":
{ "ADA-USD":
{ "bestBid": "0.387159",
"bestAsk": "0.387938",
"bestBidChange": "0.001354",
"bestBidChangePercentage": "0.35",
"bestAskChange": "-0.000370",
"bestAskChangePercentage": "-0.09",
"volume30d": "6530615.77263454",
"low": "0.379304",
"high": "0.395922",
"volume": "33554.76625400",
"quoteVolume": "12971.29778584",
"lastTradeVolume": "30.53522000",
"last": "0.388926",
"lastTradePrice": "0.387938",
"priceChange": "0.001489",
"priceChangePercentage": "0.38",
"lastTradeDateISO": "2023-02-23T12:23:40.391Z",
"volumeUSD": "45000.43"
},
"BTC-USD":
{ "bestBid": "23771.3",
"bestAsk": "23895.2",
"bestBidChange": "-398.5",
"bestBidChangePercentage": "-1.64",
"bestAskChange": "-362.4",
"bestAskChangePercentage": "-1.49",
"volume30d": "1311.83096457",
"low": "22920.1",
"high": "25379.4",
"volume": "21.14500755",
"quoteVolume": "509738.03240736",
"lastTradeVolume": "0.00493647",
"last": "23771.3",
"lastTradePrice": "23895.2",
"priceChange": "-481.7",
"priceChangePercentage": "-1.98",
"lastTradeDateISO": "2023-02-23T12:26:13.486Z",
"volumeUSD": "286794.97"
},
"ETH-USD":
{ "bestBid": "1640.41",
"bestAsk": "1648.25",
"bestBidChange": "-6.58",
"bestBidChangePercentage": "-0.39",
"bestAskChange": "-5.41",
"bestAskChangePercentage": "-0.32",
"volume30d": "10500.56442743",
"low": "1599.44",
"high": "1680.62",
"volume": "267.63458000",
"quoteVolume": "439523.29960757",
"lastTradeVolume": "0.17435800",
"last": "1648.97",
"lastTradePrice": "1648.25",
"priceChange": "2.08",
"priceChangePercentage": "0.12",
"lastTradeDateISO": "2023-02-23T12:25:11.251Z",
"volumeUSD": "148920.84"
},
"SHIB-USD":
{ "bestBid": "0.00001276",
"bestAsk": "0.00001354",
"bestBidChange": "0.00000045",
"bestBidChangePercentage": "3.65",
"bestAskChange": "0.00000032",
"bestAskChangePercentage": "2.42",
"volume30d": "34227200927",
"low": "0.00001231",
"high": "0.00001369",
"volume": "331030734",
"quoteVolume": "4371.24465887",
"lastTradeVolume": "20245767",
"last": "0.00001295",
"lastTradePrice": "0.00001354",
"priceChange": "-0.00000027",
"priceChangePercentage": "-2.04",
"lastTradeDateISO": "2023-02-23T12:05:47.380Z",
"volumeUSD": "3782974.41"
}
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
pairs | Yes | Array of Strings | List of supported trading pairs for which Client wants to receive ticker data. Trading pair should contain two currencies in uppercase divided by “-“ symbol. Pair should be listed in traditional direction. For example “BTC-USD”, but not “USD-BTC”. If this field is present in the request, then at least 1 pair should be indicated in an array. If this field is absent, then it means Client requests ticker data for all supported pairs. |
Ticker Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
XXX-YYY | No | Object | Represents an object which describes XXX-YYY trading pair ticker . |
XXX-YYY.bestBid | No | String (parseable as float) | Current highest buy order price (bestBid) in Order Book. |
XXX-YYY.bestAsk | No | String (parseable as float) | Current lowest sell order price (bestAsk) in Order Book. |
XXX-YYY.bestBidChange | No | String (parseable as float) | Last 24h bestBid price change in quote currency. |
XXX-YYY.bestBidChangePercentage | No | String (parseable as float) | Last 24h bestBid price change in percentage. |
XXX-YYY.bestAskChange | No | String (parseable as float) | Last 24h bestAsk price change in quote currency. |
XXX-YYY.bestAskChangePercentage | No | String (parseable as float) | Last 24h bestAsk price change in percentage. |
XXX-YYY.volume30d | Yes | String (parseable as float) | Last 30 days trading volume in base currency. |
XXX-YYY.low | No | String (parseable as float) | Last 24h lowest trade price. |
XXX-YYY.high | No | String (parseable as float) | Last 24h highest trade price. |
XXX-YYY.volume | Yes | String (parseable as float) | Last 24 hours volume in base currency. |
XXX-YYY.quoteVolume | Yes | String (parseable as float) | Last 24 hours volume in quote currency. |
XXX-YYY.lastTradeVolume | No | String (which can be parsed as Float) | Last trade volume in base currency. |
XXX-YYY.last | No | String (which can be parsed as Float) | Last indicative price. |
XXX-YYY.lastTradePrice | No | String (parseable as float) | Last trade price in CEX.IO Ecosystem. |
XXX-YYY.priceChange | No | String (which can be parsed as Float) | Last 24h price change in quote currency. |
XXX-YYY.priceChangePercentage | No | String (which can be parsed as Float) | Last 24h price change in percentage. |
XXX-YYY.lastTradeDateISO | No | String | Date & Time of last trade in ISO format. (YYYY-MM-DDTHH:mm:ss.SSSZ). |
XXX-YYY.volumeUSD | Yes | String (parseable as float) | Last 24h volume equivalent in USD currency. |
error | No | Object | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Server Time
This method is used to get the current time on Spot Trading server. It can be useful for applications that have to be synchronized with the server's time.
HTTP REQUEST
POST /get_server_time
API Rate Limit Cost: 1
Get Server Time request
Request (client sends a request get server time)
{}
Response (CEX.IO Spot Trading successfully responds to the request with current server time)
{
"ok": "ok",
"data": {
"timestamp": 1231239102398, // timestamp milliseconds
"ISODate": "2022-09-09T09:09:55.999Z"
}
}
Server Time Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
timestamp | Yes | Number | CEX.IO Spot Trading server current time - UTC timestamp in milliseconds. |
ISODate | Yes | String | CEX.IO Spot Trading server current date and time in UTC in ISO format (YYYY-MM-DDTHH:mm:ss.SSSZ). |
error | No | Object | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Pairs Info
Pair Info method allows Client to receive the parameters for all supported trading pairs.
HTTP REQUEST
POST /get_pairs_info
API Rate Limit Cost: 1
Pairs Info Request Parameters
Get Pairs Infom request
Request (Client sends request to receive information about BTC-USD trading pair)
{
"pair": ["BTC-USD"]
}
Response (CEX.IO Spot Trading successfully responds to the request with BTC-USD trading pair information)
{
"ok": "ok",
"data": {
"base": "BTC",
"quote": "USD",
"baseMin": "0.0004",
"baseMax": "60",
"baseLotSize": "0.00000001",
"quoteMin": "10",
"quoteMax": "1000000",
"quoteLotSize": "0.01000000",
"basePrecision": 8,
"quotePrecision": 8,
"pricePrecision": 1,
"minPrice": "1700.0",
"maxPrice": "211250.0"
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
pairs | No | Array of Strings | List of supported trading pairs for which Client wants to receive configuration parameters. Trading pair should contain two currencies in uppercase divided by “-“ symbol. Pair should be listed in traditional direction. For example “BTC-USD”, but not “USD-BTC”. If this field is present in the request, then at least 1 pair should be indicated in an array. If this field is absent, then it means Client requests configuration parameters for all supported pairs. |
Pairs Info Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
X | No | Object | Represents an object which describes specific trading pair configuration parameters in CEX.IO Spot Trading system. If there are no objects in returned array, then it means there are no supported trading pairs, which satisfy Client’s request criteria. |
X.base | Yes | String | Name of the first (base) currency in trading pair. |
X.quote | Yes | String | Name of the first (base) currency in trading pair. |
X.baseMin | Yes | String (parseable as float) | Minimum order amount in base currency. |
X.baseMax | Yes | String (parseable as float) | Maximum order amount in base currency. |
X.baseLotSize | Yes | String (parseable as float) | Order lot size in base currency. Such limitation allows only order amounts that are a multiple of baseLotSize. For example, if trading pair baseLotSize is 0.5, then order amounts 1.5, 4, 10.5 will be accepted, while amounts 0.3, 1.2, 10.9 will be rejected by the system. |
X.quoteMin | Yes | String (parseable as float) | Minimum order amount in quote currency. |
X.quoteMax | Yes | String (parseable as float) | Minimum order amount in quote currency. |
X.quoteLotSize | Yes | String (parseable as float) | Order lot size in quote currency. Such limitation allows only order amounts that are a multiple of quote lot size. For example, if trading pair quoteLotSize is 0.01, then order amounts 0.5, 4, 10.59 will be accepted, while amounts 0.313, 1.2987, 1000.989 will be rejected by the system. |
X.basePrecision | Yes | Number | Number of decimal places for the base currency executed amounts, used inside CEX.IO Spot Trading system. |
X.quotePrecision | Yes | Number | Number of decimal places for the quote currency executed amounts, used inside CEX.IO Spot Trading system. |
pricePrecision | Yes | Number | Number of allowed decimal places for the trading pair price. Such limitation allows only order prices, the number of decimal places in which doesn’t exceed pricePrecision value. For example, if trading pair pricePrecision is 3, then order limit prices 0.3, 1.94, 10, 10348.591 will be accepted, while prices 0.3136, 1.2987, 1000.98981234 will be rejected by the system. |
X.minPrice | Yes | String (parseable as float) | Minimum allowed trading pair price. Orders with indication of prices, which are lower than specified value will be rejected by the system. |
X.maxPrice | Yes | String (parseable as float) | Maximum allowed trading pair price. Orders with indication of prices, which are higher than specified value will be rejected by the system. |
error | No | Object | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Currencies Info
Currencies Info method allows Client to receive the parameters for all currencies configured in CEX.IO Spot Trading as well as the deposit and withdrawal availability between CEX.IO Spot Trading and CEX.IO Wallet.
HTTP REQUEST
POST /get_currencies_info
API Rate Limit Cost: 1
Currencies Info Request Parameters
Successfull Get Currencies Info Request
Request (Client sends request to receive currencies information)
{}
Response (CEX.IO Spot Trading successfully responds to the request with information about all available currencies for the Client)
{
"ok": "ok",
"data": {
{
"currency": "USDT",
"walletDeposit": true,
"walletWithdrawal": true,
"fiat": false,
"precision": 8,
"walletPrecision": 6
},
{
"currency": "BTC",
"walletDeposit": true,
"walletWithdrawal": true,
"fiat": false,
"precision": 8,
"walletPrecision": 8
},
{
"currency": "SHIB",
"walletDeposit": true,
"walletWithdrawal": true,
"fiat": false,
"precision": 0,
"walletPrecision": 0
},
{
"currency": "LUNC",
"walletDeposit": false,
"walletWithdrawal": false,
"fiat": false,
"precision": 2,
"walletPrecision": null
},
{
"currency": "USD",
"walletDeposit": true,
"walletWithdrawal": true,
"fiat": true,
"precision": 8,
"walletPrecision": 2
}
}
}
Currencies Info request (Indicated 2 specific currencies)
Request (Client sends get currencies info request for 2 currencies)
{
"data": {
"currencies": ["ETH", "USD"]
}
}
Response (CEX.IO Spot Trading responds to the request with information for indicated currencies)
{
"ok": "ok",
"data": [
{
"currency": "ETH",
"walletDeposit": true,
"walletWithdrawal": true,
"fiat": false,
"precision": 8,
"walletPrecision": 6
},
{
"currency": "USD",
"walletDeposit": true,
"walletWithdrawal": true,
"fiat": true,
"precision": 8,
"walletPrecision": 2
}
]
}
Currencies Info request (Indicated unsupproted currency)
Request (Client sends get currencies info request with indicated unsupported currency)
{
"data": {
"currencies": ["CCC"]
}
}
Response (CEX.IO Spot Trading responds to the request with empty array as requested currency is not supported)
{
"ok": "ok",
"data": []
}
Currencies Info request (No currencies indicated)
Request (Client sends get currencies info request with indicated currencies parameter but without any specific currencies)
{
"data": {
"currencies": []
}
}
Response (CEX.IO Spot Trading responds to the request with error message)
{
"ok": "ok",
"data": {
"error": "Parameter currencies should be Array of Strings"
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
currencies | No | Array of Strings | List of supported currencies for which Client wants to receive configuration parameters. Currencies should be indicated in upper case and of string type. The list should contain only valid currency symbols. If this field is present in the request, then at least 1 currency should be indicated in an array. If this field is absent, then it means Client requests configuration parameters for all supported currencies. |
Currencies Info Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
X | No | Object | Represents an object which describes specific currency configuration parameters in CEX.IO Spot Trading system. If there are no objects in returned array, then it means there are no supported currencies, which satisfy Client’s request criteria. |
X.currency | Yes | String | Currency name. |
X.walletDeposit | Yes | Boolean | Describes current availability to deposit currency X to CEX.IO Spot Trading from CEX.IO Wallet. Only true or false values are allowed herein. |
X.walletWithdrawal | Yes | Boolean | Describes current availability to withdraw currency X from CEX.IO Spot Trading to CEX.IO Wallet. Only true or false values are allowed herein. |
X.fiat | Yes | Boolean | Indicates if the currency is a fiat currency or cryptocurrency. If the value is true, then indicated currency is fiat. If the value is false, then indicated currency is cryptocurrency. |
X.precision | Yes | Number | Number of decimal places in amounts of specific currency used inside CEX.IO Spot Trading system (e.g. for internal transfers, executed amounts in orders etc.). |
X.walletPrecision | Yes | Number or null | If the value of this parameter is a number, then it describes the number of decimal places in amounts of specific currency used for transfers to or out of CEX.IO Spot Trading system (e.g. for deposits\withdrawals from\to CEX.IO Wallet or external addresses). If the value is null, then deposits and withdrawals of specific currency from\to CEX.IO Wallet are not available. |
error | No | Object | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Processing Info
This request allows Client to receive detailed information about available options to make deposits from external wallets and withdrawals to external wallets as to each supported cryptocurrency, including cryptocurrency name and available blockchains for deposit\withdrawals. Also, as to each supported blockchain there are indicated type of cryptocurrency on indicated blockchain, current deposit\withdrawal availability, minimum amounts for deposits\withdrawals, external withdrawal fees.
Processing Information makes Client more flexible in choosing desired blockchain for receiving Deposit address and initiating external withdrawals via certain blockchain, so that Client uses more convenient way of transferring his crypto assets to or from CEX.IO Ecosystem.
HTTP REQUEST
POST /get_processing_info
API Rate Limit Cost: 10
Processing Info Request Parameters
Get Processing Info Request for one specific cryptocurrency
Request (Client queries processing info for "BTC")
{
"data": {
"currencies": ["BTC"]
}
}
Response (CEX.IO Spot Trading responds that only 'bitcoin' blockchain is supported for deposits\withdrawals of "BTC")
{
"ok": "ok",
"data": {
"BTC": {
"name": "Bitcoin",
"blockchains": {
"bitcoin": {
"type": "coin",
"deposit": "enabled",
"minDeposit": "0.0001",
"withdrawal": "enabled",
"minWithdrawal": "0.002",
"withdrawalFee": "0.0005",
"depositConfirmations": 2
}
}
}
}
}
Get Processing Info Request for several cryptocurrencies
Request (Client queries processing info for "BTC" and "USDC")
{
"data": {
"currencies": ["BTC","USDC"]
}
}
Response (CEX.IO Spot Trading responds that for deposits\withdrawals 'bitcoin' blockchain is supported for "BTC" and "ethereum", "stellar" and "tron" blockchains are supported for "USDC")
{
"ok": "ok",
"data": {
"BTC": {
"name": "Bitcoin",
"blockchains": {
"bitcoin": {
"type": "coin",
"deposit": "enabled",
"minDeposit": "0.0001",
"withdrawal": "enabled",
"minWithdrawal": "0.002",
"withdrawalFee": "0.0005",
"depositConfirmations": 2
}
}
},
"USDC": {
"name": "USD Coin",
"blockchains": {
"ethereum": {
"type": "ERC20",
"deposit": "enabled",
"minDeposit": "5",
"withdrawal": "enabled",
"minWithdrawal": "50",
"withdrawalFee": "40",
"depositConfirmations": 25
},
"stellar": {
"type": "coin",
"deposit": "enabled",
"minDeposit": "5",
"withdrawal": "enabled",
"minWithdrawal": "50",
"withdrawalFee": "1",
"depositConfirmations": 1
},
"tron": {
"type": "TRC20",
"deposit": "enabled",
"minDeposit": "5",
"withdrawal": "enabled",
"minWithdrawal": "50",
"withdrawalFee": "1",
"depositConfirmations": 21
}
}
}
}
}
Get Processing Info - No available blockchains
Request (Client queries processing info for supported cryptocurrency "ZEC")
{
"data": {
"currencies": ["ZEC"]
}
}
Response (CEX.IO Spot Trading responds that request was processed successfully but no blockchains are supported for "ZEC")
{
"ok": "ok",
"data": {}
}
Get Processing Info - Invalid and fiat cryptocurrency
Request (Client queries processing info for "BTC", "ETH", "XXX" and "USD")
{
"data": {
"currencies": ["BTC", "ETH", "XXX", "USD"]
}
}
Response (CEX.IO Spot Trading responds that error occurred because unsupported currencies "XXX" and "USD" are indicated in the request)
{
"ok": "ok",
"data": {
"error": "Request contains unsupported currencies: XXX, USD."
}
}
Get Processing Info - Invalid value type in "currencies" array
Request (Client queries processing info with invalid values type in "currencies" field)
{
"data": {
"currencies": [1,2,3]
}
}
Response (CEX.IO Spot Trading responds that error occurred because wrong type of value was indicated in "currencies" array and only string values are allowed)
{
"ok": "ok",
"data": {
"error": "Currencies array should consist of string type values."
}
}
Get Processing Info - Not an array indicated in "currencies" field
Request (Client queries processing info with indicating empty object ({}) in "currencies" field)
{
"data": {
"currencies": {}
}
}
Response (CEX.IO Spot Trading responds that error occurred because only array is allowed in "currencies" field)
{
"ok": "ok",
"data": {
"error": "Currencies should be array."
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
currencies | No | Array | List of cryptocurrencies for which Client wants to get information about supported blockchains for deposit\withdraw, limits and commissions. Cryptocurrencies should be in upper case and of string type. The list should contain only valid cryptocurrency symbols. If this field is missing or contains an empty array ([]), then it means Client wants to get processing info for all available cryptocurrencies. |
Processing Info Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data.YYY | Yes | String | Cryptocurrency symbol specified in Client's request. |
data.YYY.name | Yes | String | Cryptocurrency name. |
data.YYY.blockchains | Yes | Object | This object contains info about all supported blockchains to deposit\withdraw cryptocurrency YYY. |
data.YYY.blockchains.X | Yes | Object | This object contains details and limitations for deposit\withdrawal of cryptocurrency YYY via blockchain X, including data about blockchain type, current availability to deposit\withdraw, minimum deposit\withdrawal limit and external withdrawal fees. |
data.YYY.blockchains.X. type | Yes | String | Type of cryptocurrency YYY on blockchain X. |
data.YYY.blockchains.X. deposit | Yes | String | Describes current availability to deposit cryptocurrency YYY via blockchain X. Only "enabled" or "disabled" values are allowed herein. |
data.YYY.blockchains.X. minDeposit | Yes | String (which can be parsed as Float) | Minimum amount of cryptocurrency YYY which can be deposited from external wallet via blockchain X. |
data.YYY.blockchains.X. withdrawal | Yes | String | Describes current availability to withdraw cryptocurrency YYY via blockchain X. Only "enabled" or "disabled" values are allowed herein. |
data.YYY.blockchains.X. minWithdrawal | Yes | String (which can be parsed as Float) | Minimum amount of cryptocurrency YYY which can be withdrawn to external wallet via blockchain X. |
data.YYY.blockchains.X. withdrawalFee | Yes | String (which can be parsed as Float) | Amount of withdrawal fee in cryptocurrency YYY, which which would be charged and subtracted from withdrawal amount if blockchain X is used for withdrawal. |
data.YYY.blockchains.X. depositConfirmations | Yes | Number | Minimal confirmation number for transaction in the blockchain to be deposited to Client’s CEX.IO Spot Trading account. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
statusCode | No | String | If this field is present, then request is not successful. Represents numeric code of occurred error. |
Private API Calls
The REST API has endpoint for account and order management. All requests must be sent to specified URL with POST method. Request parameters must be sent as JSON stringified object in request body.
REST API Private Endpoint URL
https://trade.cex.io/api/spot/rest
API Rate Limit
API Rate Limit for Private API calls is defined as to each API Key, which means that if API Rate Limit has been reached for one of Client’s API Key, Client can still proceed with sending requests by other API Keys. Request limits are determined from cost associated with each private API call. By default, each private request has a cost of 1 point, but for some specific requests this cost can be higher. See up-to-date request rate limit cost information in specification of each method.
Response Codes
HTTP Code | Description |
---|---|
200: OK | Request is correct. The body of the response will include the requested data. |
400: Bad Request | There was an error with the request. The action you requested may not exist. |
401: Unauthorized | Token is invalid. If your API key is wrong a 401 will also be served, so check the response body, it might be that the API_KEY is invalid. Also this code will be returned if signature is incorrect, so double check your signing algorythm. |
422: Unprocessable Entity | There was an error with the request. The body of the response will have more info. Some possible reasons: Missing params or The format of data is wrong. |
429: Too Many Requests | This status indicates that the user has sent too many requests in a given period of time. |
500: Service Unavailable | This status indicates that something is wrong on the server side, additional info will be provided in response. If this status is returned too often, please contact support team to clarify or fix the problem. |
Authentication
const crypto = require('crypto')
const request = require('request')
const action = 'get_order_book'
const params = { "pair": "BTC-USD" }
const apiKey = 'base64_string_key'
const apiSecret = 'base64_string_secret'
const timestamp = parseInt(Date.now() / 1000)
const payload = action + timestamp + JSON.stringify(params)
const signature = crypto.createHmac('sha256', apiSecret).update(payload).digest('base64')
const headers = {
'X-AGGR-KEY': apiKey,
'X-AGGR-TIMESTAMP': timestamp,
'X-AGGR-SIGNATURE': signature,
'Content-Type': 'application/json'
}
request({
url: `https://trade.cex.io/api/spot/rest/${action}`,
method: 'POST',
headers: headers,
json: true,
body: params
}, (error, response, body) => {
console.log('statusCode:', response && response.statusCode)
console.log('body:', body)
})
CEX.IO Spot Trading uses API keys to allow access to private APIs.
Client can generate, configure and manage api keys, set permission levels, whitelisted IPs for API key etc. via Spot Trading Web Terminal in the API Keys Management Profile section.
All REST requests must contain the following headers:
Header name | Description |
---|---|
X-AGGR-KEY | The api key as a string. |
X-AGGR-TIMESTAMP | A unix timestamp (in seconds) for your request. |
X-AGGR-SIGNATURE | The base64-encoded signature (see Signing a Request). |
Content-Type | All request bodies should have content type application/json and be valid JSON. |
Signing a Request
The X-AGGR-SIGNATURE header is generated by creating a HMAC-SHA256 using the base64-decoded secret key on the payload. Payload consist from string action + timestamp + body
(where + represents string concatenation) and base64-encode the output.
The action is same as api endpoint with underscores, e.g. get_my_orders
.
The timestamp value is the same as the X-AGGR-TIMESTAMP header.
The body is the request body string (in all cases this is JSON stringified request params object).
API Key Permissions
To restrict access to certain functionality while using of API Keys there should be defined specific set of permissions for each API Key. The defined set of permissions can be edited further if necessary.
The following permission levels are available for API Keys:
Read – permission level for viewing of account related data, receiving reports, subscribing to market data etc.
Trade – permission level, which allows placing and cancelling orders on behalf of account.
Funds Internal – permission level, which allows transferring funds between accounts (between sub-accounts or main account and sub-accounts) of CEX.IO Spot Trading Portfolio.
Funds Wallet - permission level, which allows transferring funds from CEX.IO Spot Trading accounts (main account and sub-accounts) to CEX.IO Wallet and vice versa.
Required permissions as to each API method are listed in the documentation below.
Current Fee
This method indicates current fees at specific moment of time with consideration of Client' up-to-date 30d volume and day of week (fees can be different for e.g. on weekends).
HTTP REQUEST
POST /get_my_current_fee
API Rate Limit Cost: 5
API Key Permission
This method requires "Read" permission set for API Key.
Current Fee Request Parameters
Get Current Fee - Successful request
Request (Client sends request to receive all his trading fees)
{}
Response (CEX.IO Spot Trading responds with trading fees for all pairs supported for Client)
{
"ok": "ok",
"data": {
"tradingFee":{
"BTC-USD": {
"percent": "0.5"
},
"XRP-USD":{
"percent": "0.1"
},
"ETH-BTC":{
"percent": "0.1"
},
"ADA-USD":{
"percent": "0.1"
},
...
"ETH-USD":{
"percent": "0.5"
},
"BTC-EUR":{
"percent": "0.5"
}
}
}
}
Get Current Fee (Indicated specific pairs)
Request (Client sends request to receive his trading fees for specified pair)
{
"pairs": ["BTC-USD","ETH-USD"]
}
Response (CEX.IO Spot Trading responds with trading fees for specified pairs)
{
"ok": "ok",
"data": {
"tradingFee":{
"BTC-USD": {
"percent": "0.5"
},
"ETH-USD":{
"percent": "0.5"
},
}
}
}
Get Current Fee - Invalid Request
Request (Client sends request to find transactions without valid JSON object)
{""""""}
Response (CEX.IO Spot Trading responds to the request with error message)
{
"error": "Bad Request"
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
pairs | No | Array of strings | Currency pair, for which Client wants to receive his fee. Pair should contain two currencies in upper case divided by "-" symbol. Pair should be listed in traditional direction. For example, "BTC-USD", but not "USD-BTC". If this field is missing, or if it contains empty string (""), or null, then it means Client wants to receive fee for all pairs. |
Current Fee Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
tradingFee | Yes | Object | Represents trading fees for all supported trading pairs. |
XXX-YYY | Yes | Object | Represents data about trading fee for specific XXX-YYY trading pair. |
XXX-YYY.percent | Yes | String (parseable as float) | Represents fee percent for XXX-YYY trading pair. |
error | No | Object | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
statusCode | No | Number | If this field is present, then request is not successful. Represents numeric code of occurred error. |
Fee Strategy
Fee Strategy returns all fee options, which could be applied for Client, considering Client’s trading volume, day of week, pairs, group of pairs etc.
HTTP REQUEST
POST /get_fee_strategy
API Rate Limit Cost: 1
API Key Permission
This method requires "Read" permission set for API Key.
Get Fee Strategy - Successful request
Request (Client requests available Fee Strategies)
{}
Response (CEX.IO Spot Trading responds with default fee options)
{
"ok": "ok",
"data": {
"strategyConfig": {
"default": [
{
"fee": "0.25",
"volume": 10000
},
{
"fee": "0.23",
"volume": 100000
},
{
"fee": "0.19",
"volume": 500000
},
{
"fee": "0.17",
"volume": 1000000
},
{
"fee": "0.15",
"volume": 2500000
},
{
"fee": "0.13",
"volume": 5000000
},
{
"fee": "0.11",
"volume": 10000000
},
{
"fee": "0.10",
"volume": 20000000
}
]
}
}
}
Get Fee Strategy - Successful request
Request (Client requests available Fee Strategies)
{}
Response (CEX.IO Spot Trading responds with multiple fee options, depending on the pair and day of the week)
{
"ok": "ok",
"data": {
"strategyConfig": {
"default": [
{
"fee":"0.25",
"volume":10000
},
{
"fee":"0.23",
"volume":100000
},
{
"fee":"0.19",
"volume":500000
},
{
"fee":"0.17",
"volume":1000000
},
{
"fee":"0.15",
"volume":2500000
},
{
"fee":"0.13",
"volume":5000000
},
{
"fee":"0.11",
"volume":10000000
},
{
"fee":"0.10",
"volume":20000000
}
],
"perTier": {
"reducedFee": {
"name": "Reduced Fee",
"description": "Reduced fee description",
"pairList": [
"BCH-USD",
"ETH-USD"
],
"schedule": [
{
"fee":"0.15",
"volume":10000
},
{
"fee":"0.11",
"volume":30000
},
{
"fee":"0.08",
"volume":50000
}
]
},
"hotPairs": {
"name": "Hot",
"description": "Trending pairs",
"pairList": [
"ETH-EUR",
"USDT-GBP"
],
"schedule": [
{
"fee":"0.20",
"volume":10000
},
{
"fee":"0.15",
"volume":100000
},
{
"fee":"0.10",
"volume":150000
}
]
}
},
"perWeekend": {
"default":[
{
"fee":"0.22",
"volume":10000
},
{
"fee":"0.2",
"volume":100000
},
{
"fee":"0.16",
"volume":500000
},
{
"fee":"0.14",
"volume":1000000
},
{
"fee":"0.12",
"volume":2500000
},
{
"fee":"0.1",
"volume":5000000
},
{
"fee":"0.08",
"volume":10000000
},
{
"fee":"0.07",
"volume":20000000
}
],
"perTier": {
"reducedFee": {
"name": "Reduced Fee",
"description": "Reduced fee description",
"pairList": [
"BCH-USD",
"ETH-USD"
],
"schedule": [
{
"fee":"0.14",
"volume":10000
},
{
"fee":"0.1",
"volume":30000
},
{
"fee":"0.07",
"volume":50000
}
]
},
"hotPairs": {
"name": "Hot",
"description": "Trending pairs",
"pairList": [
"ETH-EUR",
"USDT-GBP"
],
"schedule": [
{
"fee":"0.18",
"volume":10000
},
{
"fee":"0.13",
"volume":100000
},
{
"fee":"0.08",
"volume":150000
}
]
}
}
}
}
}
}
Fee Strategy Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains response details. |
strategyConfig | Yes | Object | This object defines details about Client's available fee options. |
default | Yes | Array of objects | Represents possible fee levels, which are applied by default for pairs, if such pairs are not specified in "perTier.pairList" field. If returned array contains only 1 object and zero "volume" value, then "fee" value represents fixed commission, which does not depend on Client's 30d trading volume. |
default.ObjectN | Yes | Object | Indicate fee value based on Client's 30d total trading volume. |
default.ObjectN.fee | Yes | String | Fee percent which will be applied, if Client's 30d total trading volume up to the value, indicated in "volume" of this object. |
default.ObjectN.volume | Yes | Number | Represents Client's 30d trading volume (by default in USD), up to which "fee" value is applied. For receiving current 30d trading volume Client should use Volume method. |
perTier | No | Object | Represents possible fee levels for specific sets of pairs indicated in "pairList" field of each tier. "perTier" fee levels have higher priority compared to default fee levels. This field could be missing if Client's strategy configuration doesn't include different fee levels for pair tiers. |
perTier.CCCCC | No | Object | Describes fee details of "CCCCC" pair tier. |
perTier.CCCCC.name | Yes | String | Name of specific pair tier. |
perTier.CCCCC.description | Yes | String | Description of specific pair tier. |
perTier.CCCCC.pairList | Yes | Array of strings | Indicates trading pairs list, which are included in CCCCC pair tier. |
perTier.CCCCC.schedule | Yes | Array of objects | Indicates fee levels, which can be applied for trading pairs from "pairList" field of specific pair tier. If returned array contains only 1 object and zero "volume" value, then "fee" value represents fixed commission, which does not depend on Client's 30d trading volume. |
perTier.CCCCC.schedule.ObjectM | Yes | Object | Indicate fee value for pair tier CCCCCC based on Client's 30d total trading volume. |
perTier.CCCCC.schedule.ObjectM.fee | Yes | String | Fee percent which will be applied for pairs from pair tier CCCCC if Client's 30d total trading volume up to the value, indicated in "volume" field of this object. |
perTier.CCCCC.schedule.ObjectM.volume | Yes | Number | Represents Client's 30d trading volume (by default in USD), up to which "fee" value is applied. For receiving current 30d trading volume Client should use Volume method. |
perWeekend | No | Object | Represents fees, which apply only on weekends (Saturday and Sunday according to UTC time) and have higher priority than "default" and "perTier" fees. This field can be missing If there are no different weekend fees in fee strategy. |
perWeekend.default | No | Array of objects | Represents possible weekend fee levels, which are applied by default for pairs, if such pairs are not specified in "perTier.pairList" field. Has the same srtucture as "default". If returned array contains only 1 object and zero "volume" value, then "fee" value represents fixed commission, which does not depend on Client's 30d trading volume. |
perWeekend.perTier | No | Object | Represents possible weekend fee levels for specific sets of pairs indicated in "pairList" field of each tier. "perTier" fee levels have higher priority compared to default fee levels. This field could be missing if Client's strategy configuration doesn't include different fee levels for pair tiers. Has the same structure as "perTier". |
error | No | Object | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
statusCode | No | Number | If this field is present, then request is not successful. Represents numeric code of occurred error. |
Volume
This request allows Client to receive his trading volume for the last 30 days in USD equivalent.
HTTP REQUEST
POST /get_my_volume
API Rate Limit Cost: 5
API Key Permission
This method requires "Read" permission set for API Key.
Get My Volume - Successful request
Request (Client sends request to receive his 30 day trading volume)
{}
Response (CEX.IO Spot Trading responds with Client's 30-day trading volume in USD equivalent)
{
"ok": "ok",
"data": {
"period": "30d",
"volume": "35016.9181338",
"currency": "USD"
}
}
Get My Volume - Invalid request
Request (Client sends request to find transactions without valid JSON object)
{[]}
Response (CEX.IO Spot Trading responds to the request with error message)
{
"error": "Bad Request"
}
Volume Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
period | Yes | String | Represents period for which Client's volume is calculated. Only “30d” value can be returned in this field. |
volume | Yes | String (parseable as float) | Represents Client’s cumulative trading volume in “currency” equivalent for returned period. |
currency | Yes | String | Represents the currency in which trading volume is calculated. Only “USD” value can be returned in this field. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
statusCode | No | Number | If this field is present, then request is not successful. Represents numeric code of occurred error. |
Create Account
This request allows Client to create new sub-account.
HTTP REQUEST
POST /do_create_account
API Rate Limit Cost: 1
API Key Permission
This method requires "Read" permission set for API Key.
Create Account Request Parameters
Create Account - Successful request
Request (Client sends request to create new sub-account)
{
"accountId": "account2",
"currency": "BTC"
}
Response (CEX.IO Spot Trading responds with accountId that has been created)
{
"ok": "ok",
"data": {
"accountId": "account2"
}
}
Create Account - Create new sub-account with already existing accountId name
Request (Client sends request to create new sub-account with indicating already existing accountId)
{
"accountId": "account2",
"currency": "USDT"
}
Response (CEX.IO Spot Trading responds with indication of accountId, which has already been created. New accountId with the same name is not created.)
{
"ok": "ok",
"data": {
"accountId": "account2"
}
}
Create Account - Invalid request (missing mandatory parameter)
Request (Client sends request to create new sub-account without indicating requested accountId name)
{
"currency": "BTC"
}
Response (CEX.IO Spot Trading responds with error indicating mandatory accountId parameter value is missing in Client's request.)
{
"error": "Mandatory parameter accountId is missing",
"statusCode": 422
}
Create Account - Invalid request (forbidden symbols used)
Request (Client sends request to create new sub-account with forbidden symbols in requested accountId name)
{
"accountId": "account%2",
"currency": "BTC"
}
Response (CEX.IO Spot Trading responds with error that requested accountId contained forbidden symbols.)
{
"error": "Sub-account name should contain only lower and uppercase Latin letters, numbers, underscore (\"_\") or hyphen (\"-\")",
"statusCode": 500
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
accountId | Yes | String | New unique sub-account name which Client requests to create. The value in this field can contain only lower and uppercase Latin letters, numbers, underscore ("_") or hyphen ("-"). |
currency | Yes | String | Represents crypto or fiat currency symbol which Client expects to be initialy deposited to new sub-account (e.g. from Client's other Spot Trading sub-account, from CEX.IO Wallet acount, from external crypto wallet etc.). |
Create Account Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
accountId | Yes | String | By default indicates name of new sub-account, which has been created. Nevertheless, if sub-account name requested by Client already exists, CEX.IO Spot Trading will return the name of this sub-account without creating of new sub-account with the same name. |
error | No | Object | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
statusCode | No | Number | If this field is present, then request is not successful. Represents numeric code of occurred error. |
Account Status V3
By using Account Status V3 method, Client can find out current balance and it’s indicative equivalent in converted currency (by default “USD”), amounts locked in open (active) orders as to each sub-account and currency.
If trading fee balance is available for Client, then response will also contain general trading fee balance data such as promo name, currency name, total balance and expiration date of this promo on Trading Fee Balance.
It’s Client’s responsibility to track his sub-accounts available trading balance as current sub-account balance reduced by the balance amount locked in open (active) orders on sub-account.
HTTP REQUEST
POST /get_my_account_status_v3
API Rate Limit Cost: 5
API Key Permission
This method requires “Read” permission set for API Key.
Request Parameters
Get My Account Status V3 for All Accounts for All Currencies
Request (Client sends request to find out his accounts’ statuses for all his accounts for all currencies)
{
"accountIds": []
}
Response (CEX.IO Spot Trading responds that Client has main account with currencies "USD", "ADA" and "BTC" and sub-account "hallo" with currencies "ETH" and "SHIB". Also, it contains balance equivalents in converted currency for each account and each currency)
{
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"": {
"USD": {
"balance": "39.79438200",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "39.79438200"
},
"ADA": {
"balance": "20.24000000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "16.21191616"
},
"BTC": {
"balance": "0.00040000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "15.67344000"
}
},
"hallo": {
"ETH": {
"balance": "15.00000000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "38962.11113119"
},
"SHIB": {
"balance": "1573107",
"balanceOnHold": "1210584",
"balanceInConvertedCurrency": "35.61514248"
}
}
}
}
}
Get My Account Status V3 for selected Sub-accounts for All Currencies
Request (Client sends a request to find out Client's accounts’ statuses for specified accounts for all currencies)
{
"accountIds": ["hallo", "superhat"]
}
Response (CEX.IO Spot Trading responds that Client has sub-account "hallo" with currencies "ETH" and "SHIB". Sub-account "superhat" status was requested, but is not included into response because Client doesn’t have "superhat" sub-account. The main account is not included, because it was not requested)
{
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"hallo": {
"ETH": {
"balance": "15.00000000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "38962.11113119"
},
"SHIB": {
"balance": "1573107",
"balanceOnHold": "1210584",
"balanceInConvertedCurrency": "35.61514248"
}
}
}
}
}
Get My Account Status V3 for All Accounts for Selected Currencies
Request (Client sends request to find out his accounts’ statuses for all accounts for selected currencies)
{
"currencies":["USD","BTC"]
}
Response (CEX.IO Spot Trading responds that Client has main account and sub-account "account123", each with currencies "USD" and "BTC". Note that other currencies (like "EUR", "ETH" etc.) are not included into response, because their balances were not requested)
{
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"": {
"USD": {
"balance": "39.79438200",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "39.79438200"
},
"BTC": {
"balance": "0.00040000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "15.67344000"
}
},
"account123": {
"USD": {
"balance": "100.00000000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "100.00000000"
},
"BTC": {
"balance": "1.00000000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "39157.90502748"
}
}
}
}
}
Get My Account Status V3 for All Accounts for One Selected Currency
Request (Client sends request to find out his accounts’ statuses for all accounts for "BTC" currency)
{
"currencies": ["BTC"]
}
Response (CEX.IO Spot Trading responds that main account and sub-account "account123" have "BTC" balances. Note that other currencies (like "USD", "EUR", "SHIB" etc.) and other sub-accounts are not included in the response, because they were not requested or do not contain balances in requested currencies)
{
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"": {
"BTC": {
"balance": "0.00040000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "15.67344000"
}
},
"account123": {
"BTC": {
"balance": "1.00000000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "39157.90502748"
}
}
}
}
}
Get My Account Status V3 - No Account Matching Criteria
Request (Client sends request to find out his accounts’ statuses for main account and sub-account "hallo" only for "EUR" currency balance)
{
"currencies": ["EUR"],
"accountIds": ["", "hallo"]
}
Response (CEX.IO Spot Trading responds that Client has no accounts which satisfy request criteria)
{
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {}
}
}
Get My Account Status V3 for Single Account for Single Currency
Request (Client sends request to find out the main account status for USD currency)
{
"currencies": ["USD"],
"accountIds": [""]
}
Response (CEX.IO Spot Trading responds that Client has main account and includes USD balance on it. No other accounts are included, and no other currencies are included, because they were not requested for)
{
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"": {
"USD": {
"balance": "100.79438200",
"balanceOnHold": "70.00000000",
"balanceInConvertedCurrency": "100.79438200"
}
}
}
}
}
Get My Account Status V3 for All Accounts for Selected Currencies with available Trading Fee Balance
Request (Client sends request to find out his accounts’ statuses for all accounts for selected currencies. Client has available Trading Fee Balance)
Note that Client has available "lifetimeBonus" and limited "welcome_bonus" for USDT currency
{
"currencies":["USD","BTC","USDT"]
}
Response (CEX.IO Spot Trading responds that Client has balances in "EUR", "USD", "BTC" and "USDT" on main account, balance in "USD" on "subAccount2" sub-account and two trading fee balances)
Note that Client has available "lifetimeBonus" and limited "welcome_bonus" for USDT currency
{
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"": {
"USD": {
"balance": "87683.66518161",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "87683.66518161"
},
"BTC": {
"balance": "564.88201513",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "15114322.12602735"
},
"USDT": {
"balance": "995752294.59920270",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "991868860.65026580"
}
},
"subAccount2": {
"USD": {
"balance": "123.00000000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "123.00000000"
}
}
},
"tradingFeeBalancesPerAccounts": {
"lifetimeBonus": {
"USDT": {
"balance": "50.00000000",
}
},
"welcome_bonus": {
"USDT": {
"balance": "15.00000000",
"expirationDate": "2023-07-28T17:20:00.000Z"
}
}
}
}
}
Get My Account Status V3 - Incorrect Request
Request (Client sends request, however "accountIds" field contains not an Array but a number value)
{
"accountIds": 3,
"currencies":["BTC"]
}
Response (CEX.IO Spot Trading responds about request processing error because not an array has been sent in "accountIds" field and "accountIds" array should consist of string type values)
{
"error": "accountIds array should consist of string type values",
"statusCode": 422
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
currencies | No | Array | List of currencies for which Client wants to find out their accounts' balances. Currencies should be in upper case and of string type. Each currency should be present only once in this array. For example, ["USD", "BTC", "EUR", "BTC"] is not allowed. If this field is missing or contains an empty array ([]), then it means Client wants to find out balances for all available currencies. |
accountIds | No | Array | List of account identifiers for which Client wants to find out their accounts' balances. Empty string ("") value in this array represents Client’s main account. Each account identifier should be of string type and should be present only once in this array. For example, ["hallo", "", "account123", "hallo"] is not allowed. If this field is missing or if it contains an empty array ([]), then it means Client wants to find out balances for all accounts. |
Account Status V3 Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
data | Yes | Object | This object contains response details. It should contain balancesPerAccounts and convertedCurrency mandatory fields and could also contain creditLine optional field (if credit line is enabled for Client). |
data.convertedCurrency | Yes | String | The currency in which balanceInConvertedCurrency is calculated by CEX.IO Spot Trading. By default only "USD" value is allowed herein. |
data.balancesPerAccounts | Yes | Object | This object contains details about Client's currencies' balances as to each account which satisfies request criteria. It might be empty object ("{}"), but this field should be present anyway and it should contain an object. If this field contains an empty object, then it means Client has no accounts which satisfy Client’s request criteria. |
data.balancesPerAccounts.X | No | Object | Represents an object which describes X account statuses for each currency. If X is ""(empty string), that means X is main account. Otherwise, it represents X sub-account. |
data.balancesPerAccounts.X.YYY | No | Object | Represents an object which describes X account statuses for YYY currency. |
data.balancesPerAccounts.X.YYY. balance | Yes | String (which can be parsed as Float) | Current X account balance in YYY currency. It includes balance which is reserved (locked) for active orders (please find this information in "balanceOnHold" field). |
data.balancesPerAccounts.X.YYY. balanceOnHold | Yes | String (which can be parsed as Float) | Current X account balance in YYY currency which is reserved (locked) for active orders. |
data.balancesPerAccounts.X.YYY. balanceInConvertedCurrency | No | String (which can be parsed as Float) | Equivalent in converted currency of current YYY currency balance on Client's X account. This amount is calculated according to CEX.IO Spot Trading indicative exchange rate of YYY currency to base currency. If current YYY currency balance on Client's X account is zero OR if CEX.IO Spot Trading failed to calculate such equivalent in converted currency, then this field would be missing. |
data.tradingFeeBalancesPerAccounts | No | Object | This object contains details about Client’s trading fee balances. This object can be absent if Client has no available trading fee balances because they were never obtained OR if all of obtained trading fee balances have already expired or were fully utilized. |
data.tradingFeeBalancesPerAccounts.X | Yes | Object | Represents an object which describes available trading fee balances which were obtained in the framework of X promo campaign name or as a “lifetimeBonus”. |
data.tradingFeeBalancesPerAccounts.X.YYY | Yes | Object | Represents an object which describes details as to YYY currency trading fee balance. |
data.tradingFeeBalancesPerAccounts.X.YYY. balance | Yes | String (which can be parsed as Float) | Available amount of YYY currency trading fee balance, expirationDate of which has not been reached yet and which can be used for trading fee utilization. |
data.tradingFeeBalancesPerAccounts.X.YYY. expirationDate | No | Datetime | Expiration date of YYY currency trading fee balance. Format: YYYY-MM-DDTHH:MM:SS.sssZ .This field can be absent for “lifetimeBonus” trading fee account, which means YYY trading fee balance amount has no set expiration date. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only ok value is allowed here. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
statusCode | No | Number | If this field is present, then request is not successful. Represents numeric code of occurred error. |
Account Status V2 (deprecated)
Using Account Status V2 request, Client can find out current balance and it’s indicative equivalent in converted currency (by default “USD”), available trading balance and amounts which are locked in open (active) orders as to each sub-account and currency.
Available trading balance is calculated as current balance plus overdraft limit (if allowed for the Client) and reduced by the balance amount locked in open (active) orders.
If credit line is enabled for Client, then response will also contain data as to the base currency name, exposure limit, total debt amount, currencies balance equivalents in base currency as to each currency on all Client’s accounts (main account and sub-accounts).
If overdraft limit for specific currency is enabled for Client, then response will also contain data as to amount of overdraft limit for such currency on all Client’s accounts (main account and sub-account), which have balance in specified currency.
HTTP REQUEST
POST /get_my_account_status_v2
API Rate Limit Cost: 5
API Key Permission
This method requires “Read” permission set for API Key.
Request Parameters
Get My Account Status V2 for All Accounts for All Currencies
Request (Client sends request to find out his accounts’ statuses for all his accounts for all currencies)
{
"accountIds": []
}
Response (CEX.IO Spot Trading responds that Client has main account with currencies "USD", "ADA" and "BTC" and sub-account "hallo" with currencies "ETH" and "SHIB". Also, it contains balance equivalents in converted currency for each account and each currency)
{
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"": {
"USD": {
"balance": "39.79438200",
"balanceOnHold": "0.00000000",
"balanceAvailable": "39.79438200",
"balanceInConvertedCurrency": "39.79438200"
},
"ADA": {
"balance": "20.24000000",
"balanceOnHold": "0.00000000",
"balanceAvailable": "20.24000000",
"balanceInConvertedCurrency": "16.21191616"
},
"BTC": {
"balance": "0.00040000",
"balanceOnHold": "0.00000000",
"balanceAvailable": "0.00040000",
"balanceInConvertedCurrency": "15.67344000"
}
},
"hallo": {
"ETH": {
"balance": "15.00000000",
"balanceOnHold": "0.00000000",
"balanceAvailable": "15.00000000",
"balanceInConvertedCurrency": "38962.11113119"
},
"SHIB": {
"balance": "1573107",
"balanceOnHold": "1210584",
"balanceAvailable": "362523",
"balanceInConvertedCurrency": "35.61514248"
}
}
}
}
}
Get My Account Status V2 for selected Sub-accounts for All Currencies
Request (Client sends a request to find out Client's accounts’ statuses for specified accounts for all currencies)
{
"accountIds": ["hallo", "superhat"]
}
Response (CEX.IO Spot Trading responds that Client has sub-account "hallo" with currencies "ETH" and "SHIB". Sub-account "superhat" status was requested, but is not included into response because Client doesn’t have "superhat" sub-account. The main account is not included, because it was not requested)
{
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"hallo": {
"ETH": {
"balance": "15.00000000",
"balanceOnHold": "0.00000000",
"balanceAvailable": "15.00000000",
"balanceInConvertedCurrency": "38962.11113119"
},
"SHIB": {
"balance": "1573107",
"balanceOnHold": "1210584",
"balanceAvailable": "362523",
"balanceInConvertedCurrency": "35.61514248"
}
}
}
}
}
Get My Account Status V2 for All Accounts for Selected Currencies
Request (Client sends request to find out his accounts’ statuses for all accounts for selected currencies)
{
"currencies":["USD","BTC"]
}
Response (CEX.IO Spot Trading responds that Client has main account and sub-account "account123", each with currencies "USD" and "BTC". Note that other currencies (like "EUR", "ETH" etc.) are not included into response, because their balances were not requested)
{
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"": {
"USD": {
"balance": "39.79438200",
"balanceOnHold": "0.00000000",
"balanceAvailable": "39.79438200",
"balanceInConvertedCurrency": "39.79438200"
},
"BTC": {
"balance": "0.00040000",
"balanceOnHold": "0.00000000",
"balanceAvailable": "0.00040000",
"balanceInConvertedCurrency": "15.67344000"
}
},
"account123": {
"USD": {
"balance": "100.00000000",
"balanceOnHold": "0.00000000",
"balanceAvailable": "100.00000000",
"balanceInConvertedCurrency": "100.00000000"
},
"BTC": {
"balance": "1.00000000",
"balanceOnHold": "0.00000000",
"balanceAvailable": "1.00000000",
"balanceInConvertedCurrency": "39157.90502748"
}
}
}
}
}
Get My Account Status V2 for All Accounts for One Selected Currency
Request (Client sends request to find out his accounts’ statuses for all accounts for "BTC" currency)
{
"currencies": ["BTC"]
}
Response (CEX.IO Spot Trading responds that main account and sub-account "account123" have "BTC" balances. Note that other currencies (like "USD", "EUR", "SHIB" etc.) and other sub-accounts are not included in the response, because they were not requested or do not contain balances in requested currencies)
{
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"": {
"BTC": {
"balance": "0.00040000",
"balanceOnHold": "0.00000000",
"balanceAvailable": "0.00040000",
"balanceInConvertedCurrency": "15.67344000"
}
},
"account123": {
"BTC": {
"balance": "1.00000000",
"balanceOnHold": "0.00000000",
"balanceAvailable": "1.00000000",
"balanceInConvertedCurrency": "39157.90502748"
}
}
}
}
}
Get My Account Status V2 - No Account Matching Criteria
Request (Client sends request to find out his accounts’ statuses for main account and sub-account "hallo" only for "EUR" currency balance)
{
"currencies": ["EUR"],
"accountIds": ["", "hallo"]
}
Response (CEX.IO Spot Trading responds that Client has no accounts which satisfy request criteria)
{
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {}
}
}
Get My Account Status V2 for Single Account for Single Currency
Request (Client sends request to find out the main account status for USD currency)
{
"currencies": ["USD"],
"accountIds": [""]
}
Response (CEX.IO Spot Trading responds that Client has main account and includes USD balance on it. No other accounts are included, and no other currencies are included, because they were not requested for)
{
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"": {
"USD": {
"balance": "100.79438200",
"balanceOnHold": "70.00000000",
"balanceAvailable": "30.79438200",
"balanceInConvertedCurrency": "100.79438200"
}
}
}
}
}
Get My Account Status V2 - Incorrect Request
Request (Client sends request, however "accountIds" field contains not an Array but a number value)
{
"accountIds": 3,
"currencies":["BTC"]
}
Response (CEX.IO Spot Trading responds about request processing error because not an array has been sent in "accountIds" field and "accountIds" array should consist of string type values)
{
"error": "accountIds array should consist of string type values",
"statusCode": 422
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
currencies | No | Array | List of currencies for which Client wants to find out their accounts' balances. Currencies should be in upper case and of string type. Each currency should be present only once in this array. For example, ["USD", "BTC", "EUR", "BTC"] is not allowed. If this field is missing or contains an empty array ([]), then it means Client wants to find out balances for all available currencies. |
accountIds | No | Array | List of account identifiers for which Client wants to find out their accounts' balances. Empty string ("") value in this array represents Client’s main account. Each account identifier should be of string type and should be present only once in this array. For example, ["hallo", "", "account123", "hallo"] is not allowed. If this field is missing or if it contains an empty array ([]), then it means Client wants to find out balances for all accounts. |
Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
data | Yes | Object | This object contains response details. It should contain balancesPerAccounts and convertedCurrency mandatory fields and could also contain creditLine optional field (if credit line is enabled for Client). |
data.convertedCurrency | Yes | String | The currency in which balanceInConvertedCurrency is calculated by CEX.IO Spot Trading. By default only "USD" value is allowed herein. |
data.creditLine | No | Object | This object contains details about Client's credit line configuration (if enabled for Client), including information about the base currency, exposure limit and total debt. If credit line is not enabled for Client, then this field would be missing. |
data.balancesPerAccounts | Yes | Object | This object contains details about Client's currencies' balances as to each account which satisfies request criteria. It might be empty object ("{}"), but this field should be present anyway and it should contain an object. If this field contains an empty object, then it means Client has no accounts which satisfy Client’s request criteria. |
data.balancesPerAccounts.X | No | Object | Represents an object which describes X account statuses for each currency. If X is ""(empty string), that means X is main account. Otherwise, it represents X sub-account. |
data.balancesPerAccounts.X.YYY | No | Object | Represents an object which describes X account statuses for YYY currency. |
data.balancesPerAccounts.X.YYY. balance | Yes | String (which can be parsed as Float) | Current X account balance in YYY currency. It includes balance which is reserved (locked) for active orders (please find this information in "balanceOnHold" field). |
data.balancesPerAccounts.X.YYY. balanceOnHold | Yes | String (which can be parsed as Float) | Current X account balance in YYY currency which is reserved (locked) for active orders. |
data.balancesPerAccounts.X.YYY. balanceAvailable | Yes | String (which can be parsed as Float) | Current X account balance in YYY currency which is available for trading. It is calculated as current X account balance in YYY currency plus overdraft limit for YYY currency (if enabled for the Client) and reduced by the X account balance amount in YYY currency, which is locked in open (active) orders. |
data.balancesPerAccounts.X.YYY. balanceInBaseCurrency | No | String (which can be parsed as Float) | Equivalent in base currency of current YYY currency balance on Client's X account. This amount is calculated according to CEX.IO Spot Trading indicative exchange rate of YYY currency to base currency. If credit line is not enabled for Client OR if current YYY currency balance on Client's X account is zero OR if CEX.IO Spot Trading failed to calculate such equivalent in base currency, then this field would be missing. |
data.balancesPerAccounts.X.YYY. balanceInConvertedCurrency | No | String (which can be parsed as Float) | Equivalent in converted currency of current YYY currency balance on Client's X account. This amount is calculated according to CEX.IO Spot Trading indicative exchange rate of YYY currency to base currency. If current YYY currency balance on Client's X account is zero OR if CEX.IO Spot Trading failed to calculate such equivalent in converted currency, then this field would be missing. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only ok value is allowed here. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
statusCode | No | Number | If this field is present, then request is not successful. Represents numeric code of occurred error. |
Wallet Balance
This request allows Client to receive his CEX.IO Wallet balances, which can be useful for Client to check his current Wallet balances before depositing funds from to Spot Trading sub-accounts or after withdrawing funds from Spot Trading sub-accounts to CEX.IO Wallet account.
HTTP REQUEST
POST /get_my_wallet_balance
API Rate Limit Cost: 5
API Key Permission
This method requires "Read" permission set for API Key.
Get My Wallet Balance - Successful request
Request (Client sends request to receive his Wallet account balances)
{}
Response (CEX.IO Spot Trading responds with Client's current balances in BTC, ETH, USD, EUR on his Wallet account)
{
"ok": "ok",
"data": {
"BTC": {
"balance": "9.72101000"
},
"ETH": {
"balance": "10.000000"
},
"USD": {
"balance": "23567.02"
},
"EUR": {
"balance": "728.99"
}
}
}
Wallet Balance Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
XXX | Yes | Object | Represents an object which describes CEX.IO Wallet account status for XXX currency. |
XXX.balance | Yes | String (which can be parsed as Float) | Current CEX.IO Wallet account balance in XXX currency. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
statusCode | No | Number | If this field is present, then request is not successful. Represents numeric code of occurred error. |
Orders
This request allows Client to find out info about his orders.
HTTP REQUEST
POST /get_my_orders
API Rate Limit Cost: 5
API Key Permission
This method requires “Read” permission set for API Key.
Orders Request Parameters
Get My Orders - All Open Orders
Request (Client sends request to find all his open orders for all pairs and all accounts; setting no criteria for orders means that Client wants to get statuses for all open orders)
{}
Response (CEX.IO Spot Trading responds that Client has 3 open orders)
{
"ok": "ok",
"data": [
{
"orderId": "26", // Market BUY 0.01 BTC/USD with main account
"clientOrderId": "1465300456557-0",
"clientId": "BitFok",
"accountId": null,
"status": "NEW",
"currency1": "BTC",
"currency2": "USD",
"side": "BUY",
"orderType": "Market",
"timeInForce": null,
"comment": null,
"rejectCode": null,
"rejectReason": null,
"executedAmountCcy1": null,
"executedAmountCcy2": null,
"requestedAmountCcy1": "0.01000000",
"requestedAmountCcy2": null,
"feeAmount": null,
"feeCurrency": "USD",
"price": null,
"averagePrice": null,
"statusIsFinal": false,
"clientCreateTimestamp": 1516699748938,
"serverCreateTimestamp": 1516699748964,
"lastUpdateTimestamp": 1516699748983,
"initialOnHoldAmountCcy1": null,
"initialOnHoldAmountCcy2": "21.00000000",
"expireTime": null,
"effectiveTime": null
},
{
"orderId": "20", // Limit BUY 0.1 BTC/USD at price 400 with "hallo" sub-account
"clientOrderId": "1465299989578-0",
"clientId": "BitFok",
"accountId": "hallo",
"status": "NEW",
"currency1": "BTC",
"currency2": "USD",
"side": "BUY",
"orderType": "Limit",
"timeInForce": "GTC",
"comment": null,
"rejectCode": null,
"rejectReason": null,
"executedAmountCcy1": null,
"executedAmountCcy2": null,
"requestedAmountCcy1": "0.10000000",
"requestedAmountCcy2": null,
"feeAmount": null,
"feeCurrency": "USD",
"price": "400.0000",
"averagePrice": null,
"statusIsFinal": false,
"clientCreateTimestamp": 1516699748938,
"serverCreateTimestamp": 1516699748964,
"lastUpdateTimestamp": 1516699748983,
"initialOnHoldAmountCcy1": null,
"initialOnHoldAmountCcy2": "21.00000000",
"expireTime": null,
"effectiveTime": null
},
{
"orderId": "18", // Limit SELL 0.02 BTC/EUR at price 600 with main account
"clientOrderId": "1465299852968-0",
"clientId": "BitFok",
"accountId": null,
"status": "NEW",
"currency1": "BTC",
"currency2": "EUR",
"side": "SELL",
"orderType": "Limit",
"timeInForce": "GTC",
"comment": null,
"rejectCode": null,
"rejectReason": null,
"executedAmountCcy1": null,
"executedAmountCcy2": null,
"requestedAmountCcy1": "0.02000000",
"requestedAmountCcy2": null,
"feeAmount": null,
"feeCurrency": "EUR",
"price": "600.0000",
"averagePrice": null,
"statusIsFinal": false,
"clientCreateTimestamp": 1516699748938,
"serverCreateTimestamp": 1516699748964,
"lastUpdateTimestamp": 1516699748983,
"initialOnHoldAmountCcy1": "0.02000000",
"initialOnHoldAmountCcy2": null,
"expireTime": null,
"effectiveTime": null
}
]
}
Get My Orders - All Open Orders with Paging
Request (Client sends request to find all his open orders and wants to see the second page expecting the result set is chunked to pages size 2 (not more than 2 orders per page))
{
"pageSize": 2,
"pageNumber": 1
}
Response (supposed that Client has 3 open orders (like in previous example), CEX.IO Spot Trading responds with second page, which includes only the last single order)
{
"ok": "ok",
"data": [
{
"orderId": "18",
"clientOrderId": "1465299852968-0",
"clientId": "BitFok",
"accountId": null,
"status": "NEW",
"currency1": "BTC",
"currency2": "EUR",
"side": "SELL",
"orderType": "Limit",
"timeInForce": "GTC",
"comment": null,
"rejectCode": null,
"rejectReason": null,
"executedAmountCcy1": null,
"executedAmountCcy2": null,
"requestedAmountCcy1": "0.02000000",
"requestedAmountCcy2": null,
"feeAmount": null,
"feeCurrency": "EUR",
"price": "600.0000",
"averagePrice": null,
"statusIsFinal": false,
"clientCreateTimestamp": 1516699748938,
"serverCreateTimestamp": 1516699748964,
"lastUpdateTimestamp": 1516699748983,
"initialOnHoldAmountCcy1": "0.02000000",
"initialOnHoldAmountCcy2": null,
"expireTime": null,
"effectiveTime": null
}
]
}
Get My Orders - All Open Orders for Selected Pair
Request (Client sends request to find all his open orders for "BTC-EUR" pair)
{
"pair": "BTC-EUR"
}
Response (CEX.IO Spot Trading responds that Client has 1 open order for BTC-EUR pair)
{
"ok": "ok",
"data": [
{
"orderId": "18",
"clientOrderId": "1465299852968-0",
"clientId": "BitFok",
"accountId": null,
"status": "NEW",
"currency1": "BTC",
"currency2": "EUR",
"side": "SELL",
"orderType": "Limit",
"timeInForce": "GTC",
"comment": null,
"rejectCode": null,
"rejectReason": null,
"executedAmountCcy1": null,
"executedAmountCcy2": null,
"requestedAmountCcy1": "0.02000000",
"requestedAmountCcy2": null,
"feeAmount": null,
"feeCurrency": "EUR",
"price": "600.0000",
"averagePrice": null,
"statusIsFinal": false,
"clientCreateTimestamp": 1516699748938,
"serverCreateTimestamp": 1516699748964,
"lastUpdateTimestamp": 1516699748983,
"initialOnHoldAmountCcy1": "0.02000000",
"initialOnHoldAmountCcy2": null,
"expireTime": null,
"effectiveTime": null
}
]
}
Get My Orders - All Open Orders for Account and Pair
Request (Client sends request to find all his open orders for currency pair "BTC-USD" and for sub-accounts "hallo" or "superhat")
{
"accountIds": ["hallo", "superhat"],
"pair": "BTC-USD"
}
Response (CEX.IO Spot Trading responds that Client has only one open order that satisfies request criteria, this order is on "hallo" sub-account)
{
"ok": "ok",
"data": [
{
"orderId": "20",
"clientOrderId": "1465299989578-0",
"clientId": "BitFok",
"accountId": "hallo",
"status": "NEW",
"currency1": "BTC",
"currency2": "USD",
"side": "BUY",
"orderType": "Limit",
"timeInForce": "GTC",
"comment": null,
"rejectCode": null,
"rejectReason": null,
"executedAmountCcy1": null,
"executedAmountCcy2": null,
"requestedAmountCcy1": "0.10000000",
"requestedAmountCcy2": null,
"feeAmount": null,
"feeCurrency": "USD",
"price": "400.0000",
"averagePrice": null,
"statusIsFinal": false,
"clientCreateTimestamp": 1516699748938,
"serverCreateTimestamp": 1516699748964,
"lastUpdateTimestamp": 1516699748983,
"initialOnHoldAmountCcy1": "0.02000000",
"initialOnHoldAmountCcy2": null,
"expireTime": null,
"effectiveTime": null
}
]
}
Get My Orders - Accounts, Paging, Period, Empty Result
Request (Client wants to see not more than 50 open orders from main account which were received by server between 2016-06-06T16:11:29 and 2016-06-07T08:53:09)
{
"accountIds": [""],
"pageSize": 50,
"serverCreateTimestampFrom": 1465229489578,
"serverCreateTimestampTo": 1465289589579
}
Response (CEX.IO Spot Trading responds that Client has no open orders, which satisfy request criteria)
{
"ok": "ok",
"data": []
}
Get My Orders - All Archived Orders for Selected Side
Request (Client sends request to find all his archived SELL orders)
{
"archived": true,
"side": "SELL",
"serverCreateTimestampFrom": 1516699048964,
"serverCreateTimestampTo": 1516699987501
}
Response (supposed that Client has 3 archived orders (like in previous example), CEX.IO Spot Trading responds to Client that he has 1 archived order which satisfies request criteria)
{
"ok": "ok",
"data": [
{
"orderId": "18",
"clientOrderId": "1465299852968-0",
"clientId": "BitFok",
"accountId": null,
"status": "REJECTED",
"currency1": "BTC",
"currency2": "EUR",
"side": "SELL",
"orderType": "Limit",
"timeInForce": "GTC",
"comment": null,
"rejectCode": 403,
"rejectReason": "Insufficient funds",
"executedAmountCcy1": null,
"executedAmountCcy2": null,
"requestedAmountCcy1": "0.02000000",
"requestedAmountCcy2": null,
"feeAmount": null,
"feeCurrency": "EUR",
"price": "600.0000",
"averagePrice": null,
"statusIsFinal": true,
"clientCreateTimestamp": 1516699748938,
"serverCreateTimestamp": 1516699748964,
"lastUpdateTimestamp": 1516699748983,
"initialOnHoldAmountCcy1": "0.02000000",
"initialOnHoldAmountCcy2": null,
"expireTime": null,
"effectiveTime": null
}
]
}
Get My Order - Incorrect Request
Request (Client sends request, but doesn't specify data object)
{}
Response (CEX.IO Spot Trading responds that error occurred. Note: "data" field hold an object value here, not the array)
{
"error": "Bad Request"
}
Get My Order - Page Size is Too Big
Request (Client sends request to get all archived orders and wishes to get first 5,000 orders list as a response to this request)
{
"archived": true,
"pageSize": 5000
}
Response (CEX.IO Spot Trading responds that such request is not allowed. Requested page size is too big, maximum allowed value is 1000)
{
"error": "Page size is limited to 1000 items"
}
Get My Order - Incorrect Archived Type
Request (Client sends request to get his open orders, however "archived" field value is a number)
{
"archived": 0
}
Response (CEX.IO Spot Trading responds that such request is not allowed. Field "archived" should be either true, or false, or it should be missing)
{
"error": "Archived parameter should be boolean"
}
Get My Orders - Single Order by OrderId
Request (Client sends request to find his single order by orderId)
{
"orderId": 18
}
Response (CEX.IO Spot Trading responds with status of this order)
{
"ok": "ok",
"data": [
{
"orderId": "18",
"clientOrderId": "1465299852968-0",
"clientId": "BitFok",
"accountId": null,
"status": "REJECTED",
"currency1": "BTC",
"currency2": "EUR",
"side": "SELL",
"orderType": "Limit",
"timeInForce": "GTC",
"comment": null,
"rejectCode": 403,
"rejectReason": "Insufficient funds",
"executedAmountCcy1": null,
"executedAmountCcy2": null,
"requestedAmountCcy1": "0.02000000",
"requestedAmountCcy2": null,
"feeAmount": null,
"feeCurrency": "EUR",
"price": "600.0000",
"averagePrice": null,
"statusIsFinal": true,
"clientCreateTimestamp": 1516699748938,
"serverCreateTimestamp": 1516699748964,
"lastUpdateTimestamp": 1516699748983,
"initialOnHoldAmountCcy1": "0.02000000",
"initialOnHoldAmountCcy2": null,
"expireTime": null,
"effectiveTime": null
}
]
}
Get My Orders - Single Order by clientOrderId
Request (Client sends request to find his single order by clientOrderId)
{
"clientOrderId": "1465299852968-0"
}
Response (CEX.IO Spot Trading responds with status of this order)
{
"ok": "ok",
"data": [
{
"orderId": "18",
"clientOrderId": "1465299852968-0",
"clientId": "BitFok",
"accountId": null,
"status": "REJECTED",
"currency1": "BTC",
"currency2": "EUR",
"side": "SELL",
"orderType": "Limit",
"timeInForce": "GTC",
"comment": null,
"rejectCode": 403,
"rejectReason": "Insufficient funds",
"executedAmountCcy1": null,
"executedAmountCcy2": null,
"requestedAmountCcy1": "0.02000000",
"requestedAmountCcy2": null,
"feeAmount": null,
"feeCurrency": "EUR",
"price": "600.0000",
"averagePrice": null,
"statusIsFinal": true,
"clientCreateTimestamp": 1516699748938,
"serverCreateTimestamp": 1516699748964,
"lastUpdateTimestamp": 1516699748983,
"initialOnHoldAmountCcy1": "0.02000000",
"initialOnHoldAmountCcy2": null,
"expireTime": null,
"effectiveTime": null
}
]
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
clientOrderId | No | String | Order identifier assigned by Client. If this field is present, then it means Client wants to see the status of the exact order. In this case, CEX.IO Spot Trading ignores all other parameters in "data" field. |
orderId | No | Number | Order identifier assigned by CEX.IO Spot Trading. If both fields "orderId" and "clientOrderId" are present, then CEX.IO Spot Trading ignores "orderId" field. If this field is present (and "clientOrderId" is absent), then it means Client wants to see the status of the exact order. In this case, CEX.IO Spot Trading ignores all other parameters in "data" field. |
archived | No | Boolean | If value is true, then it means Client wants to get his completed (archived) orders. "Completed" means that order is in one of its final statuses. If value is false or if this field is missing, it means Client wants to get his open orders. Value should be in boolean type. So values like null, 0, 1, "true", "hallo" and similar are not allowed. |
pair | No | String | Currency pair, for which Client wants to find his orders. Pair should contain two currencies in upper case divided by "-" symbol. Pair should be listed in traditional direction. For example, "BTC-USD", but not "USD-BTC". If this field is missing, or if it contains empty string (""), or null, then it means Client wants to find his orders for all pairs. |
side | No | String | Side of the orders, for which Client wants to find his orders. |
accountIds | No | Array | List of account identifiers, for which Client wants to find his orders. Empty string ("") or null value in this array represents Client’s main account. Each account identifier should be present only once in this array. For example, ["hallo", "", "superhat", "hallo"] is not allowed. If this field is missing or if it contains an empty array ([]), then it means Client wants to find his orders for all accounts. |
serverCreate TimestampFrom | No | Number | UTC timestamp in milliseconds. Represents the earliest server timestamp when order is received. In the result set orders’ serverCreateTimestamp should be greater than or equal to (>=) serverCreateTimestampFrom. Period indicated by serverCreateTimestampFrom and serverCreateTimestampTo values can not be greater than 365 days. This parameter is mandatory if Client queries info about archived orders. |
serverCreate TimestampTo | No | Number | UTC timestamp in milliseconds. Represents the latest server timestamp when order is received. In the result set orders’ serverCreateTimestamp should be less than (<) serverCreateTimestampTo. Period indicated by serverCreateTimestampFrom and serverCreateTimestampTo values can not be greater than 365 days. If this field is missing than current date is set by default. |
sortOrder | No | String | Sort order of the result set. The result array is sorted by serverCreateTimestamp. "ASC" - ascending order, "DESC" - descending order. If this field is missing then the default sort order is "DESC". |
pageSize | No | Number | Because the result might contain too many orders, Client should specify which portion of the result list he wants to get as a response to this request. This parameter limits the maximum number of orders in the result for this request. If this field is missing, then the default value of 1000 is used. This value cannot be greater than 1000. |
pageNumber | No | Number | Because the result might contain too many orders, Client should specify which portion of the result list he wants to get as a response to this request. Result list is chunked into pages for not more than data.pageSize orders per each page. This parameter specifies, which page number of the result set Client wants to see as the response to this request. First page number is 0. If this field is missing, then the default value of 0 is used. This value cannot be lower than 0. |
Orders Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
data | Yes | Array or Object | This object contains list of orders which satisfy request criteria. It might be empty array ([]). If this array is empty, then it means Client has no orders, which satisfy Client’s request criteria. The result array is sorted by "clientOrderCreationTimestamp" field with specified order. In case of error, the value of this field should be not Array, but Object. |
orderId | Yes | String | Order identifier assigned by CEX.IO Spot Trading. |
clientOrderId | Yes | String | Order identifier assigned by Client. |
clientId | Yes | String | Client Comp id. |
accountId | Yes | String | Represents Client’s account id, which was used for order processing. If this value is null, then it means Client’s main account. Otherwise, it means identifier of Client’s sub-account. |
status | Yes | String | Represents current execution status of this order. Status can be PENDING_NEW, NEW, PARTIALLY_FILLED, FILLED, EXPIRED, REJECTED, PENDING_CANCEL, CANCELLED. |
statusIsFinal | Yes | Boolean | Represents whether this order is in the final state or not. |
currency1 | Yes | String | Represents first currency in currency pair of this order. |
currency2 | Yes | String | Represents second currency in currency pair of this order. |
side | Yes | String | Represents side of this order. |
orderType | Yes | String | Represents order type of this order. |
timeInForce | Yes | String | Represents time in force of this order. For details see "Order TimeInForce" section. This value can be null for orders where time in force is not applied, for example, for Market orders. |
comment | Yes | String | Text, which was provided by Client during order creation. If value is null, then it means Client did not provide such text during order creation. |
rejectCode | Yes | Number | Error code if the order is rejected. If value is null, that means there is no error code. |
rejectReason | Yes | String | Human readable error description if the order is rejected. If value is null, that means there is no error description. |
executedAmountCcy1 | Yes | String (which can be parsed as Float) | Represents executed amount in currency1. If this value is null, then it means there is no executed amount (order has no executions). |
executedAmountCcy2 | Yes | String (which can be parsed as Float) | Represents executed amount in currency2. If this value is null, then it means there is no executed amount (order has no executions). |
requestedAmountCcy1 | Yes | String (which can be parsed as Float) | Represents order amount in currency1, which was requested by Client. If this value is null, then it means there is no requested amount in currency1 (order should have then requested amount in currency1). |
requestedAmountCcy2 | Yes | String (which can be parsed as Float) | Represents order amount in currency2, which was requested by Client. If this value is null, then it means there is no requested amount in currency2 (order should have then requested amount in currency2). |
initialOnHoldAmountCcy1 | Yes | String (which can be parsed as Float) | Represents amount in currency1, which was hold from Client's balance by CEX.IO Spot Trading before order execution. If this value is null, then it means that amount in currency1 was not hold from Client's account for this order. |
initialOnHoldAmountCcy2 | Yes | String (which can be parsed as Float) | Represents amount in currency2, which was hold from Client's balance by CEX.IO Spot Trading before order execution. If this value is null, then it means that amount in currency2 was not hold from Client's account for this order. |
feeAmount | Yes | String (which can be parsed as Float) | Represents order commission amount, which was charged for this order. If this value is null, then it means there is no commission amount charged for this order. |
feeCurrency | Yes | String | Represents order commission currency, in which feeAmount is calculated for this order. |
price | Yes | String (which can be parsed as Float) | Represents order price, which was provided by Client during order creation. If this value is null, then it means there is no requested price for this order. It happens for order where price cannot be requested, for example, Market orders or Stop orders. |
averagePrice | Yes | String (which can be parsed as Float) | Represents average order execution price. If this value is null, then it means there is no executed amount (order has no executions). |
clientCreateTimestamp | Yes | Number | UTC timestamp in milliseconds. Represents a timestamp provided by Client during creation of the order. |
serverCreateTimestamp | Yes | Number | UTC timestamp in milliseconds. Represents server timestamp when order was received. |
lastUpdateTimestamp | Yes | Number | UTC timestamp in milliseconds. Represents server timestamp when order changed its state last time. |
expireTime | Yes | Number | UTC timestamp in milliseconds. Represents an expired timestamp provided by Client during creation of the order. If this value is null, then it means Client did not provide expire time during order creation. |
effectiveTime | Yes | Number | UTC timestamp in milliseconds. Represents an effective timestamp provided by Client during creation of the order. If this value is null, then it means that Client did not provide effective time during order creation. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
New Order
Client can place new orders via REST API by using Do My New Order Request. The parameters and samples of such requests are shown in this section.
Response message indicates the last up-to-date status of order which is available in the system at the moment of sending the response.
If the Client did not receive a Response message to Do My New Order Request - the Client can query current status of the order by using Get My Orders Request with clientOrderId parameter.
When sending a request for new order, it is highly recommended to use clientOrderId parameter which corresponds to the specific new order request on the client's side. Spot Trading protects multiple placing of orders with the same clientOrderId for a reasonable period of time.
If more than one new orders with identical clientOrderId and other order parameters are identified - Spot Trading places only the first order and returns the status of such order to the Client in response to the second and subsequent new order requests with the same parameters. If orders with identical clientOrderId but with different other order parameters are identified - Spot Trading processes only the first order and rejects the second and subsequent new order requests with the same clientOrderID but with different other order parameters. Nevertheless, if Client creates more than one orders with same clientOrderId in a significant period of time, order with same clientOrderId can be accepted by the system. It's Client's responsibility to control unique indication of clientOrderIds.
HTTP REQUEST
POST /do_my_new_order
API Rate Limit Cost: 1
API Key Permission
This method requires “Trade” permission set for API Key.
New Order Request Parameters
Do My New Order - place Limit SELL order
Request (Client requests to place a Limit order to SELL 0.01 BTC for USD at price 7,500)
{
"clientOrderId": "1521711134775",
"accountId": "testAccount",
"currency1": "BTC",
"currency2": "USD",
"side": "SELL",
"timestamp": 1521711134775,
"orderType": "Limit",
"timeInForce": "GTC",
"amountCcy1": "0.01",
"price": 7500,
"comment": "v_overdraft_test"
}
Response (CEX.IO Spot Trading sends acknowledgement message with a current status of order)
{
"ok": "ok",
"data": {
"clientId": "IT_DEMO",
"orderId": "17062",
"clientOrderId": "1521711134775",
"accountId": "testAccount",
"status": "NEW",
"currency1": "BTC",
"currency2": "USD",
"side": "SELL",
"executedAmountCcy1": "0.00000000",
"executedAmountCcy2": "0.00000000",
"requestedAmountCcy1": "0.01000000",
"requestedAmountCcy2": null,
"orderType": "Limit",
"timeInForce": "GTC",
"comment": "v_overdraft_test",
"executionType": "New",
"executionId": "1521616998836_0_1",
"transactTime": null,
"expireTime": null,
"effectiveTime": null,
"price": "7500.00",
"averagePrice": null,
"feeAmount": "0.00000000",
"feeCurrency": "USD"
}
}
Do My New Order - place Market BUY order
Request (Client requests to place a Market order to BUY 10 BTC for USD)
{
"accountId": "someAccount01",
"clientOrderId": "manual_1614173000191",
"currency1": "BTC",
"currency2": "USD",
"side": "BUY",
"timestamp": 1614173000191,
"orderType": "Market",
"amountCcy1": 10
}
Response (CEX.IO Spot Trading sends acknowledgement message with a status of order. The order has been rejected due to insufficient funds on Client’s account)
{
"ok": "ok",
"data": {
"clientId": "IT_DEMO",
"orderId": "338306",
"clientOrderId": "manual_1614173000191",
"accountId": "someAccount01",
"status": "REJECTED",
"currency1": "BTC",
"currency2": "USD",
"side": "BUY",
"executedAmountCcy1": "0.00000000",
"executedAmountCcy2": "0.00000000",
"requestedAmountCcy1": "10.00000000",
"requestedAmountCcy2": null,
"orderType": "Market",
"timeInForce": null,
"comment": null,
"executionType": "Rejected",
"executionId": "1614012430993_103_295",
"transactTime": null,
"expireTime": null,
"effectiveTime": null,
"averagePrice": null,
"feeAmount": null,
"feeCurrency": null,
"orderRejectReason": "{\"code\":403,\"reason\":\"Insufficient funds\"}",
"rejectCode":403,
"rejectReason":"Insufficient funds"
}
}
Do My New Order - place Market BUY order
Request (Client requests to place a Market order to BUY 10 BTC for USD)
{
"accountId": "someAccount01",
"clientOrderId": "manual_1614173000191",
"currency1": "BTC",
"currency2": "USD",
"side": "BUY",
"timestamp": 1614173000191,
"orderType": "Market",
"amountCcy1": 10
}
Response (CEX.IO Spot Trading sends acknowledgement message with a status of order. The order has been rejected due to the exceeded limit of active (open) orders)
{
"ok": "ok",
"data": {
"clientId": "IT_DEMO",
"orderId": "338306",
"clientOrderId": "manual_1614173000191",
"accountId": "someAccount01",
"status": "REJECTED",
"currency1": "BTC",
"currency2": "USD",
"side": "BUY",
"executedAmountCcy1": "0.00000000",
"executedAmountCcy2": "0.00000000",
"requestedAmountCcy1": "10.00000000",
"requestedAmountCcy2": null,
"orderType": "Market",
"timeInForce": null,
"comment": null,
"executionType": "Rejected",
"executionId": "1614012430993_103_295",
"transactTime": null,
"expireTime": null,
"effectiveTime": null,
"averagePrice": null,
"feeAmount": null,
"feeCurrency": null,
"orderRejectReason": "{\"code\":437,\"reason\":\"Too many active orders\"}",
"rejectCode":437,
"rejectReason":"Too many active orders"
}
}
Do My New Order - place Limit BUY order
Request (Client requests to place a Limit order to SELL 0.01 BTC for USD at price 18,500)
{
"clientOrderId": "1521713494191",
"accountId": "testAccount",
"currency1": "BTC",
"currency2": "USD",
"side": "BUY",
"timestamp": 1521713494191,
"orderType": "Limit",
"timeInForce": "GTC",
"amountCcy1": "0.01",
"price": 18500,
"comment": "v_overdraft_test"
}
Response (CEX.IO Spot Trading sends acknowledgement message with a current status of order)
{
"ok": "ok",
"data": {
"clientId": "IT_DEMO",
"orderId": "17065",
"clientOrderId": "1521713494191",
"accountId": "testAccount",
"status": "NEW",
"currency1": "BTC",
"currency2": "USD",
"side": "BUY",
"executedAmountCcy1": "0.00000000",
"executedAmountCcy2": "0.00000000",
"requestedAmountCcy1": "0.01000000",
"requestedAmountCcy2": null,
"orderType": "Limit",
"timeInForce": "GTC",
"comment": "v_overdraft_test",
"executionType": "New",
"executionId": "1521616998877_2_4",
"transactTime": null,
"expireTime": null,
"effectiveTime": null,
"price": "18500.00",
"averagePrice": null,
"feeAmount": "0.00000000",
"feeCurrency": "USD"
}
}
Do My New Order - Invalid request
Request (Client requests to place a Limit order with missing price field)
{
"clientOrderId": "1521736196695",
"accountId": "testAccount",
"currency1": "BTC",
"currency2": "USD",
"side": "BUY",
"timestamp": 1521736196695,
"orderType": "Limit",
"timeInForce": "GTC",
"amountCcy1": "0.001",
"comment": "v_overdraft_test"
}
Response (CEX.IO Spot Trading sends response that has no field "ok" and has "error" field containing error description)
{
"error": "Mandatory parameter price is missing"
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
clientOrderId | No | String | Order identifier assigned by Client. If this field is absent, it will be set automatically to current timestamp in milliseconds. |
accountId | Yes | String | Client’s sub-account ID. Empty string value ("") is not allowed in this field. |
currency1 | Yes | String | Represents first currency in currency pair of this order. |
currency2 | Yes | String | Represents second currency in currency pair of this order. |
side | Yes | String | Represents side of this order. |
orderType | Yes | String | Represents order type of this order. |
timestamp | Yes | Number | UTC timestamp in milliseconds, represents client-side order creation time. By default, timestamp should be within 30000 ms timeframe with server time, otherwise, order will be rejected. Please be informed that default timeframe value 30000 ms can be changed for the Client by request. |
timeInForce | No | String | Represents time in force of this order. For details see "Order TimeInForce" section. This value can be null for orders, where time in force is not applied, for example, for Market orders. |
comment | No | String | Comment for order. Maximum length of comment string is 255 characters. If value is null, then it means Client did not provide such text during order creation. |
amountCcy1 | No | String (parseable as Float) | Represents order amount in currency1. This value can be null if order requests amount in currency2. |
amountCcy2 | No | String (parseable as Float) | Represents order amount in currency2. This value can be null if order requests amount in currency1. |
price | No | String (parseable as Float) | Represents order price. Please omit this field for orders, where price cannot be requested, for example, Market orders or Stop orders. |
expireTime | No | Number | UTC timestamp in milliseconds. If Expire Time is in the past, order will be rejected. |
stopPrice | No | String (parseable as Float) | Stop Price for Stop and StopLimit types of orders. |
New Order Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
clientId | Yes | String | Client CompId. |
accountId | Yes | String | Client’s sub-account ID via which order has been created. |
orderId | Yes | String | Order identifier assigned by CEX.IO Spot Trading. "NONE" value can be returned if order is rejected due to validation errors: failed minOrderAmountCcy, maxOrderAmountCcy, lotSizeCcy, max active orders checks. |
clientOrderId | Yes | String | Order identifier assigned by Client. |
status | Yes | String | Represents current execution status of this order. |
currency1 | Yes | String | Represents first currency in currency pair of the order. |
currency2 | Yes | String | Represents second currency in currency pair of the order. |
side | Yes | String | Represents side of this order. |
orderType | Yes | String | Represents order type of this order. |
timeInForce | Yes | String | Represents time in force of this order. For details see "Order TimeInForce" section. This value can be null for orders, where time in force is not applied, for example, for Market orders. |
comment | Yes | String | Text value that was provided by Client during order creation. If value is null, it means Client did not provide such text during order creation. |
orderRejectReason | No | String | Text field describing rejection reason. Often (but not always) it is a JSON representation of an object with two fields: "code" — numeric error code; "reason" — human readable error description. If value is null, that means there is no error description. |
rejectCode | No | Number | Numeric error code. |
rejectReason | No | String | Text field indicating human readable error description. If value is null, that means there is no error description. |
executedAmountCcy1 | Yes | String (which can be parsed as Float) | Represents executed amount in currency1. If this value is 0, then it means there is no executed amount (order has no executions). |
executedAmountCcy2 | Yes | String (which can be parsed as Float) | Represents executed amount in currency2. If this value is 0, then it means there is no executed amount (order has no executions). |
requestedAmountCcy1 | Yes | String (which can be parsed as Float) | Represents order amount in currency1, which was requested by Client. If this value is null, then it means there is no requested amount in currency1 (order should have then requested amount in currency2) |
requestedAmountCcy2 | Yes | String (which can be parsed as Float) | Represents order amount in currency2, which was requested by Client. If this value is null, then it means there is no requested amount in currency2 (order should have then requested amount in currency1). |
feeAmount | Yes | String (which can be parsed as Float) | Represents order commission amount, which was charged for this order . If this value is 0, then it means there is no commission amount charged for this order so far. |
feeCurrency | Yes | String | Represents order commission currency, in which feeAmount is calculated. |
price | Yes | String (which can be parsed as Float) | Represents order price, which was provided by Client during order creation. If this value is null, then it means there is no requested price for this order. It happens for orders, where price cannot be requested, for example, Market orders or Stop orders. |
averagePrice | Yes | String (which can be parsed as Float) | Represents average order execution price. If this value is null, then it means there is no executed amount (order has no executions). |
expireTime | Yes | Number | UTC timestamp in milliseconds. Represents an expired timestamp provided by Client during creation of the order. If this value is null, then it means Client did not provide expire time during order creation. |
effectiveTime | Yes | Number | UTC timestamp in milliseconds. Represents an effective timestamp provided by Client during creation of the order. If this value is null, then it means that Client did not provide effective time during order creation. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Cancel Order
Client can cancel orders.
HTTP REQUEST
POST /do_cancel_my_order
API Rate Limit Cost: 1
API Key Permission
This method requires “Trade” permission set for API Key.
Cancel Order Request Parameters
Do Cancel My Order - successful cancellation of Limit SELL BTC order by clientOrderId
Request (Client requests to cancel order that was created with clientOrderId equal to "1521719532817")
{
"clientOrderId": "1521719532817",
"cancelRequestId": "cancel_1521719532817",
"timestamp": 1521719535310
}
Response (CEX.IO Spot Trading sends acknowledgement message confirming that the cancellation request is accepted)
{
"ok": "ok",
"data": {}
}
Do Cancel My Order - successful cancellation of Limit BUY BTC order by orderId
Request (Client requests to cancel order, to which CEX.IO Spot Trading assigned orderId equal to 123456789)
{
"orderId": 123456789,
"cancelRequestId": "cancel_1521719532818",
"timestamp": 1521719535311
}
Response (CEX.IO Spot Trading sends acknowledgement message confirming that the cancellation request is accepted)
{
"ok": "ok",
"data": {}
}
Do Cancel My Order - incorrect request with missing "orderId" and "clientOrderId" parameters
Request (Client requests to cancel order but doesn't indicate either "orderId" or "clientOrderId" parameters)
{
"cancelRequestId": "cancel_1521719532834",
"timestamp": 1521719535322
}
Response (CEX.IO Spot Trading responds that either "clientOrderId" or "orderId" should be specified)
{
"error": "ClientOrderId or orderId should be specified",
"statusCode": 422
}
Do Cancel My Order - incorrect request with both "orderId" and "clientOrderId" parameters
Request (Client requests to cancel order but indicates both "orderId" and "clientOrderId" parameters)
{
"clientOrderId": "1521719532817",
"orderId": 123456789,
"cancelRequestId": "cancel_1521719532899",
"timestamp": 1521719535349
}
Response (CEX.IO Spot Trading responds that either "clientOrderId" or "orderId" should be specified - not both of them)
{
"error": "Only one of the fields ClientOrderId or orderId should be specified, not both",
"statusCode": 422
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
orderId | No | Number | Order identifier assigned by CEX.IO Spot Trading. If this field is present and contains valid value, then it means Client wants to cancel specific order with orderId, which was assigned by CEX.IO Spot Trading. If "orderId" field is present, then "clientOrderId" should be absent. Either "orderId" or "clientOrderId" should be indicated in request anyway. |
clientOrderId | No | String | Order identifier assigned by Client when the order was created. If this field is present and contains valid value, then it means Client wants to cancel specific order with clientOrderId indicated by Client at order placement. If "clientOrderId" field is present, then "orderId" field should be absent. Either "clientOrderId" or "orderId" should be indicated in request anyway. |
cancelRequestId | Yes | String | Cancel request identifier assigned by Client. |
timestamp | Yes | Number | Current client time - UTC timestamp in milliseconds. |
Cancel Order Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Cancel All Orders
Client can cancel all open orders via REST API.
HTTP REQUEST
POST /do_cancel_all_orders
API Rate Limit Cost: 5
API Key Permission
This method requires “Trade” permission set for API Key.
Do Cancel All Orders
Request (Client requests to cancel all open orders)
{}
Response (CEX.IO Spot Trading sends acknowledgement message confirming the list of client’s open orders, which system is trying to cancel. There are 2 open orders in this case)
{
"ok": "ok",
"data": {
"clientOrderIds": ["1575459943138","1575459942041"]
}
}
Do Cancel All Orders - There are no client’s open orders
Request (Client requests to cancel all open orders)
{}
Response (CEX.IO Spot Trading sends acknowledgement message confirming there are no client’s open orders)
{
"ok": "ok",
"data": {
"clientOrderIds": []
}
}
Cancel All Orders Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
clientOrderIds | Yes | Array | This object contains list of client’s open orders and system is trying to cancel those orders. It might be empty array ([]). If this array is empty, then it means there are no client’s open orders. |
Order Book
This method allows Client to receive current order book snapshot for specific trading pair.
HTTP REQUEST
POST /get_order_book
API Rate Limit Cost: 1
API Key Permission
This method requires "Read" permission set for API Key.
Order Book Request Parameters
Get Order Book request for one trading pair.
Request (Client sends request to receive order book snapshot for BTC-USD trading pair)
{
"pair": "BTC-USD"
}
Response (CEX.IO Spot Trading successfully responds to the request with current order book snapshot for BTC-USD trading pair)
{
"ok": "ok",
"data": {
"timestamp": 1676037221433,
"currency1": "BTC",
"currency2": "USD",
"bids": [
[
"21770.5",
"0.00990261"
],
[
"21755.9",
"0.05648272"
],
[
"21752.2",
"25.91719331"
]
],
"asks": [
[
"21840.9",
"26.98043900"
],
[
"21841.0",
"8.51054857"
],
[
"21842.0",
"2.49919136"
],
]
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
pair | Yes | String | Trading pair, for which Client wants to request an Order Book snapshot. Trading pair should contain two currencies in uppercase divided by “-“ symbol. Pair should be listed in traditional direction. For example “BTC-USD”, but not “USD-BTC”. |
Order Book Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
timestamp | Yes | Number | Order book snapshot server time - UTC timestamp in milliseconds. |
currency1 | Yes | String | The first currency in the requested trading pair. |
currency2 | Yes | String | The second currency in the requested trading pair. |
bids | Yes | Array | This array contains a list of bids of the order book. The first value of an array element indicates price level of the Order Book entry, the second value of an array element indicates amount of the Order Book entry. The value in this field can be an empty array in case of no bids are available in the Order Book. |
asks | Yes | Array | This array contains a list of asks of the Order Book. The first value of an array element indicates price level of the Order Book entry, the second value of an array element indicates amount of the Order Book entry. The value in this field can be an empty array in case of no asks are available in the Order Book. |
error | No | Object | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Candles
By using Candles method Client can receive historical OHLCV candles of different resolutions and data types.
Client can indicate additional timeframe and limit filters to make response more precise to Client’s requirements.
HTTP REQUEST
POST /get_candles
API Rate Limit Cost: 1
API Key Permission
This method requires "Read" permission set for API Key.
Candles Request Parameters
Get Candles request for BTC-USD trading pair.
Request (Client sends request to receive 1 bestAsk open candles for BTC-USD traiding pair as of current time)
{
"pair": "BTC-USD",
"fromISO": 1675953089378,
"limit": 1,
"dataType": "bestAsk",
"resolution": "1h"
}
Response (CEX.IO Spot Trading successfully responds to the request, 1 closed 1h candle)
{
"ok": "ok",
"data": {
"timestamp": 1675951200000,
"open": 22945.3,
"high": 23163.4,
"low": 22913,
"close": 22920.1,
"volume": 779,
"resolution": "1h",
"isClosed": true,
"timestampISO": "2023-02-09T14:00:00.000Z"
}
}
Request (Client sends request to receive 1 bestBid open candles for 3 pairs as of current time)
{
"pairsList": ["BTC-USD","ETH-USD","XXX-YYY"],
"toISO": 1676041279412,
"limit": 1,
"dataType": "bestBid",
"resolution": "1h"
},
Response (CEX.IO Spot Trading successfully responds to the request, pairs with 1 open candle for each + unsupported pair message)
{
"ok": "ok",
"data": {
"BTC-USD":[
{ "timestamp": 1676041200000,
"high": 21791.3,
"low": 21772.4,
"close": 21782.6,
"open": 21791.3,
"volume": 36,
"resolution": "1h",
"timestampISO": "2023-02-10T15:00:00.000Z"
}
],
"ETH-USD":[
{ "timestamp": 1676041200000,
"high": 1545.21,
"low": 1543.65,
"close": 1544.95,
"open": 1545.21,
"volume": 34,
"resolution": "1h",
"timestampISO": "2023-02-10T15:00:00.000Z"
}
],
"XXX-YYY":
{ "error":
{
"code": 400,
"reason": "Unsupported pair XXX-YYY"
}
}
}
}
Request (Client sends request to receive last 1 hour bestAsk candle for LUNC-BUSD pair)
{
"pair":"LUNC-BUSD",
"toISO":1676042478383,
"limit":1,
"dataType":"bestAsk",
"resolution":"1h"
},
Response (CEX.IO Spot Trading responds with empty candle, which means no candle is available upon requested parameters)
{
"ok": "ok",
"data": {
"timestamp": 1676041200000,
"resolution": "1h",
"timestampISO": "2023-02-10T15:00:00.000Z"
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
pair | No | String | Trading pair, for which Client wants to receive historical OHLCV candles. Trading pair should contain two currencies in uppercase divided by “-“ symbol. Pair should be listed in traditional direction. For example “BTC-USD”, but not “USD-BTC”. If this field is present and contains valid value, then it means Client wants to receive OHLCV candles for one specific trading pair. If "pair" field is present, then "pairsList" field should be absent. Either "pair" or "pairsList" should be indicated in the request anyway. |
pairsList | No | Array or String | Array with trading pairs, for which Client wants to receive last historical OHLCV candles. At least 1 trading pair should be indicated in this field. If this field is present and contains valid values, then it means Client wants to receive last OHLCV candle for each indicated trading pair in the list. If "pairsList" field is present, then "pair" field should be absent. Either "pairsList" or "pair" should be indicated in the request anyway. |
fromISO | No | Number (UTC timestamp) | The starting moment of time of the requested period for which OHLCV candles should be returned - UTC timestamp in milliseconds. If this field is present and contains valid value, then it means Client wants to receive OHLCV candles, the first one of which includes indicated moment of time. Either "fromISO" or "toISO" should be indicated in the request anyway. |
toISO | No | Number (UTC timestamp) | The last moment of time of the requested period for which OHLCV candles should be returned - UTC timestamp in milliseconds. If this field is present and contains valid value, then it means Client wants to receive OHLCV candles, the last one of which includes indicated moment of time. Either "fromISO" or "toISO" should be indicated in the request anyway. |
limit | No | Number (Integer) | Maximum number of OHLCV candles to be returned in response. Indicated number should be greater than zero. This field is mandatory if at least one of “fromISO” or “toISO” fields is specified in request. This field should be absent if both “fromISO” and “toISO” are specified in request. If “pairsList” field is specified in the request, then the value of this field should equal 1 (only last candle for each requested trading pair will be returned in response). |
dataType | Yes | String | The type of data, on the basis of which returned OHLC prices in candles should be calculated. Allowed values: “bestAsk”, “bestBid”. |
resolution | Yes | String | Timeframe from which OHLCV candles data should be calculated. Allowed values: “1m”, “5m”, “15m”, “30m”, "1h", “2h”, “4h”, “1d”. |
Candles Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
XXX-YYY | No | Object or Array | Represents an array or an object which describes XXX-YYY trading pair candle details if pairsList parameter was indicated in the request. If it represents an array - then candle for XXX-YYY trading pair is presented, if an object - then candle for XXX-YYY trading pair could not be returned and error description is returned inside an object. If pairsList was not indicated in the request, then this parameter should be absent. |
XXX-YYY.N | No | Object | Represents an object with XXX-YYY trading pair candle or error description. |
timestamp | Yes | Number | OHLCV candle timestamp - UTC timestamp in milliseconds. |
open | No | Number (Float) | Opening price of OHLCV candle in quote currency. |
high | No | Number (Float) | Highest price of OHLCV candle in quote currency, which was reached during candle timeframe. |
low | No | Number (Float) | Lowest price of OHLCV candle in quote currency, which was reached during candle timeframe. |
close | No | Number (Float) | Closing price of OHLCV candle in quote currency. |
volume | No | Number | Quantity of price changes within period. |
resolution | Yes | String | Timeframe from which OHLCV candles data should be calculated. Allowed values: “1m”, “5m”, “15m”, “30m”, "1h", “2h”, “4h”, “1d”. |
isClosed | No | Boolean | Indicates whether the specific candle is currently closed. If the value of this field is true, then it means this candle has been already closed. If this field is absent, then it means this candle is still open. |
timestampISO | Yes | String | OHLCV candle date & time in ISO format (“YYYY-MM-DDTHH:mm:ss.SSSZ"). |
error | No | Object | If this field is present, then requested candle can not be returned. Represents human readable error reason of why request is not successful. |
error.code | No | Number | Represents numeric code of occurred error. |
error.reason | No | String | Represents human readable error reason of why candle could not be returned. |
Trade History
This method allows Client to obtain historical data as to occurred trades upon requested trading pair.
Client can supplement Trade History request with additional filter parameters, such as timeframe period, tradeIds range, side etc. to receive trades which match request parameters.
HTTP REQUEST
POST /get_trade_history
API Rate Limit Cost: 1
API Key Permission
This method requires "Read" permission set for API Key.
Trade History Request Parameters
Get Trade History request
Request (Client sends request to receive trade history for BTC-USD trading pair)
{
"pair": "BTC-USD"
}
Response (CEX.IO Spot Trading successfully responds to the request)
{
"ok": "ok",
"data": {
"pageSize": 100,
"trades": [
{
"tradeId": "1675399566795-0",
"dateISO": "2023-02-03T04:46:06.795Z",
"side": "SELL",
"price": "21149.2",
"amount": "10.00000000"
},
{
"tradeId": "1675401193999-0",
"dateISO": "2023-02-03T05:13:13.999Z",
"side": "BUY",
"price": "25896.0",
"amount": "0.00000001"
},
{
"tradeId": "1675401207800-0",
"dateISO": "2023-02-03T05:13:27.800Z",
"side": "SELL",
"price": "21146.0",
"amount": "0.00000001"
}
]
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
pair | Yes | String | Trading pair, for which Client wants to receive trades history. Trading pair should contain two currencies in uppercase divided by “-“ symbol. Pair should be listed in traditional direction. For example “BTC-USD”, but not “USD-BTC”. |
side | No | String | Side of requested trades. If this field is present, it should contain only one of allowed values: “BUY” or “SELL”. If this field is not indicated in the request, then response would contain trades for "BUY" and "SELL" sides. |
fromDateISO | No | String | The starting moment of time of the requested period in ISO format (YYYY-MM-DDTHH:mm:ss.SSSZ) for which trades are requested. If “fromDateISO” and “pageSize” parameters are not specified in request, then by default last 1000 trades will be returned in response. If this field is present, then “fromTradeId” and “toTradeId” fields should not be indicated in the request. |
toDateISO | No | String | The last moment of time of the requested period in ISO format (YYYY-MM-DDTHH:mm:ss.SSSZ) for which trades are requested. If this field is present, then “fromDateISO” should also be present, “fromTradeId” and “toTradeId” fields should be absent. |
fromTradeId | No | String | Unique trade identifier (tradeId) in CEX.IO Spot Trading system, starting from which subsequent trades should be returned in response. If this field is present, then “fromDateISO” and “toDateISO” fields should not be indicated in the request. |
toTradeId | No | String | Unique trade identifier (tradeId) in CEX.IO Spot Trading system, which should be the last trade returned in response. If this field is present, then “fromTradeId” should also be present, “fromDateISO” and “toDateISO” fields should not be indicated in the request. |
pageSize | No | Number (Integer) | Maximum number of trades, which should be returned in response. If this field is present then the value should be more than zero and not more than 1000. If indicated value is more than 1000, the response will still contain only up to 1000 trades max. If this field is not specified in request, then by default 100 trades would be returned in response. |
Trade History Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
pageSize | Yes | Number (Integer) | Maximum number of trades, which can be returned in response. |
trades | Yes | Array | An array containing data as to each trade event which satisfies requested criteria. If request is successful, this field should be present in response. It might be an empty array ([]). If this array is empty, then it means there are no trades, which satisfy Client’s request criteria. If there are trades, which satisfy requested criteria, then the elements in array are sorted by “dateISO” value in ascending order (from older to newer, considering “fromDateISO” / “toDateISO” or “fromTradeId” / “toTradeId” if indicated in request). If a few trade events occurred at the same moment of time, then such trade events are sorted additionally by “tradeId” value from lowest to higher sequence number (e.g. first “1677696747571-0”, then “1677696747571-1” etc.) |
trades.X | No | Object | If trade event is available, then represents an object which describes specific Х trade event details. |
trades.X.side | Yes | String | Side of trade event. |
trades.X.dateISO | Yes | String | Date & Time of trade event in ISO format. (YYYY-MM-DDTHH:mm:ss.SSSZ). |
trades.X.price | Yes | String (parseable as float) | Trade execution price. |
trades.X.amount | Yes | String (parseable as float) | Amount of trade in base currency. |
trades.X.tradeId | Yes | String | Unique trade identifier in CEX.IO Spot Trading system. The value in this field should consist of trade UTC timestamp in milliseconds and sequence number separated by ”-” symbol (e.g. “1677696747571-0”). If several trades occurred at the same moment of time, then they differ from each other by incremented sequence number, starting from 0 (e.g. “1677696747571-0”, “1677696747571-1”, “1677696747571-2” etc.). |
error | No | Object | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Transaction History
This request allows Client to find his financial transactions (deposits, withdrawals, internal transfers, commissions or trades).
HTTP REQUEST
POST /get_my_transaction_history
API Rate Limit Cost: 5
API Key Permission
This method requires “Read” permission set for API Key.
Transaction History Request Parameters
Get My Transaction History - For Main Account with specified period
Request (Client sends request to find all transactions for the main account with specified period)
{
"accountId": "",
"type": "",
"dateTo": 1614336230587,
"dateFrom": 1613101662720,
"sortOrder": "ASC"
}
Response
{
"ok": "ok",
"data": [
{
"transactionId": "trade_335805_finalization_BTC",
"timestamp": "2021-02-12T09:44:35.078Z",
"accountId": "",
"type": "trade",
"amount": "0.00200000",
"details": "Finalization Trade orderId='335805' for DEMO_USER",
"currency": "BTC"
},
{
"transactionId": "trade_335805_finalization_USD",
"timestamp": "2021-02-12T09:44:35.078Z",
"accountId": "",
"type": "trade",
"amount": "-33.40944038",
"details": "Finalization Trade orderId='335805' for DEMO_USER",
"currency": "USD"
},
{
"transactionId": "commission_trade_335805",
"timestamp": "2021-02-12T09:44:35.090Z",
"accountId": "",
"type": "commission",
"amount": "-0.16704721",
"details": "Commission for orderId='335805' for DEMO_USER",
"currency": "USD"
}
]
}
Get My Transaction History - For Main Account with Paging
Request (Client sends request to find transactions for the main account and wants to see second page expecting the result set is chunked to pages size 3 (not more than 3 transactions per page))
{
"accountId": "",
"type": "",
"pageSize": 3,
"pageNumber": 2,
"sortOrder": "DESC"
}
Response
{
"ok": "ok",
"data": [
{
"transactionId": "commission_trade_338348",
"timestamp": "2021-02-24T16:36:23.271Z",
"accountId": "",
"type": "commission",
"amount": "-1242.90844594",
"details": "Commission for orderId='338348' for DEMO_USER",
"currency": "USD"
},
{
"transactionId": "trade_338348_finalization_BTC",
"timestamp": "2021-02-24T16:36:23.259Z",
"accountId": "",
"type": "trade",
"amount": "-1.56398259",
"details": "Finalization Trade orderId='338348' for DEMO_USER",
"currency": "BTC"
},
{
"transactionId": "trade_338348_finalization_USD",
"timestamp": "2021-02-24T16:36:23.259Z",
"accountId": "",
"type": "trade",
"amount": "77753.71512521",
"details": "Finalization Trade orderId='338348' for DEMO_USER",
"currency": "USD"
}
]
}
Get My Transaction History - Deposit Transactions for Main Account
Request (Client sends request to find all deposit transactions for main account)
{
"accountId": "",
"type": "deposit",
"sortOrder": "DESC"
}
Response
{
"ok": "ok",
"data": [
{
"transactionId": "deposit_135857381",
"timestamp": "2021-02-19T10:56:16.255Z",
"accountId": "",
"type": "deposit",
"amount": "0.05000000",
"details": "Deposit depositId=135857381 for DEMO_USER",
"currency": "BTC"
}
]
}
Get My Transaction History - For non-existing sub-account
Request (Client sends request for non-existing sub-account)
{
"accountId": "nonExistingAcc"
}
Response
{
"ok": "ok",
"data": []
}
Get My Transaction History - Incorrect "type" parameter
Request (Client sends request with incorrect "type" parameter)
{
"accountId": "",
"type": "limitOrder"
}
Response
{
"error": "Operation type is not supported. Supported types: trade,commission,deposit,withdraw,internalTransfer"
}
Get My Transaction History - Page size is more than 100
Request
{
"accountId": "",
"type": "",
"pageSize": 150,
"pageNumber": 1
}
Response
{
"error": "Page size is limited to 100 items"
}
Get My Transaction History - For Incorrect Request
Request (Client sends request to find transactions without valid JSON object)
{
[]
}
Response
{
"error": "Bad Request"
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
accountId | No | String | Account identifier, for which Client wants to find transactions. Empty string ("") or null value in this field represents Client’s main account. If this field is missing, then it means Client wants to find transactions for the main account and all sub-accounts. |
type | No | String | If this field is present and contains one of the allowed values, then it means Client wants to get only transactions related to specified operation type. Allowed values are: "trade", "deposit", "withdraw", "internalTransfer, "commission". If this field is missing or if this field is present but contains an empty string (""), then it means Client wants to get transactions for all operation types. |
dateFrom | No | Number | UTC timestamp in milliseconds. Represents the earliest moment in time when transactions were created. In the result set transactions’ timestamp field value should be greater than or equal to (>=) dateFrom. If the request contains values in both fields dateFrom and dateTo, then the value in the field dateFrom should be less than the value in the field dateTo. |
dateTo | No | Number | UTC timestamp in milliseconds. Represents the latest moment in time when transactions were created. In the result set transactions’ timestamp field value should be less than (<) dateTo. If the request contains values in both fields dateFrom and dateTo, then the value in the field dateTo should be greater than the value in the field dateFrom. |
sortOrder | No | String | Sort order of the result set. The result array is sorted by "timestamp" field. Allowed values: "ASC" - ascending order, "DESC" - descending order. If this field is missing then the default sort order is "DESC", so recently created transactions come first and oldest transactions come last. |
pageSize | No | Number | Because the result might contain too many transactions, Client should specify, which portion of the result list he wants to get as a response to this request. This parameter limits the maximum number of transactions in the result for this request and cannot be greater than 100. If this field is missing, then the default value of 100 is used. If this field contains one of the allowed values and, simultaneously, the pageNumber field is missing, then the default pageNumber value is applied. Specifying the value in the field pageSize is mandatory if the value in the field pageNumber is also sent in the Client's request. |
pageNumber | No | Number | Because the result might contain too many transactions, Client should specify, which portion of the result list he wants to get as a response to this request. Result list is chunked into pages for not more than data.pageSize transactions per each page. This parameter specifies, which page number of the result set Client wants to see as the response to this request. First page number is 1. If this field is missing, then the default value of 1 is used. This value cannot be lower than 1. If any valid value is specified in this field, then it is mandatory to also send the value in the field pageSize in the Client’s request. |
Transaction History Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
data | Yes | Array or Object | This object contains list of transactions, which satisfies request criteria. It might be empty array ([]). If this array is empty, then it means there are no transactions, which satisfy Client’s request criteria. In case of error, the value of this field should be not Array, but Object. |
transactionId | Yes | String | Unique identifier of transaction. |
timestamp | Yes | Datetime | Represents server timestamp when this transaction happened. Format: YYYY-MM-DDTHH:MM:SS.sssZ . |
accountId | Yes | String | Represents the Account ID. |
type | Yes | String | Represents the type of this operation. Allowed values are "trade", "deposit", "withdraw", "internalTransfer", "commission". |
amount | Yes | String (which can be parsed as Float) | Represents amount of the transaction. |
details | Yes | String | Represents transaction details. |
currency | Yes | String | Represents the currency of the transaction. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Funding History
This request allows Client to find his deposit and withdrawal transactions.
HTTP REQUEST
POST /get_my_funding_history
API Rate Limit Cost: 5
API Key Permission
This method requires “Read” permission set for API Key.
Funding History Request Parameters
Get My Funding History - For Main Account and all sub-accounts
Request (Client sends request to find deposit/withdrawal transactions for the main account and all sub-accounts)
{}
Response (CEX.IO Spot Trading responds that Client has 2 withdrawal transactions (1 withdrawal from sub-account and 1 withdrawal from main account) and 3 deposit transactions (2 deposits to sub-accounts and 1 deposit to main account))
{
"ok": "ok",
"data": [
{
"txId": 148126,
"clientId": "TestClient",
"accountId": "100107_test",
"currency": "BTC",
"direction": "withdraw",
"amount": "81.04000000",
"commissionAmount": "1.14000000",
"status": "approved",
"updatedAt": "2021-02-19T10:56:25.272Z"
},
{
"txId": 148127,
"clientId": "TestClient",
"accountId": "",
"currency": "BTC",
"direction": "withdraw",
"amount": "11.34000000",
"commissionAmount": "0.14000000",
"status": "approved",
"updatedAt": "2021-02-19T10:56:17.193Z"
},
{
"txId": 148128,
"clientId": "TestClient",
"accountId": "100108_test",
"currency": "BTC",
"direction": "deposit",
"amount": "15.34000000",
"commissionAmount": "0.00000000",
"status": "approved",
"updatedAt": "2021-02-16T13:18:48.682Z"
},
{
"txId": 148129,
"clientId": "TestClient",
"accountId": "100109_test",
"currency": "BTC",
"direction": "deposit",
"amount": "55.34000000",
"commissionAmount": "0.00000000",
"status": "approved",
"updatedAt": "2021-02-16T13:17:45.399Z"
},
{
"txId": 148130,
"clientId": "TestClient",
"accountId": "",
"currency": "BTC",
"direction": "deposit",
"amount": "55.34000000",
"commissionAmount": "0.00000000",
"status": "approved",
"updatedAt": "2021-02-16T13:16:41.585Z"
}
]
}
Get My Funding History - For Main Account and all Sub-accounts with Paging
Request (Client sends request to find deposit/withdrawal transactions for the main account and all sub-accounts and wants to see the first page expecting the result set is chunked to pages size 2 (not more than 2 transactions per page))
{
"pageSize": 2,
"pageNumber": 1
}
Response (Supposed that Client has 5 transactions (like in previous example), CEX.IO Spot Trading responds with the first page, which includes 2 transactions)
{
"ok": "ok",
"data": [
{
"txId": 148126,
"clientId": "TestClient",
"accountId": "100107_test",
"currency": "BTC",
"direction": "withdraw",
"amount": "81.04000000",
"commissionAmount": "1.14000000",
"status": "approved",
"updatedAt": "2021-02-19T10:56:25.272Z"
},
{
"txId": 148127,
"clientId": "TestClient",
"accountId": "",
"currency": "BTC",
"direction": "withdraw",
"amount": "11.34000000",
"commissionAmount": "0.14000000",
"status": "approved",
"updatedAt": "2021-02-19T10:56:17.193Z"
}
]
}
Get My Funding History - For Specified Sub-Account
Request (Client sends request to find deposit/withdrawal transactions for specified sub-account)
{
"accountId": "123"
}
Response (CEX.IO Spot Trading responds with deposit/withdrawal transactions for specified sub-account)
{
"ok": "ok",
"data": [
{
"txId": 148129,
"clientId": "TestClient",
"accountId": "123",
"currency": "BTC",
"direction": "deposit",
"amount": "55.34000000",
"commissionAmount": "0.00000000",
"status": "approved",
"updatedAt": "2021-02-16T13:17:45.399Z"
}
]
}
Get My Funding History - Deposit Transactions for Main Account and all Sub-accounts with specified Period
Request (Client sends request to find all deposit transactions for main account and all sub-accounts, which happened within specified period)
{
"direction": "deposit",
"dateFrom": 1514337745869,
"dateTo": 1614337745869
}
Response (CEX.IO Spot Trading responds that Client has only one transaction, which satisfies requested criteria)
{
"ok": "ok",
"data": [
{
"txId": 148128,
"clientId": "TestClient",
"accountId": "100108_test",
"currency": "BTC",
"direction": "deposit",
"amount": "15.34000000",
"commissionAmount": "0.00000000",
"status": "approved",
"updatedAt": "2021-02-16T13:18:48.682Z"
}
]
}
Get My Funding History - For Incorrect Request
Request (Client sends request to find some deposit/withdrawal transactions without valid JSON object)
{
[]
}
Response (CEX.IO Spot Trading responds to Client that such request is not allowed)
{
"error": "Bad Request"
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
accountId | No | String | Account identifier, for which Client wants to find transactions. Empty string ("") or null value in this field represents Client’s main account. If this field is missing, then it means Client wants to find deposits and withdrawals for the main account and all sub-accounts. |
txId | No | Number | Transaction identifier. If this field is present, then it means Client wants to get information only for specified transaction. |
direction | No | String | If this field is present and contains one of the allowed values, then it means Client wants to get only transactions related to specified operation type. Allowed values are: "deposit", "withdraw". If this field is missing or if this field is present but contains an empty string (""), then it means Client wants to get all deposits and withdrawals. |
currency | No | String | If this field is present, then it means Client wants to get only transactions in the specified currency. If this field is missing, then it means Client wants to get deposits/withdrawals in all currencies. |
dateFrom | No | Number | UTC timestamp in milliseconds. Represents the earliest moment in time when transactions were created. In the result set transactions’ timestamp field value should be greater than or equal to (>=) dateFrom. If the request contains values in both fields dateFrom and dateTo, then the value in the field dateFrom should be less than the value in the field dateTo. |
dateTo | No | Number | UTC timestamp in milliseconds. Represents the latest moment in time when transactions were created. In the result set transactions’ timestamp field value should be less than (<) dateTo. If the request contains values in both fields dateFrom and dateTo, then the value in the field dateTo should be greater than the value in the field dateFrom. |
pageSize | No | Number | Because the result might contain too many transactions, Client should specify, which portion of the result list he wants to get as a response to this request. This parameter limits the maximum number of transactions in the result for this request and cannot be greater than 100. If this field is missing, then the default value of 100 is used. If this field contains one of the allowed values and, simultaneously, the pageNumber field is missing, then the default pageNumber value is applied. Specifying the value in the field pageSize is mandatory if the value in the field pageNumber is also sent in the Client's request. |
pageNumber | No | Number | Because the result might contain too many transactions, Client should specify, which portion of the result list he wants to get as a response to this request. Result list is chunked into pages for not more than data.pageSize transactions per each page. This parameter specifies, which page number of the result set Client wants to see as the response to this request. First page number is 1. If this field is missing, then the default value of 1 is used. This value cannot be lower than 1. If any valid value is specified in this field, then it is mandatory to also send the value in the field pageSize in the Client’s request. |
Funding History Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
data | Yes | Array or Object | This object contains list of transactions, which satisfies request criteria. It might be empty array ([]). If this array is empty, then it means there are no transactions, which satisfy Client’s request criteria. In case of error, the value of this field should be not Array, but Object. |
txId | Yes | Number | Unique ID of the transaction. |
clientId | Yes | String | Represents the Client’s name. |
accountId | Yes | String | Represents the Account ID. |
currency | Yes | String | Represents the currency of the transaction. |
direction | Yes | String | Represents the type of this operation. Allowed values - "deposit", "withdraw". |
amount | Yes | String (which can be parsed as Float) | Represents amount of the transaction. |
commissionAmount | Yes | String (which can be parsed as Float) | Represents commission amount of the transaction. |
status | Yes | String | Represents the status of the transaction. |
updatedAt | Yes | Datetime | Represents server timestamp when this transaction happened. Format: YYYY-MM-DDTHH:MM:SS.sssZ . |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Internal Transfer
Client can request to transfer funds between his sub-accounts. CEX.IO Spot Trading does not charge Client any commission for transferring funds between his accounts. Along with a response to this request, CEX.IO Spot Trading sends Account Event messages to Client if this request is successful.
HTTP REQUEST
POST /do_my_internal_transfer
API Rate Limit Cost: 1
API Key Permission
This method requires “Funds Internal” permission set for API Key.
Internal Transfer Request Parameters
Do My Internal Transfer - Transfer Between Sub-accounts
Request (Client requests to transfer 2 USD from sub-account "superhat" to sub-account "hallo". Note that "amount" field is String in this request and is allowed as well Float)
{
"fromAccountId": "superhat",
"toAccountId": "hallo",
"amount": "2",
"currency": "USD",
"clientTxId": "123"
}
Response (CEX.IO Spot Trading responds to Client that internal transfer operation was successful and shows transactionId of this transfer)
{
"ok": "ok",
"data": {
"transactionId": 777
}
}
Do My Internal Transfer - Duplicate clientTxId
Request (Client requests to transfer 4 USD from sub-account "superhat" to sub-account "hallo" with clientTxId = "123" which was already used in the previous example to transfer 2 USD)
{
"fromAccountId": "superhat",
"toAccountId": "hallo",
"amount": "4",
"currency": "USD",
"clientTxId": "123"
}
Response (CEX.IO Spot Trading detects duplicate and funds are not transferred between accounts. CEX.IO Spot Trading responds to Client with transactionId of the successful transfer (first transfer with clientTxId = "123"))
{
"ok": "ok",
"data": {
"transactionId": 777
}
}
Do My Internal Transfer - Insufficient Funds
Request (Client requests to transfer 180 USD from sub-account "superhat" to sub-account "hallo", but there are only 18 USD on "superhat" sub-account)
{
"fromAccountId": "superhat",
"toAccountId": "hallo",
"amount": 180,
"currency": "USD",
"clientTxId": "12342134442"
}
Response (CEX.IO Spot Trading responds that Client has insufficient funds on his "superhat" sub-account. So, the internal transfer was rejected, balances did not change)
{
"error": "Insufficient funds"
}
Do My Internal Transfer - Incorrect Amount
Request (Client requests to transfer -10 USD from sub-account "superhat" to sub-account "hallo", but amount is <0, which is not allowed)
{
"fromAccountId": "superhat",
"toAccountId": "hallo",
"amount": "-10",
"currency": "USD",
"clientTxId": "12342134442"
}
Response (CEX.IO Spot Trading responds to Client that such request is not allowed and amount should be greater than zero)
{
"error": "Amount should be greater than zero"
}
Do My Internal Transfer - Incorrect AccountId
Request (Client requests to transfer 10 USD to sub-account "hallo", but does not specify from which sub-account namely)
{
"toAccountId": "hallo",
"amount": 10,
"currency": "USD",
"clientTxId": "12342134442"
}
Response (CEX.IO Spot Trading responds to Client that such request is not allowed and mandatory parameter is missing)
{
"error": "Mandatory parameter fromAccountId is missing"
}
Do My Internal Transfer - Same fromAccountId and toAccountId
Request (Client requests to transfer 10 USD from sub-account "superhat" to sub-account "superhat" (same account))
{
"fromAccountId": "superhat",
"toAccountId": "superhat",
"amount": 10,
"currency": "USD",
"clientTxId": "12342134442"
}
Response (CEX.IO Spot Trading responds to Client that such request is not allowed and fromAccountId and toAccountId should be different)
{
"error": "fromAccountId and toAccountId should be different"
}
Do My Internal Transfer - Invalid Currency
Request (Client requests to transfer 10 ABC from sub-account "superhat" to sub-account "testAccount1". However, ABC is not a valid currency)
{
"fromAccountId": "superhat",
"toAccountId": "testAccount1",
"amount": 20,
"currency": "ABC",
"clientTxId": "12342134442"
}
Response (CEX.IO Spot Trading responds to Client that such request is not allowed because currency ABC is not supported)
{
"error": "Unsupported currency ABC"
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
clientTxId | No | String | Unique identifier of transfer specified by Client. If two (or more) transfers with the same clientTxId are received by the system - only first transfer will be processed, second and subsequent transfers will return transactionId of the first completed internal transfer for clientTxId. |
fromAccountId | Yes | String | Account identifier of sub-account, from which Client wants to transfer funds. Empty string value ("") in this field is not allowed. |
toAccountId | Yes | String | Account identifier of sub-account, to which Client wants to transfer funds. Empty string value ("") in this field is not allowed. Destination Account should be created by Client beforehand via Create Account method or Spot Trading Web Portal. |
currency | Yes | String | Currency of internal transfer. |
amount | Yes | Float (or String which can be parsed as Float) | Amount of the transaction. It should be greater than 0. |
Internal Transfer Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
transactionId | No | Number | Unique identifier of successful internal transfer transaction. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Processing Info
This request allows Client to receive detailed information about available options to make deposits from external wallets and withdrawals to external wallets as to each supported cryptocurrency, including cryptocurrency name and available blockchains for deposit\withdrawals. Also, as to each supported blockchain there are indicated type of cryptocurrency on indicated blockchain, current deposit\withdrawal availability, minimum amounts for deposits\withdrawals, external withdrawal fees.
Processing Information makes Client more flexible in choosing desired blockchain for receiving Deposit address and initiating external withdrawals via certain blockchain, so that Client uses more convenient way of transferring his crypto assets to or from CEX.IO Ecosystem.
HTTP REQUEST
POST /get_processing_info
API Rate Limit Cost: 10
API Key Permission
This method requires “Read” permission set for API Key.
Processing Info Request Parameters
Get Processing Info Request for one specific cryptocurrency
Request (Client queries processing info for "BTC")
{
"data": {
"currencies": ["BTC"]
}
}
Response (CEX.IO Spot Trading responds that only 'bitcoin' blockchain is supported for deposits\withdrawals of "BTC")
{
"ok": "ok",
"data": {
"BTC": {
"name": "Bitcoin",
"blockchains": {
"bitcoin": {
"type": "coin",
"deposit": "enabled",
"minDeposit": "0.0001",
"withdrawal": "enabled",
"minWithdrawal": "0.002",
"withdrawalFee": "0.0005",
"depositConfirmations": 2
}
}
}
}
}
Get Processing Info Request for several cryptocurrencies
Request (Client queries processing info for "BTC" and "USDC")
{
"data": {
"currencies": ["BTC","USDC"]
}
}
Response (CEX.IO Spot Trading responds that for deposits\withdrawals 'bitcoin' blockchain is supported for "BTC" and "ethereum", "stellar" and "tron" blockchains are supported for "USDC")
{
"ok": "ok",
"data": {
"BTC": {
"name": "Bitcoin",
"blockchains": {
"bitcoin": {
"type": "coin",
"deposit": "enabled",
"minDeposit": "0.0001",
"withdrawal": "enabled",
"minWithdrawal": "0.002",
"withdrawalFee": "0.0005",
"depositConfirmations": 2
}
}
},
"USDC": {
"name": "USD Coin",
"blockchains": {
"ethereum": {
"type": "ERC20",
"deposit": "enabled",
"minDeposit": "5",
"withdrawal": "enabled",
"minWithdrawal": "50",
"withdrawalFee": "40",
"depositConfirmations": 25
},
"stellar": {
"type": "coin",
"deposit": "enabled",
"minDeposit": "5",
"withdrawal": "enabled",
"minWithdrawal": "50",
"withdrawalFee": "1",
"depositConfirmations": 1
},
"tron": {
"type": "TRC20",
"deposit": "enabled",
"minDeposit": "5",
"withdrawal": "enabled",
"minWithdrawal": "50",
"withdrawalFee": "1",
"depositConfirmations": 21
}
}
}
}
}
Get Processing Info - No available blockchains
Request (Client queries processing info for supported cryptocurrency "ZEC")
{
"data": {
"currencies": ["ZEC"]
}
}
Response (CEX.IO Spot Trading responds that request was processed successfully but no blockchains are supported for "ZEC")
{
"ok": "ok",
"data": {}
}
Get Processing Info - Invalid and fiat cryptocurrency
Request (Client queries processing info for "BTC", "ETH", "XXX" and "USD")
{
"data": {
"currencies": ["BTC", "ETH", "XXX", "USD"]
}
}
Response (CEX.IO Spot Trading responds that error occurred because unsupported currencies "XXX" and "USD" are indicated in the request)
{
"ok": "ok",
"data": {
"error": "Request contains unsupported currencies: XXX, USD."
}
}
Get Processing Info - Invalid value type in "currencies" array
Request (Client queries processing info with invalid values type in "currencies" field)
{
"data": {
"currencies": [1,2,3]
}
}
Response (CEX.IO Spot Trading responds that error occurred because wrong type of value was indicated in "currencies" array and only string values are allowed)
{
"ok": "ok",
"data": {
"error": "Currencies array should consist of string type values."
}
}
Get Processing Info - Not an array indicated in "currencies" field
Request (Client queries processing info with indicating empty object ({}) in "currencies" field)
{
"data": {
"currencies": {}
}
}
Response (CEX.IO Spot Trading responds that error occurred because only array is allowed in "currencies" field)
{
"ok": "ok",
"data": {
"error": "Currencies should be array."
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
currencies | No | Array | List of cryptocurrencies for which Client wants to get information about supported blockchains for deposit\withdraw, limits and commissions. Cryptocurrencies should be in upper case and of string type. The list should contain only valid cryptocurrency symbols. If this field is missing or contains an empty array ([]), then it means Client wants to get processing info for all available cryptocurrencies. |
Processing Info Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data.YYY | Yes | String | Cryptocurrency symbol specified in Client's request. |
data.YYY.name | Yes | String | Cryptocurrency name. |
data.YYY.blockchains | Yes | Object | This object contains info about all supported blockchains to deposit\withdraw cryptocurrency YYY. |
data.YYY.blockchains.X | Yes | Object | This object contains details and limitations for deposit\withdrawal of cryptocurrency YYY via blockchain X, including data about blockchain type, current availability to deposit\withdraw, minimum deposit\withdrawal limit and external withdrawal fees. |
data.YYY.blockchains.X. type | Yes | String | Type of cryptocurrency YYY on blockchain X. |
data.YYY.blockchains.X. deposit | Yes | String | Describes current availability to deposit cryptocurrency YYY via blockchain X. Only "enabled" or "disabled" values are allowed herein. |
data.YYY.blockchains.X. minDeposit | Yes | String (which can be parsed as Float) | Minimum amount of cryptocurrency YYY which can be deposited from external wallet via blockchain X. |
data.YYY.blockchains.X. withdrawal | Yes | String | Describes current availability to withdraw cryptocurrency YYY via blockchain X. Only "enabled" or "disabled" values are allowed herein. |
data.YYY.blockchains.X. minWithdrawal | Yes | String (which can be parsed as Float) | Minimum amount of cryptocurrency YYY which can be withdrawn to external wallet via blockchain X. |
data.YYY.blockchains.X. withdrawalFee | Yes | String (which can be parsed as Float) | Amount of withdrawal fee in cryptocurrency YYY, which which would be charged and subtracted from withdrawal amount if blockchain X is used for withdrawal. |
data.YYY.blockchains.X. depositConfirmations | Yes | Number | Minimal confirmation number for transaction in the blockchain to be deposited to Client’s Spot Trading account. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
statusCode | No | String | If this field is present, then request is not successful. Represents numeric code of occurred error. |
Deposit Address
This method can be used by Client for receiving a crypto address to deposit cryptocurrency to CEX.IO Spot Trading sub-accounts.
HTTP REQUEST
POST /get_deposit_address
API Rate Limit Cost: 5
API Key Permission
This method requires “Read” permission set for API Key.
Deposit Address Request Parameters
Get Deposit Address Request for sub-account to deposit "BTC" cryptocurrency via 1 available blockchain
Client sends get_processing_info request for receiving all available blockchains to deposit BTC
{
"currencies": ["BTC"]
}
Response (CEX.IO Spot Trading responds with processing info with only one available "bitcoin" blockchain for BTC)
{
"ok": "ok",
"data": {
"BTC": {
"name": "Bitcoin",
"blockchains": {
"bitcoin": {
"type": "coin",
"deposit": "enabled",
"minDeposit": "0.0001",
"withdrawal": "enabled",
"minWithdrawal": "0.002",
"withdrawalFee": "0.0005"
}
}
}
}
}
Request (Client queries deposit address for BTC cryptocurrency on "bitcoin" blockchain)
{
"accountId": "testAccount1", // sub-account ID
"currency": "BTC", // currency "BTC"
"blockchain": "bitcoin" // required blockchain
}
Response (CEX.IO Spot Trading responds with information about crypto address to deposit BTC via "bitcoin" blockchain)
{
"ok": "ok",
"data": {
"accountId": "testAccount1",
"address": "n2saq73aDTu42bRgEHd8gd4to1gCzHxrdj",
"currency": "BTC",
"blockchain": "bitcoin"
}
}
Get Deposit Address Request for sub-account to deposit "USDC" cryptocurrency via specific blockchain
Client sends get_processing_info request for receiving all available blockchains to deposit USDC
{
"currencies": ["USDC"]
}
Response (CEX.IO Spot Trading responds that there are 3 available blockchains to deposit USDC, namely "ethereum", "stellar" and "tron")
{
"ok": "ok",
"data": {
"USDC": {
"name": "USD Coin",
"blockchains": {
"ethereum": {
"type": "ERC20",
"deposit": "enabled",
"minDeposit": "5",
"withdrawal": "enabled",
"minWithdrawal": "50",
"withdrawalFee": "40"
},
"stellar": {
"type": "coin",
"deposit": "enabled",
"minDeposit": "5",
"withdrawal": "enabled",
"minWithdrawal": "50",
"withdrawalFee": "20"
},
"tron": {
"type": "TRC20",
"deposit": "enabled",
"minDeposit": "5",
"withdrawal": "enabled",
"minWithdrawal": "50",
"withdrawalFee": "1"
}
}
}
}
}
Request (Client queries deposit address for sub-account "superhat" for USDC cryptocurrency to further deposit it via "tron" blockchain as most profitable for Client)
{
"accountId": "superhat",
"currency": "USDC",
"blockchain": "tron"
}
Response (CEX.IO Spot Trading responds with information about crypto address to deposit USDC via "tron" blockchain on "superhat" account)
{
"ok": "ok",
"data": {
"accountId": "superhat",
"address": "n2saq73aDTu42bRgEHd8gd4to1gCzHxrdj",
"currency": "USDC",
"blockchain": "tron"
}
}
Get Deposit Address Request for sub-account to deposit "XRP" cryptocurrency
Client sends get_processing_info request for receiving of all available blockchains to deposit XRP
{
"currencies": ["XRP"]
}
Response (CEX.IO Spot Trading responds that there is only 1 available blockchain to deposit XRP, namely "ripple")
{
"ok": "ok",
"data": {
"XRP": {
"name": "Ripple",
"blockchains": {
"ripple": {
"type": "coin",
"deposit": "enabled",
"minDeposit": "0",
"withdrawal": "enabled",
"minWithdrawal": "0.3",
"withdrawalFee": "0.25"
}
}
}
}
}
Request (Client queries deposit address for sub-account "superhat" for XRP cryptocurrency to further deposit it via "ripple" blockchain)
{
"accountId": "superhat",
"currency": "XRP",
"blockchain": "ripple"
}
Response (CEX.IO Spot Trading responds with destination and memo to deposit XRP via "ripple" blockchain)
{
"ok": "ok",
"data": {
"accountId": "superhat",
"destination": "rE1sdh25BJQ3qFwngiTBwaq3zPGGYcrjp1",
"memo": "65629",
"currency": "XRP",
"blockchain": "ripple"
}
}
Get Deposit Address - Unsupported currency
Request (Client queries deposit address)
{
"accountId": "testAccount1",
"currency": "XXX",
"blockchain": "ethereum"
}
Response (CEX.IO Spot Trading responds that error occurred because unsupported currency is specified in the request)
{
"error": "Unsupported currency XXX",
"statusCode": 422
}
Get Deposit Address - Unsupported blockchain
Request (Client queries deposit address)
{
"accountId": "testAccount1",
"currency": "ETC",
"blockchain": "tezos"
}
Response (CEX.IO Spot Trading responds that error occurred because unsupported currency is specified in the request)
{
"error": "Blockchain is not supported.",
"statusCode": 500
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
accountId | Yes | String | Sub-account identifier, to which Client wants to make a deposit. Empty string value ("") in this field is not allowed. |
currencies | Yes | String | Cryptocurrency name, for which Client wants to get a deposit address. |
blockchain | Yes | String | Blockchain name, via which Client wants to make a deposit of requested currency. Available blockchains can be received via Processing Info request. |
Deposit Address Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
accountId | Yes | String | Sub-account identifier, to which Client wants to make a deposit. |
address | No | String | Crypto address for deposit. Please be informed that destination and memo fields are used for ledger cryptocurrencies (e.g. XRP, XLM, ATOM). |
destination | No | String | Destination address for deposit used for ledger cryptocurrencies (e.g. XRP, XLM, ATOM). |
memo | No | String | A special identifier used for ledger cryptocurrencies (e.g. XRP, XLM, ATOM). |
currency | Yes | String | Cryptocurrency name, for which deposit address is generated. |
blockchain | Yes | String | Blockchain name, via which requested cryptocurrency can be deposited via generated address. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
statusCode | No | Number | If this field is present, then request is not successful. Represents numeric code of occurred error. |
Funds Deposit from Wallet
Client can deposit funds from CEX.IO Wallet to Spot Trading sub-account.
The system avoids processing of multiple deposit requests with the same clientTxId. If multiple deposit requests with identical clientTxId are received - the system processes only the first deposit request and rejects the second and subsequent deposit requests with the same clientTxId.
HTTP REQUEST
POST /do_deposit_funds_from_wallet
API Rate Limit Cost: 1
API Key Permission
This method requires “Funds Wallet” permission set for API Key.
Funds Deposit from Wallet Request Parameters
Funds Deposit Request from CEX.IO Wallet to Spot Trading sub-account
Request (Client queries deposit of BTC to sub-account "testAccount1")
{
"amount": 0.001,
"currency": "BTC",
"accountId": "testAccount1",
"clientTxId": "tx-depositFromWallet-test-1684398846720_1"
}
Response (CEX.IO Spot Trading responds with information that transaction was approved)
{
"ok": "ok",
"data": {
"accountId": "testAccount1",
"clientTxId": "tx-depositFromWallet-test-1684398846720_1",
"currency": "BTC",
"status": "approved"
}
}
Funds Deposit Request from CEX.IO Wallet to Spot Trading sub-account
Request (Client queries deposit of BTC to sub-account "testAccount1")
{
"amount": 0.001,
"currency": "BTC",
"accountId": "testAccount1",
"clientTxId": "tx-depositFromWallet-test-1684399110416_1"
}
Response (CEX.IO Spot Trading responds with information that transaction is pending)
{
"ok": "ok",
"data": {
"accountId": "testAccount1",
"clientTxId": "tx-depositFromWallet-test-1684399110416_1",
"currency": "BTC",
"status": "pending"
}
}
Invalid Deposit Request (too low amount)
Request (Client queries deposit of invalid amount)
{
"amount": 0.00000002,
"currency": "BTC",
"accountId": "testAccount1",
"clientTxId": "tx-depositFromWallet-test-1631101114709"
}
Response (CEX.IO Spot Trading responds that deposit was rejected due to low amount)
{
"error": "Too low amount to deposit 0.00000002 BTC. Minimum amount 0.00100000 BTC",
"statusCode": 500
}
Invalid Deposit Request (unsupported currency)
Request (Client queries deposit of unsupported currency)
{
"amount": 25,
"currency": "XXX",
"accountId": "testAccount1",
"clientTxId": "tx-depositFromWallet-test-1631103998454"
}
Response (CEX.IO Spot Trading responds that deposit was rejected because currency is not supported)
{
"error": "Unsupported currency XXX",
"statusCode": 422
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
clientTxId | Yes | String | Transaction identifier assigned by Client. |
accountId | Yes | String | Sub-account identifier, to which Client wants to deposit funds. Empty string value (“”) in this field is not allowed. |
currency | Yes | String | Crypto or fiat currency symbol for deposit. |
amount | Yes | Float (or String which can be parsed as Float) | Amount for deposit. |
Funds Deposit from Wallet Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
accountId | Yes | String | Sub-account identifier, to which Client initiated deposit funds. |
clientTxId | Yes | String | Transaction identifier assigned by Client. |
currency | Yes | String | Crypto or fiat currency symbol for deposit. |
status | Yes | String | Deposit transaction status. Allowed values - "rejected", "pending", "approved". |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
statusCode | No | Number | If this field is present, then request is not successful. Represents numeric code of occurred error. |
Funds Withdrawal to Wallet
Client can withdraw funds from Spot Trading sub-account to CEX.IO Wallet.
The system avoids multiple withdrawal requests with the same clientTxId. If multiple withdrawal requests with identical clientTxId are received - the system processes only the first withdrawal request and rejects the second and subsequent withdrawal requests with the same clientTxId.
HTTP REQUEST
POST /do_withdrawal_funds_to_wallet
API Rate Limit Cost: 1
API Key Permission
This method requires “Funds Wallet” permission set for API Key.
Funds Withdrawal to Wallet Request Parameters
Funds Withdrawal Request from Spot Trading sub-account to CEX.IO Wallet
Request (Client queries withdrawal of BTC from sub-account "testAccount1")
{
"amount": 0.001,
"currency": "BTC",
"accountId": "testAccount1",
"clientTxId": "tx-withdrawToWallet-test-1684399231967_1"
}
Response (CEX.IO Spot Trading responds with information that transaction was approved)
{
"ok": "ok",
"data": {
"accountId": "testAccount1",
"clientTxId": "tx-withdrawToWallet-test-1684399231967_1",
"currency": "BTC",
"status": "approved"
}
}
Funds Withdrawal Request from Spot Trading sub-account to CEX.IO Wallet
Request (Client queries withdrawal of XRP from sub-account "testAccount1")
{
"amount": 200,
"currency": "XRP",
"accountId": "testAccount1",
"clientTxId": "tx-withdrawToWallet-test-1684399377964_1"
}
Response (CEX.IO Spot Trading responds with information that transaction is pending)
{
"ok": "ok",
"data": {
"accountId": "testAccount1",
"clientTxId": "tx-withdrawToWallet-test-1684399377964_1",
"currency": "XRP",
"status": "pending"
}
}
Invalid Withdrawal Request (too low amount)
Request (Client queries withdrawal of invalid amount)
{
"amount": 0.00000002,
"currency": "BTC",
"clientTxId": "tx-withdrawToWallet-test-1630598297863",
"accountId": "testAccount1"
}
Response (CEX.IO Spot Trading responds that withdrawal was rejected due to low amount)
{
"error": "Too low amount to withdraw 0.00000002 BTC. Minimum amount 0.00100000 BTC",
"statusCode": 500
}
Invalid Withdrawal Request (unsupported currency)
Request (Client queries withdrawal of unsupported currency)
{
"amount": "10",
"currency": "XXX",
"clientTxId": "tx-withdrawToWallet-test-1630598290954",
"accountId": "testAccount1"
}
Response (CEX.IO Spot Trading responds that withdrawal was rejected because currency is not supported)
{
"error": "Unsupported currency XXX",
"statusCode": 422
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
clientTxId | Yes | String | Transaction identifier assigned by Client. |
accountId | Yes | String | Sub-account identifier, from which Client wants to withdraw funds. Empty string value (“”) in this field is not allowed. |
currency | Yes | String | Crypto or fiat currency symbol for withdrawal. |
amount | Yes | Float (or String which can be parsed as Float) | Amount for withdrawal. |
Funds Withdrawal to Wallet Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
accountId | Yes | String | Sub-account identifier, from which Client initiated funds withdrawal. |
clientTxId | Yes | String | Transaction identifier assigned by Client. |
currency | Yes | String | Crypto or fiat currency symbol for withdrawal. |
status | Yes | String | Withdrawal transaction status. Allowed values - “rejected”, “pending”, “approved”. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
statusCode | No | Number | If this field is present, then request is not successful. Represents numeric code of occurred error. |
WebSocket
WebSocket is a TCP-based full-duplex communication protocol. Full-duplex means that both parties can send each other messages asynchronously using the same communication channel. This section describes which messages should CEX.IO Spot Trading and Client send each other. All messages should be valid JSON objects.
WebSocket API is mostly used to obtain information or do actions which are not available or not easy to do using REST API. However, some requests or actions are possible to do in both REST API and WebSocket API. CEX.IO Spot Trading sends messages to Client as a response to request previously sent by Client, or as a notification about some event (without prior Client’s request).
Request should contain request identifier “e”. If it starts with “get”, then such request is used to obtain some information. If it starts with “do”, then such request is used to trigger some action in CEX.IO Spot Trading.
Keep in mind that WebSocket API does not support message resending functionality, and WebSocket connection might be terminated at any time by any party. Connection might be terminated right after the “do” request, so there is a relatively small chance that Client can miss the response for this action. So, in such case Client does not know if this action was successful or not, and there is no guarantee that Client can get this response even if he reconnects in a moment right after disconnection. If such situation happens, then Client should take necessary actions to find out the result of such actions (for example, Client should request account status or request transactions history).
In most requests, messages from Client should include the field “oid”. It should contain a string, an identifier of the request. This identifier is included in Spot Trading's responses, so it is possible for Client to link each response with his correspondent request. Client can use current timestamp in milliseconds, or a random number, or any other identifier he likes as “oid” value. It should not be unique, however it is better to use unique identifier for “oid”.
Public API Calls
Connection
Connection should be established using SSL.
WebSocket API Public Endpoint URL
wss://trade.cex.io/api/spot/ws-public
Either Client or CEX.IO Spot Trading can terminate WebSocket connection at any time.
Once connected, CEX.IO Spot Trading sends “connected” message to Client.
Query Parameters
From | To | Message | Description |
---|---|---|---|
CEX.IO Spot Trading | Client | {"e":"connected"} |
By successful connection, CEX.IO Spot Trading notifies Client about it by sending him a message. |
Keep Connection Alive
To keep connection alive, Client should periodically send any valid message to CEX.IO Spot Trading. Maximum allowed period between two closest Client’s messages is 10 seconds (however, this parameter might be changed by CEX.IO Spot Trading in future). If Client exceeds this limit (meaning, Client sends less than 1 message per 10 seconds), then CEX.IO Spot Trading can terminate the connection.
If Client has no messages to send, then he should send “ping” message to keep the connection alive. Client can send ping messages any time he wishes, even if he has enough other messages to send. Once Client sends a “ping” message, CEX.IO Spot Trading responds with a “pong” message.
Keeping Connection Alive Example
Sequence id | From | To | Message | Description |
---|---|---|---|---|
1 | Client | CEX.IO Spot Trading | {"e":"ping"} |
Client sends “ping”. |
2 | CEX.IO Spot Trading | Client | {"e":"pong"} |
Almost immediately, CEX.IO Spot Trading responds with “pong”. |
3 | Client | CEX.IO Spot Trading | {"e":"ping"} |
Client sends next “ping” in 5 seconds. |
4 | CEX.IO Spot Trading | Client | {"e":"pong"} |
Almost immediately, CEX.IO Spot Trading responds with “pong”. |
5 | Client | CEX.IO Spot Trading | {"e":"ping"} |
Client sends next “ping” in 8 seconds. |
6 | CEX.IO Spot Trading | Client | {"e":"pong"} |
Almost immediately, CEX.IO Spot Trading responds with “pong”. |
7 | CEX.IO Spot Trading keeps connection open if Client sends any valid message at least once per 10 seconds. |
Example of Keeping Connection Alive with Idle Client
Sequence id | From | To | Message | Description |
---|---|---|---|---|
1 | Client | CEX.IO Spot Trading | {"e":"ping"} |
Client sends “ping”. |
2 | CEX.IO Spot Trading | Client | {"e":"pong"} |
Almost immediately, CEX.IO Spot Trading responds with “pong”. |
3 | Client | CEX.IO Spot Trading | {"e":"ping"} |
Client sends next “ping” in 5 seconds. |
4 | CEX.IO Spot Trading | Client | {"e":"pong"} |
Almost immediately, CEX.IO Spot Trading responds with “pong”. |
5 | Client does not send any messages for more than 10 seconds. | |||
6 | CEX.IO Spot Trading | Client | {"e":"disconnected"} |
CEX.IO Spot Trading notifies Client that he is about to Close the connection in a moment because the Client is idle. This message, however, is optional. |
7 | CEX.IO Spot Trading terminates the connection. |
Unsupported method call
Unsupported method call example
Response (by successful connection, CEX.IO Spot Trading notifies Client about it by sending him a message)
{
"e": "connected"
}
Request (Client calls some_unsupported_method WebSocket API method that does not exist)
{
"e": "some_unsupported_method",
"oid": "1523433664816_1_some_unsupported_method",
"data": {
"foobar": 1
}
}
Response (CEX.IO Spot Trading responds with error)
{
"e": "some_unsupported_method",
"oid": "1523439125503_1_some_unsupported_method",
"data": {
"error": "Unsupported message type some_unsupported_method"
}
}
Response (CEX.IO Spot Trading sends
disconnected
event and closes WebSocket connection afterwards)
{
"e": "disconnected"
}
Client sends JSON messages to CEX.IO Spot Trading using WebSocket. Each message should contain e
field, which defines the message type. Client should use message types which are described in documentation. Once Client sends message type which is not described in documentation, then CEX.IO Spot Trading replies with error, sends disconnected
event to Client and closes WebSocket connection.
API Rate limit
Public API rate limit is implied in order to protect the system from DDoS attacks and ensuring all Clients can have same level of stable access to CEX.IO Spot Trading API endpoints. Public requests are limited by IP address from which public API requests are made. Request limits are determined from cost associated with each public API call. By default, each public request has a cost of 1 point, but for some specific requests this cost can be higher. See up-to-date request rate limit cost information in specification of each method.
Rate limit exceeded example
Seq id | Time | Type | Message | Comment |
---|---|---|---|---|
1.1 | 11:01:05.853 | Request | {"e":"get_order_book", "data": [], "oid": "1523433_1_get_order_book"} | Client sends request to get order book. |
1.2 | 11:01:05.856 | Response | {"e":"get_order_book", "oid": "1523433_1_get_order_book", "data": [],"ok": "ok"} | CEX.IO Spot Trading responds with order book. |
2.1 | 11:01:06.001 | Request | {"e":"get_order_book", "data": [], "oid": "1523433_2_get_order_book"} | Client sends request to get order book. |
2.2 | 11:01:06.104 | Response | {"e":"get_order_book", "oid": "1523433_2_get_order_book", "data": [],"ok": "ok"} | CEX.IO Spot Trading responds with order book |
... | ... | ... | ... | ... |
100.1 | 11:01:20.213 | Request | {"e":"get_order_book", "data": [], "oid": "1523433_100_get_order_book"} | Client sends request to get order book. |
100.2 | 11:01:20.345 | Response | {"e":"get_order_book", "oid": "1523433_100_get_order_book", "data": [],"ok": "ok"} | CEX.IO Spot Trading responds with order book. |
101.1 | 11:01:20.390 | Request | {"e":"get_order_book", "data": [], "oid": "1523433_101_get_order_book"} | Client sends request to get order book. |
101.2 | 11:01:20.400 | Response | {"e":"get_order_book", "oid": "1523433_101_get_order_book", "data": {"error": "API rate limit reached"}} | CEX.IO Spot Trading responds with error: API rate limit reached. |
102.1 | 11:01:20.403 | Response | {"e”:”disconnected”} | CEX.IO Spot Trading notifies Client before disconnecting WS by sending him a disconnected event. |
Order Book
This method allows Client to receive current order book snapshot for specific trading pair.
REQUEST
get_order_book
API Rate Limit Cost: 1
Order Book Request Parameters
Get Order Book request for one trading pair.
Request (Client sends request to receive order book snapshot for BTC-USD trading pair)
{
"e": "get_order_book",
"oid": "152171113_get_order_book",
"data": {
"pair": "BTC-USD"
}
}
Response (CEX.IO Spot Trading successfully responds to the request with current order book snapshot for BTC-USD trading pair)
{
"e": "get_order_book",
"oid": "152171113_get_order_book",
"ok": "ok",
"data": {
"timestamp": 1676037221433,
"currency1": "BTC",
"currency2": "USD",
"bids": [
[
"21770.5",
"0.00990261"
],
[
"21755.9",
"0.05648272"
],
[
"21752.2",
"25.91719331"
]
],
"asks": [
[
"21840.9",
"26.98043900"
],
[
"21841.0",
"8.51054857"
],
[
"21842.0",
"2.49919136"
],
]
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_order_book" value is allowed here. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. |
pair | Yes | String | Trading pair, for which Client wants to request an Order Book snapshot. Trading pair should contain two currencies in uppercase divided by “-“ symbol. Pair should be listed in traditional direction. For example “BTC-USD”, but not “USD-BTC”. |
Order Book Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_order_book" value is allowed here. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains response details. |
timestamp | Yes | Number | Current client time - UTC timestamp in milliseconds. |
currency1 | Yes | String | The first currency in the requested trading pair. |
currency2 | Yes | String | The second currency in the requested trading pair. |
bids | Yes | Array | This array contains a list of bids of the order book. The first value of an array element indicates price level of the Order Book entry, the second value of an array element indicates amount of the Order Book entry. The value in this field can be an empty array in case of no bids are available in the Order Book. |
asks | Yes | Array | This array contains a list of asks of the Order Book. The first value of an array element indicates price level of the Order Book entry, the second value of an array element indicates amount of the Order Book entry. The value in this field can be an empty array in case of no asks are available in the Order Book. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Order Book Subscribe
Client by subscribing via WebSocket can subscribe to order book feed upon requested trading pair.
In response to Order Book Subscribe request Client will receive current (initial) order book snapshot for requested pair with indicated seqId number.
To track following updates to Order Book Client needs to subscribe via WebSocket to “order_book_increment“ messages, which would contain trading pair name, seqId number, Bids and Asks price levels deltas.
REQUEST
order_book_subscribe
API Rate Limit Cost: 1
Order Book Subscribe Request Parameters
Order Book Subscribe request
Request (Client sends BTC-USD order book subscription request)
{
"e": "order_book_subscribe",
"oid": "16147857398591_order_book_subscribe",
"data": {
"pair": "BTC-USD",
},
}
Response (CEX.IO Spot Trading successfully responds to the request)
{
"e": "order_book_subscribe",
"oid": "16147857398591_order_book_subscribe",
"ok": "ok",
"data": [
{
"seqId": 1680908,
"pair": "BTC-USD",
"bids": [
[
"21770.5",
"0.00990261"
],
[
"21755.9",
"0.05648272"
],
[
"21752.2",
"25.91719331"
]
],
"asks": [
[
"21840.9",
"26.98043900"
],
[
"21841.0",
"8.51054857"
],
[
"21842.0",
"2.49919136"
],
]
}
]
}
Order Book Increment (CEX.IO Spot Trading sends BTC-USD order book increment)
{
"e": "order_book_increment",
"ok": "ok",
"data":
{
"seqId": 1680909,
"pair": "BTC-USD",
"bids": [
[
"21770.5",
"0.00000000"
],
[
"21755.9",
"0.00000272"
],
[
"21753.4",
"1.12345678"
]
],
"asks": [
[
"21840.9",
"2.89000000"
],
[
"21841.0",
"0.00000000"
],
[
"21842.0",
"7.54419136"
],
[
"21841.4",
"0.01000000"
],
[
"21839.5",
"0.55000000"
],
]
},
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "order_book_subscribe" value is allowed here. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. |
pair | Yes | String | Trading pair, for which Client wants to subscribe for receiving Order Book snapshot and updates. Trading pair should contain two currencies in uppercase divided by “-“ symbol. Pair should be listed in traditional direction. For example “BTC-USD”, but not “USD-BTC”. |
Order Book Subscribe Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "order_book_subscribe" value is allowed here. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains response details. |
seqId | Yes | Number | Unique ID of the Order Book snapshot message. The value returned in this field is an initial seqId for order book feed. Further Order Book Increment seqId value should be incremented from value returned in this field. |
pair | Yes | String | Trading pair, for which Order Book snapshot is returned. |
bids | Yes | Array | This array contains a list of bids of the order book snapshot. The first value of an array element indicates price level of the Order Book entry, the second value of an array element indicates amount of the Order Book entry. The value in this field can be an empty array in case of no bids are available in the Order Book snapshot. |
asks | Yes | Array | This array contains a list of asks of the order book snapshot. The first value of an array element indicates price level of the Order Book entry, the second value of an array element indicates amount of the Order Book entry. The value in this field can be an empty array in case of no asks are available in the Order Book snapshot. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Order Book Increment Messages
In case of successful subscription server will send order_book_subscribe response, which contains full order book at that moment.
Following messages are “order_book_increment“ messages, which should be applied to the initial Order Book snapshot incrementally on the Client’s side to keep Order Book snapshot up to date. Each Order Book Increment item should be applied to existing snapshot at specific price level.
All Order Book messages have parameter seqId. Received snapshot of trading pair order book contains seqId number which should be considered by Client as initial seqId number for order book feed. SeqId increments on each further order_book_increment message.
If a Client subscribes to multiple order books for different trade pairs, Сlient should track the pair name and seqId number in each new Order Book Increment message received in order to correctly add increments to the corresponding Order Book Snapshot for that trade pair.
If one or a few Order Book update messages were not received by the Client, it is required to re-subscribe to Order Book for receiving a new actual snapshot in order to keep Order book up to date.
If Client receives message with seqId number which is lower than previous seqIds received in the subscribed feed - Client is required to re-subscribe to Order Book for receiving a new actual snapshot in order to keep Order book up to date. Such situation happens when CEX.IO Spot Trading’s internal system is restarted and Order Book subscription is automatically re-subscribed for the Client.
Order Book Increment Message Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "order_book_increment" value is allowed here. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains message details. |
seqId | Yes | Number | Unique ID of the Order Book update message. First Order Book increment should contain the value in this field equal to Order Book snapshot seqId incremented by 1. The value of this field in further Order Book increment messages should equal to previous Order Book increment seqId incremented by 1. |
pair | Yes | String | Trading pair, for which Order Book update is returned. |
bids | Yes | Array | This array contains a list of bids deltas - price levels of the Order Book entries. The first value of an array element indicates price level of the Order Book entry, the second value of an array element indicates updated amount of the Order Book entry. The value in this field can be an empty array in case Order Book bids were not changed since previous Order Book update message. |
asks | Yes | Array | This array contains a list of asks deltas - price levels of the Order Book entries. The first value of an array element indicates price level of the Order Book entry, the second value of an array element indicates updated amount of the Order Book entry. The value in this field can be an empty array in case Order Book asks were not changed since previous Order Book update message. |
Order Book Unsubscribe
It's highly recommended to unsubscribe from order book when it is no longer needed.
REQUEST
order_book_unsubscribe
API Rate Limit Cost: 1
Order Book Unsubscribe Request Parameters
Order Book Unsubscribe request
Request (Client sends BTC-USD order book unsubscribe request)
{
"e": "order_book_unsubscribe",
"oid": "16147857488591_order_book_unsubscribe",
"data": {
"pair": "BTC-USD",
},
}
Response (CEX.IO Spot Trading successfully responds to the request)
{
"e": "order_book_unsubscribe",
"oid": "16147857488591_order_book_unsubscribe",
"ok": "ok",
"data": {
"pair": "BTC-USD"
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "order_book_unsubscribe" value is allowed here. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. |
pair | Yes | String | Trading pair, for which Client wants to unsubscribe from receiving Order Book updates. Trading pair should contain two currencies in uppercase divided by “-“ symbol. Pair should be listed in traditional direction. For example “BTC-USD”, but not “USD-BTC”. |
Order Book Unsubscribe Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "order_book_unsubscribe" value is allowed here. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains response details. |
pair | Yes | String | Indicates trading pair, for which Client would be unsubscribed from receiving further Order Book updates. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Candles
By using Candles method Client can receive historical OHLCV candles of different resolutions and data types.
Client can indicate additional timeframe and limit filters to make response more precise to Client’s requirements.
REQUEST
get_candles
API Rate Limit Cost: 1
Candles Request Parameters
Get Candles request
Request (Client sends request to receive 1 bestAsk open candles for BTC-USD traiding pair as of current time)
{
"e":"get_candles",
"oid":"16760394893891_get_candles",
"ok": "ok",
"data": {
"pair": "BTC-USD",
"fromISO": 1675953089378,
"limit": 1,
"dataType": "bestAsk",
"resolution": "1h"
},
}
Response (CEX.IO Spot Trading successfully responds to the request, 1 closed 1h candle)
{
"e":"get_candles",
"oid":"16760394893891_get_candles",
"ok": "ok",
"data":[
{
"timestamp": 1675951200000,
"open": 22945.3,
"high": 23163.4,
"low": 22913,
"close": 22920.1,
"volume": 779,
"resolution": "1h",
"isClosed": true,
"timestampISO": "2023-02-09T14:00:00.000Z"
}
]
}
Request (Client sends request to receive 1 bestBid open candles for 3 pairs as of current time)
{
"e":"get_candles",
"oid":"1676041279412_get_candles",
"data": {
"pairsList": ["BTC-USD","ETH-USD","XXX-YYY"],
"toISO": 1676041279412,
"limit": 1,
"dataType": "bestBid",
"resolution": "1h"
},
}
Response (CEX.IO Spot Trading successfully responds to the request, pairs with 1 open candle for each + unsupported pair message)
{
"e":"get_candles",
"oid":"1676041279412_get_candles",
"ok": "ok",
"data": {
[
"BTC-USD":[
{ "timestamp": 1676041200000,
"high": 21791.3,
"low": 21772.4,
"close": 21782.6,
"open": 21791.3,
"volume": 36,
"resolution": "1h",
"timestampISO": "2023-02-10T15:00:00.000Z"
}
],
"ETH-USD":[
{ "timestamp": 1676041200000,
"high": 1545.21,
"low": 1543.65,
"close": 1544.95,
"open": 1545.21,
"volume": 34,
"resolution": "1h",
"timestampISO": "2023-02-10T15:00:00.000Z"
}
],
"XXX-YYY":
{ "error":
{
"code": 400,
"reason": "Unsupported pair XXX-YYY"
}
}
]
}
}
Request (Client sends request to receive last 1 hour bestAsk candle for LUNC-BUSD pair)
{
"e":"get_candles",
"oid":"16760424783851_get_candles",
"data":
{
"pair":"LUNC-BUSD",
"toISO":1676042478383,
"limit":1,
"dataType":"bestAsk",
"resolution":"1h"
},
}
Response (CEX.IO Spot Trading responds with empty candle, which means no candle is available upon requested parameters)
{
"e":"get_candles",
"oid":"16760424783851_get_candles",
"ok": "ok",
"data":[
{
"timestamp": 1676041200000,
"resolution": "1h",
"timestampISO": "2023-02-10T15:00:00.000Z"
}
]
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_candles" value is allowed here. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. |
pair | No | String | Trading pair, for which Client wants to receive historical OHLCV candles. Trading pair should contain two currencies in uppercase divided by “-“ symbol. Pair should be listed in traditional direction. For example “BTC-USD”, but not “USD-BTC”. If this field is present and contains valid value, then it means Client wants to receive OHLCV candles for one specific trading pair. If "pair" field is present, then "pairsList" field should be absent. Either "pair" or "pairsList" should be indicated in the request anyway. |
pairsList | No | Array or String | Array with trading pairs, for which Client wants to receive last historical OHLCV candles. At least 1 trading pair should be indicated in this field. If this field is present and contains valid values, then it means Client wants to receive last OHLCV candle for each indicated trading pair in the list. If "pairsList" field is present, then "pair" field should be absent. Either "pairsList" or "pair" should be indicated in the request anyway. |
fromISO | No | Number (UTC timestamp) | The starting moment of time of the requested period for which OHLCV candles should be returned - UTC timestamp in milliseconds. If this field is present and contains valid value, then it means Client wants to receive OHLCV candles, the first one of which includes indicated moment of time. Either "fromISO" or "toISO" should be indicated in the request anyway. |
toISO | No | Number (UTC timestamp) | The last moment of time of the requested period for which OHLCV candles should be returned - UTC timestamp in milliseconds. If this field is present and contains valid value, then it means Client wants to receive OHLCV candles, the last one of which includes indicated moment of time. Either "fromISO" or "toISO" should be indicated in the request anyway. |
limit | No | Number (Integer) | Maximum number of OHLCV candles to be returned in response. Indicated number should be greater than zero. This field is mandatory if at least one of “fromISO” or “toISO” fields is specified in request. This field should be absent if both “fromISO” and “toISO” are specified in request. If “pairsList” field is specified in the request, then the value of this field should equal 1 (only last candle for each requested trading pair will be returned in response). |
dataType | Yes | String | The type of data, on the basis of which returned OHLC prices in candles should be calculated. Allowed values: “bestAsk”, “bestBid”. |
resolution | Yes | String | Timeframe from which OHLCV candles data should be calculated. Allowed values: “1m”, “5m”, “15m”, “30m”, "1h", “2h”, “4h”, “1d”. |
Candles Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_candles" value is allowed here. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains response details. |
timestamp | Yes | Number | OHLCV candle timestamp - UTC timestamp in milliseconds. |
open | No | Number (Float) | Opening price of OHLCV candle in quote currency. |
high | No | Number (Float) | Highest price of OHLCV candle in quote currency, which was reached during candle timeframe. |
low | No | Number (Float) | Lowest price of OHLCV candle in quote currency, which was reached during candle timeframe. |
close | No | Number (Float) | Closing price of OHLCV candle in quote currency. |
volume | No | Number | Quantity of price changes within period. |
resolution | Yes | String | Timeframe from which OHLCV candles data should be calculated. Allowed values: “1m”, “5m”, “15m”, “30m”, "1h", “2h”, “4h”, “1d”. |
isClosed | No | Boolean (true) | Indicates whether the specific candle is currently closed. If the value of this field is true, then it means this candle has been already closed. If this field is absent, then it means this candle is still open. |
timestampISO | Yes | String | OHLCV candle date & time in ISO format (“YYYY-MM-DDTHH:mm:ss.SSSZ"). |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Trade History
This method allows Client to obtain historical data as to occurred trades upon requested trading pair.
Client can supplement Trade History request with additional filter parameters, such as timeframe period, tradeIds range, side etc. to receive trades which match request parameters.
REQUEST
get_trade_history
API Rate Limit Cost: 1
Trade History Request Parameters
Get Trade History Request
Request (Client sends request to receive trade history for BTC-USD trading pair)
{
"e":"get_trade_history",
"oid":"16760424783866_get_trade_history",
"data": {
"pair": "BTC-USD"
}
}
Response (CEX.IO Spot Trading successfully responds to the request)
{
"e":"get_trade_history",
"oid":"16760424783866_get_trade_history",
"ok": "ok",
"data": {
"pageSize": 1000,
"trades": [
{
"tradeId": "1675399566795-0",
"dateISO": "2023-02-03T04:46:06.795Z",
"side": "SELL",
"price": "21149.2",
"amount": "10.00000000"
},
{
"tradeId": "1675401193999-0",
"dateISO": "2023-02-03T05:13:13.999Z",
"side": "BUY",
"price": "25896.0",
"amount": "0.00000001"
},
{
"tradeId": "1675401207800-0",
"dateISO": "2023-02-03T05:13:27.800Z",
"side": "SELL",
"price": "21146.0",
"amount": "0.00000001"
},
]
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_trade_history" value is allowed here. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. |
pair | Yes | String | Trading pair, for which Client wants to receive trades history. Trading pair should contain two currencies in uppercase divided by “-“ symbol. Pair should be listed in traditional direction. For example “BTC-USD”, but not “USD-BTC”. |
side | No | String | Side of requested trades. If this field is present, it should contain only one of allowed values: “BUY” or “SELL”. If this field is not indicated in the request, then response would contain trades for "BUY" and "SELL" sides. |
fromDateISO | No | String | The starting moment of time of the requested period in ISO format (YYYY-MM-DDTHH:mm:ss.SSSZ) for which trades are requested. If “fromDateISO” and “pageSize” parameters are not specified in request, then by default last 1000 trades will be returned in response. If this field is present, then “fromTradeId” and “toTradeId” fields should not be indicated in the request. |
toDateISO | No | String | The last moment of time of the requested period in ISO format (YYYY-MM-DDTHH:mm:ss.SSSZ) for which trades are requested. If this field is present, then “fromDateISO” should also be present, “fromTradeId” and “toTradeId” fields should be absent. |
fromTradeId | No | String | Unique trade identifier (tradeId) in CEX.IO Spot Trading system, starting from which subsequent trades should be returned in response. If this field is present, then “fromDateISO” and “toDateISO” fields should not be indicated in the request. |
toTradeId | No | String | Unique trade identifier (tradeId) in CEX.IO Spot Trading system, which should be the last trade returned in response. If this field is present, then “fromTradeId” should also be present, “fromDateISO” and “toDateISO” fields should not be indicated in the request. |
pageSize | No | Number (Integer) | Maximum number of trades, which should be returned in response. If this field is present then the value should be more than zero and not more than 10000. If indicated value is more than 10000, the response will still contain only up to 10000 trades max. If this field is not specified in request, then by default 1000 trades would be returned in response. |
Trade History Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_trade_history" value is allowed here. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains response details. |
pageSize | Yes | Number (Integer) | Maximum number of trades, which can be returned in response. |
trades | Yes | Array | An array containing data as to each trade event which satisfies requested criteria. If request is successful, this field should be present in response. It might be an empty array ([]). If this array is empty, then it means there are no trades, which satisfy Client’s request criteria. If there are trades, which satisfy requested criteria, then the elements in array are sorted by “dateISO” value in ascending order (from older to newer, considering “fromDateISO” / “toDateISO” or “fromTradeId” / “toTradeId” if indicated in request). If a few trade events occurred at the same moment of time, then such trade events are sorted additionally bt “tradeId” value from lowest to higher sequence number (e.g. first “1677696747571-0”, then “1677696747571-1” etc.) |
trades.X | No | Object | Represents an object which describes specific trade event details. |
trades.X.side | Yes | String | Side of trade event. |
trades.X.dateISO | Yes | String | Date & Time of trade event in ISO format. (YYYY-MM-DDTHH:mm:ss.SSSZ). |
trades.X.price | Yes | String (parseable as float) | Trade execution price. |
trades.X.amount | Yes | String (parseable as float) | Amount of trade. |
trades.X.tradeId | Yes | String | Unique trade identifier in CEX.IO Spot Trading system. The value in this field should consist of trade UTC timestamp in milliseconds and sequence number separated by ”-” symbol (e.g. “1677696747571-0”). If several trades occurred at the same moment of time, then they differ from each other by incremented sequence number, starting from 0 (e.g. “1677696747571-0”, “1677696747571-1”, “1677696747571-2” etc.). |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Trade Subscribe
By using the Trade Subscribe method Client can subscribe via WebSocket to live feed of trade events which occur on requested trading pair.
In response to Trade Subscribe request Client will receive a unique identifier of trade subscription which should further be used for unsubscription when trade subscription is not longer needed for Client.
Client should subscribe via WebSocket to “tradeHistorySnapshot” and “tradeUpdate” messages to receive initial and periodical Trade History snapshots, and live trade events for requested trading pair.
REQUEST
trade_subscribe
API Rate Limit Cost: 1
Trade Subscribe Request Parameters
Trade Subscribe request
Request (Client sends trade subscribe request)
{
"e": "trade_subscribe",
"oid": "72955210375_trade_subscribe",
"data": {
"pair": "BTC-USD"
}
}
Response (CEX.IO Spot Trading successfully responds to the request)
{
"e": "trade_subscribe",
"oid": "72955210375_trade_subscribe",
"ok": "ok",
"data":
{
"reqId":"1678176120060_1"
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "trade_subscribe" value is allowed here. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. |
pair | Yes | String | Trading pair, for which Client wants to subscribe for receiving trade event updates. Trading pair should contain two currencies in uppercase divided by “-“ symbol. Pair should be listed in traditional direction. For example “BTC-USD”, but not “USD-BTC”. |
Trade Subscribe Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "trade_subscribe" value is allowed here. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains response details. |
reqId | Yes | String | Identifier of WebSocket connection in which trade subscription feed is created. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Trade History Snapshot
Right after the User initiates a new Trade Subscription, they'll get a tradeHistorySnapshot containing last 200 trade events upon requested pair. Then, the server will start sending a stream (series) of tradeUpdate events.
However, tradeUpdate updates can be received before tradeHistorySnapshot. Additionally, some tradeUpdate messages received after tradeHistorySnapshot may partially repeat trades already received from the snapshot.
Also, TradeHistorySnapshot events in some cases can arrive during a session while regular tradeUpdate events are being received. To handle this case, the Client should store the tradeId of the last trade processed and ignore all trades with a tradeId that is equal to or less than the stored tradeId value, whether they come from a snapshot or update.
Trade History Snapshot message
{
"e": "tradeHistorySnapshot",
"ok": "ok",
"data": {
"pair": "BTC-USD",
"trades": [
{ "side": "BUY",
"dateISO": "2023-03-07T01:22:25.734Z",
"price": "22562.1",
"amount": "0.00975172",
"tradeId": "1678152145734-0",
}
{ "side": "BUY",
"dateISO": "2023-03-07T01:22:53.141Z",
"price": "22566.6",
"amount": "0.00975075",
"tradeId": "1678152173141-0",
}
{ "side": "BUY",
"dateISO": "2023-03-07T01:23:10.109Z",
"price": "22571.1",
"amount": "0.00974977",
"tradeId": "1678152190109-0",
}
{ "side": "BUY",
"dateISO": "2023-03-07T01:23:33.461Z",
"price": "22586.3",
"amount": "0.05557372",
"tradeId": "1678152213461-0",
}
]
}
}
Trade History Snapshot Message Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "tradeHistorySnapshot" value is allowed here. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains message details. |
pair | Yes | String | Trading pair, for which trades history snapshot is returned in response. |
trades | Yes | Array | An array containing data as to last 200 trade events which satisfies requested criteria. It might be an empty array ([]). If this array is empty, then it means there are no trades, which satisfy Client’s request criteria. If there are trades, which satisfy requested criteria, then the elements in array are sorted in ascending order. If a few trade events occurred at the same moment of time, then such trade events are sorted additionally bt “tradeId” value from lowest to higher sequence number (e.g. first “1677696747571-0”, then “1677696747571-1” etc.) |
trades.X | No | Object | Represents an object which describes specific trade event details. |
trades.X.side | Yes | String | Side of trade event. |
trades.X.dateISO | Yes | String | Date & Time of trade event in ISO format. (YYYY-MM-DDTHH:mm:ss.SSSZ). |
trades.X.price | Yes | String (parseable as float) | Trade execution price. |
trades.X.amount | Yes | String (parseable as float) | Amount of trade. |
trades.X.tradeId | Yes | String | Unique trade identifier in CEX.IO Spot Trading system. The value in this field should consist of trade UTC timestamp in milliseconds and sequence number separated by ”-” symbol (e.g. “1677696747571-0”). If several trades occurred at the same moment of time, then they differ from each other by incremented sequence number, starting from 0 (e.g. “1677696747571-0”, “1677696747571-1”, “1677696747571-2” etc.). |
Trade Update Message Parameters
Trade Update message
{
"e":"tradeUpdate",
"ok": "ok",
"data": {
"pair": "BTC-USD",
"side": "BUY",
"dateISO": "2023-03-07T08:04:16.117Z",
"price": "22615.3",
"amount": "0.01000000",
"tradeId": "1678176256117-0"
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "tradeUpdate" value is allowed here. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains message details. |
pair | Yes | String | The trading pair on which the trade event occurred. |
side | Yes | String | Side of trade event. |
dateISO | Yes | String | Date & Time of trade event in ISO format. (YYYY-MM-DDTHH:mm:ss.SSSZ). |
price | Yes | String (parseable as float) | Trade execution price. |
amount | Yes | String (parseable as float) | Amount of trade. |
tradeId | Yes | String | Unique trade identifier in CEX.IO Spot Trading system. The value in this field should consist of trade UTC timestamp in milliseconds and sequence number separated by ”-” symbol (e.g. “1677696747571-0”, “1677696747988-2”, etc.). |
Trade Unsubscribe
It's highly recommended to unsubscribe from existing trade subscription when it is not longer needed for Client.
REQUEST
trade_unsubscribe
API Rate Limit Cost: 1
Trade Unsubscribe Request Parameters
Request
{
"e":"trade_unsubscribe",
"oid":"16781762553800_trade_unsubscribe",
"data": {
"pair":"BTC-USD"
},
}
Response (CEX.IO Spot Trading successfully responds to the request)
{
"e":"trade_unsubscribe",
"oid": "16781762553800_trade_unsubscribe",
"ok":"ok",
"data": {
"reqId":"1678176120060_1"
},
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "trade_unsubscribe" value is allowed here. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. |
data.pair | Yes | String | Trading pair, for which Client wants to unsubscribe from receiving trade event updates. Trading pair should contain two currencies in uppercase divided by “-“ symbol. Pair should be listed in traditional direction. For example “BTC-USD”, but not “USD-BTC”. |
Trades Unsubscribe Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "trade_unsubscribe" value is allowed here. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains response details. |
reqId | Yes | String | Identifier of WebSocket connection in which trade subscription feed is removed. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Ticker
This method is designed to obtain current information about Ticker, including data about current prices, 24h price & volume changes, last trade event etc. of certain assets.
REQUEST
get_ticker
API Rate Limit Cost: 1
Ticker Request Parameters
Get Ticker request
Request (Client sends request to receive ticker for one pair)
{
"e": "get_ticker",
"oid": "10181762572482_get_ticker",
"data": {
"pairs": ["BTC-USD"]
}
}
Response (CEX.IO Spot Trading successfully responds to the request)
{
"e": "get_ticker",
"oid": "10181762572482_get_ticker",
"ok": "ok",
"data": {
"BTC-USD":
{ "bestBid": "23771.3",
"bestAsk": "23895.2",
"bestBidChange": "-398.5",
"bestBidChangePercentage": "-1.64",
"bestAskChange": "-362.4",
"bestAskChangePercentage": "-1.49",
"volume30d": "1311.83096457",
"low": "22920.1",
"high": "25379.4",
"volume": "21.14500755",
"quoteVolume": "509738.03240736",
"lastTradeVolume": "0.00493647",
"last": "23771.3",
"lastTradePrice": "23895.2",
"priceChange": "-481.7",
"priceChangePercentage": "-1.98",
"lastTradeDateISO": "2023-02-23T12:26:13.486Z",
"volumeUSD": "286794.97"
}
}
}
Get Ticker request
Request (Client sends request to receive ticker for multiple pairs)
{
"e": "get_ticker",
"oid": "16781762556482_get_ticker",
"data": {
"pairs": ["ADA-USD", "BTC-USD", "ETH-USD", "SHIB-USD"]
}
}
Response (CEX.IO Spot Trading successfully responds to the request)
{
"e": "get_ticker",
"oid": "16781762556482_get_ticker",
"ok": "ok",
"data":
{ "ADA-USD":
{ "bestBid": "0.387159",
"bestAsk": "0.387938",
"bestBidChange": "0.001354",
"bestBidChangePercentage": "0.35",
"bestAskChange": "-0.000370",
"bestAskChangePercentage": "-0.09",
"volume30d": "6530615.77263454",
"low": "0.379304",
"high": "0.395922",
"volume": "33554.76625400",
"quoteVolume": "12971.29778584",
"lastTradeVolume": "30.53522000",
"last": "0.388926",
"lastTradePrice": "0.387938",
"priceChange": "0.001489",
"priceChangePercentage": "0.38",
"lastTradeDateISO": "2023-02-23T12:23:40.391Z",
"volumeUSD": "45000.43"
},
"BTC-USD":
{ "bestBid": "23771.3",
"bestAsk": "23895.2",
"bestBidChange": "-398.5",
"bestBidChangePercentage": "-1.64",
"bestAskChange": "-362.4",
"bestAskChangePercentage": "-1.49",
"volume30d": "1311.83096457",
"low": "22920.1",
"high": "25379.4",
"volume": "21.14500755",
"quoteVolume": "509738.03240736",
"lastTradeVolume": "0.00493647",
"last": "23771.3",
"lastTradePrice": "23895.2",
"priceChange": "-481.7",
"priceChangePercentage": "-1.98",
"lastTradeDateISO": "2023-02-23T12:26:13.486Z",
"volumeUSD": "286794.97"
},
"ETH-USD":
{ "bestBid": "1640.41",
"bestAsk": "1648.25",
"bestBidChange": "-6.58",
"bestBidChangePercentage": "-0.39",
"bestAskChange": "-5.41",
"bestAskChangePercentage": "-0.32",
"volume30d": "10500.56442743",
"low": "1599.44",
"high": "1680.62",
"volume": "267.63458000",
"quoteVolume": "439523.29960757",
"lastTradeVolume": "0.17435800",
"last": "1648.97",
"lastTradePrice": "1648.25",
"priceChange": "2.08",
"priceChangePercentage": "0.12",
"lastTradeDateISO": "2023-02-23T12:25:11.251Z",
"volumeUSD": "148920.84"
},
"SHIB-USD":
{ "bestBid": "0.00001276",
"bestAsk": "0.00001354",
"bestBidChange": "0.00000045",
"bestBidChangePercentage": "3.65",
"bestAskChange": "0.00000032",
"bestAskChangePercentage": "2.42",
"volume30d": "34227200927",
"low": "0.00001231",
"high": "0.00001369",
"volume": "331030734",
"quoteVolume": "4371.24465887",
"lastTradeVolume": "20245767",
"last": "0.00001295",
"lastTradePrice": "0.00001354",
"priceChange": "-0.00000027",
"priceChangePercentage": "-2.04",
"lastTradeDateISO": "2023-02-23T12:05:47.380Z",
"volumeUSD": "3782974.41"
}
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_ticker" value is allowed here. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. |
pairs | No | Array of Strings | List of supported trading pairs for which Client wants to receive ticker data. Trading pair should contain two currencies in uppercase divided by “-“ symbol. Pair should be listed in traditional direction. For example “BTC-USD”, but not “USD-BTC”. If this field is present in the request, then at least 1 pair should be indicated in an array. If this field is absent, then it means Client requests ticker data for all supported pairs. |
Ticker Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_ticker" value is allowed here. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains response details. |
XXX-YYY | No | Object | Represents an object which describes XXX-YYY trading pair ticker |
XXX-YYY.bestBid | No | String (parseable as float) | Current highest buy order price (bestBid) in Order Book. |
XXX-YYY.bestAsk | No | String (parseable as float) | Current lowest sell order price (bestAsk) in Order Book. |
XXX-YYY.bestBidChange | No | String (parseable as float) | Last 24h bestBid price change in quote currency. |
XXX-YYY.bestBidChangePercentage | No | String (parseable as float) | Last 24h bestBid price change in percentage. |
XXX-YYY.bestAskChange | No | String (parseable as float) | Last 24h bestAsk price change in quote currency. |
XXX-YYY.bestAskChangePercentage | No | String (parseable as float) | Last 24h bestAsk price change in percentage. |
XXX-YYY.volume30d | Yes | String (parseable as float) | Last 30d trading volume in base currency. |
XXX-YYY.low | No | String (parseable as float) | Last 24h lowest trade price. |
XXX-YYY.high | No | String (parseable as float) | Last 24h highest trade price. |
XXX-YYY.volume | Yes | String (parseable as float) | Last 24h volume in base currency. |
XXX-YYY.quoteVolume | Yes | String (parseable as float) | Last 24h volume in quote currency. |
XXX-YYY.lastTradeVolume | No | String (which can be parsed as Float) | Last trade volume in base currency. |
XXX-YYY.last | No | String (which can be parsed as Float) | Last indicative price. |
XXX-YYY.lastTradePrice | No | String (parseable as float) | Last trade price in CEX.IO Ecosystem. |
XXX-YYY.priceChange | No | String (which can be parsed as Float) | Last 24h price change in quote currency. |
XXX-YYY.priceChangePercentage | No | String (which can be parsed as Float) | Last 24h price change in percentage. |
XXX-YYY.lastTradeDateISO | No | String | Date & Time of last trade in ISO format. (YYYY-MM-DDTHH:mm:ss.SSSZ). |
XXX-YYY.volumeUSD | Yes | String (parseable as float) | Last 24h volume equivalent in USD currency. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Server Time
This method is used to get the current time on CEX.IO Spot Trading server. It can be useful for applications that have to be synchronized with the server's time.
REQUEST
get_server_time
API Rate Limit Cost: 1
Server Time Request Parameters
Get Server Time request
Request (Client sends a request to get server time)
{
"e":"get_server_time",
"oid":"16760424783867_get_server_time",
"data": {}
}
Response (CEX.IO Spot Trading successfully responds to the request)
{
"e":"get_server_time",
"oid":"16760424783867_get_server_time",
"ok": "ok",
"data": {
"timestamp": 1231239102398, // time in milliseconds
"ISODate": "2022-09-09T09:09:55.999Z"
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_server_time" value is allowed here. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. |
Server Time Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_server_time" value is allowed here. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains response details. |
timestamp | Yes | String | CEX.IO Spot Trading server current time - UTC timestamp in milliseconds. |
ISODate | Yes | String | CEX.IO Spot Trading server current date and time in UTC in ISO format (YYYY-MM-DDTHH:mm:ss.SSSZ). |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Pairs info
Pair Info method allows Client to receive the parameters for all supported trading pairs.
REQUEST
get_pairs_info
API Rate Limit Cost: 1
Pairs info Request Parameters
Get Pairs Info request
Request (Client sends get pairs info request without any parameters)
{
"e":"get_pairs_info",
"oid":"16760424783886_get_pairs_info",
"data": {}
}
Response (CEX.IO Spot Trading responds to the request with all available pairs for Client)
{
"e":"get_pairs_info",
"oid":"16760424783886_get_pairs_info",
"ok":"ok",
"data": [
{
"base":"BTC",
"quote":"USD",
"baseMin":"0.0001",
"baseMax":"47",
"baseLotSize":"0.00000001",
"quoteMin":"10",
"quoteMax":"1000000",
"quoteLotSize":"0.01000000",
"basePrecision":8,
"quotePrecision":8,
"pricePrecision":1,
"minPrice":"14500.2",
"maxPrice":"24500.2"
},
{
"base": "BTTC",
"quote": "USD",
"baseMin": "3888888",
"baseMax": "1562",
"baseLotSize": "1",
"quoteMin": "10",
"quoteMax": "1000000",
"quoteLotSize": "0.01000000",
"basePrecision": 0,
"quotePrecision": 8,
"pricePrecision": 8,
"minPrice": "21.00000000",
"maxPrice": "0.00000710"
}
{
"base": "ETH",
"quote": "BTC",
"baseMin": "0.012",
"baseMax": "846",
"baseLotSize": "0.00000100",
"quoteMin": "0.002",
"quoteMax": "60",
"quoteLotSize": "0.00000001",
"basePrecision": 8,
"quotePrecision": 8,
"pricePrecision": 6,
"minPrice": "0.007437",
"maxPrice": "0.743700"
}
]
}
Get Info request (for specific pairs)
Request (Client sends get pairs info request for BTC-USD and ADA-USD traiding pairs)
{
"e":"get_pairs_info",
"oid":"16760424787386_get_pairs_info",
"data":{
"pairs": ["BTC-USD", "ADA-USD"]
}
}
Response (CEX.IO Spot Trading responds to the request with information about indicated trading pairs)
{
"e":"get_pairs_info",
"oid":"16760424787386_get_pairs_info",
"ok":"ok",
"data": [
{
"base": "BTC",
"quote": "USD",
"baseMin": "0.0004",
"baseMax": "60",
"baseLotSize": "0.00000001",
"quoteMin": "10",
"quoteMax": "1000000",
"quoteLotSize": "0.01000000",
"basePrecision": 8,
"quotePrecision": 8,
"pricePrecision": 1,
"minPrice": "1700.0",
"maxPrice": "211250.0"
},
{
"base": "ADA",
"quote": "USD",
"baseMin": "50",
"baseMax": "3786000",
"baseLotSize": "0.00000100",
"quoteMin": "10",
"quoteMax": "1000000",
"quoteLotSize": "0.01000000",
"basePrecision": 8,
"quotePrecision": 8,
"pricePrecision": 6,
"minPrice": "0.033583",
"maxPrice": "3.358320"
}
]
}
Get Pairs Info request (indicated unsupported traiding pair)
Request (Client sends get pairs info request for unsupported traiding pair)
{
"e":"get_pairs_info",
"oid":"16766239787386_get_pairs_info",
"data":{
"pairs": ["XXX-YYY"]
}
}
Response (CEX.IO Spot Trading responds to the request with empty array as requested pair is not supported for Client)
{
"e":"get_pairs_info",
"oid":"16766239787386_get_pairs_info",
"ok": "ok",
"data":[]
}
Get Pairs Info request (indicated unsupported traiding pair)
Request (Client sends get pairs info request with indicated pairs parameter but without any specific pairs)
{
"e":"get_pairs_info",
"oid":"15283239787386_get_pairs_info",
"data":{
"pairs": []
}
}
Response (CEX.IO Spot Trading responds to the request with error message)
{
"e":"get_pairs_info",
"oid":"15283239787386_get_pairs_info",
"ok": "ok",
"data": {
"error": "Parameter pairs should be Array of Strings",
"statusCode": 422
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_pairs_info" value is allowed here. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. |
pairs | No | Array of Strings | List of supported trading pairs for which Client wants to receive configuration parameters. Trading pair should contain two currencies in uppercase divided by “-“ symbol. Pair should be listed in traditional direction. For example “BTC-USD”, but not “USD-BTC”. If this field is present in the request, then at least 1 pair should be indicated in an array. If this field is absent, then it means Client requests configuration parameters for all supported pairs. |
Pairs Info Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_pairs_info" value is allowed here. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains response details. |
X | No | Object | Represents an object which describes specific trading pair configuration parameters in CEX.IO Spot Trading system. If there are no objects in returned array, then it means there are no supported trading pairs, which satisfy Client’s request criteria. |
X.base | Yes | String | Name of the first (base) currency in trading pair. |
X.quote | Yes | String | Name of the first (base) currency in trading pair. |
X.baseMin | Yes | String (parseable as float) | Minimum order amount in base currency. |
X.baseMax | Yes | String (parseable as float) | Maximum order amount in base currency. |
X.baseLotSize | Yes | String (parseable as float) | Order lot size in base currency. Such limitation allows only order amounts that are a multiple of baseLotSize. For example, if trading pair baseLotSize is 0.5, then order amounts 1.5, 4, 10.5 will be accepted, while amounts 0.3, 1.2, 10.9 will be rejected by the system. |
X.quoteMin | Yes | String (parseable as float) | Minimum order amount in quote currency. |
X.quoteMax | Yes | String (parseable as float) | Minimum order amount in quote currency. |
X.quoteLotSize | Yes | String (parseable as float) | Order lot size in quote currency. Such limitation allows only order amounts that are a multiple of quote lot size. For example, if trading pair quoteLotSize is 0.01, then order amounts 0.5, 4, 10.59 will be accepted, while amounts 0.313, 1.2987, 1000.989 will be rejected by the system. |
X.basePrecision | Yes | Number | Number of decimal places for the base currency executed amounts, used inside CEX.IO Spot Trading system. |
X.quotePrecision | Yes | Number | Number of decimal places for the quote currency executed amounts, used inside CEX.IO Spot Trading system. |
pricePrecision | Yes | Number | Number of allowed decimal places for the trading pair price. Such limitation allows only order prices, the number of decimal places in which doesn’t exceed pricePrecision value. For example, if trading pair pricePrecision is 3, then order limit prices 0.3, 1.94, 10, 10348.591 will be accepted, while prices 0.3136, 1.2987, 1000.98981234 will be rejected by the system. |
X.minPrice | Yes | String (parseable as float) | Minimum allowed trading pair price. Orders with indication of prices, which are lower than specified value will be rejected by the system. |
X.maxPrice | Yes | String (parseable as float) | Maximum allowed trading pair price. Orders with indication of prices, which are higher than specified value will be rejected by the system. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Currencies Info
Currencies Info method allows Client to receive the parameters for all currencies configured in CEX.IO Spot Trading as well as the deposit and withdrawal availability between CEX.IO Spot Trading and CEX.IO Wallet.
REQUEST
get_currencies_info
API Rate Limit Cost: 1
Currencies Info Request Parameters
Currencies Info request (No parameters indicated)
Request (Client sends the request without any parameters)
{
"e":"get_currencies_info",
"oid":"16760424783869_get_currencies_info",
"data": {}
}
Response (CEX.IO Spot Trading successfully responds to the request with information about all currencies configured in CEX.IO Spot Trading system)
{
"e":"get_currencies_info",
"oid":"16760424783869_get_currencies_info",
"ok": "ok",
"data": [
{
"currency": "USDT",
"walletDeposit": true,
"walletWithdrawal": true,
"fiat": false,
"precision": 8,
"walletPrecision": 6
},
{
"currency": "BTC",
"walletDeposit": true,
"walletWithdrawal": true,
"fiat": false,
"precision": 8,
"walletPrecision": 8
},
{
"currency": "SHIB",
"walletDeposit": true,
"walletWithdrawal": true,
"fiat": false,
"precision": 0,
"walletPrecision": 0
},
{
"currency": "LUNC",
"walletDeposit": false,
"walletWithdrawal": false,
"fiat": false,
"precision": 2,
"walletPrecision": null
},
{
"currency": "USD",
"walletDeposit": true,
"walletWithdrawal": true,
"fiat": true,
"precision": 8,
"walletPrecision": 2
}
]
}
Currencies Info request (Indicated 2 specific currencies)
Request (Client sends get currencies info request for 2 currencies)
{
"e":"get_currencies_info",
"oid":"16760436274869_get_currencies_info",
"data": {
"currencies": ["ETH", "USD"]
}
}
Response (CEX.IO Spot Trading responds to the request with information for indicated currencies)
{
"e": "get_currencies_info",
"oid": "16760436274869_get_currencies_info",
"ok": "ok",
"data": [
{
"currency": "ETH",
"walletDeposit": true,
"walletWithdrawal": true,
"fiat": false,
"precision": 8,
"walletPrecision": 6
},
{
"currency": "USD",
"walletDeposit": true,
"walletWithdrawal": true,
"fiat": true,
"precision": 8,
"walletPrecision": 2
}
]
}
Currencies Info request (Indicated unsupproted currency)
Request (Client sends get currencies info request with indicated unsupported currency)
{
"e": "get_currencies_info",
"oid": "16760492853069_get_currencies_info",
"data": {
"currencies": ["CCC"]
}
}
Response (CEX.IO Spot Trading responds to the request with empty array as requested currency is not supported)
{
"e": "get_currencies_info",
"oid": "16760492853069_get_currencies_info",
"ok": "ok",
"data": []
}
Get Currencies Info request (No currencies indicated)
Request (Client sends get currencies info request with indicated currencies parameter but without any specific currencies)
{
"e": "get_currencies_info",
"oid": "16890492853072_get_currencies_info",
"data": {
"currencies": []
}
}
Response (CEX.IO Spot Trading responds to the request with error message)
{
"e": "get_currencies_info",
"oid": "16890492853072_get_currencies_info",
"ok": "ok",
"data": {
"error": "Parameter currencies should be Array of Strings"
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_currencies_info" value is allowed here. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. |
currencies | No | Array of Strings | List of supported currencies for which Client wants to receive configuration parameters. Currencies should be indicated in upper case and of string type. The list should contain only valid currency symbols. If this field is present in the request, then at least 1 currency should be indicated in an array. If this field is absent, then it means Client requests configuration parameters for all supported currencies. |
Currencies Info Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_currencies_info" value is allowed here. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains response details. |
X | No | Object | Represents an object which describes specific currency configuration parameters in CEX.IO Spot Trading system. If there are no objects in returned array, then it means there are no supported currencies, which satisfy Client’s request criteria. |
X.currency | Yes | String | Currency name. |
X.walletDeposit | Yes | Boolean | Describes current availability to deposit currency X to CEX.IO Spot Trading from CEX.IO Wallet. Only true or false values are allowed herein. |
X.walletWithdrawal | Yes | Boolean | Describes current availability to withdraw currency X from CEX.IO Spot Trading to CEX.IO Wallet. Only true or false values are allowed herein. |
X.fiat | Yes | Boolean | Indicates if the currency is a fiat currency or cryptocurrency. If the value is true, then indicated currency is fiat. If the value is false, then indicated currency is cryptocurrency. |
X.precision | Yes | Number | Number of decimal places in amounts of specific currency used inside CEX.IO Spot Trading system (e.g. for internal transfers, executed amounts in orders etc.). |
X.walletPrecision | Yes | Number or null | If the value of this parameter is a number, then it describes the number of decimal places in amounts of specific currency used for transfers to or out of CEX.IO Spot Trading system (e.g. for deposits\withdrawals from\to CEX.IO Wallet or external addresses). If the value is null, then deposits and withdrawals of specific currency from\to CEX.IO Wallet are not available. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Processing Info
This request allows Client to receive detailed information about available options to make deposits from external wallets and withdrawals to external wallets as to each supported cryptocurrency, including cryptocurrency name and available blockchains for deposit\withdrawals. Also, as to each supported blockchain there are indicated type of cryptocurrency on indicated blockchain, current deposit\withdrawal availability, minimum amounts for deposits\withdrawals, external withdrawal fees.
Processing Information makes Client more flexible in choosing desired blockchain for receiving Deposit address and initiating external withdrawals via certain blockchain, so that Client uses more convenient way of transferring his crypto assets to or from CEX.IO Ecosystem.
HTTP REQUEST
get_processing_info
API Rate Limit Cost: 10
Processing Info Request Parameters
Get Processing Info Request for one specific cryptocurrency
Request (Client queries processing info for "BTC")
{
"e": "get_processing_info",
"oid": "1521724219900_1_get_processing_info",
"data": {
"currencies": ["BTC"]
}
}
Response (CEX.IO Spot Trading responds that only 'bitcoin' blockchain is supported for deposits\withdrawals of "BTC")
{
"e": "get_processing_info",
"oid": "1521724219900_1_get_processing_info",
"ok": "ok",
"data": {
"BTC": {
"name": "Bitcoin",
"blockchains": {
"bitcoin": {
"type": "coin",
"deposit": "enabled",
"minDeposit": "0.0001",
"withdrawal": "enabled",
"minWithdrawal": "0.002",
"withdrawalFee": "0.0005",
"depositConfirmations": 2
}
}
}
}
}
Get Processing Info Request for several cryptocurrencies
Request (Client queries processing info for "BTC" and "USDC")
{
"e": "get_processing_info",
"oid": "1521724219900_2_get_processing_info",
"data": {
"currencies": ["BTC","USDC"]
}
}
Response (CEX.IO Spot Trading responds that for deposits\withdrawals 'bitcoin' blockchain is supported for "BTC" and "ethereum", "stellar" and "tron" blockchains are supported for "USDC")
{
"e": "get_processing_info",
"oid": "1521724219900_2_get_processing_info",
"ok": "ok",
"data": {
"BTC": {
"name": "Bitcoin",
"blockchains": {
"bitcoin": {
"type": "coin",
"deposit": "enabled",
"minDeposit": "0.0001",
"withdrawal": "enabled",
"minWithdrawal": "0.002",
"withdrawalFee": "0.0005",
"depositConfirmations": 2
}
}
},
"USDC": {
"name": "USD Coin",
"blockchains": {
"ethereum": {
"type": "ERC20",
"deposit": "enabled",
"minDeposit": "5",
"withdrawal": "enabled",
"minWithdrawal": "50",
"withdrawalFee": "40",
"depositConfirmations": 25
},
"stellar": {
"type": "coin",
"deposit": "enabled",
"minDeposit": "5",
"withdrawal": "enabled",
"minWithdrawal": "50",
"withdrawalFee": "1",
"depositConfirmations": 1
},
"tron": {
"type": "TRC20",
"deposit": "enabled",
"minDeposit": "5",
"withdrawal": "enabled",
"minWithdrawal": "50",
"withdrawalFee": "1",
"depositConfirmations": 21
}
}
}
}
}
Get Processing Info - No available blockchains
Request (Client queries processing info for supported cryptocurrency "ZEC")
{
"e": "get_processing_info",
"oid": "1521724219900_4_get_processing_info",
"data": {
"currencies": ["ZEC"]
}
}
Response (CEX.IO Spot Trading responds that request was processed successfully but no blockchains are supported for "ZEC")
{
"e": "get_processing_info",
"oid": "1521724219900_4_get_processing_info",
"ok": "ok",
"data": {}
}
Get Processing Info - Invalid and fiat cryptocurrency
Request (Client queries processing info for "BTC", "ETH", "XXX" and "USD")
{
"e": "get_processing_info",
"oid": "1521724219900_5_get_processing_info",
"data": {
"currencies": ["BTC", "ETH", "XXX", "USD"]
}
}
Response (CEX.IO Spot Trading responds that error occurred because unsupported currencies "XXX" and "USD" are indicated in the request)
{
"e": "get_processing_info",
"oid": "1521724219900_5_get_processing_info",
"data": {
"error": "Request contains unsupported currencies: XXX, USD."
}
}
Get Processing Info - Invalid value type in "currencies" array
Request (Client queries processing info with invalid values type in "currencies" field)
{
"e": "get_processing_info",
"oid": "1521724219900_6_get_processing_info",
"data": {
"currencies": [1,2,3]
}
}
Response (CEX.IO Spot Trading responds that error occurred because wrong type of value was indicated in "currencies" array and only string values are allowed)
{
"e": "get_processing_info",
"oid": "1521724219900_6_get_processing_info",
"data": {
"error": "Currencies array should consist of string type values."
}
}
Get Processing Info - Not an array indicated in "currencies" field
Request (Client queries processing info with indicating empty object ({}) in "currencies" field)
{
"e": "get_processing_info",
"oid": "1521724219900_7_get_processing_info",
"data": {
"currencies": {}
}
}
Response (CEX.IO Spot Trading responds that error occurred because only array is allowed in "currencies" field)
{
"e": "get_processing_info",
"oid": "1521724219900_7_get_processing_info",
"data": {
"error": "Currencies should be array."
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_processing_info" value is allowed here. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. |
currencies | No | Array | List of cryptocurrencies for which Client wants to get information about supported blockchains for deposit\withdraw, limits and commissions. Cryptocurrencies should be in upper case and of string type. The list should contain only valid cryptocurrency symbols. If this field is missing or contains an empty array ([]), then it means Client wants to get processing info for all available cryptocurrencies. |
Processing Info Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_processing_info" value is allowed here. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains response details. |
data.YYY | Yes | String | Cryptocurrency symbol specified in Client's request. |
data.YYY.name | Yes | String | Cryptocurrency name. |
data.YYY.blockchains | Yes | Object | This object contains info about all supported blockchains to deposit\withdraw cryptocurrency YYY. |
data.YYY.blockchains.X | Yes | Object | This object contains details and limitations for deposit\withdrawal of cryptocurrency YYY via blockchain X, including data about blockchain type, current availability to deposit\withdraw, minimum deposit\withdrawal limit and external withdrawal fees. |
data.YYY.blockchains.X. type | Yes | String | Type of cryptocurrency YYY on blockchain X. |
data.YYY.blockchains.X. deposit | Yes | String | Describes current availability to deposit cryptocurrency YYY via blockchain X. Only "enabled" or "disabled" values are allowed herein. |
data.YYY.blockchains.X. minDeposit | Yes | String (which can be parsed as Float) | Minimum amount of cryptocurrency YYY which can be deposited from external wallet via blockchain X. |
data.YYY.blockchains.X. withdrawal | Yes | String | Describes current availability to withdraw cryptocurrency YYY via blockchain X. Only "enabled" or "disabled" values are allowed herein. |
data.YYY.blockchains.X. minWithdrawal | Yes | String (which can be parsed as Float) | Minimum amount of cryptocurrency YYY which can be withdrawn to external wallet via blockchain X. |
data.YYY.blockchains.X. withdrawalFee | Yes | String (which can be parsed as Float) | Amount of withdrawal fee in cryptocurrency YYY, which which would be charged and subtracted from withdrawal amount if blockchain X is used for withdrawal. |
data.YYY.blockchains.X. depositConfirmations | Yes | Number | Minimal confirmation number for transaction in the blockchain to be deposited to Client’s Spot Trading account. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Private API Calls
Connection
Connection should be established using SSL.
WebSocket API Private Endpoint URL
wss://trade.cex.io/api/spot/ws
Either Client or CEX.IO Spot Trading can terminate WebSocket connection at any time.
Once connected, CEX.IO Spot Trading sends “connected” message to Client.
Query Parameters
From | To | Message | Description |
---|---|---|---|
CEX.IO Spot Trading | Client | {"e":"connected"} |
By successful connection, CEX.IO Spot Trading notifies Client about it by sending him a message. |
Keep Connection Alive
To keep connection alive, Client should periodically send any valid message to CEX.IO Spot Trading. Maximum allowed period between two closest Client’s messages is 10 seconds (however, this parameter might be changed by CEX.IO Spot Trading in future). If Client exceeds this limit (meaning, Client sends less than 1 message per 10 seconds), then CEX.IO Spot Trading can terminate the connection.
If Client has no messages to send, then he should send “ping” message to keep the connection alive. Client can send ping messages any time he wishes, even if he has enough other messages to send. Once Client sends a “ping” message, CEX.IO Spot Trading responds with a “pong” message.
Keeping Connection Alive Example
Sequence id | From | To | Message | Description |
---|---|---|---|---|
1 | Client | CEX.IO Spot Trading | {"e":"ping"} |
Client sends “ping”. |
2 | CEX.IO Spot Trading | Client | {"e":"pong"} |
Almost immediately, CEX.IO Spot Trading responds with “pong”. |
3 | Client | CEX.IO Spot Trading | {"e":"ping"} |
Client sends next “ping” in 5 seconds. |
4 | CEX.IO Spot Trading | Client | {"e":"pong"} |
Almost immediately, CEX.IO Spot Trading responds with “pong”. |
5 | Client | CEX.IO Spot Trading | {"e":"ping"} |
Client sends next “ping” in 8 seconds. |
6 | CEX.IO Spot Trading | Client | {"e":"pong"} |
Almost immediately, CEX.IO Spot Trading responds with “pong”. |
7 | CEX.IO Spot Trading keeps connection open if Client sends any valid message at least once per 10 seconds. |
Example of Keeping Connection Alive with Idle Client
Sequence id | From | To | Message | Description |
---|---|---|---|---|
1 | Client | CEX.IO Spot Trading | {"e":"ping"} |
Client sends “ping”. |
2 | CEX.IO Spot Trading | Client | {"e":"pong"} |
Almost immediately, CEX.IO Spot Trading responds with “pong”. |
3 | Client | CEX.IO Spot Trading | {"e":"ping"} |
Client sends next “ping” in 5 seconds. |
4 | CEX.IO Spot Trading | Client | {"e":"pong"} |
Almost immediately, CEX.IO Spot Trading responds with “pong”. |
5 | Client does not send any messages for more than 10 seconds. | |||
6 | CEX.IO Spot Trading | Client | {"e":"disconnected"} |
CEX.IO Spot Trading notifies Client that he is about to Close the connection in a moment because the Client is idle. This message, however, is optional. |
7 | CEX.IO Spot Trading terminates the connection. |
Authentication
CEX.IO Spot Trading uses API keys to allow access to Private APIs.
Client can generate, configure and manage api keys, set permission levels, whitelisted IPs for API key etc. via Spot Trading Web Terminal in the API Keys Management Profile section.
CEX.IO Spot Trading will respond to Client with either ok
or error
result.
Successful Authentication Example
Response (by successful connection, CEX.IO Spot Trading notifies Client about it by sending him a message)
{
"e": "connected"
}
Request (Client sends a valid authentication request)
{
"e": "auth",
"auth": {
"key": "djnvod237HF934jcvxj3723",
"signature": "9732fdd0db3bbbf09941365436840f36e3a2a5d076576f87d154a69c8eab194f",
"timestamp": 1465229405
}
}
Response (authentication is successful)
{
"e": "auth",
"ok": "ok",
"data": {
"ok": "ok"
}
}
Authentication Request
Field Name | Mandatory | Format | Description | Value Range |
---|---|---|---|---|
e | Yes | String | Describes the type of this message. | auth |
timestamp | Yes | Unix time | Represents current Client’s time. To be considered as valid, the moment described in this field should be within 20-second range of Spot Trading’s current time. | Number of seconds that have elapsed since 00:00:00 UTC |
key | Yes | String | Client’s apiKey which was provided by CEX.IO Spot Trading earlier. | |
signature | Yes | String | Signature is a HMAC-SHA256 encoded message containing: timestamp and API key. The HMAC-SHA256 code must be generated using a secretKey which was provided by CEX.IO Spot Trading earlier. This code must be converted to its hexadecimal representation (64 lowercase characters) | Only numbers and latin characters are allowed |
Authentication Response
Signature Example in Python2
message = timestamp + api_key
signature = hmac.new(API_SECRET, msg=message, digestmod=hashlib.sha256).hexdigest()
Signature Example in Python3
message = repr(ts) + api_key
signature = hmac.new(bytearray(secret.encode('utf-8')), msg=bytearray(message.encode('utf-8')), digestmod=hashlib.sha256).hexdigest()
Signature Example in NodeJS
const crypto = require('crypto');
var hmac = crypto.createHmac('sha256', apiSecret);
hmac.update(timestamp + apiKey);
var signature = hmac.digest('hex');
Field Name | Mandatory | Format | Description | Value Range |
---|---|---|---|---|
e | Yes | String | Describes the type of this message. | auth |
data.ok | This field should be present in case of successful authentication. Otherwise, it should be missing. | String | If this field is present, then authentication is successful. If this field is missing, then authentication is not successful. | ok |
ok | This field should be present in case of successful authentication. Otherwise, it should be missing. | String | If this field is present, then authentication is successful. If this field is missing, then authentication is not successful. | ok |
data.error | This field should be present in case of unsuccessful authentication. Otherwise, it should be missing. | String | If this field is present, then authentication is not successful. Represents human readable error reason of why authentication is not successful. |
Error Codes
Error Code | Description |
---|---|
Timestamp is not in 20sec range | invalid timestamp |
Invalid signature | invalid signature |
Invalid API key | mandatory field “key” is missing or is incorrect |
API key is not activated | inactivated API key |
API Key Permissions
To restrict access to certain functionality while using of API Keys there should be defined specific set of permissions for each API Key. The defined set of permissions can be edited further if necessary.
The following permission levels are available for API Keys:
Read – permission level for viewing of account related data, receiving reports, subscribing to market data etc.
Trade – permission level, which allows placing and cancelling orders on behalf of account.
Funds Internal – permission level, which allows transferring funds between accounts (between sub-accounts or main account and sub-accounts) of CEX.IO Spot Trading Portfolio.
Funds Wallet - permission level, which allows transferring funds from CEX.IO Spot Trading Portfolio accounts (main account and sub-accounts) to CEX.IO Wallet and vice versa.
Required permissions as to each API method are listed in the documentation below.
Unsupported method call
Unsupported method call example
Response (by successful connection, CEX.IO Spot Trading notifies Client about it by sending him a message)
{
"e": "connected"
}
Request (Client sends a valid authentication request)
{
"e": "auth",
"auth": {
"key": "djnvod237HF934jcvxj3723",
"signature": "9732fdd0db3bbbf09941365436840f36e3a2a5d076576f87d154a69c8eab194f",
"timestamp": 1465229405
}
}
Response (CEX.IO Spot Trading responds that authentication is successful)
{
"e": "auth",
"ok": "ok",
"data": {
"ok": "ok"
}
}
Request (Client calls some_unsupported_method WebSocket API method that does not exist)
{
"e": "some_unsupported_method",
"oid": "1523433664816_1_some_unsupported_method",
"data": {
"foobar": 1
}
}
Response (CEX.IO Spot Trading responds with error)
{
"e": "some_unsupported_method",
"oid": "1523439125503_1_some_unsupported_method",
"data": {
"error": "Unsupported message type some_unsupported_method"
}
}
Response (CEX.IO Spot Trading sends
disconnected
event and closes WebSocket connection afterwards)
{
"e": "disconnected"
}
Client sends JSON messages to CEX.IO Spot Trading using WebSocket. Each message should contain e
field, which defines the message type. Client should use message types which are described in documentation. Once Client sends message type which is not described in documentation, then CEX.IO Spot Trading replies with error, sends disconnected
event to Client and closes WebSocket connection.
API Rate limit
API Rate Limit for Private API calls is defined as to each API Key, which means that if API Rate Limit has been reached for one of Client’s API Key, Client can still proceed with sending requests by other API Keys. Request limits are determined from cost associated with each private API call. By default, each private request has a cost of 1 point, but for some specific requests this cost can be higher. See up-to-date request API Rate Limit cost information in specification of each method.
Rate limit exceeded example
Seq id | Time | Type | Message | Comment |
---|---|---|---|---|
1.1 | 11:01:05.853 | Request | {"e":"get_my_funding_history", "data": {"accountId”:"test1"}, "oid": "1523433_1_get_my_funding_history"} | Client sends request to get funding history for accountId “test1”. |
1.2 | 11:01:05.856 | Response | {"e":"get_my_funding_history", "oid": "1523433_1_get_my_funding_history", "data": [],"ok": "ok"} | CEX.IO Spot Trading responds with funding history. |
2.1 | 11:01:06.001 | Request | {"e":"get_my_funding_history", "data": {"accountId”:"test2"}, "oid": "1523433_2_get_my_funding_history"} | Client sends request to get funding history for accountId “test2”. |
2.2 | 11:01:06.104 | Response | {"e":"get_my_funding_history", "oid": "1523433_2_get_my_funding_history", "data": [],"ok": "ok"} | CEX.IO Spot Trading responds with funding history |
... | ... | ... | ... | ... |
200.1 | 11:01:20.213 | Request | {"e":"get_my_funding_history", "data": {"accountId”:”test200"}, "oid": "1523433_200_get_my_funding_history"} | Client sends request to get funding history for accountId “test200”. |
200.2 | 11:01:20.345 | Response | {"e":"get_my_funding_history", "oid": "1523433_300_get_my_funding_history", "data": [],"ok": "ok"} | CEX.IO Spot Trading responds with funding history. |
201.1 | 11:01:20.390 | Request | {"e":"get_my_funding_history", "data": {"accountId”:”test201"}, "oid": "1523433_201_get_my_funding_history"} | Client sends request to get funding history for accountId “test201”. |
201.2 | 11:01:20.400 | Response | {"e":"get_my_funding_history", "oid": "1523433_201_get_my_funding_history", "data": {"error": "API rate limit reached"}} | CEX.IO Spot Trading responds with error: API rate limit reached. |
202.1 | 11:01:20.403 | Response | {"e”:”disconnected”} | CEX.IO Spot Trading notifies Client before disconnecting WS by sending him a disconnected event. |
Account Events
Once connected and authenticated, Client continually receives notifications about balance changes of his main account and sub-accounts. Once any event affecting Client’s account balances happens (order placing, order execution, order cancellation, deposit, withdrawal, etc.), then CEX.IO Spot Trading sends a notification to Client through WebSocket with a new account balance snapshot.
Accounts events in WS API should not be used by Client for building own accounting. There are various of reasons not to use it for accounting, the most important is that current WS API does not support resending missed messages (which might happen upon disconnection). Such events are designed as push notifications to allow Client to do some actions in “real-time” manner. For example, it can be used to update balance information in Client’s UI system by each balance change.
Account event represents the snapshot of the Client’s account available balance (funds which Client can use for order placing, for withdrawal, etc.) and on hold balance (funds reserved for active orders, withdrawals in progress, etc.) at some moment in time. So, in case of active trading, such information in the event message might be not up-to-date at the moment Client receives the message. If Client needs to know up to date account balances he can additionally use Account Status V3 request to find it out.
Client can ignore such event if he doesn't need it, or can additionally use Account Status V3 request to find out his actual account balances.
Account Event Notification
Account Event Notifications Examples
CEX.IO Spot Trading notifies Client that withdrawal operation was requested from main account and CEX.IO Spot Trading started to process it. New available balance on main account after withdrawal is 0.68 USD. Note that it is not possible to find out details about this withdrawal (such as, withdrawal amount) from this notification as only total onHoldBalance is indicated herein.
{
"e": "account_update",
"ok": "ok",
"data":{
"clientId": "BitFok",
"accountId": "",
"currency": "USD",
"balance": "0.68000000",
"onHoldBalance": "1000.00000000",
"timestamp":1465299989915,
"action": "withdraw",
"id": "16552948"
}
}
CEX.IO Spot Trading notifies Client that some order event happened for order id 2639 for sub-account “hallo”. The updated balance on “hallo” sub-account after order event is 201.86 USD. Note that from this notification, it is not possible to find out what exactly happened (either order creation, or order cancellation, or order execution) with the order, as well as any other details on this order (which order type, etc.). This event just notifies Client that USD balance on “hallo” sub-account was changed and this change happened during processing the order with ID 2639.
{
"e": "account_update",
"ok": "ok",
"data": {
"clientId": "BitFok",
"accountId": "hallo",
"currency": "USD",
"balance": "201.86000000",
"onHoldBalance": "850.00000000",
"timestamp": 1465300456900,
"action": "order",
"id": "2639"
}
}
CEX.IO Spot Trading notifies Client that deposit operation was requested to main account and CEX.IO Spot Trading processed it. The updated balance on the main account after deposit is 9.09 BTC.
{
"e": "account_update",
"ok": "ok",
"data": {
"clientId": "BitFok",
"accountId": "",
"currency": "BTC",
"balance": "9.09000000",
"onHoldBalance": "0.00000000",
"timestamp": 1465235652000,
"action": "deposit",
"id": "12sQff9U13"
}
}
CEX.IO Spot Trading notifies Client that withdrawal operation was not successful and funds are returned to Client’s main account. The updated balance on the main account after withdrawal rollback is 100 EUR. Note that from this notification, it is not possible to find out the reason of error. However, there is an operation ID “12F009” which should be used during problem investigation, if needed.
{
"e": "account_update",
"ok": "ok",
"data": {
"clientId": "BitFok",
"accountId": "",
"currency": "EUR",
"balance": "100.00000000",
"onHoldBalance": "52.73000000",
"timestamp": 1465299989915,
"action": "withdrawRollback",
"id": "12F009"
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "account_update" value allowed. |
data.clientId | Yes | String | Client CompId. |
data.accountId | Yes | String | Client’s sub-account ID, on which the balance was changed. If the value is empty string, then it means that the balance on the Client’s main account was changed. |
data.currency | Yes | String | Currency for which account balance was changed. |
data.action | Yes | String | Action, which triggered account balance change. |
data.id | Yes | String | Identifier of the action, which triggered account balance change. For example, if action is “order”, then this field holds identifier of the order (which was assigned by CEX.IO Spot Trading, not Client) that triggered account balance change. |
data.balance | Yes | String (which can be parsed as Float) | Represents a snapshot of the account available balance after the action. Note that this snapshot might be inaccurate (means that it can represent available balance snapshot after two actions, but not necessarily after just this single action), for example if some other action happened right after this action. To get the new actual account available balance, Client can additionally make Account Status V3 request. |
data.onHoldBalance | Yes | String (which can be parsed as Float) | Represents a snapshot of the account on hold balance (locked in orders, locked for withdrawals etc.). Note that this snapshot might be inaccurate (means that it can represent on hold balance snapshot after two actions, but not necessarily after just this single action), for example if some other action happened right after this action. To get the new actual account on hold balance, Client can additionally make Account Status V3 request. |
data.timestamp | Yes | Number | UTC timestamp in milliseconds. Represents a moment in time when the balance snapshot was taken. |
ok | No | String | ok value represents that event notification is successfully generated. |
Action Types
Action | Description |
---|---|
order | order creation, order cancellation, order execution |
deposit | deposit operation is requested |
withdraw | withdrawal operation is requested |
withdrawRollback | withdrawal error happened, funds are returned back to Client |
internalTransfer | internal transfer between Client’s accounts |
Current Fee
This method indicates current fees at specific moment of time with consideration of Client' up-to-date 30d volume and day of week (fees can be different for e.g. on weekends).
REQUEST
get_my_current_fee
API Rate Limit Cost: 5
API Key Permission
This method requires "Read" permission set for API Key.
Fee Request Parameters
Get Current Fee - Successful request
Request (Client sends request to receive all his trading fees)
{
"e": "get_my_current_fee",
"oid": "152171243_get_my_current_fee",
"data": {}
}
Response (CEX.IO Spot Trading responds with trading fees for all pairs supported for Client)
{
"e": "get_my_current_fee",
"oid": "152171243_get_my_current_fee",
"ok": "ok",
"data": {
"tradingFee":{
"BTC-USD": {
"percent": "0.5"
},
"XRP-USD":{
"percent": "0.1"
},
"ETH-BTC":{
"percent": "0.1"
},
"ADA-USD":{
"percent": "0.1"
},
...
"ETH-USD":{
"percent": "0.5"
},
"BTC-EUR":{
"percent": "0.5"
},
}
}
}
Get Current Fee (Indicated specific pairs)
Request (Client sends request to receive his trading fees for specified pair)
{
"e": "get_my_current_fee",
"oid": "152171244_get_my_current_fee",
"data":{
"pairs": ["BTC-USD","ETH-USD"]
}
}
Response (CEX.IO Spot Trading responds with trading fees for specified pairs)
{
"e": "get_my_current_fee",
"oid": "152171244_get_my_current_fee",
"ok": "ok",
"data": {
"tradingFee":{
"BTC-USD": {
"percent": "0.5"
},
"ETH-USD":{
"percent": "0.5"
},
}
}
}
Get Current Fee - Invalid Request
Request (Client sends request to find transactions without valid JSON object)
{
"e": "get_my_current_fee",
"oid": "152171245_get_my_current_fee",
"data": {""""""}
}
Response (CEX.IO Spot Trading responds to the request with error message)
{
"e": "get_my_current_fee",
"oid": "152171245_get_my_current_fee",
"data": {
"error": "Bad Request"
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_my_current_fee" value is allowed here. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. |
pairs | No | Array of strings | Currency pair, for which Client wants to receive his fee. Pair should contain two currencies in upper case divided by "-" symbol. Pair should be listed in traditional direction. For example, "BTC-USD", but not "USD-BTC". If this field is missing, or if it contains empty string (""), or null, then it means Client wants to receive fee for all pairs. |
Current Fee Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_my_current_fee" value is allowed here. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains response details. |
tradingFee | Yes | Object | Represents trading fees for all supported trading pairs. |
XXX-YYY | Yes | Object | Represents data about trading fee for specific XXX-YYY trading pair. |
XXX-YYY.percent | Yes | String (parseable as float) | Represents fee percent for XXX-YYY trading pair. |
error | No | Object | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Fee Strategy
Fee Strategy returns all fee options, which could be applied for Client, considering Client’s trading volume, day of week, pairs, group of pairs etc.
REQUEST
get_fee_strategy
API Rate Limit Cost: 1
API Key Permission
This method requires "Read" permission set for API Key.
Fee Strategy Request Parameters
Get Fee Strategy - Successful request
Request (Client requests available Fee Strategies)
{
"e": "get_fee_strategy",
"oid": "1465405014648_get_fee_strategy",
"data": {}
}
Response (CEX.IO Spot Trading responds with default fee options)
{
"e": "get_fee_strategy",
"oid": "1465405014648_get_fee_strategy",
"ok": "ok",
"data": {
"strategyConfig": {
"default": [
{
"fee": "0.25",
"volume": 10000
},
{
"fee": "0.23",
"volume": 100000
},
{
"fee": "0.19",
"volume": 500000
},
{
"fee": "0.17",
"volume": 1000000
},
{
"fee": "0.15",
"volume": 2500000
},
{
"fee": "0.13",
"volume": 5000000
},
{
"fee": "0.11",
"volume": 10000000
},
{
"fee": "0.10",
"volume": 20000000
}
]
}
}
}
Get Fee Strategy - Successful request
Request (Client requests available Fee Strategies)
{
"e": "get_fee_strategy",
"oid": "1465405014649_get_fee_strategy",
"data": {}
}
Response (CEX.IO Spot Trading responds with multiple fee options, depending on the pair and day of the week)
{
"e": "get_fee_strategy",
"oid": "1465405014649_get_fee_strategy",
"ok": "ok",
"data": {
"strategyConfig": {
"default": [
{
"fee":"0.25",
"volume":10000
},
{
"fee":"0.23",
"volume":100000
},
{
"fee":"0.19",
"volume":500000
},
{
"fee":"0.17",
"volume":1000000
},
{
"fee":"0.15",
"volume":2500000
},
{
"fee":"0.13",
"volume":5000000
},
{
"fee":"0.11",
"volume":10000000
},
{
"fee":"0.10",
"volume":20000000
}
],
"perTier": {
"reducedFee": {
"name": "Reduced Fee",
"description": "Reduced fee description",
"pairList": [
"BCH-USD",
"ETH-USD"
],
"schedule": [
{
"fee":"0.15",
"volume":10000
},
{
"fee":"0.11",
"volume":30000
},
{
"fee":"0.08",
"volume":50000
}
]
},
"hotPairs": {
"name": "Hot",
"description": "Trending pairs",
"pairList": [
"ETH-EUR",
"USDT-GBP"
],
"schedule": [
{
"fee":"0.20",
"volume":10000
},
{
"fee":"0.15",
"volume":100000
},
{
"fee":"0.10",
"volume":150000
}
]
}
},
"perWeekend": {
"default":[
{
"fee":"0.22",
"volume":10000
},
{
"fee":"0.2",
"volume":100000
},
{
"fee":"0.16",
"volume":500000
},
{
"fee":"0.14",
"volume":1000000
},
{
"fee":"0.12",
"volume":2500000
},
{
"fee":"0.1",
"volume":5000000
},
{
"fee":"0.08",
"volume":10000000
},
{
"fee":"0.07",
"volume":20000000
}
],
"perTier": {
"reducedFee": {
"name": "Reduced Fee",
"description": "Reduced fee description",
"pairList": [
"BCH-USD",
"ETH-USD"
],
"schedule": [
{
"fee":"0.14",
"volume":10000
},
{
"fee":"0.1",
"volume":30000
},
{
"fee":"0.07",
"volume":50000
}
]
},
"hotPairs": {
"name": "Hot",
"description": "Trending pairs",
"pairList": [
"ETH-EUR",
"USDT-GBP"
],
"schedule": [
{
"fee":"0.18",
"volume":10000
},
{
"fee":"0.13",
"volume":100000
},
{
"fee":"0.08",
"volume":150000
}
]
}
}
}
}
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_fee_strategy" value is allowed here. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. |
Fee Strategy Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_fee_strategy" value is allowed here. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains response details. |
strategyConfig | Yes | Object | This object defines details about Client's available fee options. |
default | Yes | Array of objects | Represents possible fee levels, which are applied by default for pairs, if such pairs are not specified in "perTier.pairList" field. If returned array contains only 1 object and zero "volume" value, then "fee" value represents fixed commission, which does not depend on Client's 30d trading volume. |
default.ObjectN | Yes | Object | Indicate fee value based on Client's 30d total trading volume. |
default.ObjectN.fee | Yes | String | Fee percent which will be applied, if Client's 30d total trading volume up to the value, indicated in "volume" of this object. |
default.ObjectN.volume | Yes | Number | Represents Client's 30d trading volume (by default in USD), up to which "fee" value is applied. For receiving current 30d trading volume Client should use Volume method. |
perTier | No | Object | Represents possible fee levels for specific sets of pairs indicated in "pairList" field of each tier. "perTier" fee levels have higher priority compared to default fee levels. This field could be missing if Client's strategy configuration doesn't include different fee levels for pair tiers. |
perTier.CCCCC | No | Object | Describes fee details of "CCCCC" pair tier. |
perTier.CCCCC.name | Yes | String | Name of specific pair tier. |
perTier.CCCCC.description | Yes | String | Description of specific pair tier. |
perTier.CCCCC.pairList | Yes | Array of strings | Indicates trading pairs list, which are included in CCCCC pair tier. |
perTier.CCCCC.schedule | Yes | Array of objects | Indicates fee levels, which can be applied for trading pairs from "pairList" field of specific pair tier. If returned array contains only 1 object and zero "volume" value, then "fee" value represents fixed commission, which does not depend on Client's 30d trading volume. |
perTier.CCCCC.schedule.ObjectM | Yes | Object | Indicate fee value for pair tier CCCCCC based on Client's 30d total trading volume. |
perTier.CCCCC.schedule.ObjectM.fee | Yes | String | Fee percent which will be applied for pairs from pair tier CCCCC if Client's 30d total trading volume up to the value, indicated in "volume" field of this object. |
perTier.CCCCC.schedule.ObjectM.volume | Yes | Number | Represents Client's 30d trading volume (by default in USD), up to which "fee" value is applied. For receiving current 30d trading volume Client should use Volume method. |
perWeekend | No | Object | Represents fees, which apply only on weekends (Saturday and Sunday according to UTC time) and have higher priority than "default" and "perTier" fees. This field can be missing If there are no different weekend fees in fee strategy. |
perWeekend.default | No | Array of objects | Represents possible weekend fee levels, which are applied by default for pairs, if such pairs are not specified in "perTier.pairList" field. Has the same srtucture as "default". If returned array contains only 1 object and zero "volume" value, then "fee" value represents fixed commission, which does not depend on Client's 30d trading volume. |
perWeekend.perTier | No | Object | Represents possible weekend fee levels for specific sets of pairs indicated in "pairList" field of each tier. "perTier" fee levels have higher priority compared to default fee levels. This field could be missing if Client's strategy configuration doesn't include different fee levels for pair tiers. Has the same structure as "perTier". |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Volume
This request allows Client to receive his trading volume for the last 30 days in USD equivalent.
REQUEST
get_my_volume
API Rate Limit Cost: 5
API Key Permission
This method requires "Read" permission set for API Key.
Volume Request Parameters
Get My Volume - Successful request
Request (Client sends request to receive his 30 day trading volume)
{
"e": "get_my_volume",
"oid": "186471243_get_my_volume",
"data": {}
}
Response (CEX.IO Spot Trading responds with Client's 30 day trading volume in USD equivalent)
{
"e": "get_my_volume",
"oid": "186471243_get_my_volume",
"ok": "ok",
"data": {
"period": "30d",
"volume": "35016.9181338",
"currency": "USD"
}
}
Get My Volume - Invalid request
Request (Client sends request to find transactions without valid JSON object)
{
"e": "get_my_volume",
"oid": "190641243_get_my_volume",
"data": {[]}
}
Response (CEX.IO Spot Trading responds to the request with error message)
{
"e": "get_my_volume",
"oid": "190641243_get_my_volume",
"data": {
"error": "Bad Request"
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_my_volume" value is allowed here. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. |
Volume Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_my_volume" value is allowed here. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains response details. |
period | Yes | String | Represents period for which Client's volume is calculated. Only “30d” value can be returned in this field. |
volume | Yes | String (parseable as float) | Represents Client’s cumulative trading volume in “currency” equivalent for returned period. |
currency | Yes | String | Represents the currency in which trading volume is calculated. Only “USD” value can be returned in this field. |
error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Create Account
This request allows Client to create new sub-account.
REQUEST
do_create_account
API Rate Limit Cost: 1
API Key Permission
This method requires "Read" permission set for API Key.
Create Account Request Parameters
Create Account - Successful request
Request (Client sends request to create new sub-account)
{
"e": "do_create_account",
"oid": "186471243_create_account",
"data": {
"accountId": "account2",
"currency": "BTC"
}
}
Response (CEX.IO Spot Trading responds with accountId that has been created)
{
"e": "do_create_account",
"oid": "186471243_create_account",
"ok": "ok",
"data": {
"accountId": "account2"
}
}
Create Account - Create new sub-account with already existing accountId name
Request (Client sends request to create new sub-account with indicating already existing accountId)
{
"e": "do_create_account",
"oid": "186471244_create_account",
"data": {
"accountId": "account2",
"currency": "BTC"
}
}
Response (CEX.IO Spot Trading responds with indication of accountId, which has already been created. New accountId with the same name is not created.)
{
"e": "do_create_account",
"oid": "186471244_create_account",
"ok": "ok",
"data": {
"accountId": "account2"
}
}
Create Account - Invalid request (missing mandatory parameter)
Request (Client sends request to create new sub-account without indicating requested accountId name)
{
"e": "do_create_account",
"oid": "190641298_create_account",
"data": {
"currency": "BTC"
}
}
Response (CEX.IO Spot Trading responds with error indicating mandatory accountId parameter value is missing in Client's request.)
{
"e": "do_create_account",
"oid": "190641298_create_account",
"data": {
"error": "Mandatory parameter accountId is missing"
}
}
Create Account - Invalid request (forbidden symbols used)
Request (Client sends request to create new sub-account with forbidden symbols in requested accountId name)
{
"e": "do_create_account",
"oid": "190641333_create_account",
"data": {
"accountId": "account%2",
"currency": "BTC"
}
}
Response (CEX.IO Spot Trading responds with error that requested accountId contained forbidden symbols.)
{
"e": "do_create_account",
"oid": "190641298_create_account",
"data": {
"error": "Sub-account name should contain only lower and uppercase Latin letters, numbers, underscore (\"_\") or hyphen (\"-\")",
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "do_create_account" value is allowed here. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. |
accountId | Yes | String | New unique sub-account name which Client requests to create. The value in this field can contain only lower and uppercase Latin letters, numbers, underscore ("_") or hyphen ("-"). |
currency | Yes | String | Represents crypto or fiat currency symbol which Client expects to be initialy deposited to new sub-account (e.g. from Client's other Spot Trading sub-account, from CEX.IO Wallet acount, from external crypto wallet etc.). |
Create Account Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "do_create_account" value is allowed here. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains response details. |
accountId | Yes | String | By default indicates name of new sub-account, which has been created. Nevertheless, if sub-account name requested by Client already exists, CEX.IO Spot Trading will return the name of this sub-account without creating of new sub-account with the same name. |
error | No | Object | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Account Status V3
By using Account Status V3 method, Client can find out current balance and it’s indicative equivalent in converted currency (by default “USD”), amounts locked in open (active) orders as to each sub-account and currency.
If trading fee balance is available for Client, then response will also contain general trading fee balance data such as promo name, currency name, total balance and expiration date of this promo on Trading Fee Balance.
It’s Client’s responsibility to track his sub-accounts available trading balance as current sub-account balance reduced by the balance amount locked in open (active) orders on sub-account.
REQUEST
get_my_account_status_v3
API Rate Limit Cost: 5
API Key Permission
This method requires “Read” permission set for API Key.
Account Status V3 Request Parameters
Get My Account Status V3 for All Accounts for All Currencies
Request (Client sends request to find out his accounts’ statuses for all his accounts for all currencies)
{
"e": "get_my_account_status_v3",
"oid": "1465340168103_1_get_my_account_status_v3",
"data": {
"accountIds": []
}
}
Response (CEX.IO Spot Trading responds that Client has main account with currencies "USD", "ADA" and "BTC" and sub-account "hallo" with currencies "ETH" and "SHIB". Also, it contains balance equivalents in converted currency for each account and each currency)
{
"e": "get_my_account_status_v3",
"oid": "1465340168103_1_get_my_account_status_v3",
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"": {
"USD": {
"balance": "39.79438200",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "39.79438200"
},
"ADA": {
"balance": "20.24000000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "16.21191616"
},
"BTC": {
"balance": "0.00040000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "15.67344000"
}
},
"hallo": {
"ETH": {
"balance": "15.00000000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "38962.11113119"
},
"SHIB": {
"balance": "1573107",
"balanceOnHold": "1210584",
"balanceInConvertedCurrency": "35.61514248"
}
}
}
}
}
Get My Account Status V2 for selected Sub-accounts for All Currencies
Request (Client sends a request to find out Client's accounts’ statuses for specified accounts for all currencies)
{
"e": "get_my_account_status_v3",
"oid": "1465340168104_1_get_my_account_status_v3",
"data": {
"accountIds": ["hallo", "superhat"]
}
}
Response (CEX.IO Spot Trading responds that Client has sub-account "hallo" with currencies "ETH" and "SHIB". Sub-account "superhat" status was requested, but is not included into response because Client doesn’t have "superhat" sub-account. The main account is not included, because it was not requested)
{
"e": "get_my_account_status_v3",
"oid": "1465340168104_1_get_my_account_status_v3",
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"hallo": {
"ETH": {
"balance": "15.00000000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "38962.11113119"
},
"SHIB": {
"balance": "1573107",
"balanceOnHold": "1210584",
"balanceInConvertedCurrency": "35.61514248"
}
}
}
}
}
Get My Account Status V3 for All Accounts for Selected Currencies
Request (Client sends request to find out his accounts’ statuses for all accounts for selected currencies)
{
"e": "get_my_account_status_v3",
"oid": "1465340168105_1_get_my_account_status_v3",
"data": {
"currencies":["USD","BTC"]
}
}
Response (CEX.IO Spot Trading responds that Client has main account and sub-account "account123", each with currencies "USD" and "BTC". Note that other currencies (like "EUR", "ETH" etc.) are not included into response, because their balances were not requested)
{
"e": "get_my_account_status_v3",
"oid": "1465340168105_1_get_my_account_status_v3",
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"": {
"USD": {
"balance": "39.79438200",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "39.79438200"
},
"BTC": {
"balance": "0.00040000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "15.67344000"
}
},
"account123": {
"USD": {
"balance": "100.00000000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "100.00000000"
},
"BTC": {
"balance": "1.00000000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "39157.90502748"
}
}
}
}
}
Get My Account Status V3 for All Accounts for One Selected Currency
Request (Client sends request to find out his accounts’ statuses for all accounts for "BTC" currency)
{
"e": "get_my_account_status_v3",
"oid": "1465340168106_1_get_my_account_status_v3",
"data": {
"currencies": ["BTC"]
}
}
Response (CEX.IO Spot Trading responds that main account and sub-account "account123" have "BTC" balances. Note that other currencies (like "USD", "EUR", "SHIB" etc.) and other sub-accounts are not included in the response, because they were not requested or do not contain balances in requested currencies)
{
"e": "get_my_account_status_v3",
"oid": "1465340168106_1_get_my_account_status_v3",
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"": {
"BTC": {
"balance": "0.00040000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "15.67344000"
}
},
"account123": {
"BTC": {
"balance": "1.00000000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "39157.90502748"
}
}
}
}
}
Get My Account Status V3 - No Account Matching Criteria
Request (Client sends request to find out his accounts’ statuses for main account and sub-account "hallo" only for "EUR" currency balance)
{
"e": "get_my_account_status_v3",
"oid": "1465340168107_1_get_my_account_status_v3",
"data": {
"currencies": ["EUR"],
"accountIds": ["", "hallo"]
}
}
Response (CEX.IO Spot Trading responds that Client has no accounts which satisfy request criteria)
{
"e": "get_my_account_status_v3",
"oid": "1465340168107_1_get_my_account_status_v3",
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {}
}
}
Get My Account Status V3 for Single Account for Single Currency
Request (Client sends request to find out the main account status for USD currency)
{
"e": "get_my_account_status_v3",
"oid": "1465340168108_1_get_my_account_status_v3",
"data": {
"currencies": ["USD"],
"accountIds": [""]
}
}
Response (CEX.IO Spot Trading responds that Client has main account and includes USD balance on it. No other accounts are included, and no other currencies are included, because they were not requested for)
{
"e": "get_my_account_status_v3",
"oid": "1465340168108_1_get_my_account_status_v3",
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"": {
"USD": {
"balance": "100.79438200",
"balanceOnHold": "70.00000000",
"balanceInConvertedCurrency": "100.79438200"
}
}
}
}
}
Get My Account Status V3 for All Accounts for Selected Currencies with available Trading Fee Balance
Request (Client sends request to find out his accounts’ statuses for all accounts for selected currencies. Client has available Trading Fee Balance)
Note that Client has available "lifetimeBonus" and limited "welcome_bonus" for USDT currency
{
"e": "get_my_account_status_v3",
"oid": "1465340168109_1_get_my_account_status_v3",
"data": {
"currencies":["USD","BTC","USDT"]
}
}
Response (CEX.IO Spot Trading responds that Client has balances in "EUR", "USD", "BTC" and "USDT" on main account, balance in "USD" on "subAccount2" sub-account and two trading fee balances)
Note that Client has available "lifetimeBonus" and limited "welcome_bonus" for USDT currency
{
"e": "get_my_account_status_v3",
"oid": "1465340168109_1_get_my_account_status_v3",
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"": {
"USD": {
"balance": "87683.66518161",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "87683.66518161"
},
"BTC": {
"balance": "564.88201513",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "15114322.12602735"
},
"USDT": {
"balance": "995752294.59920270",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "991868860.65026580"
}
},
"subAccount2": {
"USD": {
"balance": "123.00000000",
"balanceOnHold": "0.00000000",
"balanceInConvertedCurrency": "123.00000000"
}
}
},
"tradingFeeBalancesPerAccounts": {
"lifetimeBonus": {
"USDT": {
"balance": "50.00000000",
}
},
"welcome_bonus": {
"USDT": {
"balance": "15.00000000",
"expirationDate": "2023-07-28T17:20:00.000Z"
}
}
}
}
}
Get My Account Status V3 - Incorrect Request
Request (Client sends request, however "accountIds" field contains not an Array but a number value)
{
"e": "get_my_account_status_v3",
"oid": "1465392818634_2_get_my_account_status_v3",
"data": {
"accountIds": 3,
"currencies":["BTC"]
}
}
Response (CEX.IO Spot Trading responds about request processing error because not an array has been sent in "accountIds" field and "accountIds" array should consist of string type values)
{
"e": "get_my_account_status_v3",
"oid": "1465392818634_2_get_my_account_status_v3",
"data": {
"error": "accountIds array should consist of string type values"
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_my_account_status_v3" value allowed. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. It might be empty object ("{}"), which means that Client sets no criteria for accounts. However, this field should be present anyway and it should contain an object. Setting no criteria for accounts means that Client wants to get statuses for all accounts and for all currencies. CEX.IO Spot Trading encourages Client to always set criteria to get only the accounts which Client is interested in. It will make request processing faster and Client will get a faster response. |
data.currencies | No | Array | List of currencies for which Client wants to find out their accounts' balances. Currencies should be in upper case and of string type. Each currency should be present only once in this array. For example, ["USD", "BTC", "EUR", "BTC"] is not allowed. If this field is missing or contains an empty array ([]), then it means Client wants to find out balances for all available currencies. |
data.accountIds | No | Array | List of account identifiers for which Client wants to find out their accounts' balances. Empty string ("") value in this array represents Client’s main account. Each account identifier should be of string type and should be present only once in this array. For example, ["hallo", "", "account123", "hallo"] is not allowed. If this field is missing or if it contains an empty array ([]), then it means Client wants to find out balances for all accounts. |
Account Status V3 Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_my_account_status_v3" value allowed. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only ok value is allowed here. |
data | Yes | Object | This object contains response details. It should contain balancesPerAccounts and convertedCurrency mandatory fields and could also contain creditLine optional field (if credit line is enabled for Client). |
data.convertedCurrency | Yes | String | The currency in which balanceInConvertedCurrency is calculated by CEX.IO Spot Trading. By default only "USD" value is allowed herein. |
data.balancesPerAccounts | Yes | Object | This object contains details about Client's currencies' balances as to each account which satisfies request criteria. It might be empty object ("{}"), but this field should be present anyway and it should contain an object. If this field contains an empty object, then it means Client has no accounts which satisfy Client’s request criteria. |
data.balancesPerAccounts.X | No | Object | Represents an object which describes X account statuses for each currency. If X is ""(empty string), that means X is main account. Otherwise, it represents X sub-account. |
data.balancesPerAccounts.X.YYY | No | Object | Represents an object which describes X account statuses for YYY currency. |
data.balancesPerAccounts.X.YYY. balance | Yes | String (which can be parsed as Float) | Current X account balance in YYY currency. It includes balance which is reserved (locked) for active orders (please find this information in "balanceOnHold" field). |
data.balancesPerAccounts.X.YYY. balanceOnHold | Yes | String (which can be parsed as Float) | Current X account balance in YYY currency which is reserved (locked) for active orders. |
data.balancesPerAccounts.X.YYY. balanceInConvertedCurrency | No | String (which can be parsed as Float) | Equivalent in converted currency of current YYY currency balance on Client's X account. This amount is calculated according to CEX.IO Spot Trading indicative exchange rate of YYY currency to base currency. If current YYY currency balance on Client's X account is zero OR if CEX.IO Spot Trading failed to calculate such equivalent in converted currency, then this field would be missing. |
data.tradingFeeBalancesPerAccounts | No | Object | This object contains details about Client’s trading fee balances. This object can be absent if Client has no available trading fee balances because they were never obtained OR if all of obtained trading fee balances have already expired or were fully utilized. |
data.tradingFeeBalancesPerAccounts.X | Yes | Object | Represents an object which describes available trading fee balances which were obtained in the framework of X promo campaign name or as a “lifetimeBonus”. |
data.tradingFeeBalancesPerAccounts.X.YYY | Yes | Object | Represents an object which describes details as to YYY currency trading fee balance. |
data.tradingFeeBalancesPerAccounts.X.YYY. balance | Yes | String (which can be parsed as Float) | Available amount of YYY currency trading fee balance, expirationDate of which has not been reached yet and which can be used for trading fee utilization. |
data.tradingFeeBalancesPerAccounts.X.YYY. expirationDate | No | Datetime | Expiration date of YYY currency trading fee balance. Format: YYYY-MM-DDTHH:MM:SS.sssZ .This field can be absent for “lifetimeBonus” trading fee account, which means YYY trading fee balance amount has no set expiration date. |
data.error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Account Status V2 (deprecated)
Using Account Status V2 request, Client can find out current balance and it’s indicative equivalent in converted currency (by default “USD”), available trading balance and amounts which are locked in open (active) orders as to each sub-account and currency.
Available trading balance is calculated as current balance plus overdraft limit (if allowed for the Client) and reduced by the balance amount locked in open (active) orders.
If credit line is enabled for Client, then response will also contain data as to the base currency name, exposure limit, total debt amount, currencies balance equivalents in base currency as to each currency on all Client’s accounts (main account and sub-accounts).
If overdraft limit for specific currency is enabled for Client, then response will also contain data as to amount of overdraft limit for such currency on all Client’s accounts (main account and sub-account), which have balance in specified currency.
REQUEST
get_my_account_status_v2
API Rate Limit Cost: 5
API Key Permission
This method requires “Read” permission set for API Key.
Account Status V2 Request Parameters
Get My Account Status V2 for All Accounts for All Currencies
Request (Client sends request to find out his accounts’ statuses for all his accounts for all currencies)
{
"e": "get_my_account_status_v2",
"oid": "1465340168103_1_get_my_account_status_v2",
"data": {
"accountIds": []
}
}
Response (CEX.IO Spot Trading responds that Client has main account with currencies "USD", "ADA" and "BTC" and sub-account "hallo" with currencies "ETH" and "SHIB". Also, it contains balance equivalents in converted currency for each account and each currency)
{
"e": "get_my_account_status_v2",
"oid": "1465340168103_1_get_my_account_status_v2",
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"": {
"USD": {
"balance": "39.79438200",
"balanceOnHold": "0.00000000",
"balanceAvailable": "39.79438200",
"balanceInConvertedCurrency": "39.79438200"
},
"ADA": {
"balance": "20.24000000",
"balanceOnHold": "0.00000000",
"balanceAvailable": "20.24000000",
"balanceInConvertedCurrency": "16.21191616"
},
"BTC": {
"balance": "0.00040000",
"balanceOnHold": "0.00000000",
"balanceAvailable": "0.00040000",
"balanceInConvertedCurrency": "15.67344000"
}
},
"hallo": {
"ETH": {
"balance": "15.00000000",
"balanceOnHold": "0.00000000",
"balanceAvailable": "15.00000000",
"balanceInConvertedCurrency": "38962.11113119"
},
"SHIB": {
"balance": "1573107",
"balanceOnHold": "1210584",
"balanceAvailable": "362523",
"balanceInConvertedCurrency": "35.61514248"
}
}
}
}
}
Get My Account Status V2 for selected Sub-accounts for All Currencies
Request (Client sends a request to find out Client's accounts’ statuses for specified accounts for all currencies)
{
"e": "get_my_account_status_v2",
"oid": "1465340168103_1_get_my_account_status_v2",
"data": {
"accountIds": ["hallo", "superhat"]
}
}
Response (CEX.IO Spot Trading responds that Client has sub-account "hallo" with currencies "ETH" and "SHIB". Sub-account "superhat" status was requested, but is not included into response because Client doesn’t have "superhat" sub-account. The main account is not included, because it was not requested)
{
"e": "get_my_account_status_v2",
"oid": "1465340168103_1_get_my_account_status_v2",
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"hallo": {
"ETH": {
"balance": "15.00000000",
"balanceOnHold": "0.00000000",
"balanceAvailable": "15.00000000",
"balanceInConvertedCurrency": "38962.11113119"
},
"SHIB": {
"balance": "1573107",
"balanceOnHold": "1210584",
"balanceAvailable": "362523",
"balanceInConvertedCurrency": "35.61514248"
}
}
}
}
}
Get My Account Status V2 for All Accounts for Selected Currencies
Request (Client sends request to find out his accounts’ statuses for all accounts for selected currencies)
{
"e": "get_my_account_status_v2",
"oid": "1465340168103_1_get_my_account_status_v2",
"data": {
"currencies":["USD","BTC"]
}
}
Response (CEX.IO Spot Trading responds that Client has main account and sub-account "account123", each with currencies "USD" and "BTC". Note that other currencies (like "EUR", "ETH" etc.) are not included into response, because their balances were not requested)
{
"e": "get_my_account_status_v2",
"oid": "1465340168103_1_get_my_account_status_v2",
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"": {
"USD": {
"balance": "39.79438200",
"balanceOnHold": "0.00000000",
"balanceAvailable": "39.79438200",
"balanceInConvertedCurrency": "39.79438200"
},
"BTC": {
"balance": "0.00040000",
"balanceOnHold": "0.00000000",
"balanceAvailable": "0.00040000",
"balanceInConvertedCurrency": "15.67344000"
}
},
"account123": {
"USD": {
"balance": "100.00000000",
"balanceOnHold": "0.00000000",
"balanceAvailable": "100.00000000",
"balanceInConvertedCurrency": "100.00000000"
},
"BTC": {
"balance": "1.00000000",
"balanceOnHold": "0.00000000",
"balanceAvailable": "1.00000000",
"balanceInConvertedCurrency": "39157.90502748"
}
}
}
}
}
Get My Account Status V2 for All Accounts for One Selected Currency
Request (Client sends request to find out his accounts’ statuses for all accounts for "BTC" currency)
{
"e": "get_my_account_status_v2",
"oid": "1465340168103_1_get_my_account_status_v2",
"data": {
"currencies": ["BTC"]
}
}
Response (CEX.IO Spot Trading responds that main account and sub-account "account123" have "BTC" balances. Note that other currencies (like "USD", "EUR", "SHIB" etc.) and other sub-accounts are not included in the response, because they were not requested or do not contain balances in requested currencies)
{
"e": "get_my_account_status_v2",
"oid": "1465340168103_1_get_my_account_status_v2",
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"": {
"BTC": {
"balance": "0.00040000",
"balanceOnHold": "0.00000000",
"balanceAvailable": "0.00040000",
"balanceInConvertedCurrency": "15.67344000"
}
},
"account123": {
"BTC": {
"balance": "1.00000000",
"balanceOnHold": "0.00000000",
"balanceAvailable": "1.00000000",
"balanceInConvertedCurrency": "39157.90502748"
}
}
}
}
}
Get My Account Status V2 - No Account Matching Criteria
Request (Client sends request to find out his accounts’ statuses for main account and sub-account "hallo" only for "EUR" currency balance)
{
"e": "get_my_account_status_v2",
"oid": "1465340168103_1_get_my_account_status_v2",
"data": {
"currencies": ["EUR"],
"accountIds": ["", "hallo"]
}
}
Response (CEX.IO Spot Trading responds that Client has no accounts which satisfy request criteria)
{
"e": "get_my_account_status_v2",
"oid": "1465340168103_1_get_my_account_status_v2",
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {}
}
}
Get My Account Status V2 for Single Account for Single Currency
Request (Client sends request to find out the main account status for USD currency)
{
"e": "get_my_account_status_v2",
"oid": "1465340168103_1_get_my_account_status_v2",
"data": {
"currencies": ["USD"],
"accountIds": [""]
}
}
Response (CEX.IO Spot Trading responds that Client has main account and includes USD balance on it. No other accounts are included, and no other currencies are included, because they were not requested for)
{
"e": "get_my_account_status_v2",
"oid": "1465340168103_1_get_my_account_status_v2",
"ok": "ok",
"data": {
"convertedCurrency": "USD",
"balancesPerAccounts": {
"": {
"USD": {
"balance": "100.79438200",
"balanceOnHold": "70.00000000",
"balanceAvailable": "30.79438200",
"balanceInConvertedCurrency": "100.79438200"
}
}
}
}
}
Get My Account Status V2 - Incorrect Request
Request (Client sends request, however "accountIds" field contains not an Array but a number value)
{
"e": "get_my_account_status_v2",
"oid": "1465392818634_2_get_my_account_status_v2",
"data": {
"accountIds": 3,
"currencies":["BTC"]
}
}
Response (CEX.IO Spot Trading responds about request processing error because not an array has been sent in "accountIds" field and "accountIds" array should consist of string type values)
{
"e": "get_my_account_status_v2",
"oid": "1465392818634_2_get_my_account_status_v2",
"data": {
"error": "accountIds array should consist of string type values"
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_my_account_status_v2" value allowed. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. It might be empty object ("{}"), which means that Client sets no criteria for accounts. However, this field should be present anyway and it should contain an object. Setting no criteria for accounts means that Client wants to get statuses for all accounts and for all currencies. CEX.IO Spot Trading encourages Client to always set criteria to get only the accounts which Client is interested in. It will make request processing faster and Client will get a faster response. |
data.currencies | No | Array | List of currencies for which Client wants to find out their accounts' balances. Currencies should be in upper case and of string type. Each currency should be present only once in this array. For example, ["USD", "BTC", "EUR", "BTC"] is not allowed. If this field is missing or contains an empty array ([]), then it means Client wants to find out balances for all available currencies. |
data.accountIds | No | Array | List of account identifiers for which Client wants to find out their accounts' balances. Empty string ("") value in this array represents Client’s main account. Each account identifier should be of string type and should be present only once in this array. For example, ["hallo", "", "account123", "hallo"] is not allowed. If this field is missing or if it contains an empty array ([]), then it means Client wants to find out balances for all accounts. |
Account Status V2 Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_my_account_status_v2" value allowed. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only ok value is allowed here. |
data | Yes | Object | This object contains response details. It should contain balancesPerAccounts and convertedCurrency mandatory fields and could also contain creditLine optional field (if credit line is enabled for Client). |
data.convertedCurrency | Yes | String | The currency in which balanceInConvertedCurrency is calculated by CEX.IO Spot Trading. By default only "USD" value is allowed herein. |
data.creditLine | No | Object | This object contains details about Client's credit line configuration (if enabled for Client), including information about the base currency, exposure limit and total debt. If credit line is not enabled for Client, then this field would be missing. |
data.balancesPerAccounts | Yes | Object | This object contains details about Client's currencies' balances as to each account which satisfies request criteria. It might be empty object ("{}"), but this field should be present anyway and it should contain an object. If this field contains an empty object, then it means Client has no accounts which satisfy Client’s request criteria. |
data.balancesPerAccounts.X | No | Object | Represents an object which describes X account statuses for each currency. If X is ""(empty string), that means X is main account. Otherwise, it represents X sub-account. |
data.balancesPerAccounts.X.YYY | No | Object | Represents an object which describes X account statuses for YYY currency. |
data.balancesPerAccounts.X.YYY. balance | Yes | String (which can be parsed as Float) | Current X account balance in YYY currency. It includes balance which is reserved (locked) for active orders (please find this information in "balanceOnHold" field). |
data.balancesPerAccounts.X.YYY. balanceOnHold | Yes | String (which can be parsed as Float) | Current X account balance in YYY currency which is reserved (locked) for active orders. |
data.balancesPerAccounts.X.YYY. balanceAvailable | Yes | String (which can be parsed as Float) | Current X account balance in YYY currency which is available for trading. It is calculated as current X account balance in YYY currency plus overdraft limit for YYY currency (if enabled for the Client) and reduced by the X account balance amount in YYY currency, which is locked in open (active) orders. |
data.balancesPerAccounts.X.YYY. balanceInBaseCurrency | No | String (which can be parsed as Float) | Equivalent in base currency of current YYY currency balance on Client's X account. This amount is calculated according to CEX.IO Spot Trading indicative exchange rate of YYY currency to base currency. If credit line is not enabled for Client OR if current YYY currency balance on Client's X account is zero OR if CEX.IO Spot Trading failed to calculate such equivalent in base currency, then this field would be missing. |
data.balancesPerAccounts.X.YYY. balanceInConvertedCurrency | No | String (which can be parsed as Float) | Equivalent in converted currency of current YYY currency balance on Client's X account. This amount is calculated according to CEX.IO Spot Trading indicative exchange rate of YYY currency to base currency. If current YYY currency balance on Client's X account is zero OR if CEX.IO Spot Trading failed to calculate such equivalent in converted currency, then this field would be missing. |
data.error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Wallet Balance
This request allows Client to receive his CEX.IO Wallet balances, which can be useful for Client to check his current Wallet balances before depositing funds from to Spot Trading sub-accounts or after withdrawing funds from Spot Trading sub-accounts to CEX.IO Wallet account.
REQUEST
get_my_wallet_balance
API Rate Limit Cost: 5
API Key Permission
This method requires "Read" permission set for API Key.
Wallet Balance Request Parameters
Get My Wallet Balance - Successful request
Request (Client sends request to receive his Wallet account balances)
{
"e": "get_my_wallet_balance",
"oid": "186471243_get_my_wallet_balance",
"data": {}
}
Response (CEX.IO Spot Trading responds with Client's current balances in BTC, ETH, USD, EUR on his Wallet account)
{
"e": "get_my_wallet_balance",
"oid": "186471243_get_my_wallet_balance",
"ok": "ok",
"data": {
"BTC": {
"balance": "9.72101000"
},
"ETH": {
"balance": "10.000000"
},
"USD": {
"balance": "23567.02"
},
"EUR": {
"balance": "728.99"
}
}
}
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_my_wallet_balance" value is allowed here. |
oid | Yes | String | Unique ID of this request. |
data | Yes | Object | This object contains request details. Empty object should be sent to get Client's CEX.IO Wallet account balances. |
Wallet Balance Response Parameters
Field Name | Mandatory | Format | Description |
---|---|---|---|
e | Yes | String | Describes the type of this message. Only "get_my_wallet_balance" value is allowed here. |
oid | Yes | String | Unique ID of Client’s request, for which this message is in response to. |
ok | No | String | If this field is present, then request is successful. If this field is missing, then request is not successful. Only "ok" value is allowed here. |
data | Yes | Object | This object contains response details. |
XXX | Yes | Object | Represents an object which describes CEX.IO Wallet account status for XXX currency. |
XXX.balance | Yes | String (which can be parsed as Float) | Current CEX.IO Wallet account balance in XXX currency. |
data.error | No | String | If this field is present, then request is not successful. Represents human readable error reason of why request is not successful. |
Orders
This request allows Client to find out info about his orders.
REQUEST
get_my_orders
API Rate Limit Cost: 5
API Key Permission
This method requires “Read” permission set for API Key.
Orders Request Parameters
Get My Orders - All Open Orders
Request (Client sends request to find all his open orders for all pairs and all accounts)
{
"e": "get_my_orders",
"oid": "1465405014762_1_get_my_orders",
"data": {}
}
Response (CEX.IO Spot Trading responds that Client has 3 open orders)
{
"e": "get_my_orders",
"oid": "1465405014762_1_get_my_orders",
"ok": "ok",
"data": [
{
"orderId": "26", // Market BUY 0.01 BTC/USD with main account
"clientOrderId": "1465300456557-0",
"clientId": "BitFok",
"accountId": null,
"status": "NEW",
"currency1": "BTC",
"currency2": "USD",
"side": "BUY",
"orderType": "Market",
"timeInForce": null,
"comment": null,
"rejectCode": null,
"rejectReason": null,
"executedAmountCcy1": null,
"executedAmountCcy2": null,
"requestedAmountCcy1": "0.01000000",
"requestedAmountCcy2": null,
"feeAmount": null,
"feeCurrency": "USD",
"price": null,
"averagePrice": null,
"statusIsFinal": false,
"clientCreateTimestamp": 1516699748938,
"serverCreateTimestamp": 1516699748964,
"lastUpdateTimestamp": 1516699748983,
"initialOnHoldAmountCcy1": null,
"initialOnHoldAmountCcy2": "21.00000000",
"expireTime": null,
"effectiveTime": null
},
{
"orderId": "20", // Limit BUY 0.1 BTC/USD at price 400 with "hallo" sub-account
"clientOrderId": "1465299989578-0",
"clientId": "BitFok",
"accountId": "hallo",
"status": "NEW",
"currency1": "BTC",
"currency2": "USD",
"side": "BUY",
"orderType": "Limit",
"timeInForce": "GTC",
"comment": null,
"rejectCode": null,
"rejectReason": null,
"executedAmountCcy1": null,
"executedAmountCcy2": null,
"requestedAmountCcy1": "0.10000000",
"requestedAmountCcy2": null,
"feeAmount": null,
"feeCurrency": "USD",
"price": "400.0000",
"averagePrice": null,
"statusIsFinal": false,
"clientCreateTimestamp": 1516699748938,
"serverCreateTimestamp": 1516699748964,
"lastUpdateTimestamp": 1516699748983,
"initialOnHoldAmountCcy1": null,
"initialOnHoldAmountCcy2": "21.00000000",
"expireTime": null,
"effectiveTime": null
},
{
"orderId": "18", // Limit SELL 0.02 BTC/EUR at price 600 with main account
"clientOrderId": "1465299852968-0",
"clientId": "BitFok",
"accountId": null,
"status": "NEW",
"currency1": "BTC",
"currency2": "EUR",
"side": "SELL",
"orderType": "Limit",
"timeInForce": "GTC",
"comment": null,
"rejectCode": null,
"rejectReason": null,
"executedAmountCcy1": null,
"executedAmountCcy2": null,
"requestedAmountCcy1": "0.02000000",
"requestedAmountCcy2": null,
"feeAmount": null,
"feeCurrency": "EUR",
"price": "600.0000",
"averagePrice": null,
"statusIsFinal": false,
"clientCreateTimestamp": 1516699748938,
"serverCreateTimestamp": 1516699748964,
"lastUpdateTimestamp": 1516699748983,
"initialOnHoldAmountCcy1": "0.02000000",
"initialOnHoldAmountCcy2": null,
"expireTime": null,
"effectiveTime": null
}
]
}
Get My Orders - All Open Orders with Paging
Request (Client sends request to find all his open orders and wants to see the second page expecting the result set is chunked to pages size 2 (not more than 2 orders per page))
{
"e": "get_my_orders",
"oid": "1465405014762_1_get_my_orders",
"data": {
"pageSize": 2,
"pageNumber": 1
}
}
Response (supposed that Client has 3 open orders (like in previous example), CEX.IO Spot Trading responds with second page, which includes only the last single order)
{
"e": "get_my_orders",
"oid": "1465405014762_1_get_my_orders",
"ok": "ok",
"data": [
{
"orderId": "18",
"clientOrderId": "1465299852968-0",
"clientId": "BitFok",
"accountId": null,
"status": "NEW",
"currency1": "BTC",
"currency2": "EUR",
"side": "SELL",
"orderType": "Limit",
"timeInForce": "GTC",
"comment": null,
"rejectCode": null,
"rejectReason": null,
"executedAmountCcy1": null,
"executedAmountCcy2": null,
"requestedAmountCcy1": "0.02000000",
"requestedAmountCcy2": null,
"feeAmount": null,
"feeCurrency": "EUR",
"price": "600.0000",
"averagePrice": null,
"statusIsFinal": false,
"clientCreateTimestamp": 1516699748938,
"serverCreateTimestamp": 1516699748964,
"lastUpdateTimestamp": 1516699748983,
"initialOnHoldAmountCcy1": "0.02000000",
"initialOnHoldAmountCcy2": null,
"expireTime": null,
"effectiveTime": null
}
]
}
Get My Orders - All Open Orders for Selected Pair
Request (Client sends request to find all his open orders for "BTC-EUR" pair)
{
"e": "get_my_orders",
"oid": "1465405014762_1_get_my_orders",
"data": {
"pair": "BTC-EUR"
}
}
Response (CEX.IO Spot Trading responds that Client has 1 open order for BTC-EUR pair)
{
"e": "get_my_orders",
"oid": "1465405014762_1_get_my_orders",
"ok": "ok",
"data": [
{
"orderId": "18",
"clientOrderId": "1465299852968-0",
"clientId": "BitFok",
"accountId": null,
"status": "NEW",
"currency1": "BTC",
"currency2": "EUR",
"side": "SELL",
"orderType": "Limit",
"timeInForce": "GTC",
"comment": null,
"rejectCode": null,
"rejectReason": null,
"executedAmountCcy1": null,
"executedAmountCcy2": null,
"requestedAmountCcy1": "0.02000000",
"requestedAmountCcy2": null,
"feeAmount": null,
"feeCurrency": "EUR",
"price": "600.0000",
"averagePrice": null,
"statusIsFinal": false,
"clientCreateTimestamp": 1516699748938,
"serverCreateTimestamp": 1516699748964,
"lastUpdateTimestamp": 1516699748983,
"initialOnHoldAmountCcy1": "0.02000000",
"initialOnHoldAmountCcy2": null,
"expireTime": null,
"effectiveTime": null
}
]
}
Get My Orders - All Open Orders for Account and Pair
Request (Client sends request to find all his open orders for currency pair "BTC-USD" and for sub-accounts "hallo" or "superhat")
{
"e": "get_my_orders",
"oid": "1465405014762_1_get_my_orders",
"data": {
"accountIds": ["hallo", "superhat"],
"pair": "BTC-USD"
}
}
Response (CEX.IO Spot Trading responds that Client has only one open order that satisfies request criteria, this order is on "hallo" sub-account)
{
"e": "get_my_orders",
"oid": "1465405014762_1_get_my_orders",
"ok": "ok",
"data": [
{
"orderId": "20",
"clientOrderId": "1465299989578-0",
"clientId": "BitFok",
"accountId": "hallo",
"status": "NEW",
"currency1": "BTC",
"currency2": "USD",
"side": "BUY",
"orderType": "Limit",
"timeInForce": "GTC",
"comment": null,
"rejectCode": null,
"rejectReason": null,
"executedAmountCcy1": null,
"executedAmountCcy2": null,
"requestedAmountCcy1": "0.10000000",
"requestedAmountCcy2": null,
"feeAmount": null,
"feeCurrency": "USD",
"price": "400.0000",
"averagePrice": null,
"statusIsFinal": false,
"clientCreateTimestamp": 1516699748938,
"serverCreateTimestamp": 1516699748964,
"lastUpdateTimestamp": 1516699748983,
"initialOnHoldAmountCcy1": "0.02000000",
"initialOnHoldAmountCcy2": null,
"expireTime": null,
"effectiveTime": null
}
]
}
Get My Orders - Accounts, Paging, Period, Empty Result
Request (Client wants to see not more than 50 open orders from main account which were received by server between 2016-06-06T16:11:29 and 2016-06-07T08:53:09)
{
"e": "get_my_orders",
"oid": "2_1_get_my_orders",
"data": {
"accountIds": [""],
"pageSize": 50,
"serverCreateTimestampFrom": 1465229489578,
"serverCreateTimestampTo": 1465289589579
}
}
Response (CEX.IO Spot Trading responds that Client has no open orders, which satisfy request criteria)
{
"e": "get_my_orders",
"oid": "2_1_get_my_orders",
"ok": "ok",
"data": []
}
Get My Orders - All Archived Orders for Selected Side
Request (Client sends request to find all his archived orders)
{
"e": "get_my_orders",
"oid": "1465405014762_1_get_my_orders",
"data": {
"archived": true,
"side": "SELL",
"serverCreateTimestampFrom": 1516699048964,
"serverCreateTimestampTo": 1516699987501
}
}
Response (supposed that Client has 3 archived orders (like in previous example), CEX.IO Spot Trading responds to Client that he has 1 archived order which satisfies request criteria)
{
"e": "get_my_orders",
"oid": "1465405014762_1_get_my_orders",
"ok": "ok",
"data": [
{
"orderId": "18",
"clientOrderId": "1465299852968-0",
"clientId": "BitFok",
"accountId": null,
"status": "REJECTED",
"currency1": "BTC",
"currency2": "EUR",
"side": "SELL",
"orderType": "Limit",
"timeInForce": "GTC",
"comment": null,
"rejectCode": 403,
"rejectReason": "Insufficient funds",
"executedAmountCcy1": null,
"executedAmountCcy2": null,
"requestedAmountCcy1": "0.02000000",
"requestedAmountCcy2": null,
"feeAmount": null,
"feeCurrency": "EUR",
"price": "600.0000",
"averagePrice": null,
"statusIsFinal": true,
"clientCreateTimestamp": 1516699748938,
"serverCreateTimestamp": 1516699748964,
"lastUpdateTimestamp": 1516699748983,
"initialOnHoldAmountCcy1": "0.02000000",
"initialOnHoldAmountCcy2": null,
"expireTime": null,
"effectiveTime": null
}
]
}
Get My Order - Incorrect Request
Request (Client sends a request, but doesn't specify mandatory "data" field)
{
"e": "get_my_orders",
"oid": "1465409645363_1_get_my_orders"
}
Response (CEX.IO Spot Trading responds that error occurred. Note: "data" field hold an object value here, not the array)
{
"e": "get_my_orders",
"oid": "1465409645363_1_get_my_orders",
"data": {
"error": "Internal error"
}
}
Get My Order - Page Size is Too Big
Request (Client sends a request to get all archived orders and wishes to get first 5,000 orders list as a response to this request)
{
"e": "get_my_orders",
"oid": "1465477794024_1_get_my_orders",
"data": {
"archived": true,
"pageSize": 5000
}
}
Response (CEX.IO Spot Trading responds that such request is not allowed. Requested page size is too big, maximum allowed value is 1000)
{
"e": "get_my_orders",
"oid": "1465477794024_1_get_my_orders",
"data": {
"error": "Page size is limited to 1000 items"
}
}
Get My Order - Incorrect Archived Type
Request (Client made a request to get his open orders, however "archived" field value is a number)
{
"e": "get_my_orders",
"oid": "1465478161261_1_get_my_orders",
"data": {
"archived": 0
}
}
Response (CEX.IO Spot Trading responds that such request is not allowed. Field "archived" should be either true, or false, or it should be missing)
{
"e"