Crypto.com Exchange API v1
Welcome
Welcome to the Crypto.com Exchange API v1 reference documentation.
The Crypto.com Exchange API v1 provides developers with a REST and WebSocket API. The majority of API calls are available across both mediums in the same request and response formats, allowing smooth transition and a reduced learning curve between the two platforms.
The majority of API calls are available across both mediums in the same request and response formats, allowing smooth transition and a reduced learning curve between the two platforms.
Where applicable, all API calls come with detailed information on both the request and response parameters, all in a simple JSON format, as well as sample requests and code snippets in JavaScript, Python which can be viewed on the right.
Notes on Exchange Upgrade and API Versions
- Exchange v1 API is the latest version of API which can trade Spot / Derivatives / Margin.
- Derivatives v1 API has been upgraded into Exchange v1 API with additional capabilities for Spot Trading / Margin Trading / Wallet Management. As Exchange v1 API is a superset of Derivatives v1 API, existing customer can continue using the same for trading.
- For full details about the exchange upgrade, please refer to this (blog post)[https://crypto.com/product-news/introducing-the-gen-3-0-crypto-com-exchange] with FAQ documents.
Breaking Change Schedule
-
On 2025-12-17 8:00 UTC,
The current trigger order creation/cancellation will be migrated to Advanced Order Management API. -
On 2025-02-27 8:00 UTC,
Forbook.{instrument_name}.{depth}, the full snapshot subscription (book_subscription_type=SNAPSHOT)100msfrequency is removed.
Customers wishing to continue with the faster100msfrequency should switch to the delta subscription (book_subscription_type=SNAPSHOT_AND_UPDATE).
This higher performing subscription benefits the user with reduced bandwidth/processing compared to the snapshot subscription.
For a transition period, users subscribing to the removed100mssnapshot will receive the500mssubscription.The
book.{instrument_name}subscription (default depth) will be removed.
Customers should use the explicitbook.{instrument_name}.{depth}subscription and specify the required depth.For a transition period, users subscribing to the removed subscription will receive the default
50depth subscription. -
These changes will take place around 17 December 2023 8:00 UTC.
-
Market Data wildcard ticker subscription will be removed. Users should use the instrument specific subscription.
Change Log
- 2026-05-21
public/get-instrumentsresponse updated, new fieldproduct_typewas added- Trading Bot API section was added:
private/bot/create-trading-bot(DCA, TWAP, GRID, FUNDING_ARBITRAGE)private/bot/terminate-trading-botprivate/bot/update-trading-botprivate/bot/pause-trading-botprivate/bot/resume-trading-botprivate/bot/get-trading-botsprivate/bot/get-trading-bot-executions
- 2026-05-07
- Advanced Order Management API section was updated for DerivAttach
private/advanced/create-otoandprivate/advanced/create-otoco— contingency type is now resolved from instrument type: spot instruments create SPOT_ATTACH, derivative instruments create DERIV_ATTACH. DerivAttach supportsisolation_id,leverage,isolated_margin_amounton the primary leg andISOLATED_MARGINinexec_inst. Trigger legs inherit isolation mode from the parent.private/advanced/create-order—attach_order_idnow applies to both SpotAttach and DerivAttach. New optional fieldattach_isolation_idfor DerivAttach attach-to-position (derivatives only).private/advanced/cancel-otoandprivate/advanced/cancel-otoco— updated to cover both SPOT_ATTACH and DERIV_ATTACH.private/advanced/cancel-all-orders— new optional fieldposition_type(CROSS_MARGIN, ISOLATED_MARGIN).private/advanced/get-open-orders,private/advanced/get-order-detail,private/advanced/get-order-history, anduser.advance.order— response attributes extended withexchange_order_id,ref_price,ref_price_type,reject_reason,attach_isolation_id,isolation_id,isolation_type,leverage,isolated_margin_amount.contingency_typenow includes DERIV_ATTACH.private/advanced/amend-order— corrected required/optional flags:new_priceis Y,new_quantityis Y,new_ref_priceis N.
- 2026-04-29
- Fee Credits
private/get-fee-credit-balanceswas addedprivate/get-tradesresponse updated, new fieldfee_creditswas addeduser.trade.{instrument_name}response updated, new fieldfee_creditswas added
- 2026-04-07
private/get-accountsresponse updated, new fieldhierarchywas added
- 2026-04-01
private/create-orderrequest updated,REDUCE_ONLYwas added toexec_inst
- 2026-01-08
- Add support for isolated position
private/create-isolated-margin-transferwas addedprivate/change-isolated-margin-leveragewas addedprivate/user-balanceresponse updated, new fieldstotal_isolated_cash_balanceandisolated_positionswere addedprivate/user-balance-historyresponse updated, new fieldiwas addedprivate/get-subaccount-balancesresponse updated, new fieldstotal_isolated_cash_balanceandisolated_positionswere addedprivate/get-positionsresponse updated, new fieldsisolation_idandisolation_typewere addedprivate/create-orderrequest updated, new optional fieldsisolation_id,leverage,isolated_margin_amountwere added,exec_instadded support forISOALTED_MARGINprivate/close-positionrequest updated, new optional fieldisolation_idwas addedprivate/get-open-ordersresponse updated, new fieldsisolation_idandisolation_typewere addedprivate/get-order-detailresponse updated, new fieldsisolation_idandisolation_typewere addedprivate/get-order-historyrequest updated, new optional fieldisolation_idwas added, response updated, new fieldsisolation_idandisolation_typewere addedprivate/get-tradesrequest updated, new optional fieldisolation_idwas added, response updated, new fieldsisolation_idandisolation_typewere addedprivate/get-transactionsrequest updated, new optional fieldisolation_idwas added, response updated, new fieldsisolation_idandisolation_typewere addeduser.order.{instrument_name}response updated, new fieldsisolation_idandisolation_typewere addeduser.trade.{instrument_name}response updated, new fieldsisolation_idandisolation_typewere addeduser.balanceresponse updated, new fieldstotal_isolated_cash_balanceandisolated_positionswere addeduser.positionsresponse updated, new fieldsisolation_id,leverage,isolation_type,liquidation_priceandisolated_margin_balancewere addeduser.account_riskresponse updated, new fieldstotal_isolated_cash_balance,isolated_positionswere addeduser.position_balanceresponse updated, new fieldisolated_positionswas added
- 2025-03-26
transaction_timewas added intouser.order.{instrument_name}
- 2025-11-18
public/get-risk-parameterswas added new columns
- 2025-10-16
Advanced Order Management APIsection was updated
- 2025-07-17
private/fiat/fiat-deposit-infowas addedprivate/fiat/fiat-deposit-historywas addedprivate/fiat/fiat-withdraw-historywas addedprivate/fiat/fiat-create-withdrawwas addedprivate/fiat/fiat-get-bank-accountswas addedprivate/fiat/fiat-transaction-quotawas addedprivate/fiat/fiat-transaction-limitwas added
- 2025-07-04
private/create-orderexec_inst was addedSMART_POST_ONLYprivate/create-order-list (LIST)exec_inst was addedSMART_POST_ONLYprivate/get-open-ordersexec_inst was addedSMART_POST_ONLYprivate/get-order-detailwas added, exec_inst was addedSMART_POST_ONLYprivate/get-order-historyexec_inst was addedSMART_POST_ONLY
- 2025-06-10
private/amend-orderwas addedpublic/get-announcementswas added
- 2025-05-29
- transaction_time_ns field was added into
user.order.{instrument_name}response
- transaction_time_ns field was added into
- 2025-03-14
- Removed deprecated attributes system_label in
private/get-accounts
- Removed deprecated attributes system_label in
- 2025-03-06
- Removed deprecated
book.{instrument_name}default book subscription - Removed deprecated 100ms interval from full snapshot
book.{instrument_name}.{depth}book subscription
- Removed deprecated
- 2025-03-04
- Remove section:
Unified Wallet and System Label
- Remove section:
- 2025-01-27
book.{instrument_name}.{depth}- The following additional update frequencies are now supported:
Full snapshot subscription (book_subscription_type=SNAPSHOT)500ms
Delta subscription (book_subscription_type=SNAPSHOT_AND_UPDATE)100ms
- 2024-12-11
private/create-orderfee_instrument_name was added
- 2024-10-02
public/get-risk-parameterswas added
- 2024-08-15
private/get-fee-ratewas addedprivate/get-instrument-fee-ratewas added
- 2024-07-12
- Staking API added:
private/staking/stake
private/staking/unstake
private/staking/get-staking-position
private/staking/get-staking-instruments
private/staking/get-open-stake
private/staking/get-stake-history
private/staking/get-reward-history
private/staking/convert
private/staking/get-open-convert
private/staking/get-convert-history
public/staking/get-conversion-rate
- Staking API added:
- 2024-06-27
private/create-orderself-trade prevent (STP) was addedprivate/create-order-list (LIST)self-trade prevent (STP) was added
- 2024-02-12
public/get-trades,trade.{instrument_name}subscription, clarification for the public trade side field- Side is the side of the taker order
book.{instrument_name}.{depth}clarifications for book delta sequence number handling and re-subscription
- 2024-01-04
- Market data websocket subscription enhancements:
book.{instrument_name}- Thesubscriptionresult value is now explicit
e.g. previous"subscription": "book.BTC_USD"-> new"subscription": "book.BTC_USD.50"book.{instrument_name}.{depth}- For delta updates, the fixed 500ms delta full book snapshot heartbeat is replaced with empty delta in the case of no book changesticker- Documented existing 'bs' and 'ks' fields (bid/ask size)settlement- For wildcard subscription, thesubscriptionresult value is now explicit
e.g. previous"subscription": "settlement"-> new"subscription": "settlement.BTCUSD-231124"- Applied consistent field ordering for all market data subscriptions (
book,ticker,trade,candlestick,index,mark,settlement,funding,estimatedfunding).
Result fields are always in the following order:
id, method, code, instrument_name, subscription, channel - Market data REST
public/get-trades - Added additional
tnnanoseconds timestamp field to the trade response - Clarified timestamp pagination parameters
- 2023-12-18
- Market Data wildcard ticker subscription removed. Users should use the instrument specific subscription.
- 2023-12-11
- Introduced Market Data subscription limiting. Refer to Market Data Websocket Subscription Limits for more details
- 2023-10-31
user.balance,private/user-balancewill be updated:- Existing field total_margin_balance will represent new margin balance calculation without haircut.
- Existing field total_initial_margin previously is made up of position IM only. On effective date, this field will represent the total sum of total_position_im + total_haircut
- New field total_position_im will be introduced to represent initial margin requirement to support open positions and orders
- New field total_haircut will be introduced to represent the total haircut on eligible collateral token assets. Refer to Smart Cross Margin Enhancement Guide for details
user.balance,user.account_risk,private/user-balance,private/get-subaccount-balanceswill be updated:- New field collateral_eligible will be introduced to indicate if token is eligible Collateral
- collateral_weight will be deprecated
- New field haircut will be introduced to show haircut of eligible collateral token instead of collateral Weight. Refer to Smart Cross Margin Enhancement Guide for details
- 2023-08-11
private/create-order-list (LIST)for batch order creation addedprivate/cancel-order-list (LIST)for batch order cancel added
- 2023-07-31
- Market Data Websocket Subscriptions is effective:
funding.{instrument_name}- channel will return the fixed hourly rate that will settle at the end of the hour.estimatedfunding.{instrument_name}- channel will return the estimated hourly rate that will begin in the next interval.- Added new "funding_rate" and "estimated_funding_rate" valuation types for public/get-valuations
- 2023-06-28
private/get-deposit-historyaddedprivate/get-withdrawal-historyadded
- 2022-11-30
- Support using
client_oidto query inprivate/get-order-detailREST API
- Support using
- 2022-11-10
USD_Stable_Coin(aka USD Bundle), will be renamed asUSD. Customer can test the change in UAT from 2022-11-10 before the change is effective in PROD. Target date for PROD is TBD.- Customer can input both
USDandUSD_Stable_Cointo mean the same USD Bundle. - However, on response,
USDwill be used to mean USD Bundle, instead ofUSD_Stable_Coin.
- 2022-10-31
- Added
private/create-order-list,private/create-subaccount-transferREST APIs - Added
user.account_riskanduser.position_balanceWebSocket subscriptions - Added more
periodinpublic/get-candlestickcandlestick.{time_frame}.{instrument_name}WebSocket subscription
- Added
- 2022-09-21 - Added Unified Wallet and System Label section, to illustrate the transition from multiple wallets into unified wallet.
- 2022-09-21 - Added new sub-account management endpoints:
private/get-accounts,private/create-subaccount-transfer - 2022-09-21 - Added new exchange wallet management endpoints:
private/create-withdrawal,private/get-deposit-address,private/get-curency-networks - 2022-09-21 - First publish, based on Derivative Exchange API v1.
Common API References
Naming Conventions
- All methods and URLs in dash-case
- All parameters in snake_case
- Enums in full UPPERCASE and snake_case
Generating the API Key
Before sending any requests, generate a new API key on the Exchange website under User Center → API. Note down:
- API Key
- Secret Key
Default settings are "Can Read" only; you can add or remove permissions via the Web UI. You may optionally specify a whitelist of IP addresses; if set, the API can only be used from those IPs.
REST API Root Endpoints
REST API requests must be sent with Content-Type: application/json.
| Environment | REST API |
|---|---|
| UAT Sandbox | https://uat-api.3ona.co/exchange/v1/{method} |
| Production | https://api.crypto.com/exchange/v1/{method} |
Websocket Root Endpoints
| Environment | Websocket (User API) |
|---|---|
| UAT Sandbox | wss://uat-stream.3ona.co/exchange/v1/user |
| Production | wss://stream.crypto.com/exchange/v1/user |
| Environment | Websocket (Market Data) |
|---|---|
| UAT Sandbox | wss://uat-stream.3ona.co/exchange/v1/market |
| Production | wss://stream.crypto.com/exchange/v1/market |
Rate Limits
REST API
For authenticated calls, rate limits are per API method, per API key:
| Method | Limit |
|---|---|
private/create-order, private/cancel-order, private/cancel-all-orders | 15 requests per 100ms each |
private/get-order-detail | 30 requests per 100ms |
private/get-trades | 1 request per second |
private/get-order-history | 1 request per second |
| All others | 3 requests per 100ms each |
For public market data calls, rate limits are per API method, per IP address:
| Method | Limit |
|---|---|
| All | 100 requests per second each |
Staking
| Method | Limit |
|---|---|
| All | 50 requests per second each |
Websocket
| Method | Limit |
|---|---|
| User API | 150 requests per second |
| Market Data | 100 requests per second |
Request Format
The following information applies to both REST API and websockets commands:
| Name | Type | Required | Description |
|---|---|---|---|
| id | long | Y | Request identifier (0 to 9,223,372,036,854,775,807). Response echoes the same id. |
| method | string | Y | The method to be invoked (e.g. private/get-order-detail). |
| params | object | Y | Parameters for the method. Use {} when a method has no parameters. |
| api_key | string | Depends | API key. Required for private methods (see Digital Signature). |
| sig | string | Depends | Digital signature. Required for private methods. |
| nonce | long | Y | Current timestamp in milliseconds since the Unix epoch. |
⚠️ All numbers must be strings, and must be wrapped in double quotes. e.g. "12.34", instead of 12.34.
Digital Signature
For REST API, only private methods require a digital signature (as sig) and API key (as api_key) to be passed in. These private endpoints are only accessible by authenticated users.
For WebSocket (User API), the public/auth command has to be invoked once per session, with the digital signature (as sig) and API key (as api_key) as part of the request. Once authenticated, you will gain access to user-specific commands and no longer need to pass in the digital signature and API key for the duration of the session.
The authentication is based on the pairing of the API Key, along with the HMAC-SHA256 hash of the request parameters using the API Secret as the cryptographic key.
⚠️ You should NEVER explicitly include the API Secret Key in plain-text in your request
The algorithm for generating the HMAC-SHA256 signature is as follows:
- If "params" exist in the request, sort the request parameter keys in ascending order.
- Combine all the ordered parameter keys as key + value (no spaces, no delimiters). Let's call this the parameter string
- Next, do the following: method + id + api_key + parameter string + nonce
- Use HMAC-SHA256 to hash the above using the API Secret as the cryptographic key
- Encode the output as a hex string -- this is your Digital Signature
Since all parameters for calculating the HMAC-SHA256 hash are present in the request except the API Secret, the server-side will independently calculate the Digital Signature as well, and if done correctly, the computed hashes will match.
Besides, for JavaScript client calling private/get-order-detail API, it is highly recommended to use STRING format of order_id in the JSON request payload, in order to guarantee the correctness of Digital Signature.
JavaScript Example
const crypto = require("crypto-js");
const signRequest = (request_body, api_key, secret) => {
const { id, method, params, nonce } = request_body;
function isObject(obj) {
return obj !== undefined && obj !== null && obj.constructor == Object;
}
function isArray(obj) {
return obj !== undefined && obj !== null && obj.constructor == Array;
}
function arrayToString(obj) {
return obj.reduce((a,b) => { return a + (isObject(b) ? objectToString(b) : (isArray(b) ? arrayToString(b) : b)); }, "");
}
function objectToString(obj) {
return (obj == null ? "" : Object.keys(obj).sort().reduce((a, b) => {
return a + b + (isArray(obj[b]) ? arrayToString(obj[b]) : (isObject(obj[b]) ? objectToString(obj[b]) : obj[b]));
}, ""));
}
const paramsString = objectToString(params);
const sigPayload = method + id + api_key + paramsString + nonce;
request_body.sig = crypto.HmacSHA256(sigPayload, secret).toString(crypto.enc.Hex);
return request_body;
};
const apiKey = "token"; /* User API Key */
const apiSecret = "secretKey"; /* User API Secret */
let request = {
id: "11",
method: "private/get-order-detail",
api_key: apiKey,
params: {
order_id: "53287421324"
},
nonce: "1587846358253",
};
const requestBody = JSON.stringify(signRequest(request, apiKey, apiSecret));
Python Example
import hmac
import hashlib
import time
API_KEY = "API_KEY"
SECRET_KEY = "SECRET_KEY"
req = {
"id": "14",
"method": "private/create-order-list",
"api_key": API_KEY,
"params": {
"contingency_type": "LIST",
"order_list": [
{
"instrument_name": "ONE_USDT",
"side": "BUY",
"type": "LIMIT",
"price": "0.24",
"quantity": "1.0"
},
{
"instrument_name": "ONE_USDT",
"side": "BUY",
"type": "STOP_LIMIT",
"price": "0.27",
"quantity": "1.0",
"trigger_price": "0.26"
}
]
},
"nonce": str(int(time.time() * 1000))
}
# First ensure the params are alphabetically sorted by key
param_str = ""
MAX_LEVEL = 3
def params_to_str(obj, level):
if level >= MAX_LEVEL:
return str(obj)
return_str = ""
for key in sorted(obj):
return_str += key
if obj[key] is None:
return_str += 'null'
elif isinstance(obj[key], list):
for subObj in obj[key]:
return_str += params_to_str(subObj, level + 1)
else:
return_str += str(obj[key])
return return_str
if "params" in req:
param_str = params_to_str(req['params'], 0)
payload_str = req['method'] + str(req['id']) + req['api_key'] + param_str + str(req['nonce'])
req['sig'] = hmac.new(
bytes(str(SECRET_KEY), 'utf-8'),
msg=bytes(payload_str, 'utf-8'),
digestmod=hashlib.sha256
).hexdigest()
C# Example
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
private const string API_KEY = "YOUR_API_KEY";
private const string API_SECRET = "YOUR_API_SECRET";
private static string GetSign(Dictionary<string, object> request)
{
var paramsDict = request["params"] as Dictionary<string, object>;
// Ensure the params are alphabetically sorted by key
// Note: For nested objects or lists, implement recursive sorting similar to JS/Python examples
string paramString = paramsDict != null
? string.Join("", paramsDict.Keys.OrderBy(key => key).Select(key => key + paramsDict[key]))
: "";
string sigPayload = request["method"].ToString()
+ request["id"].ToString()
+ API_KEY
+ paramString
+ request["nonce"].ToString();
using (var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(API_SECRET)))
{
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(sigPayload));
return BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
}
}
Java Example
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Map;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ApiRequestJson {
private Long id;
private String method;
private Map<String, Object> params;
private String sig;
@JsonProperty("api_key")
private String apiKey;
private Long nonce;
}
//------------
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Hex;
public class SigningUtil {
private static final String HMAC_SHA256 = "HmacSHA256";
private static final int MAX_LEVEL = 3;
public static boolean verifySignature(ApiRequestJson apiRequestJson, String secret) {
try {
return genSignature(apiRequestJson, secret).equalsIgnoreCase(apiRequestJson.getSig());
} catch (Exception e) {
return false;
}
}
@SuppressWarnings("unchecked")
public static String getParamString(final Object paramObject) {
StringBuilder sb = new StringBuilder();
appendParamString(sb, paramObject, 0);
return sb.toString();
}
@SuppressWarnings("unchecked")
private static void appendParamString(final StringBuilder paramsStringBuilder, final Object paramObject, final int level) {
if (level >= MAX_LEVEL) {
paramsStringBuilder.append(paramObject.toString());
return;
}
if (paramObject instanceof Map) {
TreeMap<String, Object> params = new TreeMap<>((Map) paramObject);
for (Map.Entry<String, Object> entry : params.entrySet()) {
if (entry.getValue() instanceof Double) {
paramsStringBuilder
.append(entry.getKey())
.append((new BigDecimal(entry.getValue().toString()))
.stripTrailingZeros()
.toPlainString());
} else if (entry.getValue() instanceof List || entry.getValue() instanceof Map) {
paramsStringBuilder
.append(entry.getKey());
appendParamString(paramsStringBuilder, entry.getValue(), level + 1);
} else {
paramsStringBuilder
.append(entry.getKey())
.append(entry.getValue());
}
}
} else if (paramObject instanceof List) {
List list = (List) paramObject;
for (Object o : list) {
appendParamString(paramsStringBuilder, o, level + 1);
}
} else {
paramsStringBuilder.append(paramObject.toString());
}
}
public static String genSignature(ApiRequestJson apiRequestJson, String secret)
throws NoSuchAlgorithmException, InvalidKeyException {
final byte[] byteKey = secret.getBytes(StandardCharsets.UTF_8);
Mac mac = Mac.getInstance(HMAC_SHA256);
SecretKeySpec keySpec = new SecretKeySpec(byteKey, HMAC_SHA256);
mac.init(keySpec);
String paramsString = "";
if (apiRequestJson.getParams() != null) {
paramsString += getParamString(apiRequestJson.getParams());
}
String sigPayload =
apiRequestJson.getMethod()
+ apiRequestJson.getId()
+ apiRequestJson.getApiKey()
+ paramsString
+ (apiRequestJson.getNonce() == null ? "" : apiRequestJson.getNonce());
byte[] macData = mac.doFinal(sigPayload.getBytes(StandardCharsets.UTF_8));
return Hex.encodeHexString(macData);
}
public static ApiRequestJson sign(ApiRequestJson apiRequestJson, String secret)
throws InvalidKeyException, NoSuchAlgorithmException {
apiRequestJson.setSig(genSignature(apiRequestJson, secret));
return apiRequestJson;
}
public static void main(String[] argv) throws InvalidKeyException, NoSuchAlgorithmException {
ApiRequestJson apiRequestJson = ApiRequestJson.builder()
.id(11L)
.apiKey("token")
.method("public/auth")
.nonce(1589594102779L)
.build();
System.out.println(genSignature(apiRequestJson, "secretKey"));
System.out.println(sign(apiRequestJson, "secretKey"));
}
}
Response Format
| Name | Type | Description |
|---|---|---|
| id | long | Original request identifier (or -1 if omitted in request). |
| method | string | Method invoked. |
| result | object | Result object (present on success). |
| code | int | 0 for success; see Response and Reason Codes |
| message | string | Optional; server or error message. |
| original | string | Optional; original request as escaped string (for error cases). |
Response and Reason Codes
200 OK
| HTTP Status | Code | Message Code / Description |
|---|---|---|
| 200 | 0 | --: Success |
| 200 | 40401 | NOT_FOUND: Not found |
| 200 | 43012 | SELF_TRADE_PREVENTION: Canceled due to Self Trade Prevention |
400 Bad Request
| HTTP Status | Code | Message Code / Description |
|---|---|---|
| 400 | 202 | ACCOUNT_IS_SUSPENDED: Account is suspended |
| 400 | 204 | DUPLICATE_CLORDID: Duplicate client order id |
| 400 | 207 | NO_MARK_PRICE: No mark price |
| 400 | 208 | INSTRUMENT_NOT_TRADABLE: Instrument is not tradable |
| 400 | 209 | INVALID_INSTRUMENT: Instrument is invalid |
| 400 | 213 | INVALID_ORDERQTY: Invalid order quantity |
| 400 | 218 | INVALID_ORDTYPE: Invalid order_type |
| 400 | 220 | INVALID_SIDE: Invalid side |
| 400 | 221 | INVALID_TIF: Invalid time_in_force |
| 400 | 222 | STALE_MARK_PRICE: Stale mark price |
| 400 | 223 | NO_CLORDID: No client order id |
| 400 | 224 | REJ_BY_MATCHING_ENGINE: Rejected by matching engine |
| 400 | 225 | EXCEED_MAXIMUM_ENTRY_LEVERAGE: Exceeds maximum entry leverage |
| 400 | 226 | INVALID_LEVERAGE: Invalid leverage |
| 400 | 227 | INVALID_SLIPPAGE: Invalid slippage |
| 400 | 228 | INVALID_FLOOR_PRICE: Invalid floor price |
| 400 | 229 | INVALID_REF_PRICE: Invalid ref price |
| 400 | 230 | INVALID_REF_PRICE_TYPE: Invalid ref price type |
| 400 | 308 | INVALID_PRICE: Invalid price |
| 400 | 314 | EXCEEDS_MAX_ORDER_SIZE: Exceeds max order size |
| 400 | 315 | FAR_AWAY_LIMIT_PRICE: Far away limit price |
| 400 | 318 | EXCEEDS_MAX_ALLOWED_ORDERS: Exceeds max allowed orders |
| 400 | 319 | EXCEEDS_MAX_POSITION_SIZE: Exceeds max position size |
| 400 | 401 | ACCOUNT_DOES_NOT_EXIST: Account does not exist |
| 400 | 408 | MARGIN_UNIT_IS_SUSPENDED: Margin unit is suspended |
| 400 | 30024 | MAX_AMOUNT_VIOLATED: If create-withdrawal call quantity > max_withdrawal_balance in user-balance api |
| 400 | 40001 | BAD_REQUEST: Bad request |
| 400 | 40002 | METHOD_NOT_FOUND: Method not found |
| 400 | 40003 | INVALID_REQUEST: Invalid request |
| 400 | 40004 | MISSING_OR_INVALID_ARGUMENT: Required argument is blank or missing |
| 400 | 40005 | INVALID_DATE: Invalid date |
| 400 | 40006 | DUPLICATE_REQUEST: Duplicate request received |
| 400 | 40102 | INVALID_NONCE: Nonce value differs by more than 60 seconds |
| 400 | 40107 | EXCEED_MAX_SUBSCRIPTIONS: Session subscription limit has been exceeded |
| 400 | 50001 | ERR_INTERNAL: Internal error |
| 400 | 50002 | DW_CREDIT_LINE_NOT_MAINTAINED: If create-withdrawal call breaches credit line check |
401 Unauthorized
| HTTP Status | Code | Message Code / Description |
|---|---|---|
| 401 | 40101 | UNAUTHORIZED: Not authenticated, or key/signature incorrect |
| 401 | 40103 | IP_ILLEGAL: IP address not whitelisted |
| 401 | 40104 | USER_TIER_INVALID: Disallowed based on user tier |
408 Request Timeout
| HTTP Status | Code | Message Code / Description |
|---|---|---|
| 408 | 40801 | REQUEST_TIMEOUT: Request has timed out |
429 Too Many Requests
| HTTP Status | Code | Message Code / Description |
|---|---|---|
| 429 | 42901 | TOO_MANY_REQUESTS: Requests have exceeded rate limits |
500 Internal Server Error
| HTTP Status | Code | Message Code / Description |
|---|---|---|
| 500 | 201 | NO_POSITION: No position |
| 500 | 203 | ACCOUNTS_DO_NOT_MATCH: Accounts do not match |
| 500 | 205 | DUPLICATE_ORDERID: Duplicate order id |
| 500 | 206 | INSTRUMENT_EXPIRED: Instrument has expired |
| 500 | 210 | INVALID_ACCOUNT: Account is invalid |
| 500 | 211 | INVALID_CURRENCY: Currency is invalid |
| 500 | 212 | INVALID_ORDERID: Invalid order id |
| 500 | 214 | INVALID_SETTLE_CURRENCY: Invalid settlement currency |
| 500 | 215 | INVALID_FEE_CURRENCY: Invalid fee currency |
| 500 | 216 | INVALID_POSITION_QTY: Invalid position quantity |
| 500 | 217 | INVALID_OPEN_QTY: Invalid open quantity |
| 500 | 219 | INVALID_EXECINST: Invalid exec_inst |
| 500 | 301 | ACCOUNT_IS_IN_MARGIN_CALL: Account is in margin call |
| 500 | 302 | EXCEEDS_ACCOUNT_RISK_LIMIT: Exceeds account risk limit |
| 500 | 303 | EXCEEDS_POSITION_RISK_LIMIT: Exceeds position risk limit |
| 500 | 304 | ORDER_WILL_LEAD_TO_IMMEDIATE_LIQUIDATION: Order will lead to immediate liquidation |
| 500 | 305 | ORDER_WILL_TRIGGER_MARGIN_CALL: Order will trigger margin call |
| 500 | 306 | INSUFFICIENT_AVAILABLE_BALANCE: Insufficient available balance |
| 500 | 307 | INVALID_ORDSTATUS: Invalid order status |
| 500 | 309 | MARKET_IS_NOT_OPEN: Market is not open |
| 500 | 310 | ORDER_PRICE_BEYOND_LIQUIDATION_PRICE: Order price beyond liquidation price |
| 500 | 311 | POSITION_IS_IN_LIQUIDATION: Position is in liquidation |
| 500 | 312 | ORDER_PRICE_GREATER_THAN_LIMITUPPRICE: Order price is greater than the limit up price |
| 500 | 313 | ORDER_PRICE_LESS_THAN_LIMITDOWNPRICE: Order price is less than the limit down price |
| 500 | 316 | NO_ACTIVE_ORDER: No active order |
| 500 | 317 | POSITION_NO_EXIST: Position does not exist |
| 500 | 320 | EXCEEDS_INITIAL_MARGIN: Exceeds initial margin |
| 500 | 321 | EXCEEDS_MAX_AVAILABLE_BALANCE: Exceeds maximum available balance |
| 500 | 406 | ACCOUNT_IS_NOT_ACTIVE: Account is not active |
| 500 | 407 | MARGIN_UNIT_DOES_NOT_EXIST: Margin unit does not exist |
| 500 | 409 | INVALID_USER: Invalid user |
| 500 | 410 | USER_IS_NOT_ACTIVE: User is not active |
| 500 | 411 | USER_NO_DERIV_ACCESS: User does not have derivative access |
| 500 | 412 | ACCOUNT_NO_DERIV_ACCESS: Account does not have derivative access |
| 500 | 415 | BELOW_MIN_ORDER_SIZE: Below Min. Order Size |
| 500 | 501 | EXCEED_MAXIMUM_EFFECTIVE_LEVERAGE: Exceeds maximum effective leverage |
| 500 | 604 | INVALID_COLLATERAL_PRICE: Invalid collateral price |
| 500 | 605 | INVALID_MARGIN_CALC: Invalid margin calculation |
| 500 | 606 | EXCEED_ALLOWED_SLIPPAGE: Exceed allowed slippage |
| 500 | 613 | INVALID_ISOLATION_ID: Invalid isolation ID |
| 500 | 614 | EXCEEDS_ISOLATED_POSITION_LIMIT: Exceeds maximum allowed number of isolated position |
| 500 | 615 | ACCOUNT_DOES_NOT_SUPPORT_ISOLATED_POSITION: Account does not support isolated position |
| 500 | 616 | CREATE_ISOLATED_POSITION_FAILED: Failed to create isolated position |
| 500 | 617 | DUPLICATED_INSTRUMENT_ORDER_FOR_ISOLATED_MARGIN: Account already have isolated position with same instrument |
| 500 | 618 | TOO_MANY_PENDING_ISOLATED_MARGIN_REQUESTS: Exceeds request limit for isolated margin order |
| 500 | 619 | UNSUPPORTED_OPERATION_ON_ISOLATED_POSITION: Unsupported operation on isolated position |
| 500 | 620 | CREATE_ISOLATED_POSITION_TIMEOUT: Request for create isolated position has timed out |
| 400 | 1110 | REDUCE_ONLY_REJECTED: Rejected REDUCE_ONLY create-order request |
| 500 | 43003 | FILL_OR_KILL: FOK order has not been filled and cancelled |
| 500 | 43004 | IMMEDIATE_OR_CANCEL: IOC order has not been filled and cancelled |
| 500 | 43005 | POST_ONLY_REJ: Rejected POST_ONLY create-order request (normally happened when exec_inst contains POST_ONLY but time_in_force is NOT GOOD_TILL_CANCEL) |
| 500 | 120009 | REJECTED: Request rejected by upstream service |
| 500 | 130008 | NON_APPLICABLE: Operation not applicable for current state |
Websocket Termination Codes
| Code | Description |
|---|---|
| 1000 | Normal disconnection by server, usually when the heartbeat isn't handled properly |
| 1006 | Abnormal disconnection |
| 1013 | Server restarting -- try again later |
Error Response Format
Due to the asynchronous nature of websocket requests, a robust and consistent error response is crucial in order to match the response with the request.
To ensure API consistency for websocket error responses, if the id and method is omitted in the original request, id will have a value of -1 and method will have a value of ERROR.
The original request will be returned as an escaped string in the original field.
Common Issues
TOO_MANY_REQUESTS After Websocket Connects
Websocket rate limits are pro-rated based on the calendar-second that the websocket connection was opened.
This means, depending on the fraction of the calendar-second that the connection was established, the rate limit could be pro-rated to a small number.
By adding a 1-second sleep after establishing the websocket connection, and before requests are sent, this will ensure the rate limit is properly reset and sync'd to your session.
This will avoid occurrences of rate-limit (TOO_MANY_REQUESTS) errors.
INVALID_NONCE On All Requests
The nonce should be the UTC Unix timestamp in milliseconds.
If this has been carefully checked, then the issue occurs when the system clock of the client machine is greater than 60 seconds in the future / past.
Usually, re-syncing with the NTP time server on the client machine will correct the issue.
If the issue persists, you can try deliberately subtracting N seconds from the nonce to force it to be N seconds in the past, which is still within the 60-second past tolerance.
Reference and Market Data
Reference and market data endpoints provide public, unauthenticated access to instrument metadata, real-time market data, and historical pricing information. These endpoints form the foundation for price discovery, order book analysis, and trading decision workflows.
Core Data Types
Instrument Reference Data
Use public/get-instruments to retrieve the full catalog of tradable instruments. Each instrument includes:
- Contract specifications (tick size, quantity decimals, leverage limits)
- Product classification (perpetual swap, future, option)
- Trading status and expiry information
- Underlying index reference
This endpoint should be called on application startup and periodically refreshed to detect new listings or contract expirations.
Real-Time Market Data
| Endpoint | Use Case | Update Frequency |
|---|---|---|
public/get-book | Order book depth (bids/asks) | Snapshot on request (up to 50 levels) |
public/get-tickers | 24h summary (high, low, volume, open interest) | Updated per trade |
public/get-trades | Recent trade history | Last 150 trades (7-day max window) |
For low-latency applications, use WebSocket subscriptions instead:
book.{instrument_name}.{depth}- Order book updates (10 or 50 levels)ticker.{instrument_name}- Real-time ticker updatestrade.{instrument_name}- Trade feed
Settlement and Expiry
public/get-expired-settlement-price provides historical settlement prices for expired futures contracts. Use this for post-trade reconciliation and historical PnL calculations.
Rate Limits
Public endpoints share a global rate limit pool. For market data-intensive applications:
- Use WebSocket subscriptions instead of polling REST endpoints
- Cache
public/get-instrumentsresponses (updates infrequently) - Batch ticker requests by omitting
instrument_nameto get all tickers in one call
Typical Integration Flow
Step 1 — Bootstrap Reference Data
Call public/get-instruments to load the instrument catalog. Store contract specifications locally.
Step 2 — Subscribe to Market Data
For real-time pricing, establish WebSocket connections and subscribe to:
book.{instrument_name}.10- top 10 order book levelsticker.{instrument_name}- 24h summary statstrade.{instrument_name}- trade feed
Step 3 — Polling Fallback
If WebSocket connections are unavailable, poll public/get-tickers and public/get-book at reasonable intervals (e.g., 1-5 seconds).
public/get-risk-parameters
GETProvides information on risk parameter settings for Smart Cross Margin./public/get-risk-parameters
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
default max product leverage for margin trading unless specified in base_currency_config array
default max product leverage for perpetuals unless specified in base_currency_config array
default max product leverage for futures unless specified in base_currency_config array
default max long position permitted for perpetual contracts, unless specified in base_currency_config array. A value of -1 indicates that no position limit applies.
default max short position permitted for perpetual contracts, unless specified in base_currency_config array. A value of -1 indicates that no position limit applies.
default max long position permitted on futures, unless specified in base_currency_config array. A value of -1 indicates that no position limit applies.
default max short position permitted on futures, unless specified in base_currency_config array. A value of -1 indicates that no position limit applies.
default additional margin rate / haircut rate for holding 1 unit of positions unless specified in base_currency_config array
refer to specified collateral cap for each token in base_currency_config array. Field is omitted if the token is not eligible as collateral
Last update time (ms).
base_currency_config object[]
the maximum $notional that is counted towards the margin balance. Any additional token balance would not contribute to the margin balance. Field is omitted if the token is not eligible as collateral
Minimum haircut rate. Field is omitted if the token is not eligible as collateral
the max product leverage for margin trading on this token.
the max product leverage for perpetuals on this base token
the max product leverage for futures on this base token
the additional margin rate / haircut rate for holding 1 unit of positions with this base token
max negative asset balance user can hold on the base token. If field is omitted means no short sell permitted on the token
max spot order notional user can place in rolling 24-hour window. If field is omitted
max $notional per spot order on this base token
max $notional per spot order on this base token
min $notional per spot order on this base token
the max long position permitted for perpetuals on this base token
the max short position permitted for perpetuals on this base token
the max long position permitted for futures on this base token
the max short position permitted for futures on this base token
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
public/get-instruments
GETProvides information on all supported instruments (e.g. BTCUSD-PERP)./public/get-instruments
Request
Query Parameters
Filter by up to 10 event symbols. Comma-separated.
Filter for combo instruments.
Filter by predict contract type.
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Instrument name, e.g. BTCUSD-PERP
Instrument type, e.g. PERPETUAL_SWAP
Display name, e.g. BTCUSD Perpetual
Base currency, e.g. BTC
Quote currency, e.g. USD
Minimum decimal place for price field
Minimum decimal place for qty field
Minimum price tick size
Minimum trading quantity / tick size
Max leverage of the product
True or false
Expiry timestamp in milliseconds
Whether this is a beta product.
Underlying symbol
Product type of the instrument. Possible values: COMMODITIES, EQUITY_IND, CURRENCIES, DIGITAL_CURRENCIES, EVENTS, EQUITY, PRE_IPO. Only returned if applicable.
Contract size for the instrument.
Whether margin buying is enabled for this instrument.
Whether margin selling is enabled for this instrument.
event_details object
Event details for prediction market instruments. Structure is flexible and defined by external systems.
Unix timestamp in nanoseconds when the instrument was last updated.
Cursor for pagination. Use this value in the cursor parameter of the next request.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
public/get-book
GETFetches the public order book for a particular instrument and depth./public/get-book
Request
Query Parameters
Instrument symbol, e.g. BTCUSD-PERP
Number of bids and asks to return (up to 50)
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Number of bids and asks to return (up to 50)
e.g. BTCUSD-PERP
data object[]
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
public/get-candlestick
GETRetrieves candlesticks (k-line data history) over a given period for an instrument (e.g. BTCUSD-PERP)./public/get-candlestick
Request
Query Parameters
Instrument symbol, e.g. BTCUSD-PERP
Possible values: [1m, 5m, 15m, 30m, 1h, 2h, 4h, 12h, 1D, 7D, 14D, 1M]
The period value. Default 1m.
Default value: 25
Number of candles to return. Default 25.
Start time (Unix timestamp). Default 1 day ago.
End time (Unix timestamp). Default current time.
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
The period (e.g. M5).
e.g. BTCUSD-PERP
data object[]
Open
High
Low
Close
Volume
Start time of candlestick (Unix timestamp, ms), e.g. "1771761038000".
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
public/get-trades
GETFetches the public trades for a particular instrument. Time window can only be up to 7 days for maximum./public/get-trades
Request
Query Parameters
e.g. BTCUSD-PERP
Default value: 25
The maximum number of trades to be retrieved. Default: 25. Max: 150
Start time in Unix time format (inclusive). Default: end_time - 1 day. Nanosecond recommended for accurate pagination
End time in Unix time format (exclusive). Default: current system timestamp. Nanosecond recommended for accurate pagination
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Trade ID
Trade timestamp in milliseconds, e.g. "1771761038000".
Trade price
Trade quantity
Possible values: [BUY, SELL]
BUY or SELL
Instrument name e.g. BTCUSD-PERP
Trade match ID
Trade timestamp in nanoseconds (REST only)
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
public/get-tickers
GETFetches the public tickers for all or a particular instrument./public/get-tickers
Request
Query Parameters
e.g. BTCUSD-PERP
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Price of the 24h highest trade
Price of the 24h lowest trade, null if there weren't any trades
The price of the latest trade, null if there weren't any trades
24-hour price change, null if there weren't any trades
The current best bid price, null if there aren't any bids
The current best ask price, null if there aren't any asks
Instrument name
The total 24h traded volume
The total 24h traded volume value (in USD)
The open interest
The published timestamp in ms, e.g. "1771761038000".
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
public/get-valuations
GETFetches valuation type data for an instrument./public/get-valuations
Request
Query Parameters
- a. index_price: returns per minute data of underlying reference price of the instrument.
- b. mark_price: returns per minute data of mark price of the instrument.
- c. funding_hist: returns hourly data of the funding rate settled in past hourly settlement.
- d. funding_rate: returns per minute data of current hourly funding rate that will settle at the end of each hour of current 4-hour interval.
- e. estimated_funding_rate: returns per minute data of estimated funding rate for the next interval.
e.g. BTCUSD-INDEX
List of available types:
Default value: 25
Default is 25
Default timestamp is 30 days ago for funding_hist, and 1 day ago for other valuation_type (Unix timestamp).
Default timestamp is current time (Unix timestamp).
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
e.g. BTCUSD-INDEX
data object[]
Value
Timestamp (ms), e.g. "1771761038000".
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
public/get-expired-settlement-price
GETFetches settlement prices of expired instruments./public/get-expired-settlement-price
Request
Query Parameters
FUTURE
Default value: 1
Page number. Default 1.
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Instrument name
Expiry timestamp (ms).
Value
Timestamp (ms).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
public/get-deposit-instruments
GETReturns the list of instruments eligible for deposit and use as collateral./public/get-deposit-instruments
Schema
- Array [
- ]
Original request identifier
Method name
0 for success; error code otherwise
Error message for non-zero codes
result object[]
Instrument symbol
Instrument type (e.g. CCY)
Display name
Base currency
Quote currency
Decimal places for quote currency
Decimal places for quantity
Haircut rate (decimal string)
Whether eligible as collateral
Minimum price increment
Minimum quantity increment
Maximum leverage
Whether the instrument is tradable
Expiry timestamp (epoch ms). 0 if no expiry.
Whether this is a beta product
Conversion fee rate
Whether margin buy is enabled
Whether margin sell is enabled
Internal instrument ID
public/get-insurance
GETFetches the balance of the Insurance Fund for a particular currency./public/get-insurance
Request
Query Parameters
e.g. USD
Default value: 25
Default is 25
Default timestamp is 1 day ago (Unix timestamp).
Default timestamp is current time (Unix timestamp).
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
e.g. USD
data object[]
Value
Timestamp (ms), e.g. "1771761038000".
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
Account Balance and Positions
Retrieve real-time and historical snapshots of wallet balances, open positions, margin requirements, and collateral status. Use these endpoints to monitor account health, risk exposure, and available trading capacity.
Account Balance
The user balance response provides a comprehensive view of the account:
- Available balance — funds available for new positions and withdrawals
- Margin balance — total collateral value (cash + collateral-eligible tokens after haircut)
- Initial margin (IM) — collateral required to open current positions and orders
- Maintenance margin (MM) — minimum collateral threshold to avoid liquidation
- Position balance — per-token breakdown showing quantity, market value, haircut rate, and collateral contribution
If margin balance falls below maintenance margin, the account enters liquidation.
Positions
The positions endpoint returns all open derivative contracts, including instrument name, quantity (signed to indicate direction), position cost, and session PnL. For real-time mark price, liquidation price, and margin requirements, subscribe to the user.positions WebSocket channel.
Subaccounts
Master accounts can create subaccounts to isolate trading activity. Use the subaccount transfer endpoint to move funds between accounts.
private/user-balance
POSTReturns the user's wallet balance./private/user-balance
Request
Body
required
Request id (echoed in response)
Must be "private/user-balance"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Schema
- Array [
- Array [
- ]
- Array [
- Array [
- ]
- ]
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Instrument name of the balance e.g. USD
Balance that user can open new order (Margin Balance - Initial Margin)
Positive cash balance on eligible collateral tokens + Negative balance on all tokens + Unrealised PnL - Fee reserves
Total margin requirement to support positions and all open orders IM and haircut from risk asset holdings. Total sum of total_position_im + total_haircut.
Total maintenance margin requirement for all positions
Position value in USD
Wallet Balance (Deposits - Withdrawals + Realized PnL - Fees)
Collateral Value
Current unrealized profit and loss from all open positions (calculated with Mark Price and Avg Price)
Current realized profit and loss from all open positions
Describes whether the account is under liquidation
The actual leverage used (all open positions combined), i.e. position size / margin balance.
Maximum position size allowed (for all open positions combined)
Combined position size of all open positions + order exposure on all instruments
Sum of cash balance of the isolated positions
Initial margin requirement to support open positions and orders
Total haircut on eligible collateral token assets
Total risk exposure. Optional.
Total borrow. Optional.
Margin score. Optional.
Whether the account has risk. Optional.
Whether the account is terminatable. Optional.
Credit limits; may be empty. Item shape TBD when non-empty. Optional.
position_balances object[]
Instrument name of the collateral e.g. USD
Quantity of the collateral
Market value of the collateral
true or false
Show haircut for eligible collateral token
Collateral amount after haircut is applied
Max withdrawal balance of the collateral
Fund/balance in use, not available for new orders or additional trading activities.
Hourly interest rate for the collateral; e.g. "0". Optional.
isolated_positions object[]
Instrument name of the balance e.g. USD
Balance that user can open new order (Margin Balance - Initial Margin)
Positive cash balance on eligible collateral tokens + Negative balance on all tokens + Unrealised PnL - Fee reserves
Total margin requirement to support positions and all open orders IM and haircut from risk asset holdings. Total sum of total_position_im + total_haircut.
Total maintenance margin requirement for all positions
Position value in USD
Wallet Balance (Deposits - Withdrawals + Realized PnL - Fees)
Collateral Value
Current unrealized profit and loss from all open positions (calculated with Mark Price and Avg Price)
Current realized profit and loss from all open positions
Describes whether the account is under liquidation
The actual leverage used (all open positions combined), i.e. position size / margin balance.
Maximum position size allowed (for all open positions combined)
Combined position size of all open positions + order exposure on all instruments
Sum of cash balance of the isolated positions
Initial margin requirement to support open positions and orders
Total haircut on eligible collateral token assets
Total risk exposure. Optional.
Total borrow. Optional.
Margin score. Optional.
Whether the account has risk. Optional.
Whether the account is terminatable. Optional.
Credit limits; may be empty. Item shape TBD when non-empty. Optional.
position_balances object[]
Instrument name of the collateral e.g. USD
Quantity of the collateral
Market value of the collateral
true or false
Show haircut for eligible collateral token
Collateral amount after haircut is applied
Max withdrawal balance of the collateral
Fund/balance in use, not available for new orders or additional trading activities.
Hourly interest rate for the collateral; e.g. "0". Optional.
Isolation ID of isolated position.
The maximum leverage of the isolated position.
Possible values: [ISOLATED_MARGIN]
Isolation type
Optional; sub-account ID in get-subaccount-balances.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "11",
"method": "private/user-balance",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {},
"nonce": "1611022832613"
}POST /private/user-balance HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "11",
"method": "private/user-balance",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {},
"nonce": "1611022832613"
}private/user-balance-history
POSTReturns the user's balance history. This call may temporarily have discrepancies with that shown on the GUI./private/user-balance-history
Request
Body
required
Request id (echoed in response)
Must be "private/user-balance-history"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Possible values: [H1, D1]
H1 = hourly, D1 = daily
Can be millisecond or nanosecond. Exclusive, e.g. "1771761038000" or "1771761038000000000". If not provided, will be current time.
If timeframe is D1, max limit will be 30 (days). If timeframe is H1, max limit will be 120 (hours).
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Instrument name of the balance e.g. USD
data object[]
Timestamp (ms).
Total cash balance.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "11",
"method": "private/user-balance-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {},
"nonce": "1611022832613"
}POST /private/user-balance-history HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "11",
"method": "private/user-balance-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {},
"nonce": "1611022832613"
}private/get-accounts
POSTGet Account and its Sub Accounts./private/get-accounts
Request
Body
required
Request id (echoed in response)
Must be "private/get-accounts"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Default value: 20
Number of items per page. Default 20.
Default value: 0
Page number (0-based). Default 0.
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
this_account object
UUID of the API key
Possible values: [MASTER, SUB_ACCOUNT]
Account type of the API key: MASTER or SUB_ACCOUNT.
master_account objectrequired
UUID of the API key
Possible values: [MASTER, SUB_ACCOUNT]
Account type of the API key: MASTER or SUB_ACCOUNT.
Master account uuid
Margin account uuid (optional)
Sub account label (typically present for sub-accounts)
true or false
true or false
Name of sub account
Email of sub account
Mobile number of sub account
Country Code of sub account
Address of sub account
Possible values: [DEFAULT, DISABLED]
DEFAULT or DISABLED
Possible values: [DEFAULT, DISABLED]
DEFAULT or DISABLED
Creation timestamp (milliseconds since the Unix epoch).
Last update timestamp (milliseconds since the Unix epoch).
true or false
Kyc Level
true or false
true or false
sub_account_list object[]required
UUID of the API key
Possible values: [MASTER, SUB_ACCOUNT]
Account type of the API key: MASTER or SUB_ACCOUNT.
Master account uuid
Margin account uuid (optional)
Sub account label (typically present for sub-accounts)
true or false
true or false
Name of sub account
Email of sub account
Mobile number of sub account
Country Code of sub account
Address of sub account
Possible values: [DEFAULT, DISABLED]
DEFAULT or DISABLED
Possible values: [DEFAULT, DISABLED]
DEFAULT or DISABLED
Creation timestamp (milliseconds since the Unix epoch).
Last update timestamp (milliseconds since the Unix epoch).
true or false
Kyc Level
true or false
true or false
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "12",
"method": "private/get-accounts",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {
"page_size": "30",
"page": "2"
},
"nonce": "1587846358253"
}POST /private/get-accounts HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "12",
"method": "private/get-accounts",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {
"page_size": "30",
"page": "2"
},
"nonce": "1587846358253"
}private/create-subaccount-transfer
POSTTransfer between subaccounts (and master account)./private/create-subaccount-transfer
Request
Body
required
Request id (echoed in response)
Must be "private/create-subaccount-transfer"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Account UUID to be debited.
Account UUID to be credited.
Currency symbol.
Amount to transfer; must be a positive number.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1234",
"method": "private/create-subaccount-transfer",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {
"from": "12345678-0000-0000-0000-000000000001",
"to": "12345678-0000-0000-0000-000000000002",
"currency": "CRO",
"amount": "500"
},
"nonce": "1587846358253"
}POST /private/create-subaccount-transfer HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1234",
"method": "private/create-subaccount-transfer",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {
"from": "12345678-0000-0000-0000-000000000001",
"to": "12345678-0000-0000-0000-000000000002",
"currency": "CRO",
"amount": "500"
},
"nonce": "1587846358253"
}private/get-subaccount-balances
POSTReturns the user's wallet balances of all sub-accounts./private/get-subaccount-balances
Request
Body
required
Request id (echoed in response)
Must be "private/get-subaccount-balances"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Schema
- Array [
- Array [
- ]
- Array [
- Array [
- ]
- ]
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Instrument name of the balance e.g. USD
Balance that user can open new order (Margin Balance - Initial Margin)
Positive cash balance on eligible collateral tokens + Negative balance on all tokens + Unrealised PnL - Fee reserves
Total margin requirement to support positions and all open orders IM and haircut from risk asset holdings. Total sum of total_position_im + total_haircut.
Total maintenance margin requirement for all positions
Position value in USD
Wallet Balance (Deposits - Withdrawals + Realized PnL - Fees)
Collateral Value
Current unrealized profit and loss from all open positions (calculated with Mark Price and Avg Price)
Current realized profit and loss from all open positions
Describes whether the account is under liquidation
The actual leverage used (all open positions combined), i.e. position size / margin balance.
Maximum position size allowed (for all open positions combined)
Combined position size of all open positions + order exposure on all instruments
Sum of cash balance of the isolated positions
Initial margin requirement to support open positions and orders
Total haircut on eligible collateral token assets
Total risk exposure. Optional.
Total borrow. Optional.
Margin score. Optional.
Whether the account has risk. Optional.
Whether the account is terminatable. Optional.
Credit limits; may be empty. Item shape TBD when non-empty. Optional.
position_balances object[]
Instrument name of the collateral e.g. USD
Quantity of the collateral
Market value of the collateral
true or false
Show haircut for eligible collateral token
Collateral amount after haircut is applied
Max withdrawal balance of the collateral
Fund/balance in use, not available for new orders or additional trading activities.
Hourly interest rate for the collateral; e.g. "0". Optional.
isolated_positions object[]
Instrument name of the balance e.g. USD
Balance that user can open new order (Margin Balance - Initial Margin)
Positive cash balance on eligible collateral tokens + Negative balance on all tokens + Unrealised PnL - Fee reserves
Total margin requirement to support positions and all open orders IM and haircut from risk asset holdings. Total sum of total_position_im + total_haircut.
Total maintenance margin requirement for all positions
Position value in USD
Wallet Balance (Deposits - Withdrawals + Realized PnL - Fees)
Collateral Value
Current unrealized profit and loss from all open positions (calculated with Mark Price and Avg Price)
Current realized profit and loss from all open positions
Describes whether the account is under liquidation
The actual leverage used (all open positions combined), i.e. position size / margin balance.
Maximum position size allowed (for all open positions combined)
Combined position size of all open positions + order exposure on all instruments
Sum of cash balance of the isolated positions
Initial margin requirement to support open positions and orders
Total haircut on eligible collateral token assets
Total risk exposure. Optional.
Total borrow. Optional.
Margin score. Optional.
Whether the account has risk. Optional.
Whether the account is terminatable. Optional.
Credit limits; may be empty. Item shape TBD when non-empty. Optional.
position_balances object[]
Instrument name of the collateral e.g. USD
Quantity of the collateral
Market value of the collateral
true or false
Show haircut for eligible collateral token
Collateral amount after haircut is applied
Max withdrawal balance of the collateral
Fund/balance in use, not available for new orders or additional trading activities.
Hourly interest rate for the collateral; e.g. "0". Optional.
Isolation ID of isolated position.
The maximum leverage of the isolated position.
Possible values: [ISOLATED_MARGIN]
Isolation type
Optional; sub-account ID in get-subaccount-balances.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/get-subaccount-balances",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {},
"nonce": "1"
}POST /private/get-subaccount-balances HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/get-subaccount-balances",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {},
"nonce": "1"
}private/get-positions
POSTReturns the user's position./private/get-positions
Request
Body
required
Request id (echoed in response)
Must be "private/get-positions"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
E.g. BTCUSD-PERP. Omit for 'all'.
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Account ID.
E.g. BTCUSD-PERP.
E.g. PERPETUAL_SWAP.
Position quantity.
Position cost or value in USD.
Profit and loss for the open position.
Open position cost.
Profit and loss in the current trading session.
Updated time (Unix timestamp).
Isolation ID of the isolated position.
Possible values: [ISOLATED_MARGIN]
Isolation type
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/get-positions",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {},
"nonce": "1611022832613"
}POST /private/get-positions HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/get-positions",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {},
"nonce": "1611022832613"
}private/get-fee-credit-balances
POSTGet fee credit balance details for the authenticated account. Fee credits are grouped by expiry date and sorted in ascending order. Values are not real-time and are updated daily at 00:00 UTC./private/get-fee-credit-balances
Request
Body
required
Request id (echoed in response)
Must be "private/get-fee-credit-balances"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Page number (0-based).
Possible values: >= 1 and <= 200
Number of entries per page. Default: 200, Max: 200.
Schema
- Array [
- Array [
- ]
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
fee_credits object[]required
Expiry date in epoch milliseconds (end of day 23:59 UTC)
Comma-separated campaign names. Master accounts only.
Total distributed amount (8 decimal places). Master accounts only.
Estimated available balance (8 decimal places)
details object[]
Campaign name
Distribution date in epoch milliseconds (end of day 23:59 UTC)
Amount distributed for this campaign (8 decimal places)
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/get-fee-credit-balances",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {
"page": 0,
"page_size": 200
},
"nonce": "1721989202781"
}POST /private/get-fee-credit-balances HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/get-fee-credit-balances",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {
"page": 0,
"page_size": 200
},
"nonce": "1721989202781"
}Trading
Private trading endpoints manage order placement and lifecycle. All order operations (create, amend, cancel) are asynchronous — the REST response confirms the request was received, but order lifecycle updates arrive via WebSocket subscriptions.
Order Management Workflow
Create Order
Call private/create-order to submit a new order. The response returns an order_id and client_oid, but the order may still be pending acceptance by the matching engine. Subscribe to user.order or user.order.{instrument_name} to receive real-time order status updates.
Amend Order
Call private/amend-order to modify price or quantity on an existing order. Behind the scenes, amend performs a cancel-then-create operation. The new order loses queue priority unless you are only reducing quantity.
Cancel Order
Call private/cancel-order to cancel a single order by order_id or client_oid, or private/cancel-all-orders to cancel all orders for a given instrument.
Order Types
| Type | Description |
|---|---|
LIMIT | Limit order with specified price. Rests on the order book until filled or canceled. |
MARKET | Market order that executes immediately at best available price. |
For trigger orders (stop-loss, take-profit) and multi-leg strategies (OCO, OTO, OTOCO), see Advanced Order Management.
Time in Force
| Value | Description |
|---|---|
GOOD_TILL_CANCEL | Order remains active until filled or explicitly canceled. Default for limit orders. |
IMMEDIATE_OR_CANCEL | Order fills immediately (partial or full), unfilled portion is canceled. |
FILL_OR_KILL | Order must fill entirely and immediately, or the entire order is canceled. |
Execution Instructions
Execution instructions are passed as an array in exec_inst. Multiple instructions can be combined.
| Instruction | Description |
|---|---|
POST_ONLY | Order is rejected if it would take liquidity. Ensures maker fee. |
SMART_POST_ONLY | If the order would take liquidity, it is repriced to the best maker level instead of being rejected. |
REDUCE_ONLY | Order can only reduce an existing position, not increase or open a new position. |
Order Statuses
| Status | Description |
|---|---|
PENDING | Order submitted, awaiting processing by the matching engine. |
NEW | Order accepted by the matching engine, not yet on the order book. |
ACTIVE | Order is live on the order book, waiting to be filled. |
FILLED | Order has been completely filled. |
CANCELED | Order was canceled (by user request, or by system). |
EXPIRED | Order expired due to time-in-force constraints. |
REJECTED | Order was rejected (e.g., invalid parameters, risk checks failed). |
Querying Orders and Trades
private/get-open-orders— retrieve all currently active ordersprivate/get-order-detail— fetch detailed information about a single orderprivate/get-order-history— retrieve past orders (filled, canceled, or rejected)private/get-trades— retrieve executed trades (fills)
Real-Time Order and Trade Updates
Subscribe to the following WebSocket channels for real-time updates:
| Channel | Description |
|---|---|
user.order | Order lifecycle events across all instruments |
user.order.{instrument_name} | Order updates for a specific instrument |
user.trade | Trade execution events across all instruments |
user.trade.{instrument_name} | Trade execution events for a specific instrument |
These subscriptions require authentication and eliminate the need for polling REST endpoints.
private/create-order
POSTCreates a new BUY or SELL order./private/create-order
This call is asynchronous, so the response is simply a confirmation of the request.
The user.order subscription can be used to check when the order is successfully created.
Request
Body
required
- ➖ M: Cancel Maker
- ➖ T: Cancel Taker
- ➖ B: Cancel Both Maker and Taker
- ➖ M: Matches Master or Sub a/c
- ➖ S: Matches Sub a/c only
- ➖ D: reset all STP fields to default (stp_inst and stp_id in same request are ignored).
Request id (echoed in response)
Must be "private/create-order"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Instrument symbol, e.g. BTCUSD-PERP
Possible values: [BUY, SELL]
BUY or SELL
Order quantity. For MARKET BUY can use notional instead.
Client order ID (max 36 chars). Recommended for correlation.
Possible values: [GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL]
Time in force
Possible values: [POST_ONLY, REDUCE_ONLY, SMART_POST_ONLY, ISOLATED_MARGIN, MARGIN_ORDER]
Optional array of execution instructions. POST_ONLY and SMART_POST_ONLY mutually exclusive.
Fee instrument (e.g. CRO) for fee deduction
Self-trade prevention ID (0 to 32767)
Possible values: [M, T, B]
Self-trade prevention instruction. Used in private/change-account-settings (params) and private/get-account-settings (result). Mandatory if stp_scope is set.
Possible values: [M, S, D]
Self-trade prevention scope. Used in private/change-account-settings (params) and private/get-account-settings (result).
Possible values: [LIMIT, MARKET]
Order type: LIMIT or MARKET
Limit price (required for LIMIT orders)
Amount to spend; for MARKET BUY only (alternative to quantity)
Possible values: [SPOT, MARGIN]
SPOT or MARGIN (spot/margin mode).
Isolated margin amount
Isolation ID for isolated margin
Leverage for margin/derivatives
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Newly created order ID
Client Order ID from the request, or the request nonce if not provided. Recommend specifying client_oid as nonce can be the same across orders.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/create-order",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"instrument_name": "BTCUSD-PERP",
"side": "SELL",
"type": "LIMIT",
"price": "50000.5",
"quantity": "1",
"client_oid": "c5f682ed-7108-4f1c-b755-972fcdca0f02",
"exec_inst": [
"POST_ONLY"
],
"time_in_force": "FILL_OR_KILL"
}
}POST /private/create-order HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/create-order",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"instrument_name": "BTCUSD-PERP",
"side": "SELL",
"type": "LIMIT",
"price": "50000.5",
"quantity": "1",
"client_oid": "c5f682ed-7108-4f1c-b755-972fcdca0f02",
"exec_inst": [
"POST_ONLY"
],
"time_in_force": "FILL_OR_KILL"
}
}private/amend-order
POSTAmend an existing order on the Exchange./private/amend-order
This call is asynchronous, so the response is simply a confirmation of the request.
The user.order subscription can be used to check when the order is successfully created.
Please note that amend order is designed as a convenience function such that it performs cancel and then create behind the scene. The new order will lose queue priority, except if the amend is only to amend down order quantity.
Request
Body
required
Request id (echoed in response)
Must be "private/amend-order"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Optional Order ID. Either order_id or orig_client_oid must be present.
Client Order ID (maximum 36 characters).
Optional Original Client Order ID. Either order_id or orig_client_oid must be present. If both exist, order_id has higher priority.
The new amended price. If no change required, input original value.
The new amended quantity. If no change required, input original value.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Client order ID
Order ID
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "53",
"method": "private/amend-order",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1587846358253",
"params": {
"order_id": "6530219466236720401",
"new_price": "82000",
"new_quantity": "0.0002"
}
}POST /private/amend-order HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "53",
"method": "private/amend-order",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1587846358253",
"params": {
"order_id": "6530219466236720401",
"new_price": "82000",
"new_quantity": "0.0002"
}
}private/cancel-order
POSTCancels an existing order on the Exchange./private/cancel-order
This call is asynchronous, so the response is simply a confirmation of the request.
The user.order subscription can be used to check when the order is successfully canceled.
Request
Body
required
Request id (echoed in response)
Must be "private/cancel-order"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Optional Order ID. Either order_id or client_oid must be present. string format is highly recommended.
Optional Client Order ID. Either order_id or client_oid must be present.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Order ID
Client Order ID
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/cancel-order",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"order_id": "18342311"
}
}POST /private/cancel-order HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/cancel-order",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"order_id": "18342311"
}
}private/cancel-all-orders
POSTCancels all orders for a particular instrument/pair (asynchronous)./private/cancel-all-orders
This call is asynchronous, so the response is simply a confirmation of the request.
The user.order subscription can be used to check when the order is successfully canceled.
Request
Body
required
- ➖ private/cancel-all-orders: LIMIT, ALL
- ➖ private/advanced/cancel-all-orders: LIMIT, TRIGGER, ALL. For LIMIT, only the legs from advanced orders will be in-scope.
Request id (echoed in response)
Must be "private/cancel-all-orders"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
e.g. BTCUSD-PERP. If not provided, the orders of ALL instruments will be canceled.
Possible values: [LIMIT, TRIGGER, ALL]
Allowed values depend on operation:
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/cancel-all-orders",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1611169184000",
"params": {
"instrument_name": "BTCUSD-PERP"
}
}POST /private/cancel-all-orders HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/cancel-all-orders",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1611169184000",
"params": {
"instrument_name": "BTCUSD-PERP"
}
}private/close-position
POSTCancels position for a particular instrument/pair (asynchronous)./private/close-position
This call is asynchronous, so the response is simply a confirmation of the request.
The user.order subscription can be used to check when the order is successfully canceled.
Request
Body
required
Request id (echoed in response)
Must be "private/close-position"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
e.g. BTCUSD-PERP.
Possible values: [LIMIT, MARKET]
LIMIT or MARKET
For LIMIT orders only. Must use decimal precision matching the instrument's price_tick_size.
Positive number only. Only provide if intending to do partial closing.
Needed when closing an existing isolated position. If omitted, the non-isolated position will be closed.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Order ID
Client Order ID
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/close-position",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"instrument_name": "BTCUSD-PERP",
"type": "LIMIT",
"price": "30000.0",
"quantity": "1000"
}
}POST /private/close-position HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/close-position",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"instrument_name": "BTCUSD-PERP",
"type": "LIMIT",
"price": "30000.0",
"quantity": "1000"
}
}private/get-open-orders
POSTGets all open orders for a particular instrument./private/get-open-orders
Request
Body
required
Request id (echoed in response)
Must be "private/get-open-orders"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
E.g. BTCUSD-PERP. Omit for 'all'.
Schema
- Array [
- ➖ LIMIT, MARKET
- ➖ STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT: Trigger orders
- ➖ OCO: One-Cancels-the-Other
- ➖ OTO: One-Triggers-the-Other
- ➖ OTOCO: One-Triggers-a-One-Cancels-the-Other
- ➖ SPOT_ATTACH: SpotAttach (TP/SL attached to order for spot instruments)
- ➖ DERIV_ATTACH: DerivAttach (TP/SL attached to order or position for derivative instruments)
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Account ID.
Order ID.
Client Order ID.
Possible values: [LIMIT, MARKET, STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT]
Order type:
Possible values: [GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL]
Time in force
Possible values: [BUY, SELL]
BUY or SELL
Possible values: [POST_ONLY, REDUCE_ONLY, SMART_POST_ONLY, LIQUIDATION, ISOLATED_MARGIN, MARGIN_ORDER]
Execution instructions.
Quantity specified in the order.
Limit price specified in the order.
Order value.
User's maker fee rate.
User's taker fee rate.
Average price.
Cumulative executed quantity.
Cumulative executed value.
Cumulative executed fee.
Possible values: [PENDING, NEW, ACTIVE, FILLED, CANCELED, REJECTED, EXPIRED]
Order status
Updated user.
Order creation date.
E.g. BTCUSD-PERP.
Currency used for the fees.
Order creation timestamp (ms), e.g. "1771761038000".
Order creation timestamp (nanosecond), e.g. "1771761038000000000".
Order update timestamp (ms), e.g. "1771761038000".
Rejection reason code; present for get-order-detail and get-order-history.
isolation_id of the isolated position the order is tied to (derivatives only).
Possible values: [ISOLATED_MARGIN]
ISOLATED_MARGIN when isolation_id > 0 (derivatives only).
OTO/OTOCO/OCO list id; advanced only.
Possible values: [OCO, OTO, OTOCO, SPOT_ATTACH, DERIV_ATTACH]
Contingency type for advanced orders:
Leg id within OTO/OTOCO/OCO; advanced only.
Trigger reference price (trigger legs only).
Possible values: [MARK_PRICE, INDEX_PRICE, LAST_PRICE]
Price source used for ref_price: MARK_PRICE, INDEX_PRICE, or LAST_PRICE (trigger legs only).
The order ID this trigger is attached to (for SpotAttach / DerivAttach attach-to-order orders).
Position this trigger is attached to (DerivAttach attach-to-position): > 0 = isolation_id of the isolated position; 0 = cross-margin position.
Order ID assigned by the exchange (present once the leg has been accepted).
Rejection reason, if the leg was rejected.
Leverage specified on the primary leg (derivatives only, when provided).
Isolated margin amount specified on the primary leg (derivatives only, when provided).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/get-open-orders",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {
"instrument_name": "BTCUSD-PERP"
},
"nonce": "1613575617173"
}POST /private/get-open-orders HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/get-open-orders",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {
"instrument_name": "BTCUSD-PERP"
},
"nonce": "1613575617173"
}private/get-order-detail
POSTGets detail of a single order by order_id or client_oid./private/get-order-detail
Request
Body
required
Request id (echoed in response)
Must be "private/get-order-detail"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Order ID. string format is highly recommended, especially for JavaScript client. If not provided, client_oid must be specified.
Client Order ID. If not provided, order_id must be specified.
Schema
- ➖ LIMIT, MARKET
- ➖ STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT: Trigger orders
- ➖ OCO: One-Cancels-the-Other
- ➖ OTO: One-Triggers-the-Other
- ➖ OTOCO: One-Triggers-a-One-Cancels-the-Other
- ➖ SPOT_ATTACH: SpotAttach (TP/SL attached to order for spot instruments)
- ➖ DERIV_ATTACH: DerivAttach (TP/SL attached to order or position for derivative instruments)
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Account ID.
Order ID.
Client Order ID.
Possible values: [LIMIT, MARKET, STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT]
Order type:
Possible values: [GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL]
Time in force
Possible values: [BUY, SELL]
BUY or SELL
Possible values: [POST_ONLY, REDUCE_ONLY, SMART_POST_ONLY, LIQUIDATION, ISOLATED_MARGIN, MARGIN_ORDER]
Execution instructions.
Quantity specified in the order.
Limit price specified in the order.
Order value.
User's maker fee rate.
User's taker fee rate.
Average price.
Cumulative executed quantity.
Cumulative executed value.
Cumulative executed fee.
Possible values: [PENDING, NEW, ACTIVE, FILLED, CANCELED, REJECTED, EXPIRED]
Order status
Updated user.
Order creation date.
E.g. BTCUSD-PERP.
Currency used for the fees.
Order creation timestamp (ms), e.g. "1771761038000".
Order creation timestamp (nanosecond), e.g. "1771761038000000000".
Order update timestamp (ms), e.g. "1771761038000".
Rejection reason code; present for get-order-detail and get-order-history.
isolation_id of the isolated position the order is tied to (derivatives only).
Possible values: [ISOLATED_MARGIN]
ISOLATED_MARGIN when isolation_id > 0 (derivatives only).
OTO/OTOCO/OCO list id; advanced only.
Possible values: [OCO, OTO, OTOCO, SPOT_ATTACH, DERIV_ATTACH]
Contingency type for advanced orders:
Leg id within OTO/OTOCO/OCO; advanced only.
Trigger reference price (trigger legs only).
Possible values: [MARK_PRICE, INDEX_PRICE, LAST_PRICE]
Price source used for ref_price: MARK_PRICE, INDEX_PRICE, or LAST_PRICE (trigger legs only).
The order ID this trigger is attached to (for SpotAttach / DerivAttach attach-to-order orders).
Position this trigger is attached to (DerivAttach attach-to-position): > 0 = isolation_id of the isolated position; 0 = cross-margin position.
Order ID assigned by the exchange (present once the leg has been accepted).
Rejection reason, if the leg was rejected.
Leverage specified on the primary leg (derivatives only, when provided).
Isolated margin amount specified on the primary leg (derivatives only, when provided).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/get-order-detail",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {
"order_id": "19848525"
},
"nonce": "1587846358253"
}POST /private/get-order-detail HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/get-order-detail",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {
"order_id": "19848525"
},
"nonce": "1587846358253"
}private/create-order-list (LIST)
POSTCreate a list of orders on the Exchange./private/create-order-list
contingency_type must be LIST, for list of orders creation.
This call is asynchronous, so the response is simply a confirmation of the request.
The user.order subscription can be used to check if the orders are successfully created.
Request
Body
required
- Array [
- ➖ M: Cancel Maker
- ➖ T: Cancel Taker
- ➖ B: Cancel Both Maker and Taker
- ➖ M: Matches Master or Sub a/c
- ➖ S: Matches Sub a/c only
- ➖ D: reset all STP fields to default (stp_inst and stp_id in same request are ignored).
- ]
Request id (echoed in response)
Must be "private/create-order-list"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Possible values: [LIST]
Must be LIST for order-list APIs
order_list object[]required
>= 1, <= 10 Instrument symbol, e.g. BTCUSD-PERP
Possible values: [BUY, SELL]
BUY or SELL
Order quantity. For MARKET BUY can use notional instead.
Client order ID (max 36 chars). Recommended for correlation.
Possible values: [GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL]
Time in force
Possible values: [POST_ONLY, REDUCE_ONLY, SMART_POST_ONLY, ISOLATED_MARGIN, MARGIN_ORDER]
Optional array of execution instructions. POST_ONLY and SMART_POST_ONLY mutually exclusive.
Fee instrument (e.g. CRO) for fee deduction
Self-trade prevention ID (0 to 32767)
Possible values: [M, T, B]
Self-trade prevention instruction. Used in private/change-account-settings (params) and private/get-account-settings (result). Mandatory if stp_scope is set.
Possible values: [M, S, D]
Self-trade prevention scope. Used in private/change-account-settings (params) and private/get-account-settings (result).
Possible values: [LIMIT, MARKET]
Order type: LIMIT or MARKET
Limit price (required for LIMIT orders)
Amount to spend; for MARKET BUY only (alternative to quantity)
Possible values: [SPOT, MARGIN]
SPOT or MARGIN (spot/margin mode).
Isolated margin amount
Isolation ID for isolated margin
Leverage for margin/derivatives
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object[]
0 if success.
The index of corresponding order request (start from 0).
(Optional) Client order ID if provided in the request (maximum 36 characters).
Newly created order ID.
(Optional) For server or error messages.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "6573",
"method": "private/create-order-list",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1750385416548",
"params": {
"contingency_type": "LIST",
"order_list": [
{
"instrument_name": "CRO_USD",
"side": "SELL",
"type": "LIMIT",
"quantity": "10",
"price": "0.12",
"client_oid": "api_leg1"
},
{
"instrument_name": "CRO_USD",
"side": "SELL",
"type": "LIMIT",
"quantity": "20",
"price": "0.122",
"client_oid": "api_leg2"
}
]
}
}POST /private/create-order-list HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "6573",
"method": "private/create-order-list",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1750385416548",
"params": {
"contingency_type": "LIST",
"order_list": [
{
"instrument_name": "CRO_USD",
"side": "SELL",
"type": "LIMIT",
"quantity": "10",
"price": "0.12",
"client_oid": "api_leg1"
},
{
"instrument_name": "CRO_USD",
"side": "SELL",
"type": "LIMIT",
"quantity": "20",
"price": "0.122",
"client_oid": "api_leg2"
}
]
}
}private/cancel-order-list (LIST)
POSTCancel a list of orders on the Exchange./private/cancel-order-list
This call is asynchronous, so the response is simply a confirmation of the request.
The user.order subscription can be used to check when each of the orders is successfully cancelled.
Request
Body
required
- Array [
- ]
Request id (echoed in response)
Must be "private/cancel-order-list"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Possible values: [LIST]
Must be LIST for order-list APIs
order_list object[]required
Instrument name, e.g. ETH_CRO, BTC_USDT.
Order ID.
Optional Client order ID (maximum 36 characters).
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object[]
0 if success.
The index of corresponding order request (start from 0).
(Optional) For server or error messages.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "6575",
"method": "private/cancel-order-list",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1750389124417",
"params": {
"contingency_type": "LIST",
"order_list": [
{
"instrument_name": "CRO_USD",
"client_oid": "api_leg1"
},
{
"instrument_name": "CRO_USD",
"client_oid": "api_leg2"
}
]
}
}POST /private/cancel-order-list HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "6575",
"method": "private/cancel-order-list",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1750389124417",
"params": {
"contingency_type": "LIST",
"order_list": [
{
"instrument_name": "CRO_USD",
"client_oid": "api_leg1"
},
{
"instrument_name": "CRO_USD",
"client_oid": "api_leg2"
}
]
}
}private/change-account-leverage
POSTChanges the maximum leverage used by the account. Please note, each instrument has its own maximum leverage. Whichever leverage (account or instrument) is lower will be used./private/change-account-leverage
Request
Body
required
Request id (echoed in response)
Must be "private/change-account-leverage"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Account ID to change the leverage. Must be the currently logged-in user's account.
Maximum leverage for the account. Valid values 1-100 (inclusive).
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/change-account-leverage",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1611022832613",
"params": {
"account_id": "52e7c00f-1324-5a6z-bfgt-de445bde21a5",
"leverage": 10
}
}POST /private/change-account-leverage HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/change-account-leverage",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1611022832613",
"params": {
"account_id": "52e7c00f-1324-5a6z-bfgt-de445bde21a5",
"leverage": 10
}
}private/change-account-settings
POSTChange account level settings regarding STP and other properties./private/change-account-settings
Request
Body
required
- ➖ M: Matches Master or Sub a/c
- ➖ S: Matches Sub a/c only
- ➖ D: reset all STP fields to default (stp_inst and stp_id in same request are ignored).
- ➖ M: Cancel Maker
- ➖ T: Cancel Taker
- ➖ B: Cancel Both Maker and Taker
Request id (echoed in response)
Must be "private/change-account-settings"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Possible values: [M, S, D]
Self-trade prevention scope. Used in private/change-account-settings (params) and private/get-account-settings (result).
Possible values: [M, T, B]
Self-trade prevention instruction. Used in private/change-account-settings (params) and private/get-account-settings (result). Mandatory if stp_scope is set.
Optional. 0 to 32767. If stp_scope and stp_inst not specified, REJECT. If stp_scope specified, default 0.
Maximum leverage for the account. When account effective leverage exceeds this, further risk-increasing orders are rejected.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "696",
"method": "private/change-account-settings",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1721989111722",
"params": {
"stp_scope": "S",
"stp_id": "100",
"stp_inst": "M"
}
}POST /private/change-account-settings HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "696",
"method": "private/change-account-settings",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1721989111722",
"params": {
"stp_scope": "S",
"stp_id": "100",
"stp_inst": "M"
}
}private/get-account-settings
POSTGet account settings./private/get-account-settings
Request
Body
required
Request id (echoed in response)
Must be "private/get-account-settings"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Schema
- Array [
- ➖ M: Matches Master or Sub a/c
- ➖ S: Matches Sub a/c only
- ➖ D: reset all STP fields to default (stp_inst and stp_id in same request are ignored).
- ➖ M: Cancel Maker
- ➖ T: Cancel Taker
- ➖ B: Cancel Both Maker and Taker
- ]
Echoed request id
Method invoked
0 for successful changes.
result object[]
The max leverage user set on the account. When account effective leverage exceeds this, further risk increasing orders will be rejected.
Optional. 0 to 32767. If stp_scope and stp_inst not specified, REJECT. If stp_scope specified, default 0. Orderbook-specific settings take higher precedence.
Possible values: [M, S, D]
Self-trade prevention scope. Used in private/change-account-settings (params) and private/get-account-settings (result).
Possible values: [M, T, B]
Self-trade prevention instruction. Used in private/change-account-settings (params) and private/get-account-settings (result). Mandatory if stp_scope is set.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "697",
"method": "private/get-account-settings",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1721989202781",
"params": {}
}POST /private/get-account-settings HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "697",
"method": "private/get-account-settings",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1721989202781",
"params": {}
}private/create-isolated-margin-transfer
POSTTransfer balance between account and isolated position./private/create-isolated-margin-transfer
Request
Body
required
Request id (echoed in response)
Must be "private/create-isolated-margin-transfer"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Isolation ID of the isolated position to transfer margin to or from.
Possible values: [CREDIT, DEBIT]
CREDIT for credit to the isolated position; DEBIT for debit from the isolated position.
Amount of USD to transfer; must be a positive number.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "11",
"method": "private/create-isolated-margin-transfer",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1611022832613",
"params": {
"isolation_id": "19848526",
"direction": "CREDIT",
"amount": "50"
}
}POST /private/create-isolated-margin-transfer HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "11",
"method": "private/create-isolated-margin-transfer",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1611022832613",
"params": {
"isolation_id": "19848526",
"direction": "CREDIT",
"amount": "50"
}
}private/change-isolated-margin-leverage
POSTChanges the maximum leverage of an isolated position./private/change-isolated-margin-leverage
Request
Body
required
Request id (echoed in response)
Must be "private/change-isolated-margin-leverage"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Isolation ID of the isolated position to apply the leverage change to.
The maximum leverage to be used for the isolated position.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "11",
"method": "private/change-isolated-margin-leverage",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1611022832613",
"params": {
"isolation_id": "19848526",
"leverage": "10"
}
}POST /private/change-isolated-margin-leverage HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "11",
"method": "private/change-isolated-margin-leverage",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1611022832613",
"params": {
"isolation_id": "19848526",
"leverage": "10"
}
}private/get-fee-rate
POSTGet fee rates for user’s account./private/get-fee-rate
Request
Body
required
Request id (echoed in response)
Must be "private/get-fee-rate"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
30-day spot trading volume tier.
30-day deriv trading volume tier.
30-day spot maker rate in bps.
30-day spot taker rate in bps.
30-day deriv maker rate in bps.
30-day deriv taker rate in bps.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/get-fee-rate",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {},
"nonce": "1721989202781"
}POST /private/get-fee-rate HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/get-fee-rate",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {},
"nonce": "1721989202781"
}private/get-instrument-fee-rate
POSTGet the instrument fee rate./private/get-instrument-fee-rate
Request
Body
required
Request id (echoed in response)
Must be "private/get-instrument-fee-rate"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
E.g. BTC_USD, BTCUSD-PERP.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
E.g. BTC_USD.
Maker rate in bps.
Taker rate in bps.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/get-instrument-fee-rate",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"instrument_name": "BTC_USD"
}
}POST /private/get-instrument-fee-rate HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/get-instrument-fee-rate",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"instrument_name": "BTC_USD"
}
}private/get-order-history
POSTGets the order history for a particular instrument./private/get-order-history
Users should use user.order to keep track of real-time order updates, and private/get-order-history should primarily be used for recovery; typically when the websocket is disconnected.
Request
Body
required
Request id (echoed in response)
Must be "private/get-order-history"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Start time (ms or ns).
End time (ms or ns).
Default value: 100
Maximum number of orders to retrieve. Default: 100.
Schema
- Array [
- ➖ LIMIT, MARKET
- ➖ STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT: Trigger orders
- ➖ OCO: One-Cancels-the-Other
- ➖ OTO: One-Triggers-the-Other
- ➖ OTOCO: One-Triggers-a-One-Cancels-the-Other
- ➖ SPOT_ATTACH: SpotAttach (TP/SL attached to order for spot instruments)
- ➖ DERIV_ATTACH: DerivAttach (TP/SL attached to order or position for derivative instruments)
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Account ID.
Order ID.
Client Order ID.
Possible values: [LIMIT, MARKET, STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT]
Order type:
Possible values: [GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL]
Time in force
Possible values: [BUY, SELL]
BUY or SELL
Possible values: [POST_ONLY, REDUCE_ONLY, SMART_POST_ONLY, LIQUIDATION, ISOLATED_MARGIN, MARGIN_ORDER]
Execution instructions.
Quantity specified in the order.
Limit price specified in the order.
Order value.
User's maker fee rate.
User's taker fee rate.
Average price.
Cumulative executed quantity.
Cumulative executed value.
Cumulative executed fee.
Possible values: [PENDING, NEW, ACTIVE, FILLED, CANCELED, REJECTED, EXPIRED]
Order status
Updated user.
Order creation date.
E.g. BTCUSD-PERP.
Currency used for the fees.
Order creation timestamp (ms), e.g. "1771761038000".
Order creation timestamp (nanosecond), e.g. "1771761038000000000".
Order update timestamp (ms), e.g. "1771761038000".
Rejection reason code; present for get-order-detail and get-order-history.
isolation_id of the isolated position the order is tied to (derivatives only).
Possible values: [ISOLATED_MARGIN]
ISOLATED_MARGIN when isolation_id > 0 (derivatives only).
OTO/OTOCO/OCO list id; advanced only.
Possible values: [OCO, OTO, OTOCO, SPOT_ATTACH, DERIV_ATTACH]
Contingency type for advanced orders:
Leg id within OTO/OTOCO/OCO; advanced only.
Trigger reference price (trigger legs only).
Possible values: [MARK_PRICE, INDEX_PRICE, LAST_PRICE]
Price source used for ref_price: MARK_PRICE, INDEX_PRICE, or LAST_PRICE (trigger legs only).
The order ID this trigger is attached to (for SpotAttach / DerivAttach attach-to-order orders).
Position this trigger is attached to (DerivAttach attach-to-position): > 0 = isolation_id of the isolated position; 0 = cross-margin position.
Order ID assigned by the exchange (present once the leg has been accepted).
Rejection reason, if the leg was rejected.
Leverage specified on the primary leg (derivatives only, when provided).
Isolated margin amount specified on the primary leg (derivatives only, when provided).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/get-order-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1613570791060",
"params": {
"instrument_name": "BTCUSD-PERP",
"start_time": "1610905028000081486",
"end_time": "1613570791058211357",
"limit": 20
}
}POST /private/get-order-history HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/get-order-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1613570791060",
"params": {
"instrument_name": "BTCUSD-PERP",
"start_time": "1610905028000081486",
"end_time": "1613570791058211357",
"limit": 20
}
}private/get-trades
POSTGets all executed trades for a particular instrument./private/get-trades
Users should use user.trade to keep track of real-time trades, and private/get-trades should primarily be used for recovery; typically when the websocket is disconnected.
Request
Body
required
Request id (echoed in response)
Must be "private/get-trades"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
E.g. BTCUSD-PERP. Omit for 'all'.
Start time in Unix time format (inclusive), ms or ns. Default: end_time - 1 day. Nanosecond recommended for accurate pagination.
End time in Unix time format (exclusive), ms or ns. Default: current system timestamp. Nanosecond recommended for accurate pagination.
Maximum number of trades to retrieve before end_time. Default: 100. Max: 100.
Optional filter for trades of a particular isolated position. Omit for 'all'.
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Account ID.
Event date.
Journal type would be TRADING.
Trade quantity.
Trade price.
Net trade fees (after fee credits applied, if any). The negative sign means a deduction on balance.
Fee credits used to offset the trade fees. The negative sign means fee credits were consumed.
Order ID.
Trade ID.
Trade match ID.
Client Order ID.
Possible values: [MAKER, TAKER]
Maker or taker side of the trade
Possible values: [BUY, SELL]
BUY or SELL
E.g. BTCUSD-PERP.
E.g. USD.
Create timestamp in milliseconds.
Create timestamp in nanoseconds.
Optional. Number of orders matched; Maker's order always 1; Taker's is the number of orders matched.
Optional. Only for Maker's order; which order entry of the price level was matched; 0-based.
Isolation ID of the order if under isolated position.
Possible values: [ISOLATED_MARGIN]
Isolation type
Trade transaction time in nanoseconds.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/get-trades",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1613570791060",
"params": {
"instrument_name": "BTCUSD-PERP",
"start_time": "1619089031996081486",
"end_time": "1619200052124211357",
"limit": 20
}
}POST /private/get-trades HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/get-trades",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1613570791060",
"params": {
"instrument_name": "BTCUSD-PERP",
"start_time": "1619089031996081486",
"end_time": "1619200052124211357",
"limit": 20
}
}private/get-transactions
POSTFetches recent transactions./private/get-transactions
Request
Body
required
Request id (echoed in response)
Must be "private/get-transactions"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
E.g. BTCUSD-PERP. Omit for 'all'.
Possible values: [TRADING, TRADE_FEE, ONCHAIN_WITHDRAWAL, ONCHAIN_DEPOSIT, FUNDING, REALIZED_PNL, INSURANCE_FUND, SOCIALIZED_LOSS, LIQUIDATION_FEE, SESSION_RESET, ADJUSTMENT, SESSION_SETTLE, UNCOVERED_LOSS, ADMIN_ADJUSTMENT, DELIST, SETTLEMENT_FEE, AUTO_CONVERSION, MANUAL_CONVERSION, SUBACCOUNT_TX, FIAT_WITHDRAWAL_CANCEL, MARGIN_TRADE_INTEREST]
Journal / transaction type
Start time in Unix time format (inclusive), ms or ns. Default: end_time - 1 day. Nanosecond recommended for accurate pagination.
End time in Unix time format (exclusive), ms or ns. Default: current system timestamp. Nanosecond recommended for accurate pagination.
Maximum number of transactions to retrieve before end_time. Default: 100. Max: 100.
Optional filter for transactions of a particular isolated position. Omit for 'all'.
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Account ID.
Event date.
Possible values: [TRADING, TRADE_FEE, ONCHAIN_WITHDRAWAL, ONCHAIN_DEPOSIT, FUNDING, REALIZED_PNL, INSURANCE_FUND, SOCIALIZED_LOSS, LIQUIDATION_FEE, SESSION_RESET, ADJUSTMENT, SESSION_SETTLE, UNCOVERED_LOSS, ADMIN_ADJUSTMENT, DELIST, SETTLEMENT_FEE, AUTO_CONVERSION, MANUAL_CONVERSION, SUBACCOUNT_TX, FIAT_WITHDRAWAL_CANCEL, MARGIN_TRADE_INTEREST]
Journal / transaction type
Journal ID.
Transaction quantity.
Transaction cost.
Realized PNL.
Order ID.
Trade ID.
Trade match ID; applicable to trades only; non-trade transactions may have zero or null.
Event timestamp in milliseconds.
Event timestamp in nanoseconds.
Client Order ID (can be empty).
Possible values: [MAKER, TAKER]
Maker or taker side of the trade
Possible values: [BUY, SELL]
BUY or SELL
E.g. BTCUSD-PERP.
Isolation ID of the order if under isolated position.
Possible values: [ISOLATED_MARGIN]
Isolation type
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/get-transactions",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1613640752166",
"params": {
"instrument_name": "BTCUSD-PERP",
"start_time": "1619089031996081486",
"end_time": "1619200052124211357",
"limit": 20
}
}POST /private/get-transactions HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/get-transactions",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1613640752166",
"params": {
"instrument_name": "BTCUSD-PERP",
"start_time": "1619089031996081486",
"end_time": "1619200052124211357",
"limit": 20
}
}Advanced Order Management
Advanced Order Management provides trigger orders and multi-leg execution strategies beyond basic LIMIT and MARKET orders. Use these endpoints for conditional order execution based on price triggers.
Trigger Orders
Trigger orders activate when a reference price condition is met. Use private/advanced/create-order to create trigger orders.
| Type | Description |
|---|---|
STOP_LOSS | Converts to a market order when trigger price is reached. Used to limit losses. |
STOP_LIMIT | Converts to a limit order when trigger price is reached. Offers price control on stop execution. |
TAKE_PROFIT | Market order activated when price moves favorably to the trigger level. Used to lock in gains. |
TAKE_PROFIT_LIMIT | Limit order activated when price moves favorably to the trigger level. |
Trigger orders require:
ref_price— the trigger priceref_price_type— reference price source:MARK_PRICE(default),INDEX_PRICE, orLAST_PRICE
Multi-Leg Strategies
Multi-leg orders link multiple orders together with conditional execution logic.
| Strategy | Description | Endpoint |
|---|---|---|
| OCO (One-Cancels-Other) | Two orders where filling one cancels the other. Typically pairs a take-profit with a stop-loss. | private/advanced/create-oco |
| OTO (One-Triggers-Other) | Primary order triggers a secondary order when filled. Used to attach TP/SL to an entry order. | private/advanced/create-oto |
| OTOCO (One-Triggers-OCO) | Primary order triggers an OCO pair when filled. Entry order with both TP and SL attached. | private/advanced/create-otoco |
Contingency Types
Multi-leg orders use contingency types to define the relationship between legs:
| Type | Description |
|---|---|
OCO | One-Cancels-Other: two orders, one cancels when the other fills |
SPOT_ATTACH | Attach trigger orders to a spot position |
DERIV_ATTACH | Attach trigger orders to a derivatives position (supports isolated margin) |
Order Management
private/advanced/amend-order— modify trigger price or quantityprivate/advanced/cancel-order— cancel a single advanced orderprivate/advanced/cancel-all-orders— cancel all advanced orders for an instrumentprivate/advanced/get-open-orders— retrieve open advanced ordersprivate/advanced/get-order-history— retrieve advanced order history
Real-Time Updates
Subscribe to user.advanced.order for real-time advanced order lifecycle events.
private/advanced/create-order
POSTCreates a new BUY or SELL trigger order on the Exchange./private/advanced/create-order
type must be STOP_LOSS, STOP_LIMIT, TAKE_PROFIT or TAKE_PROFIT_LIMIT.
This call is asynchronous, so the response is simply a confirmation of the request.
The user.advanced.order subscription can be used to check if the orders are successfully created.
Helpful information:
- STOP_LIMIT and TAKE_PROFIT_LIMIT will execute a LIMIT order when the ref_price is reached.
- STOP_LOSS and TAKE_PROFIT will execute a MARKET order when the ref_price is reached.
To create trigger orders based on ref_price vs. the reference price (ref_price_type):
- ref_price below ref_price_type price: SELL STOP_LOSS and STOP_LIMIT, BUY TAKE_PROFIT and TAKE_PROFIT_LIMIT
- ref_price above ref_price_type price: BUY STOP_LOSS and STOP_LIMIT, SELL TAKE_PROFIT and TAKE_PROFIT_LIMIT
SpotAttach / DerivAttach:
- Contingency type resolution: Automatically resolved from instrument type - spot instruments → SPOT_ATTACH, derivative instruments → DERIV_ATTACH
- DerivAttach attach-to-order: Use
attach_order_idto attach TP/SL to an existing limit order - DerivAttach attach-to-position: Use
attach_isolation_idto attach TP/SL directly to an existing position (> 0 for isolated position ID, 0 for cross-margin position). Requires REDUCE_ONLY in exec_inst. - Standalone TP/SL: For derivatives, if neither
attach_order_idnorattach_isolation_idis specified, isolation is resolved fromisolation_idparameter (if provided) or defaults to cross-margin
Request
Body
required
- ➖ M: Cancel Maker
- ➖ T: Cancel Taker
- ➖ B: Cancel Both Maker and Taker
- ➖ M: Matches Master or Sub a/c
- ➖ S: Matches Sub a/c only
- ➖ D: reset all STP fields to default (stp_inst and stp_id in same request are ignored).
Request id (echoed in response)
Must be "private/advanced/create-order"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Instrument symbol, e.g. BTCUSD-PERP
Possible values: [BUY, SELL]
BUY or SELL
Order quantity. For MARKET BUY can use notional instead.
Client order ID (max 36 chars). Recommended for correlation.
Possible values: [GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL]
Time in force
Possible values: [POST_ONLY, REDUCE_ONLY, SMART_POST_ONLY, ISOLATED_MARGIN, MARGIN_ORDER]
Optional array of execution instructions. POST_ONLY and SMART_POST_ONLY mutually exclusive.
Fee instrument (e.g. CRO) for fee deduction
Self-trade prevention ID (0 to 32767)
Possible values: [M, T, B]
Self-trade prevention instruction. Used in private/change-account-settings (params) and private/get-account-settings (result). Mandatory if stp_scope is set.
Possible values: [M, S, D]
Self-trade prevention scope. Used in private/change-account-settings (params) and private/get-account-settings (result).
Possible values: [STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT]
Trigger order type
Limit price (required for STOP_LIMIT and TAKE_PROFIT_LIMIT)
Trigger price (required for all trigger order types)
Possible values: [MARK_PRICE, INDEX_PRICE, LAST_PRICE]
Reference price type for trigger orders
The order ID this trigger order is attached to. Used to attach TP/SL to an existing limit order (SpotAttach / DerivAttach attach-to-order).
Position this trigger order is attached to (DerivAttach attach-to-position, derivatives only). > 0: attach to the isolated position whose isolation_id equals the value. 0: attach to the cross-margin position. Requires REDUCE_ONLY in exec_inst. Mutually exclusive with attach_order_id and isolation_id.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Newly created order ID.
Newly created client order ID.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"method": "private/advanced/create-order",
"id": "6573",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1750385416548",
"params": {
"instrument_name": "CRO_USD",
"side": "SELL",
"type": "STOP_LIMIT",
"quantity": "10",
"price": "0.12",
"ref_price": "0.12",
"client_oid": "c5f682ed-7108-4f1c-b755-972fcdca0f02"
}
}POST /private/advanced/create-order HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"method": "private/advanced/create-order",
"id": "6573",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1750385416548",
"params": {
"instrument_name": "CRO_USD",
"side": "SELL",
"type": "STOP_LIMIT",
"quantity": "10",
"price": "0.12",
"ref_price": "0.12",
"client_oid": "c5f682ed-7108-4f1c-b755-972fcdca0f02"
}
}private/advanced/amend-order
POSTAmends an existing trigger order on the Exchange./private/advanced/amend-order
This call is asynchronous, so the response is simply a confirmation of the request.
The user.advanced.order subscription can be used to check when the order is successfully amended.
Trigger Order Type Conversion:
- Set
new_priceto "0" → Convert trigger limit order to trigger market order - Set
new_priceto "> 0" → Convert trigger market order to trigger limit order
Request
Body
required
Request id (echoed in response)
Must be "private/advanced/amend-order"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Order ID to amend. Either order_id or client_oid must be present. string format is highly recommended.
Client Order ID to amend. Either order_id or client_oid must be present.
New reference/trigger price. Omit to keep the existing trigger price.
New quantity. If no change required, input original value.
New limit price for the trigger order. Set to '0' to convert trigger limit to market, or value > 0 to convert market to limit.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Order ID.
Client Order ID.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"method": "private/advanced/amend-order",
"id": "1",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"order_id": "18342311",
"new_ref_price": "46000.0",
"new_quantity": "0.15"
}
}POST /private/advanced/amend-order HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"method": "private/advanced/amend-order",
"id": "1",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"order_id": "18342311",
"new_ref_price": "46000.0",
"new_quantity": "0.15"
}
}private/advanced/create-oco
POSTCreates a One-cancels-the-Other (OCO) execution strategy on the Exchange./private/advanced/create-oco
OCO execution strategy allows users to place a two-order strategy where one order automatically cancels the other when one of the orders is partially/fully executed. Users are able to place 2 orders - one LIMIT and one trigger order. Only one of the orders will be executed. The trigger order can either be a stop loss or take profit order. The OCO order type is only available for Spot trading pairs for now.
This call is asynchronous, so the response is simply a confirmation of the request. The user.advanced.order subscription can be used to check if the orders are successfully created.
For the content of each order in order_list, please refer to private/create-order for details. One order must be LIMIT, the other order must be STOP_LOSS, STOP_LIMIT, TAKE_PROFIT_LIMIT or TAKE_PROFIT. For ref_price_type of the trigger order, only MARK_PRICE is supported for now.
Request
Body
required
- Array [
- ➖ M: Cancel Maker
- ➖ T: Cancel Taker
- ➖ B: Cancel Both Maker and Taker
- ➖ M: Matches Master or Sub a/c
- ➖ S: Matches Sub a/c only
- ➖ D: reset all STP fields to default (stp_inst and stp_id in same request are ignored).
- ➖ LIMIT, MARKET
- ➖ STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT: Trigger orders
- ]
Request id (echoed in response)
Must be "private/advanced/create-oco"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
order_list object[]required
>= 2, <= 2 Instrument symbol, e.g. BTCUSD-PERP
Possible values: [BUY, SELL]
BUY or SELL
Order quantity. For MARKET BUY can use notional instead.
Client order ID (max 36 chars). Recommended for correlation.
Possible values: [GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL]
Time in force
Possible values: [POST_ONLY, REDUCE_ONLY, SMART_POST_ONLY, ISOLATED_MARGIN, MARGIN_ORDER]
Optional array of execution instructions. POST_ONLY and SMART_POST_ONLY mutually exclusive.
Fee instrument (e.g. CRO) for fee deduction
Self-trade prevention ID (0 to 32767)
Possible values: [M, T, B]
Self-trade prevention instruction. Used in private/change-account-settings (params) and private/get-account-settings (result). Mandatory if stp_scope is set.
Possible values: [M, S, D]
Self-trade prevention scope. Used in private/change-account-settings (params) and private/get-account-settings (result).
Possible values: [LIMIT, MARKET, STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT]
Order type:
Limit price (required for LIMIT, STOP_LIMIT, TAKE_PROFIT_LIMIT)
Amount to spend; for MARKET/STOP_LOSS/TAKE_PROFIT BUY only
Trigger price for STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT
Possible values: [MARK_PRICE, INDEX_PRICE, LAST_PRICE]
Reference price type for trigger orders
Possible values: [SPOT, MARGIN]
SPOT or MARGIN (spot/margin mode).
Isolated margin amount
Isolation ID for isolated margin
Leverage for margin/derivatives
Order ID to attach this trigger order to. Used for SpotAttach / DerivAttach.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
List ID.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"method": "private/advanced/create-oco",
"id": "123456789",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "123456789000",
"params": {
"order_list": [
{
"instrument_name": "BTCUSD",
"quantity": "0.1",
"type": "LIMIT",
"price": "93000",
"side": "SELL"
},
{
"instrument_name": "BTCUSD",
"quantity": "0.1",
"type": "STOP_LOSS",
"ref_price": "80000",
"side": "SELL"
}
]
}
}POST /private/advanced/create-oco HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"method": "private/advanced/create-oco",
"id": "123456789",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "123456789000",
"params": {
"order_list": [
{
"instrument_name": "BTCUSD",
"quantity": "0.1",
"type": "LIMIT",
"price": "93000",
"side": "SELL"
},
{
"instrument_name": "BTCUSD",
"quantity": "0.1",
"type": "STOP_LOSS",
"ref_price": "80000",
"side": "SELL"
}
]
}
}private/advanced/cancel-oco
POSTCancel an OCO order on the Exchange. This call is asynchronous, so the response is simply a confirmation of the request. The/private/advanced/cancel-oco
user.advanced.order subscription can be used to check when each of the orders is successfully cancelled.
Request
Body
required
Request id (echoed in response)
Must be "private/advanced/cancel-oco"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
List ID of the OCO order to cancel
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"method": "private/advanced/cancel-oco",
"id": "1234",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "123456789000",
"params": {
"list_id": "4421958062479290999"
}
}POST /private/advanced/cancel-oco HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"method": "private/advanced/cancel-oco",
"id": "1234",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "123456789000",
"params": {
"list_id": "4421958062479290999"
}
}private/advanced/create-oto
POSTCreates a One-triggers-the-Other (OTO) execution strategy on the Exchange./private/advanced/create-oto
OTO execution strategy allows users to place a two-order strategy where one order automatically triggers the other when the first order is fully executed. Users are able to place a limit or market order with a trigger order, and only when the primary order is fully executed, the trigger order will take effect. The trigger order can either be a stop loss or take profit order.
SpotAttach / DerivAttach: This API creates SpotAttach (for spot instruments) or DerivAttach (for derivative instruments) order types. The contingency type is automatically resolved from the instrument type. With 2 legs (1 limit/market + 1 trigger), it follows OTO behavior.
- SpotAttach: Flexible - you can later attach additional TP/SL using
private/advanced/create-orderwithattach_order_id, effectively converting it to OTOCO behavior. You can also cancel individual legs usingprivate/advanced/cancel-orderand reattach new ones. - DerivAttach: For derivatives, the primary leg may specify
isolation_id,leverage,isolated_margin_amount, andexec_instmay include ISOLATED_MARGIN. Trigger legs inherit the isolation mode from the parent leg.
This call is asynchronous, so the response is simply a confirmation of the request. The user.advanced.order subscription can be used to check if the orders are successfully created.
For the content of each order in order_list, please refer to private/create-order for details. One order must be LIMIT or MARKET, and the other must be STOP_LOSS, STOP_LIMIT, TAKE_PROFIT_LIMIT or TAKE_PROFIT. The ref_price_type for the trigger order supports MARK_PRICE (default), INDEX_PRICE, and LAST_PRICE.
Request
Body
required
- Array [
- ➖ M: Cancel Maker
- ➖ T: Cancel Taker
- ➖ B: Cancel Both Maker and Taker
- ➖ M: Matches Master or Sub a/c
- ➖ S: Matches Sub a/c only
- ➖ D: reset all STP fields to default (stp_inst and stp_id in same request are ignored).
- ➖ LIMIT, MARKET
- ➖ STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT: Trigger orders
- ]
Request id (echoed in response)
Must be "private/advanced/create-oto"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
order_list object[]required
>= 2, <= 2 Instrument symbol, e.g. BTCUSD-PERP
Possible values: [BUY, SELL]
BUY or SELL
Order quantity. For MARKET BUY can use notional instead.
Client order ID (max 36 chars). Recommended for correlation.
Possible values: [GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL]
Time in force
Possible values: [POST_ONLY, REDUCE_ONLY, SMART_POST_ONLY, ISOLATED_MARGIN, MARGIN_ORDER]
Optional array of execution instructions. POST_ONLY and SMART_POST_ONLY mutually exclusive.
Fee instrument (e.g. CRO) for fee deduction
Self-trade prevention ID (0 to 32767)
Possible values: [M, T, B]
Self-trade prevention instruction. Used in private/change-account-settings (params) and private/get-account-settings (result). Mandatory if stp_scope is set.
Possible values: [M, S, D]
Self-trade prevention scope. Used in private/change-account-settings (params) and private/get-account-settings (result).
Possible values: [LIMIT, MARKET, STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT]
Order type:
Limit price (required for LIMIT, STOP_LIMIT, TAKE_PROFIT_LIMIT)
Amount to spend; for MARKET/STOP_LOSS/TAKE_PROFIT BUY only
Trigger price for STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT
Possible values: [MARK_PRICE, INDEX_PRICE, LAST_PRICE]
Reference price type for trigger orders
Possible values: [SPOT, MARGIN]
SPOT or MARGIN (spot/margin mode).
Isolated margin amount
Isolation ID for isolated margin
Leverage for margin/derivatives
Order ID to attach this trigger order to. Used for SpotAttach / DerivAttach.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
List ID.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"method": "private/advanced/create-oto",
"id": "123456789",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "123456789000",
"params": {
"order_list": [
{
"instrument_name": "BTCUSD",
"quantity": "0.1",
"type": "LIMIT",
"price": "93000",
"side": "BUY"
},
{
"instrument_name": "BTCUSD",
"quantity": "0.1",
"type": "STOP_LOSS",
"ref_price": "80000",
"side": "SELL"
}
]
}
}POST /private/advanced/create-oto HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"method": "private/advanced/create-oto",
"id": "123456789",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "123456789000",
"params": {
"order_list": [
{
"instrument_name": "BTCUSD",
"quantity": "0.1",
"type": "LIMIT",
"price": "93000",
"side": "BUY"
},
{
"instrument_name": "BTCUSD",
"quantity": "0.1",
"type": "STOP_LOSS",
"ref_price": "80000",
"side": "SELL"
}
]
}
}private/advanced/cancel-oto
POSTCancel a SPOT_ATTACH or DERIV_ATTACH order on the Exchange. This call is asynchronous, so the response is simply a confirmation of the request. The/private/advanced/cancel-oto
user.advanced.order subscription can be used to check when each of the orders is successfully cancelled.
Note: This API can also be used to cancel SpotAttach / DerivAttach orders regardless of the number of legs (2 or 3). Both cancel-oto and cancel-otoco can be used interchangeably to cancel SpotAttach / DerivAttach orders by list_id.
Request
Body
required
Request id (echoed in response)
Must be "private/advanced/cancel-oto"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"method": "private/advanced/cancel-oto",
"id": "1234",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "123456789000",
"params": {
"list_id": "4421958062479290999"
}
}POST /private/advanced/cancel-oto HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"method": "private/advanced/cancel-oto",
"id": "1234",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "123456789000",
"params": {
"list_id": "4421958062479290999"
}
}private/advanced/create-otoco
POSTCreates a One-Triggers-a-One-Cancels-the-Other (OTOCO) execution strategy on the Exchange./private/advanced/create-otoco
OTOCO execution strategy allows users to place a three-order strategy where one order automatically triggers the other two when the first order is fully executed. Users are able to place a limit or market order with two trigger orders, and only when the primary order is fully executed, the two trigger orders will take effect. The two trigger orders must be one stop loss and one take profit orders.
SpotAttach / DerivAttach: This API creates SpotAttach (for spot instruments) or DerivAttach (for derivative instruments) order types. The contingency type is automatically resolved from the instrument type. With 3 legs (1 limit/market + 2 triggers), it follows OTOCO behavior.
- SpotAttach: When either one of the two trigger orders is executed, the other is automatically canceled (OCO behavior). SpotAttach orders are flexible - you can cancel one of the TP/SL legs using
private/advanced/cancel-order, effectively converting it to OTO behavior. You can also reattach new TP/SL usingprivate/advanced/create-orderwithattach_order_id. - DerivAttach: For derivatives, the two trigger legs are independent - one firing does NOT cancel the other (unlike SpotAttach). The primary leg may specify
isolation_id,leverage,isolated_margin_amount, andexec_instmay include ISOLATED_MARGIN. Trigger legs inherit the isolation mode from the parent leg.
This call is asynchronous, so the response is simply a confirmation of the request. The user.advanced.order subscription can be used to check if the orders are successfully created.
For the content of each order in order_list, please refer to private/create-order for details. One order must be LIMIT or MARKET, and for the two trigger orders, one must be STOP_LOSS or STOP_LIMIT, and the other one must be TAKE_PROFIT or TAKE_PROFIT_LIMIT. The ref_price_type for the trigger orders supports MARK_PRICE (default), INDEX_PRICE, and LAST_PRICE.
Request
Body
required
- Array [
- ➖ M: Cancel Maker
- ➖ T: Cancel Taker
- ➖ B: Cancel Both Maker and Taker
- ➖ M: Matches Master or Sub a/c
- ➖ S: Matches Sub a/c only
- ➖ D: reset all STP fields to default (stp_inst and stp_id in same request are ignored).
- ➖ LIMIT, MARKET
- ➖ STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT: Trigger orders
- ]
Request id (echoed in response)
Must be "private/advanced/create-otoco"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
order_list object[]required
>= 3, <= 3 Instrument symbol, e.g. BTCUSD-PERP
Possible values: [BUY, SELL]
BUY or SELL
Order quantity. For MARKET BUY can use notional instead.
Client order ID (max 36 chars). Recommended for correlation.
Possible values: [GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL]
Time in force
Possible values: [POST_ONLY, REDUCE_ONLY, SMART_POST_ONLY, ISOLATED_MARGIN, MARGIN_ORDER]
Optional array of execution instructions. POST_ONLY and SMART_POST_ONLY mutually exclusive.
Fee instrument (e.g. CRO) for fee deduction
Self-trade prevention ID (0 to 32767)
Possible values: [M, T, B]
Self-trade prevention instruction. Used in private/change-account-settings (params) and private/get-account-settings (result). Mandatory if stp_scope is set.
Possible values: [M, S, D]
Self-trade prevention scope. Used in private/change-account-settings (params) and private/get-account-settings (result).
Possible values: [LIMIT, MARKET, STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT]
Order type:
Limit price (required for LIMIT, STOP_LIMIT, TAKE_PROFIT_LIMIT)
Amount to spend; for MARKET/STOP_LOSS/TAKE_PROFIT BUY only
Trigger price for STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT
Possible values: [MARK_PRICE, INDEX_PRICE, LAST_PRICE]
Reference price type for trigger orders
Possible values: [SPOT, MARGIN]
SPOT or MARGIN (spot/margin mode).
Isolated margin amount
Isolation ID for isolated margin
Leverage for margin/derivatives
Order ID to attach this trigger order to. Used for SpotAttach / DerivAttach.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
List ID.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"method": "private/advanced/create-otoco",
"id": "123456789",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "123456789000",
"params": {
"order_list": [
{
"instrument_name": "BTCUSD",
"quantity": "0.1",
"type": "LIMIT",
"price": "93000",
"side": "BUY"
},
{
"instrument_name": "BTCUSD",
"quantity": "0.1",
"type": "STOP_LOSS",
"ref_price": "80000",
"side": "SELL"
},
{
"instrument_name": "BTCUSD",
"quantity": "0.1",
"type": "TAKE_PROFIT",
"ref_price": "108000",
"side": "SELL"
}
]
}
}POST /private/advanced/create-otoco HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"method": "private/advanced/create-otoco",
"id": "123456789",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "123456789000",
"params": {
"order_list": [
{
"instrument_name": "BTCUSD",
"quantity": "0.1",
"type": "LIMIT",
"price": "93000",
"side": "BUY"
},
{
"instrument_name": "BTCUSD",
"quantity": "0.1",
"type": "STOP_LOSS",
"ref_price": "80000",
"side": "SELL"
},
{
"instrument_name": "BTCUSD",
"quantity": "0.1",
"type": "TAKE_PROFIT",
"ref_price": "108000",
"side": "SELL"
}
]
}
}private/advanced/cancel-otoco
POSTCancel a SPOT_ATTACH or DERIV_ATTACH order on the Exchange. This call is asynchronous, so the response is simply a confirmation of the request. The/private/advanced/cancel-otoco
user.advanced.order subscription can be used to check when each of the orders is successfully cancelled.
Note: This API can also be used to cancel SpotAttach / DerivAttach orders regardless of the number of legs (2 or 3). Both cancel-oto and cancel-otoco can be used interchangeably to cancel SpotAttach / DerivAttach orders by list_id.
Request
Body
required
Request id (echoed in response)
Must be "private/advanced/cancel-otoco"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"method": "private/advanced/cancel-otoco",
"id": "1234",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "123456789000",
"params": {
"list_id": "4421958062479290999"
}
}POST /private/advanced/cancel-otoco HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"method": "private/advanced/cancel-otoco",
"id": "1234",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "123456789000",
"params": {
"list_id": "4421958062479290999"
}
}private/advanced/cancel-order
POSTCancel an individual order of a OTO/OTOCO order on the Exchange (asynchronous)./private/advanced/cancel-order
This call is asynchronous, so the response is simply a confirmation of the request.
The user.advance.order subscription can be used to check when the order is successfully canceled.
Request
Body
required
Request id (echoed in response)
Must be "private/advanced/cancel-order"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Optional Order ID. Either order_id or client_oid must be present. string format is highly recommended.
Optional Client Order ID. Either order_id or client_oid must be present.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Order ID
Client Order ID
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"nonce": "1610905028000",
"method": "private/advanced/cancel-order",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {
"order_id": "18342311"
}
}POST /private/advanced/cancel-order HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"nonce": "1610905028000",
"method": "private/advanced/cancel-order",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {
"order_id": "18342311"
}
}private/advanced/cancel-all-orders
POSTCancels all OTO/OTOCO orders for a particular instrument/pair (asynchronous)./private/advanced/cancel-all-orders
This call is asynchronous, so the response is simply a confirmation of the request.
The user.advance.order subscription can be used to check when the order is successfully canceled.
Request
Body
required
- ➖ private/cancel-all-orders: LIMIT, ALL
- ➖ private/advanced/cancel-all-orders: LIMIT, TRIGGER, ALL. For LIMIT, only the legs from advanced orders will be in-scope.
Request id (echoed in response)
Must be "private/advanced/cancel-all-orders"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
e.g. BTC_USD. If not provided, the OTO/OTOCO orders of ALL instruments will be canceled. Required when position_type is specified.
Possible values: [LIMIT, TRIGGER, ALL]
Allowed values depend on operation:
Possible values: [CROSS_MARGIN, ISOLATED_MARGIN]
Derivatives only. One of CROSS_MARGIN, ISOLATED_MARGIN. When set, only advanced orders tied to the specified position type on the given instrument_name are cancelled. Requires instrument_name when set. Cannot be combined with type=LIMIT or type=TRIGGER.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"nonce": "1611169184000",
"method": "private/advanced/cancel-all-orders",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {
"instrument_name": "BTC_USD"
}
}POST /private/advanced/cancel-all-orders HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"nonce": "1611169184000",
"method": "private/advanced/cancel-all-orders",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"params": {
"instrument_name": "BTC_USD"
}
}private/advanced/get-open-orders
POSTGets all open orders for OTO/OTOCO orders for a particular instrument./private/advanced/get-open-orders
Request
Body
required
Request id (echoed in response)
Must be "private/advanced/get-open-orders"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
e.g. BTC_USD. Omit for 'all'.
Schema
- Array [
- ➖ LIMIT, MARKET
- ➖ STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT: Trigger orders
- ➖ OCO: One-Cancels-the-Other
- ➖ OTO: One-Triggers-the-Other
- ➖ OTOCO: One-Triggers-a-One-Cancels-the-Other
- ➖ SPOT_ATTACH: SpotAttach (TP/SL attached to order for spot instruments)
- ➖ DERIV_ATTACH: DerivAttach (TP/SL attached to order or position for derivative instruments)
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Account ID.
Order ID.
Client Order ID.
Possible values: [LIMIT, MARKET, STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT]
Order type:
Possible values: [GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL]
Time in force
Possible values: [BUY, SELL]
BUY or SELL
Possible values: [POST_ONLY, REDUCE_ONLY, SMART_POST_ONLY, LIQUIDATION, ISOLATED_MARGIN, MARGIN_ORDER]
Execution instructions.
Quantity specified in the order.
Limit price specified in the order.
Order value.
User's maker fee rate.
User's taker fee rate.
Average price.
Cumulative executed quantity.
Cumulative executed value.
Cumulative executed fee.
Possible values: [PENDING, NEW, ACTIVE, FILLED, CANCELED, REJECTED, EXPIRED]
Order status
Updated user.
Order creation date.
E.g. BTCUSD-PERP.
Currency used for the fees.
Order creation timestamp (ms), e.g. "1771761038000".
Order creation timestamp (nanosecond), e.g. "1771761038000000000".
Order update timestamp (ms), e.g. "1771761038000".
Rejection reason code; present for get-order-detail and get-order-history.
isolation_id of the isolated position the order is tied to (derivatives only).
Possible values: [ISOLATED_MARGIN]
ISOLATED_MARGIN when isolation_id > 0 (derivatives only).
OTO/OTOCO/OCO list id; advanced only.
Possible values: [OCO, OTO, OTOCO, SPOT_ATTACH, DERIV_ATTACH]
Contingency type for advanced orders:
Leg id within OTO/OTOCO/OCO; advanced only.
Trigger reference price (trigger legs only).
Possible values: [MARK_PRICE, INDEX_PRICE, LAST_PRICE]
Price source used for ref_price: MARK_PRICE, INDEX_PRICE, or LAST_PRICE (trigger legs only).
The order ID this trigger is attached to (for SpotAttach / DerivAttach attach-to-order orders).
Position this trigger is attached to (DerivAttach attach-to-position): > 0 = isolation_id of the isolated position; 0 = cross-margin position.
Order ID assigned by the exchange (present once the leg has been accepted).
Rejection reason, if the leg was rejected.
Leverage specified on the primary leg (derivatives only, when provided).
Isolated margin amount specified on the primary leg (derivatives only, when provided).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/advanced/get-open-orders",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"instrument_name": "BTC_USD"
}
}POST /private/advanced/get-open-orders HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/advanced/get-open-orders",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"instrument_name": "BTC_USD"
}
}private/advanced/get-order-detail
POSTGets detail of a single advanced order by/private/advanced/get-order-detail
order_id or client_oid.
Request
Body
required
Request id (echoed in response)
Must be "private/advanced/get-order-detail"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Order ID. string format is highly recommended, especially for JavaScript client. Either order_id or client_oid must be specified.
Client Order ID. Either order_id or client_oid must be specified.
Schema
- ➖ LIMIT, MARKET
- ➖ STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT: Trigger orders
- ➖ OCO: One-Cancels-the-Other
- ➖ OTO: One-Triggers-the-Other
- ➖ OTOCO: One-Triggers-a-One-Cancels-the-Other
- ➖ SPOT_ATTACH: SpotAttach (TP/SL attached to order for spot instruments)
- ➖ DERIV_ATTACH: DerivAttach (TP/SL attached to order or position for derivative instruments)
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Account ID.
Order ID.
Client Order ID.
Possible values: [LIMIT, MARKET, STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT]
Order type:
Possible values: [GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL]
Time in force
Possible values: [BUY, SELL]
BUY or SELL
Possible values: [POST_ONLY, REDUCE_ONLY, SMART_POST_ONLY, LIQUIDATION, ISOLATED_MARGIN, MARGIN_ORDER]
Execution instructions.
Quantity specified in the order.
Limit price specified in the order.
Order value.
User's maker fee rate.
User's taker fee rate.
Average price.
Cumulative executed quantity.
Cumulative executed value.
Cumulative executed fee.
Possible values: [PENDING, NEW, ACTIVE, FILLED, CANCELED, REJECTED, EXPIRED]
Order status
Updated user.
Order creation date.
E.g. BTCUSD-PERP.
Currency used for the fees.
Order creation timestamp (ms), e.g. "1771761038000".
Order creation timestamp (nanosecond), e.g. "1771761038000000000".
Order update timestamp (ms), e.g. "1771761038000".
Rejection reason code; present for get-order-detail and get-order-history.
isolation_id of the isolated position the order is tied to (derivatives only).
Possible values: [ISOLATED_MARGIN]
ISOLATED_MARGIN when isolation_id > 0 (derivatives only).
OTO/OTOCO/OCO list id; advanced only.
Possible values: [OCO, OTO, OTOCO, SPOT_ATTACH, DERIV_ATTACH]
Contingency type for advanced orders:
Leg id within OTO/OTOCO/OCO; advanced only.
Trigger reference price (trigger legs only).
Possible values: [MARK_PRICE, INDEX_PRICE, LAST_PRICE]
Price source used for ref_price: MARK_PRICE, INDEX_PRICE, or LAST_PRICE (trigger legs only).
The order ID this trigger is attached to (for SpotAttach / DerivAttach attach-to-order orders).
Position this trigger is attached to (DerivAttach attach-to-position): > 0 = isolation_id of the isolated position; 0 = cross-margin position.
Order ID assigned by the exchange (present once the leg has been accepted).
Rejection reason, if the leg was rejected.
Leverage specified on the primary leg (derivatives only, when provided).
Isolated margin amount specified on the primary leg (derivatives only, when provided).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/advanced/get-order-detail",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"order_id": "19848525"
}
}POST /private/advanced/get-order-detail HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/advanced/get-order-detail",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"order_id": "19848525"
}
}private/advanced/get-order-history
POSTGets the order history of OTO/OTOCO orders for a particular instrument./private/advanced/get-order-history
Users should use user.advance.order to keep track of real-time order updates, and private/advanced/get-order-history should primarily be used for recovery; typically when the websocket is disconnected.
Request
Body
required
Request id (echoed in response)
Must be "private/advanced/get-order-history"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
e.g. BTCUSD-PERP. Omit for 'all'.
Start time in Unix time format (inclusive), ms or ns. Default: end_time - 1 day. Nanosecond is recommended for accurate pagination.
End time in Unix time format (exclusive), ms or ns. Default: current system timestamp. Nanosecond is recommended for accurate pagination.
Maximum number of results to return before end_time. Default: 100. Max: 100.
Schema
- Array [
- ➖ LIMIT, MARKET
- ➖ STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT: Trigger orders
- ➖ OCO: One-Cancels-the-Other
- ➖ OTO: One-Triggers-the-Other
- ➖ OTOCO: One-Triggers-a-One-Cancels-the-Other
- ➖ SPOT_ATTACH: SpotAttach (TP/SL attached to order for spot instruments)
- ➖ DERIV_ATTACH: DerivAttach (TP/SL attached to order or position for derivative instruments)
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Account ID.
Order ID.
Client Order ID.
Possible values: [LIMIT, MARKET, STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT]
Order type:
Possible values: [GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL]
Time in force
Possible values: [BUY, SELL]
BUY or SELL
Possible values: [POST_ONLY, REDUCE_ONLY, SMART_POST_ONLY, LIQUIDATION, ISOLATED_MARGIN, MARGIN_ORDER]
Execution instructions.
Quantity specified in the order.
Limit price specified in the order.
Order value.
User's maker fee rate.
User's taker fee rate.
Average price.
Cumulative executed quantity.
Cumulative executed value.
Cumulative executed fee.
Possible values: [PENDING, NEW, ACTIVE, FILLED, CANCELED, REJECTED, EXPIRED]
Order status
Updated user.
Order creation date.
E.g. BTCUSD-PERP.
Currency used for the fees.
Order creation timestamp (ms), e.g. "1771761038000".
Order creation timestamp (nanosecond), e.g. "1771761038000000000".
Order update timestamp (ms), e.g. "1771761038000".
Rejection reason code; present for get-order-detail and get-order-history.
isolation_id of the isolated position the order is tied to (derivatives only).
Possible values: [ISOLATED_MARGIN]
ISOLATED_MARGIN when isolation_id > 0 (derivatives only).
OTO/OTOCO/OCO list id; advanced only.
Possible values: [OCO, OTO, OTOCO, SPOT_ATTACH, DERIV_ATTACH]
Contingency type for advanced orders:
Leg id within OTO/OTOCO/OCO; advanced only.
Trigger reference price (trigger legs only).
Possible values: [MARK_PRICE, INDEX_PRICE, LAST_PRICE]
Price source used for ref_price: MARK_PRICE, INDEX_PRICE, or LAST_PRICE (trigger legs only).
The order ID this trigger is attached to (for SpotAttach / DerivAttach attach-to-order orders).
Position this trigger is attached to (DerivAttach attach-to-position): > 0 = isolation_id of the isolated position; 0 = cross-margin position.
Order ID assigned by the exchange (present once the leg has been accepted).
Rejection reason, if the leg was rejected.
Leverage specified on the primary leg (derivatives only, when provided).
Isolated margin amount specified on the primary leg (derivatives only, when provided).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/advanced/get-order-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"instrument_name": "BTC_USD",
"start_time": "1610905028000081486",
"end_time": "1613570791058211357",
"limit": "20"
}
}POST /private/advanced/get-order-history HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/advanced/get-order-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"instrument_name": "BTC_USD",
"start_time": "1610905028000081486",
"end_time": "1613570791058211357",
"limit": "20"
}
}private/advanced/create-order-list
POSTCreates multiple advanced orders in a single request./private/advanced/create-order-list
This call is asynchronous, so the response is simply a confirmation of the request.
The user.advanced.order subscription can be used to check when the orders are successfully created.
Request
Body
required
- Array [
- ➖ M: Cancel Maker
- ➖ T: Cancel Taker
- ➖ B: Cancel Both Maker and Taker
- ➖ M: Matches Master or Sub a/c
- ➖ S: Matches Sub a/c only
- ➖ D: reset all STP fields to default (stp_inst and stp_id in same request are ignored).
- ]
Request id (echoed in response)
Must be "private/advanced/create-order-list"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
order_list object[]required
>= 1, <= 10 Instrument symbol, e.g. BTCUSD-PERP
Possible values: [BUY, SELL]
BUY or SELL
Order quantity. For MARKET BUY can use notional instead.
Client order ID (max 36 chars). Recommended for correlation.
Possible values: [GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL]
Time in force
Possible values: [POST_ONLY, REDUCE_ONLY, SMART_POST_ONLY, ISOLATED_MARGIN, MARGIN_ORDER]
Optional array of execution instructions. POST_ONLY and SMART_POST_ONLY mutually exclusive.
Fee instrument (e.g. CRO) for fee deduction
Self-trade prevention ID (0 to 32767)
Possible values: [M, T, B]
Self-trade prevention instruction. Used in private/change-account-settings (params) and private/get-account-settings (result). Mandatory if stp_scope is set.
Possible values: [M, S, D]
Self-trade prevention scope. Used in private/change-account-settings (params) and private/get-account-settings (result).
Possible values: [STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT]
Trigger order type
Limit price (required for STOP_LIMIT and TAKE_PROFIT_LIMIT)
Trigger price (required for all trigger order types)
Possible values: [MARK_PRICE, INDEX_PRICE, LAST_PRICE]
Reference price type for trigger orders
The order ID this trigger order is attached to. Used to attach TP/SL to an existing limit order (SpotAttach / DerivAttach attach-to-order).
Position this trigger order is attached to (DerivAttach attach-to-position, derivatives only). > 0: attach to the isolated position whose isolation_id equals the value. 0: attach to the cross-margin position. Requires REDUCE_ONLY in exec_inst. Mutually exclusive with attach_order_id and isolation_id.
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object[]
Index of the order in the original request (0-based).
0 for success, error code otherwise.
Order ID (present on success).
Client Order ID (present on success).
Error message (present on failure).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"method": "private/advanced/create-order-list",
"id": "1",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"order_list": [
{
"instrument_name": "BTC_USD",
"side": "SELL",
"type": "STOP_LOSS",
"quantity": "0.1",
"ref_price": "45000.0",
"client_oid": "my_sl_order"
},
{
"instrument_name": "BTC_USD",
"side": "SELL",
"type": "TAKE_PROFIT",
"quantity": "0.1",
"ref_price": "55000.0",
"client_oid": "my_tp_order"
}
]
}
}POST /private/advanced/create-order-list HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"method": "private/advanced/create-order-list",
"id": "1",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"order_list": [
{
"instrument_name": "BTC_USD",
"side": "SELL",
"type": "STOP_LOSS",
"quantity": "0.1",
"ref_price": "45000.0",
"client_oid": "my_sl_order"
},
{
"instrument_name": "BTC_USD",
"side": "SELL",
"type": "TAKE_PROFIT",
"quantity": "0.1",
"ref_price": "55000.0",
"client_oid": "my_tp_order"
}
]
}
}private/advanced/cancel-order-list
POSTCancels multiple advanced orders in a single request./private/advanced/cancel-order-list
This call is asynchronous, so the response is simply a confirmation of the request.
The user.advanced.order subscription can be used to check when the orders are successfully canceled.
Request
Body
required
- Array [
- ]
Request id (echoed in response)
Must be "private/advanced/cancel-order-list"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
order_list object[]required
>= 1, <= 10 Order ID to cancel. string format is highly recommended.
Client Order ID to cancel.
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object[]
Index of the order in the original request (0-based).
0 for success, error code otherwise.
Error message (present on failure).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"method": "private/advanced/cancel-order-list",
"id": "1",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"order_list": [
{
"order_id": "289991951579667814"
},
{
"client_oid": "my_tp_order"
}
]
}
}POST /private/advanced/cancel-order-list HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"method": "private/advanced/cancel-order-list",
"id": "1",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"order_list": [
{
"order_id": "289991951579667814"
},
{
"client_oid": "my_tp_order"
}
]
}
}private/advanced/get-order-list-detail
POSTGets order details for multiple OCO/SpotAttach orders by their list IDs./private/advanced/get-order-list-detail
This endpoint allows batch querying of order information across different contingency order groups.
Request
Body
required
Request id (echoed in response)
Must be "private/advanced/get-order-list-detail"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
List of list IDs to query. string format is highly recommended for JavaScript clients.
Schema
- Array [
- ➖ LIMIT, MARKET
- ➖ STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT: Trigger orders
- ➖ OCO: One-Cancels-the-Other
- ➖ OTO: One-Triggers-the-Other
- ➖ OTOCO: One-Triggers-a-One-Cancels-the-Other
- ➖ SPOT_ATTACH: SpotAttach (TP/SL attached to order for spot instruments)
- ➖ DERIV_ATTACH: DerivAttach (TP/SL attached to order or position for derivative instruments)
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Account ID.
Order ID.
Client Order ID.
Possible values: [LIMIT, MARKET, STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT]
Order type:
Possible values: [GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL]
Time in force
Possible values: [BUY, SELL]
BUY or SELL
Possible values: [POST_ONLY, REDUCE_ONLY, SMART_POST_ONLY, LIQUIDATION, ISOLATED_MARGIN, MARGIN_ORDER]
Execution instructions.
Quantity specified in the order.
Limit price specified in the order.
Order value.
User's maker fee rate.
User's taker fee rate.
Average price.
Cumulative executed quantity.
Cumulative executed value.
Cumulative executed fee.
Possible values: [PENDING, NEW, ACTIVE, FILLED, CANCELED, REJECTED, EXPIRED]
Order status
Updated user.
Order creation date.
E.g. BTCUSD-PERP.
Currency used for the fees.
Order creation timestamp (ms), e.g. "1771761038000".
Order creation timestamp (nanosecond), e.g. "1771761038000000000".
Order update timestamp (ms), e.g. "1771761038000".
Rejection reason code; present for get-order-detail and get-order-history.
isolation_id of the isolated position the order is tied to (derivatives only).
Possible values: [ISOLATED_MARGIN]
ISOLATED_MARGIN when isolation_id > 0 (derivatives only).
OTO/OTOCO/OCO list id; advanced only.
Possible values: [OCO, OTO, OTOCO, SPOT_ATTACH, DERIV_ATTACH]
Contingency type for advanced orders:
Leg id within OTO/OTOCO/OCO; advanced only.
Trigger reference price (trigger legs only).
Possible values: [MARK_PRICE, INDEX_PRICE, LAST_PRICE]
Price source used for ref_price: MARK_PRICE, INDEX_PRICE, or LAST_PRICE (trigger legs only).
The order ID this trigger is attached to (for SpotAttach / DerivAttach attach-to-order orders).
Position this trigger is attached to (DerivAttach attach-to-position): > 0 = isolation_id of the isolated position; 0 = cross-margin position.
Order ID assigned by the exchange (present once the leg has been accepted).
Rejection reason, if the leg was rejected.
Leverage specified on the primary leg (derivatives only, when provided).
Isolated margin amount specified on the primary leg (derivatives only, when provided).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"method": "private/advanced/get-order-list-detail",
"id": "1",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"list_id_list": [
"4611686018427705308",
"4611686018427705309"
]
}
}POST /private/advanced/get-order-list-detail HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"method": "private/advanced/get-order-list-detail",
"id": "1",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"list_id_list": [
"4611686018427705308",
"4611686018427705309"
]
}
}OTC RFQ for Taker
RFQ Trading Flow
-
Taker can firstly subscribe to the following WebSocket channels:
-
Taker can create a quote request via WebSocket:
private/otc/request-quote -
Taker, who will be notified of quotes from the WebSocket channel
user.otc_qr.quotes, can create a deal request upon Quote message withprivate/otc/request-deal -
Taker will receive confirmation of the deal's status on WebSocket channel
user.otc.deals -
Taker can get the rejected or completed quote request from Quote Query API
-
Taker can get the rejected or completed deal from Deal Query API
Quote Request Lifecycle
| Status | Description |
|---|---|
ACTIVE | user may receive a quote and user may call request-deal to execute a trade |
COMPLETED | quote request duration has expired and no longer valid. User will not receive quote nor able to call request-deal anymore |
REJECTED | rejected due to various reasons; quote request is no longer valid |
Quote Lifecycle
| Status | Description |
|---|---|
ACTIVE | Quote is valid |
EXPIRED | Quote has exceeded its TTL |
CANCELLED | Liquidity provider cancelled the quote |
Deal History
Use the deal history endpoint to retrieve executed trades. Deal statuses:
| Status | Description |
|---|---|
ACCEPTED | Deal request accepted by the system. |
CONFIRMED | Liquidity provider has executed the deal. |
SETTLED | Deal settled and funds transferred. |
REJECTED | Deal request rejected (quote expired, insufficient balance, etc.) |
private/otc/request-quote (RFQ)
POSTCreate a quote request (RFQ flow)./private/otc/request-quote
Request
Body
required
- Array [
- ]
Request id (echoed in response)
Must be "private/otc/request-quote"
params objectrequired
Client provided ID for the quote request. Should be unique per ACTIVE quote request. Accepted characters a-z, A-Z, 0-9, _, -
FALSE indicates the quoted price subject to changes. TRUE indicates the quoted price is guaranteed.
FALSE / TRUE (default to FALSE)
Possible values: [IMMEDIATE, T1]
Default value: IMMEDIATE
IMMEDIATE can only be used by non settle later account. T1 can only be used by settle later account.
Possible values: [5000, 10000, 30000, 60000, 300000, 600000]
Default value: 10000
Quote request goes from ACTIVE to COMPLETED after this duration (in millisecond).
Possible values: [4000, 5000]
Default value: 4000
The minimum time the quotes remains valid (in millisecond).
leg_list object[]required
Instrument for this leg, e.g. BTC_USD
Possible values: [BUY, SELL]
BUY or SELL
Quantity for this leg. Either quantity or notional must be provided but not both.
Notional for this leg. Either quantity or notional must be provided but not both.
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result objectrequired
Should be user.otc_qr.requests
Should be user.otc_qr.requests
data object[]
System generated unique ID for the quote request
Client provided ID for the quote request
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "12",
"method": "private/otc/request-quote",
"params": {
"cl_quote_req_id": "abcd13456",
"firm_quote": false,
"settlement_arrangement": "IMMEDIATE",
"duration": "10000",
"quote_ttl": "5000",
"leg_list": [
{
"instrument_name": "BTC_USD",
"quantity": "1",
"side": "BUY"
}
]
}
}POST /private/otc/request-quote HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "12",
"method": "private/otc/request-quote",
"params": {
"cl_quote_req_id": "abcd13456",
"firm_quote": false,
"settlement_arrangement": "IMMEDIATE",
"duration": "10000",
"quote_ttl": "5000",
"leg_list": [
{
"instrument_name": "BTC_USD",
"quantity": "1",
"side": "BUY"
}
]
}
}private/otc/get-otc-instruments
POSTRetrieves a list of available OTC instruments that takers can request quotes for./private/otc/get-otc-instruments
Request
Body
required
Request id (echoed in response)
Must be "private/otc/get-otc-instruments"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
Empty object for this endpoint.
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
instrument_list object[]
Trading pair identifier, e.g. BTC_USD
Primary asset
Pricing asset
Instrument classification, e.g. SPOT
Minimum price increment
Quote decimal precision
Minimum quantity increment
Quantity decimal precision
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "12",
"method": "private/otc/get-otc-instruments",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {}
}POST /private/otc/get-otc-instruments HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "12",
"method": "private/otc/get-otc-instruments",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {}
}private/otc/get-open-quote-requests
POSTGet open quote requests. Only return active quote requests (status = NEW or ACTIVE)./private/otc/get-open-quote-requests
Request
Body
required
Request id (echoed in response)
Must be "private/otc/get-open-quote-requests"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Client provided ID for the quote request
System generated unique ID for the quote request
Start time in Unix time format (inclusive). Default: end_time - 1 day. Nanosecond recommended for accurate pagination.
End time in Unix time format (exclusive). Default: current system timestamp. Nanosecond recommended for accurate pagination.
Page size (default: 20, max: 200).
Schema
- Array [
- Array [
- ]
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Number of quote requests returned
quote_request_list object[]
System generated unique ID for the quote request
Client provided ID for the quote request
The quoted price is guaranteed or subject to change
Possible values: [IMMEDIATE, T1]
Settlement arrangement of the Quote Request
Possible values: [NEW, ACTIVE]
NEW or ACTIVE
e.g. NO_ERROR
Unix epoch time when quote request was created in nanoseconds
leg_list object[]
Instrument for this leg, e.g. BTC_USD
Either quantity or notional
Either quantity or notional
Possible values: [BUY, SELL]
The side of the quote request
Possible values: [PRICE]
e.g. PRICE
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "12",
"method": "private/otc/get-open-quote-requests",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {}
}POST /private/otc/get-open-quote-requests HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "12",
"method": "private/otc/get-open-quote-requests",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {}
}private/otc/get-open-quotes
POSTGet open quotes. Only return active Quotes (status = ACTIVE)./private/otc/get-open-quotes
Request
Body
required
Request id (echoed in response)
Must be "private/otc/get-open-quotes"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
System supplied Quote ID; if provided
LP supplied Quote ID; if provided
Start time in Unix time format (inclusive). Default: end_time - 1 day. Nanosecond recommended for accurate pagination.
End time in Unix time format (exclusive). Default: current system timestamp. Nanosecond recommended for accurate pagination.
Page size (default: 20, max: 200).
Schema
- Array [
- Array [
- ]
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Number of quotes returned
quote_list object[]
System generated unique ID for the quote
LP supplied ID for the quote
System generated unique ID for the quote request
Possible values: [ACTIVE]
ACTIVE
e.g. NO_ERROR
Unix epoch time when quote was received in nanosecond
Unix epoch time when quote expires in nanosecond
Alias for expiry_time_ns (Unix epoch time when quote expires in nanosecond).
leg_list object[]
Instrument for this leg, e.g. BTC_USD
Either quantity or notional
Either quantity or notional
The bid price for the instrument
The ask price for the instrument
Possible values: [PRICE]
PRICE. Only present when the quote has pricing (i.e. bid / ask).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "12",
"method": "private/otc/get-open-quotes",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"lp_quote_id": "98765"
}
}POST /private/otc/get-open-quotes HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "12",
"method": "private/otc/get-open-quotes",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"lp_quote_id": "98765"
}
}private/otc/get-quote-history
POSTGet quotes history./private/otc/get-quote-history
Request
Body
required
Request id (echoed in response)
Must be "private/otc/get-quote-history"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
System supplied Quote ID; if provided
LP supplied Quote ID; if provided
Start time in Unix time format (inclusive). Default: end_time - 1 day. Nanosecond recommended for accurate pagination.
End time in Unix time format (exclusive). Default: current system timestamp. Nanosecond recommended for accurate pagination.
Page size (default: 20, max: 200).
Schema
- Array [
- Array [
- ]
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Number of quotes returned
quote_list object[]
System generated unique ID for the quote
LP supplied ID for the quote
System generated unique ID for the quote request
Quote status (e.g. ACTIVE
e.g. NO_ERROR
Unix epoch time when quote was received in nanosecond
Unix epoch time when quote expires in nanosecond
Alias for expiry_time_ns (Unix epoch time when quote expires in nanosecond).
leg_list object[]
Instrument for this leg, e.g. BTC_USD
Either quantity or notional
Either quantity or notional
The bid price for the instrument
The ask price for the instrument
Possible values: [PRICE]
PRICE. Only present when the quote has pricing (i.e. bid / ask).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "12",
"method": "private/otc/get-quote-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"lp_quote_id": "98765"
}
}POST /private/otc/get-quote-history HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "12",
"method": "private/otc/get-quote-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"lp_quote_id": "98765"
}
}private/otc/get-quote-request-history
POSTGet quote requests history. Only return closed quote requests (status = COMPLETED/REJECTED)./private/otc/get-quote-request-history
Request
Body
required
Request id (echoed in response)
Must be "private/otc/get-quote-request-history"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Client provided ID for quote request
System generated unique ID for the quote request
Start time in Unix time format (inclusive). Default: end_time - 1 day. Nanosecond recommended for accurate pagination.
End time in Unix time format (exclusive). Default: current system timestamp. Nanosecond recommended for accurate pagination.
Page size (default: 20, max: 200).
Schema
- Array [
- Array [
- ]
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Number of quote requests returned
quote_request_list object[]
System generated unique ID for the quote request
Client provided ID for the quote request
The quoted price is guaranteed or subject to change
Possible values: [IMMEDIATE, T1]
Settlement arrangement of the quote request
Possible values: [COMPLETED, REJECTED]
COMPLETED or REJECTED
Reason if REJECTED
Unix epoch time when quote request was created in nanoseconds
leg_list object[]
Instrument for this leg, e.g. BTC_USD
Either quantity or notional
Either quantity or notional
Possible values: [BUY, SELL]
The side of the quote request
Possible values: [PRICE]
e.g. PRICE
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "12",
"method": "private/otc/get-quote-request-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {}
}POST /private/otc/get-quote-request-history HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "12",
"method": "private/otc/get-quote-request-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {}
}private/otc/request-deal (RFQ)
POSTRequest a deal from a quote (RFQ flow)./private/otc/request-deal
Request
Body
required
- Array [
- ]
Request id (echoed in response)
Must be "private/otc/request-deal"
params objectrequired
Possible values: [QUOTE_REQUEST]
Should be QUOTE_REQUEST
Client provided ID for the deal. Should be unique per deal request. Accepted characters a-z, A-Z, 0-9, _, -
quote_id obtained from user.otc_qr.quotes
quote_req_id obtained from user.otc_qr.requests
leg_list object[]required
Instrument symbol (e.g., BTC_USD). Same value used in request-quote.
Bid or ask obtained from user.otc_qr.quotes.
Client either provide quantity or notional. Same value used in request-quote.
Client either provide quantity or notional. Same value used in request-quote.
Possible values: [BUY, SELL]
BUY or SELL
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result objectrequired
System generated unique ID for the deal
Client provided ID for the deal request
System generated unique ID for the quote
System generated unique ID for the quote request
Deal type
Possible values: [ACCEPTED, REJECTED]
ACCEPTED = system received deal; REJECTED = deal rejected
e.g. NO_ERROR
Unix epoch time when deal last updated in nanosecond
leg_list object[]required
Instrument symbol (e.g., BTC_USD)
Echoed back from quote
Echoed back from quote request if requested quantity
Echoed back from quote request if requested notional
Executed quantity
Executed notional
Possible values: [BUY, SELL]
Echoed back from deal
Possible values: [PRICE]
e.g. PRICE
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/otc/request-deal",
"params": {
"deal_type": "QUOTE_REQUEST",
"cl_deal_id": "client_id_1",
"quote_id": "4611686018492073851",
"quote_req_id": "4611686018427623960",
"leg_list": [
{
"instrument_name": "BTC_USD",
"price": "95734.2",
"quantity": "1",
"side": "BUY"
}
]
}
}POST /private/otc/request-deal HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/otc/request-deal",
"params": {
"deal_type": "QUOTE_REQUEST",
"cl_deal_id": "client_id_1",
"quote_id": "4611686018492073851",
"quote_req_id": "4611686018427623960",
"leg_list": [
{
"instrument_name": "BTC_USD",
"price": "95734.2",
"quantity": "1",
"side": "BUY"
}
]
}
}private/otc/get-open-deals (RFQ)
POSTGet quote requests history. Only return closed quote requests (status = COMPLETED/REJECTED)./private/otc/get-open-deals
Request
Body
required
Request id (echoed in response)
Must be "private/otc/get-open-deals"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Possible values: [QUOTE_REQUEST]
QUOTE_REQUEST
System generated unique ID for the Deal. If provided, will ignore instrument_name, start_time, and end_time params.
Start time in Unix time format (inclusive). Default: end_time - 1 day. Nanosecond recommended for accurate pagination.
End time in Unix time format (exclusive). Default: current system timestamp. Nanosecond recommended for accurate pagination.
Schema
- Array [
- Array [
- ]
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
deal_list object[]
System generated unique ID for the Deal
System generated unique ID for the Quote
Client provided ID for the deal
Possible values: [QUOTE_REQUEST]
QUOTE_REQUEST
Possible values: [ACCEPTED, CONFIRMED, SETTLED, REJECTED]
ACCEPTED = system received deal; CONFIRMED = liquidity provider has executed deal; SETTLED = deal settled and funds transferred; REJECTED = deal rejected
Possible values: [IMMEDIATE, T1]
Settlement arrangement of the Deal
Create time of the Deal (in nanoseconds)
Last updated time of the Deal (in nanoseconds)
Scheduled time the deal is to be settled at (in nanoseconds). Early settled deal reflected on update_time_ns. 0 or not present for IMMEDIATE deal.
System generated unique ID for the quote request
leg_list object[]
Instrument of the Deal (e.g., BTC_USD)
Either quantity or notional of the Deal
Either quantity or notional of the Deal
Executed qty of the Deal
Executed notional of the Deal
Price of the Deal
Possible values: [BUY, SELL]
The side of the deal
Possible values: [PRICE]
e.g. PRICE
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "12",
"method": "private/otc/get-open-deals",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"deal_type": "QUOTE_REQUEST"
}
}POST /private/otc/get-open-deals HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "12",
"method": "private/otc/get-open-deals",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"deal_type": "QUOTE_REQUEST"
}
}private/otc/get-deal-history (RFQ)
POSTGet closed deals for given user./private/otc/get-deal-history
Request
Body
required
Request id (echoed in response)
Must be "private/otc/get-deal-history"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Possible values: [QUOTE_REQUEST]
QUOTE_REQUEST
System generated unique ID for the Deal
Start time in Unix time format (inclusive). Default: end_time - 1 day. Nanosecond recommended for accurate pagination.
End time in Unix time format (exclusive). Default: current system timestamp. Nanosecond recommended for accurate pagination.
Schema
- Array [
- Array [
- ]
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
deal_list object[]
System generated unique ID for the Deal
System generated unique ID for the Quote
Client provided ID for the deal
Possible values: [QUOTE_REQUEST]
QUOTE_REQUEST
Possible values: [ACCEPTED, CONFIRMED, SETTLED, REJECTED]
ACCEPTED = system received deal; CONFIRMED = liquidity provider has executed deal; SETTLED = deal settled and funds transferred; REJECTED = deal rejected
Possible values: [IMMEDIATE, T1]
Settlement arrangement of the Deal
Create time of the Deal (in nanoseconds)
Last updated time of the Deal (in nanoseconds)
Scheduled time the deal is to be settled at (in nanoseconds). Early settled deal reflected on update_time_ns. 0 or not present for IMMEDIATE deal.
System generated unique ID for the quote request
leg_list object[]
Instrument of the Deal (e.g., BTC_USD)
Either quantity or notional of the Deal
Either quantity or notional of the Deal
Executed qty of the Deal
Executed notional of the Deal
Price of the Deal
Possible values: [BUY, SELL]
The side of the deal
Possible values: [PRICE]
e.g. PRICE
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "12",
"method": "private/otc/get-deal-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"deal_type": "QUOTE_REQUEST",
"start_time": 1696154400000,
"end_time": 1697364000000
}
}POST /private/otc/get-deal-history HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "12",
"method": "private/otc/get-deal-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {
"deal_type": "QUOTE_REQUEST",
"start_time": 1696154400000,
"end_time": 1697364000000
}
}private/otc/get-settle-later-limit
POSTGet used settle later limit as well as the configured limit for account./private/otc/get-settle-later-limit
Request
Body
required
Request id (echoed in response)
Must be "private/otc/get-settle-later-limit"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
No params required.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Account ID
Configured limit, e.g. 1000000
Used limit, e.g. 200000
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "12",
"method": "private/otc/get-settle-later-limit",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {}
}POST /private/otc/get-settle-later-limit HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "12",
"method": "private/otc/get-settle-later-limit",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {}
}private/otc/get-unsettled-amounts
POSTGet pending settlement amount aggregated by date and instrument./private/otc/get-unsettled-amounts
Request
Body
required
Request id (echoed in response)
Must be "private/otc/get-unsettled-amounts"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
No params required.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
unsettled_ccys object
property name* object
Amount
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "12",
"method": "private/otc/get-unsettled-amounts",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {}
}POST /private/otc/get-unsettled-amounts HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "12",
"method": "private/otc/get-unsettled-amounts",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1610905028000",
"params": {}
}Crypto Wallet
Manages the user's wallet.
Most of the endpoints are only available at master account level.
Some endpoints requires Withdrawal setting to be enabled for your API Key. If you do not see the option when viewing your API Keys, this feature is not yet available for you.
private/create-withdrawal
POSTCreates a withdrawal request. Withdrawal setting must be enabled for your API Key. If you do not see the option when viewing your API Key, this feature is not yet available for you./private/create-withdrawal
Request
Body
required
Request id (echoed in response)
Must be "private/create-withdrawal"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Optional Client withdrawal ID.
E.g. BTC, CRO.
Withdrawal amount.
Destination address (must be whitelisted).
Secondary address identifier for coins like XRP, XLM (memo or tag).
Desired network; address must be whitelisted. See default_network and network in get-currency-networks.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Newly created withdrawal ID.
(Optional) Client withdrawal ID if provided in the request.
E.g. BTC, CRO.
Withdrawal amount.
Withdrawal fee.
Address with Address Tag (if any).
Creation time (ms).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "-1",
"method": "private/create-withdrawal",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1607063412000",
"params": {
"client_wid": "my_withdrawal_002",
"currency": "BTC",
"amount": "1",
"address": "2NBqqD5GRJ8wHy1PYyCXTe9ke5226FhavBf",
"address_tag": "",
"network_id": null
}
}POST /private/create-withdrawal HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "-1",
"method": "private/create-withdrawal",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1607063412000",
"params": {
"client_wid": "my_withdrawal_002",
"currency": "BTC",
"amount": "1",
"address": "2NBqqD5GRJ8wHy1PYyCXTe9ke5226FhavBf",
"address_tag": "",
"network_id": null
}
}private/get-currency-networks
POSTGet the symbol network mapping./private/get-currency-networks
Request
Body
required
Request id (echoed in response)
Must be "private/get-currency-networks"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Last update timestamp (ms).
currency_map object
property name* object
E.g. SHIBA INU.
If network is not provided in create-withdrawal, this is used when more than one network is available.
network_list object[]
Network id; can be used in create-withdrawal.
Withdrawal fee.
Whether withdrawal is enabled.
Minimum withdrawal amount.
Whether deposit is enabled.
Confirmation blocks count.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "12",
"method": "private/get-currency-networks",
"params": {},
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1640830660110"
}POST /private/get-currency-networks HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "12",
"method": "private/get-currency-networks",
"params": {},
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1640830660110"
}private/get-deposit-address
POSTFetches deposit address. Withdrawal setting must be enabled for your API Key. If you do not see the option when viewing your API Keys, this feature is not yet available for you./private/get-deposit-address
Request
Body
required
Request id (echoed in response)
Must be "private/get-deposit-address"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
E.g. BTC, CRO.
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
deposit_address_list object[]
Newly created deposit ID.
E.g. BTC, CRO.
E.g. ETH, CRO. When currency = CRO, network = CRO is main net; network = ETH is ERC20 address.
Address with Address Tag (if any).
Creation time (ms).
0 = Inactive, 1 = Active.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "-1",
"method": "private/get-deposit-address",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1587846358253",
"params": {
"currency": "CRO"
}
}POST /private/get-deposit-address HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "-1",
"method": "private/get-deposit-address",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1587846358253",
"params": {
"currency": "CRO"
}
}private/get-deposit-history
POSTFetches deposit history. If you do not see the option when viewing your API Keys, this feature is not yet available for you./private/get-deposit-history
Request
Body
required
- ➖ 0: Not Arrived
- ➖ 1: Arrived
- ➖ 2: Failed
- ➖ 3: Pending
Request id (echoed in response)
Must be "private/get-deposit-history"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
E.g. BTC, CRO.
Start time (ms), e.g. "1771761038000". Default is 90 days from current timestamp.
End time (ms), e.g. "1771761038000". Default is current timestamp.
Page size (Default: 20, Max: 200).
Page number (0-based).
Possible values: [0, 1, 2, 3]
Deposit status. Used in private/get-deposit-history request (filter) and response (deposit_list[].status).
Schema
- Array [
- ➖ 0: Not Arrived
- ➖ 1: Arrived
- ➖ 2: Failed
- ➖ 3: Pending
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
deposit_list object[]
Newly created deposit ID.
E.g. BTC, CRO.
Deposit amount.
Deposit fee.
Address with Address Tag (if any).
Creation time (ms).
Last update time (ms).
Possible values: [0, 1, 2, 3]
Deposit status. Used in private/get-deposit-history request (filter) and response (deposit_list[].status).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "-1",
"method": "private/get-deposit-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1587846358253",
"params": {
"currency": "XRP",
"start_ts": "1587846300000",
"end_ts": "1587846358253",
"page_size": "2",
"page": "0",
"status": "1"
}
}POST /private/get-deposit-history HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "-1",
"method": "private/get-deposit-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1587846358253",
"params": {
"currency": "XRP",
"start_ts": "1587846300000",
"end_ts": "1587846358253",
"page_size": "2",
"page": "0",
"status": "1"
}
}private/get-withdrawal-history
POSTFetches withdrawal history. If you do not see the option when viewing your API Keys, this feature is not yet available for you./private/get-withdrawal-history
Request
Body
required
- ➖ 0: Pending
- ➖ 1: Processing
- ➖ 2: Rejected
- ➖ 3: Payment In-progress
- ➖ 4: Payment Failed
- ➖ 5: Completed
- ➖ 6: Cancelled
Request id (echoed in response)
Must be "private/get-withdrawal-history"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
E.g. BTC, CRO.
Start time (ms). Default is 90 days before current timestamp.
End time (ms). Default is current timestamp.
Page size (Default: 20, Max: 200).
Page number (0-based).
Possible values: [0, 1, 2, 3, 4, 5, 6]
Withdrawal status. Used in private/get-withdrawal-history request (filter) and response (withdrawal_list[].status).
Schema
- Array [
- ➖ 0: Pending
- ➖ 1: Processing
- ➖ 2: Rejected
- ➖ 3: Payment In-progress
- ➖ 4: Payment Failed
- ➖ 5: Completed
- ➖ 6: Cancelled
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
withdrawal_list object[]
E.g. BTC, CRO.
Client withdrawal ID from the request, if provided.
Withdrawal fee.
Creation timestamp.
Withdrawal ID.
Last update timestamp.
Withdrawal amount.
Address with Address Tag (if any).
Possible values: [0, 1, 2, 3, 4, 5, 6]
Withdrawal status. Used in private/get-withdrawal-history request (filter) and response (withdrawal_list[].status).
Transaction hash.
Network for the transaction; only available when the exchange supports multiple networks for the currency.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "-1",
"method": "private/get-withdrawal-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1587846358253",
"params": {
"currency": "XRP",
"start_ts": "1587846300000",
"end_ts": "1587846358253",
"page_size": "2",
"page": "0",
"status": "1"
}
}POST /private/get-withdrawal-history HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "-1",
"method": "private/get-withdrawal-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1587846358253",
"params": {
"currency": "XRP",
"start_ts": "1587846300000",
"end_ts": "1587846358253",
"page_size": "2",
"page": "0",
"status": "1"
}
}Fiat Wallet
Manages the user's fiat wallet.
Most of the endpoints are only available at master account level.
Some endpoints requires Withdrawal setting to be enabled for your API Key. If you do not see the option when viewing your API Keys, this feature is not yet available for you.
Payment Networks and Currencies
This section provides a comprehensive reference table of all supported payment network and currency combinations available for use with the Fiat API endpoints. When making API calls to any of the Fiat service endpoints, use the payment network identifiers listed in this table for the payment_network or payment_networks parameters.
Supported Payment Networks
| Payment Network | Currency |
|---|---|
| openpayd_exchange_sepa | EUR |
| usd_swift | USD |
| usd_fedwire | USD |
| usd_cubix | USD |
| uk_fps | GBP |
| aed_ipi | AED |
Usage Notes
Activate the fiat service in your account before using the API. Go to Wallet page and select fiat currency to activate the fiat service. Bank account for USD need to be added in Crypto.com Wallet before using the API. For other currencies, bank account will be created after deposit. When calling Fiat API endpoints, you can specify payment networks in the following ways:
- Single Payment Network:
json { "payment_network": "usd_cubix" } - Multiple Payment Networks (comma-separated):
json { "payment_networks": "usd_cubix, usd_swift" }Refer to the individual API endpoint documentation above for specific parameter requirements and usage examples.
private/fiat/fiat-access
POSTRetrieves fiat access information for a user account. Used by FCM/DCM brokers to check deposit and withdrawal permissions for different currencies and payment networks on behalf of their users./private/fiat/fiat-access
Request
Body
required
Request id (echoed in response)
Must be "private/fiat/fiat-access"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1773372503821".
The account UUID of the user on whose behalf the broker is making the request
params objectrequired
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
accesses object[]required
Currency code (e.g., USD)
Payment network identifier (e.g., us_ach)
Whether deposits are enabled for this currency/network
Whether withdrawals are enabled for this currency/network
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "3",
"method": "private/fiat/fiat-access",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1773372503821",
"params": {}
}POST /private/fiat/fiat-access HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "3",
"method": "private/fiat/fiat-access",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1773372503821",
"params": {}
}private/fiat/fiat-deposit-info
POSTRetrieves fiat deposit information for the authenticated user. Returns bank details for depositing fiat currency with optional payment network filtering./private/fiat/fiat-deposit-info
Request
Body
required
Request id (echoed in response)
Must be "private/fiat/fiat-deposit-info"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Comma-separated list of payment networks to filter by
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
deposit_info_list object[]required
Payment network identifier
Currency code
bank_details objectrequired
Account holder name
Bank name
Bank address
Bank country
Bank routing number
Bank account number
Recipient name
Recipient address
Bank Identifier Code (SWIFT code)
International Bank Account Number
Reference code for the deposit
UK bank sort code
Cubix partner name
Cubix account name
Cubix account ID
Last 4 digits of Cubix account number
Account type
Additional metadata
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "123456",
"method": "private/fiat/fiat-deposit-info",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1640995200000",
"params": {
"payment_networks": "usd_cubix"
}
}POST /private/fiat/fiat-deposit-info HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "123456",
"method": "private/fiat/fiat-deposit-info",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1640995200000",
"params": {
"payment_networks": "usd_cubix"
}
}private/fiat/fiat-deposit-history
POSTRetrieves paginated fiat deposit transaction history for the authenticated user./private/fiat/fiat-deposit-history
Request
Body
required
Request id (echoed in response)
Must be "private/fiat/fiat-deposit-history"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Page number (0-based)
Number of items per page
Start time for filtering transactions, as a Unix timestamp in milliseconds. Required if end_time is provided.
End time for filtering transactions, as a Unix timestamp in milliseconds.
Comma-separated list of payment networks to filter by
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
transaction_history_list object[]
Transaction ID.
Transaction amount
Currency code
Fee currency
Transaction fee amount
Transaction status (pending, completed, failed, refunded)
Payment network identifier
Transaction creation timestamp (ms).
Transaction update timestamp (ms).
Transaction completion timestamp (ms).
Transaction fee (alternate).
Transaction identifier assigned by the upstream fiat vendor / payment service provider (PSP) that processed the deposit.
sender objectnullable
Account identifier value
beneficiary objectnullable
Account identifier value
Current page number
Number of items per page
Total number of transactions
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "123456",
"method": "private/fiat/fiat-deposit-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1640995200000",
"params": {
"page": "0",
"page_size": "10",
"start_time": "1781126400000",
"end_time": "1781127400000",
"payment_networks": "usd_cubix"
}
}POST /private/fiat/fiat-deposit-history HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "123456",
"method": "private/fiat/fiat-deposit-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1640995200000",
"params": {
"page": "0",
"page_size": "10",
"start_time": "1781126400000",
"end_time": "1781127400000",
"payment_networks": "usd_cubix"
}
}private/fiat/fiat-withdraw-history
POSTRetrieves paginated fiat withdrawal transaction history for the authenticated user./private/fiat/fiat-withdraw-history
Request
Body
required
Request id (echoed in response)
Must be "private/fiat/fiat-withdraw-history"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Page number (0-based).
Number of items per page.
Start time for filtering transactions, as a Unix timestamp in milliseconds. Required if end_time is provided.
End time for filtering transactions, as a Unix timestamp in milliseconds.
Comma-separated list of payment networks to filter by
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Current page number
Number of items per page
Total number of transactions
transaction_history_list object[]required
Transaction ID.
Account ID.
Currency code
Transaction amount
Amount in USD.
Fee currency
Transaction fee amount
Fee amount in USD
Transaction fee (alternate).
Payment network identifier
Transaction status (pending, completed, failed, cancelled, refunded)
Transaction creation timestamp (ms).
Transaction update timestamp (ms).
Transaction completion timestamp (ms).
Optional client withdrawal ID. Returns null if no client_wid was supplied at creation time.
Transaction identifier assigned by the upstream fiat vendor / payment service provider (PSP) that processed the withdrawal.
sender objectnullable
Account identifier value
beneficiary objectnullable
Account identifier value
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "123456",
"method": "private/fiat/fiat-withdraw-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1640995200000",
"params": {
"page": "0",
"page_size": "10",
"start_time": "1781126400000",
"end_time": "1781127400000",
"payment_networks": "usd_cubix"
}
}POST /private/fiat/fiat-withdraw-history HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "123456",
"method": "private/fiat/fiat-withdraw-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1640995200000",
"params": {
"page": "0",
"page_size": "10",
"start_time": "1781126400000",
"end_time": "1781127400000",
"payment_networks": "usd_cubix"
}
}private/fiat/fiat-create-withdraw
POSTCreates a new fiat withdrawal request for the authenticated user./private/fiat/fiat-create-withdraw
Request
Body
required
Request id (echoed in response)
Must be "private/fiat/fiat-create-withdraw"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Possible values: <= 36 characters
Optional client withdrawal ID. (Max 36 chars) Recommended for correlation.
Linked bank account ID (UUID format); use id from private/fiat/fiat-get-bank-accounts response.
Withdrawal amount as string.
Currency code (3-letter format).
Payment network identifier.
intermediate_bank object
Type of bank identifier (e.g., SWIFT, ROUTING)
Bank identifier value
Name of the intermediary bank.
Bank address line 1
Bank address line 2
Beneficiary ID (optional)
Authorization ID (optional)
Only available to aed_ipi. Bank identifier value for the AED network.
Only available to aed_ipi. Account identifier value for the AED network.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
System-generated withdrawal ID
Client withdrawal ID (echoed from request if provided)
Linked bank account ID for the withdrawal
Withdrawal status (e.g., pending)
Payment network identifier
Currency code
Withdrawal amount (string for precision).
Withdrawal amount converted to USD (string for precision).
Currency of the withdrawal fee
Withdrawal fee amount (string for precision).
Beneficiary identifier
Authorization identifier for the withdrawal
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "123456",
"method": "private/fiat/fiat-create-withdraw",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1640995200000",
"params": {
"client_wid": "c1d2e3f4-a5b6-7890-cdef-123456789abc",
"account_id": "bank-acct-uuid-001",
"amount": "1000.00",
"currency": "USD",
"payment_network": "usd_swift",
"intermediate_bank": {
"bank_identifier_type": "SWIFT",
"bank_identifier_value": "CHASUS33",
"bank_name": "JPMorgan Chase Bank",
"address_1": "270 Park Avenue",
"address_2": "New York, NY 10017"
}
}
}POST /private/fiat/fiat-create-withdraw HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "123456",
"method": "private/fiat/fiat-create-withdraw",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1640995200000",
"params": {
"client_wid": "c1d2e3f4-a5b6-7890-cdef-123456789abc",
"account_id": "bank-acct-uuid-001",
"amount": "1000.00",
"currency": "USD",
"payment_network": "usd_swift",
"intermediate_bank": {
"bank_identifier_type": "SWIFT",
"bank_identifier_value": "CHASUS33",
"bank_name": "JPMorgan Chase Bank",
"address_1": "270 Park Avenue",
"address_2": "New York, NY 10017"
}
}
}private/fiat/fiat-transaction-quota
POSTRetrieves transaction quota information for a specific payment network./private/fiat/fiat-transaction-quota
Request
Body
required
Request id (echoed in response)
Must be "private/fiat/fiat-transaction-quota"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Payment network identifier.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
details objectrequired
Currency code.
Payment network identifier.
Human-readable network name.
monthly_quota_in_usd object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
daily_quota_in_usd object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
used_monthly_quota_in_usd object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
used_daily_quota_in_usd object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
remaining_monthly_quota_in_usd object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
remaining_daily_quota_in_usd object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
minimum_withdrawal_amount_in_usd object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
monthly_quota objectrequired
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
daily_quota objectrequired
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
used_monthly_quota objectrequired
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
used_daily_quota objectrequired
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
remaining_monthly_quota objectrequired
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
remaining_daily_quota objectrequired
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
minimum_withdrawal_amount objectrequired
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
currency_daily_quota object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
currency_monthly_quota object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
currency_used_daily_quota object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
currency_used_monthly_quota object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
currency_remaining_daily_quota object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
currency_remaining_monthly_quota object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
Maximum transactions per day (null if no limit).
Maximum transactions per month (null if no limit).
Current daily transaction count.
Current monthly transaction count.
Remaining daily transactions (null if no limit).
Remaining monthly transactions (null if no limit).
Currency-level max transactions per day (null if no limit).
Currency-level max transactions per month (null if no limit).
Currency-level current daily transaction count.
Currency-level current monthly transaction count.
Currency-level remaining daily transactions (null if no limit).
Currency-level remaining monthly transactions (null if no limit).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "123456",
"method": "private/fiat/fiat-transaction-quota",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1640995200000",
"params": {
"payment_network": "usd_cubix"
}
}POST /private/fiat/fiat-transaction-quota HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "123456",
"method": "private/fiat/fiat-transaction-quota",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1640995200000",
"params": {
"payment_network": "usd_cubix"
}
}private/fiat/fiat-transaction-limit
POSTRetrieves transaction limits for a specific payment network./private/fiat/fiat-transaction-limit
Request
Body
required
Request id (echoed in response)
Must be "private/fiat/fiat-transaction-limit"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Payment network identifier.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
deposit objectrequired
min_deposit_amount object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
daily_max_deposit_amount object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
monthly_max_deposit_amount object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
currency_daily_max_deposit_amount object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
currency_monthly_max_deposit_amount object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
Daily quota count (null/0 means no limit).
Monthly quota count (null/0 means no limit).
Current daily transaction count (null/0 means no limit).
Current monthly transaction count (null/0 means no limit).
Currency-level daily transaction count (null/0 means no limit).
Currency-level monthly transaction count (null/0 means no limit).
fee_amount object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
Maximum daily transaction count (null/0 means no limit).
Maximum monthly transaction count (null/0 means no limit).
Currency-level max daily transaction count (null/0 means no limit).
Currency-level max monthly transaction count (null/0 means no limit).
payment objectrequired
Payment network name
Payment network full name
Human-readable review time description
review_time object
Human-readable bank transfer time description
bank_transfer_time object
min_payment_amount object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
daily_max_payment_amount object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
monthly_max_payment_amount object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
auto_approve_max_payment_amount object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
currency_daily_max_payment_amount object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
currency_monthly_max_payment_amount object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
fee_amount object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
refund_fee_amount object
Currency code (e.g., USD)
Amount as string; null means no limit where applicable
Current daily transaction count.
Current monthly transaction count.
Currency-level daily transaction count.
Currency-level monthly transaction count.
Maximum daily transaction count (null/0 means no limit).
Maximum monthly transaction count (null/0 means no limit).
Currency-level max daily transaction count (null/0 means no limit).
Currency-level max monthly transaction count (null/0 means no limit).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "123456",
"method": "private/fiat/fiat-transaction-limit",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1640995200000",
"params": {
"payment_network": "usd_cubix"
}
}POST /private/fiat/fiat-transaction-limit HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "123456",
"method": "private/fiat/fiat-transaction-limit",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1640995200000",
"params": {
"payment_network": "usd_cubix"
}
}private/fiat/fiat-create-bank-account
POSTLink a bank account via Plaid for a user. Links the user's bank account to their profile for withdrawals using a Plaid integration payload./private/fiat/fiat-create-bank-account
Request
Body
required
Request id (echoed in response)
Must be "private/fiat/fiat-create-bank-account"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1773372503821".
The account UUID of the user on whose behalf the broker is making the request
params objectrequired
The user's bank account ID from Plaid (selected by user in Plaid Link flow)
Plaid public token received from the Plaid Link SDK's onSuccess callback on the frontend. This is NOT the link_token from private/fiat/fiat-get-plaid-token; the link_token is used to initialize Plaid Link, while the public_token is returned by Plaid after the user completes the bank linking flow.
Currency code (3-letter format)
Existing bank account ID. Used to link a Plaid-created bank account to an existing bank account record (e.g., re-linking or updating). Optional — omit on first creation.
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
bank_accounts_list object[]required
Unique bank account ID
Possible values: [pending, submitted, pending_authorize, authenticated, transaction_enabled, pending_proof, proof_submitted, approved, rejected, escalated, completed, deleted]
Bank account status.
Bank name
Currency code (e.g., USD)
Account holder name
Masked account identifier value
Array of supported payment network identifiers
Account creation timestamp (ms).
Account last update timestamp (ms).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "7",
"method": "private/fiat/fiat-create-bank-account",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1773372503821",
"params": {
"plaid_account_id": "abc123",
"plaid_public_token": "public-sandbox-xyz",
"currency": "USD"
}
}POST /private/fiat/fiat-create-bank-account HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "7",
"method": "private/fiat/fiat-create-bank-account",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1773372503821",
"params": {
"plaid_account_id": "abc123",
"plaid_public_token": "public-sandbox-xyz",
"currency": "USD"
}
}private/fiat/fiat-get-bank-accounts
POSTRetrieves user's bank accounts with optional payment network filtering./private/fiat/fiat-get-bank-accounts
Request
Body
required
Request id (echoed in response)
Must be "private/fiat/fiat-get-bank-accounts"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Comma-separated list of payment networks to filter by
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
bank_accounts_list object[]required
Status indicator (null in most cases)
Response code (null in most cases)
Response message (null in most cases)
Unique bank account ID (use this for withdrawals)
Account ID (cannot be used for withdrawal)
User UUID
Possible values: [pending, submitted, pending_authorize, authenticated, transaction_enabled, pending_proof, proof_submitted, approved, rejected, escalated, completed, deleted, expired]
Bank account status. When expired, the bank account token has expired and the user must relink via the Plaid relink flow before withdrawals can resume.
Bank name
Bank city
Bank country code
Type of bank identifier (e.g., cubix_account_number_last_4_digits, bic_swift)
Masked bank identifier value
Bank account holder name
Type of account identifier (e.g., cubix_account_id, iban)
Masked account identifier value
Account holder name
Account type (null in most cases)
Currency code (e.g., USD)
Verification method (e.g., Cubix, Deposit)
Reason or additional information
Array of supported payment network identifiers
Array of withdrawal payment networks (null if not applicable)
Payment network identifier value
bank_details object
Institutional street address
Bank street address
Account holder address
Bank account address object
Intermediate bank information
Array of intermediate bank options
Account creation timestamp (ms).
Account last update timestamp (ms).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "123456",
"method": "private/fiat/fiat-get-bank-accounts",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1640995200000",
"params": {
"payment_networks": "usd_cubix"
}
}POST /private/fiat/fiat-get-bank-accounts HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "123456",
"method": "private/fiat/fiat-get-bank-accounts",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1640995200000",
"params": {
"payment_networks": "usd_cubix"
}
}Staking
Stake crypto assets on-chain to earn rewards directly from the Exchange. Staking locks your tokens for a period, during which you earn periodic rewards. Liquid staking tokens (e.g., CDCETH) allow you to maintain liquidity while staking.
Staking Workflow
1. Check Available Instruments
Call private/staking/get-staking-instruments to retrieve the list of tokens available for staking, including minimum stake amounts and reward rates.
2. Stake Tokens
Call private/staking/stake to lock tokens and begin earning rewards. The request is processed asynchronously.
3. Monitor Position
Use private/staking/get-staking-position to view your total staked balance and private/staking/get-open-stake to track pending stake requests.
4. Unstake Tokens
Call private/staking/unstake to unlock staked tokens. Unstaking may involve a waiting period depending on the underlying blockchain protocol.
Liquid Staking
Liquid staking tokens (e.g., CDCETH for staked ETH) represent staked assets and can be traded or held. Use the conversion endpoints to move between staked tokens and liquid staking tokens:
public/staking/get-conversion-rate— get the current conversion rateprivate/staking/convert— convert between staked and liquid staking tokensprivate/staking/get-open-convert— track pending conversion requests
History
| Endpoint | Description |
|---|---|
private/staking/get-stake-history | Past stake and unstake requests |
private/staking/get-reward-history | Earned staking rewards |
private/staking/get-convert-history | Past conversion requests |
public/staking/get-conversion-rate
POSTReturns conversion rate between staked token (e.g. ETH.staked) and liquid staking token (e.g. CDCETH). Params instrument_name (e.g. CDCETH). Used before private/staking/convert./public/staking/get-conversion-rate
Request
Body
required
Request id (echoed in response)
Must be "public/staking/get-conversion-rate"
params objectrequired
Liquid staking token instrument name
Current timestamp in milliseconds, e.g. "1771761038000".
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
e.g. CDCETH
Conversion rate between staked token (e.g. ETH.staked) and liquid staking token (e.g. CDCETH).
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "public/staking/get-conversion-rate",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"instrument_name": "CDCETH"
}
}POST /public/staking/get-conversion-rate HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "public/staking/get-conversion-rate",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"instrument_name": "CDCETH"
}
}private/staking/stake
POSTCreate a request to earn token rewards by staking on-chain in the Exchange./private/staking/stake
Request
Body
required
Request id (echoed in response)
Must be "private/staking/stake"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Staking instrument name, e.g. SOL.staked.
Stake quantity
Schema
- Possible values:
- ➖ NEW: Request created
- ➖ PENDING: In progress
- ➖ PENDING_WITHDRAWAL: Withdrawal pending
- ➖ PENDING_UNSTAKING: Unstaking pending
- ➖ STAKED: Staked
- ➖ COMPLETED: Completed
- ➖ REJECTED: Rejected
- Possible values by operations:
- ➖ private/staking/stake: NEW, PENDING, STAKED, COMPLETED, REJECTED
- ➖ private/staking/unstake: NEW, PENDING, PENDING_WITHDRAWAL, PENDING_UNSTAKING, STAKED, COMPLETED, REJECTED
- ➖ private/staking/get-open-stake: NEW, PENDING, PENDING_WITHDRAWAL, PENDING_UNSTAKING, STAKED
- ➖ private/staking/get-stake-history: COMPLETED, REJECTED
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Request id
Staking instrument name, e.g. SOL.staked
Possible values: [NEW, PENDING, PENDING_WITHDRAWAL, PENDING_UNSTAKING, STAKED, COMPLETED, REJECTED]
Stake quantity
Underlying instrument name of staking, e.g. SOL
Pre stake charge rate in basis point.
Pre stake charge value.
Reason for the status, e.g. NO_ERROR
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/staking/stake",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"instrument_name": "SOL.staked",
"quantity": "1"
}
}POST /private/staking/stake HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/staking/stake",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"instrument_name": "SOL.staked",
"quantity": "1"
}
}private/staking/unstake
POSTCreate a request to unlock staked token./private/staking/unstake
Request
Body
required
Request id (echoed in response)
Must be "private/staking/unstake"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Staking instrument name, e.g. SOL.staked.
Unstake quantity. For yield-bearing instruments, quantity in terms of original staked token. E.g. for TSTON.staked, specify the TSTON.staked quantity to unstake; you will receive the equivalent in TON when the request completes.
Schema
- Possible values:
- ➖ NEW: Request created
- ➖ PENDING: In progress
- ➖ PENDING_WITHDRAWAL: Withdrawal pending
- ➖ PENDING_UNSTAKING: Unstaking pending
- ➖ STAKED: Staked
- ➖ COMPLETED: Completed
- ➖ REJECTED: Rejected
- Possible values by operations:
- ➖ private/staking/stake: NEW, PENDING, STAKED, COMPLETED, REJECTED
- ➖ private/staking/unstake: NEW, PENDING, PENDING_WITHDRAWAL, PENDING_UNSTAKING, STAKED, COMPLETED, REJECTED
- ➖ private/staking/get-open-stake: NEW, PENDING, PENDING_WITHDRAWAL, PENDING_UNSTAKING, STAKED
- ➖ private/staking/get-stake-history: COMPLETED, REJECTED
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Request id
Staking instrument name, e.g. SOL.staked
Possible values: [NEW, PENDING, PENDING_WITHDRAWAL, PENDING_UNSTAKING, STAKED, COMPLETED, REJECTED]
Unstake quantity. For yield-bearing instruments, in terms of original staked token. E.g. for TSTON.staked, this shows the quantity of TON you will receive when the request completes.
Underlying instrument name, e.g. SOL
Reason for the status, e.g. NO_ERROR
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/staking/unstake",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"instrument_name": "SOL.staked",
"quantity": "1"
}
}POST /private/staking/unstake HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/staking/unstake",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"instrument_name": "SOL.staked",
"quantity": "1"
}
}private/staking/get-staking-position
POSTGet the total staking position for a user/token/private/staking/get-staking-position
Request
Body
required
Request id (echoed in response)
Must be "private/staking/get-staking-position"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Staking instrument name, e.g. SOL.staked
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Staking instrument name, e.g. SOL.staked
Underlying instrument name, e.g. SOL
Total staked quantity. For yield-bearing instruments, staked_quantity, pending_unstaked_quantity, and reward_eligible_quantity are in terms of yield-bearing tokens held. E.g. for TSTON.staked, the quantity of TSTON held on-chain.
Total pending staked quantity
Total pending unstaked quantity
Total reward eligible quantity; quantity can be unstaked/convert
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/staking/get-staking-position",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"instrument_name": "SOL.staked"
}
}POST /private/staking/get-staking-position HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/staking/get-staking-position",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"instrument_name": "SOL.staked"
}
}private/staking/get-staking-instruments
POSTGet staking instruments information/private/staking/get-staking-instruments
Request
Body
required
Request id (echoed in response)
Must be "private/staking/get-staking-instruments"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Schema
- Array [
- Array [
- ]
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Staking instrument name, e.g. SOL.staked
Underlying instrument name, e.g. SOL
Reward instrument name, e.g. SOL.staked
Disabled stake - true or false
Disabled unstake - true or false
Estimated rewards
Possible values: [APR, APY]
APR or APY
Minimum stake amount
Estimated reward frequency (day)
Estimated lock up period (day)
Is reward compounded - true or false
Is pre stake charge applied - true or false
Pre stake charge rate in basis point
Is restaked instrument - true or false
additional_rewards object[]
Additional reward instrument name
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/staking/get-staking-instruments",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {}
}POST /private/staking/get-staking-instruments HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/staking/get-staking-instruments",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {}
}private/staking/get-open-stake
POSTGet stake/unstake requests that status is not in final state./private/staking/get-open-stake
Request
Body
required
Request id (echoed in response)
Must be "private/staking/get-open-stake"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Staking instrument name, e.g. SOL.staked
Start time in Unix format (inclusive), ms or ns. Default: end_time - 30 days. Min: end_time - 180 days.
End time in Unix format (inclusive), ms or ns. Default: current system timestamp.
Max number of requests returned. Default: 20. Max: 500.
Schema
- Array [
- Possible values:
- ➖ NEW: Request created
- ➖ PENDING: In progress
- ➖ PENDING_WITHDRAWAL: Withdrawal pending
- ➖ PENDING_UNSTAKING: Unstaking pending
- ➖ STAKED: Staked
- ➖ COMPLETED: Completed
- ➖ REJECTED: Rejected
- Possible values by operations:
- ➖ private/staking/stake: NEW, PENDING, STAKED, COMPLETED, REJECTED
- ➖ private/staking/unstake: NEW, PENDING, PENDING_WITHDRAWAL, PENDING_UNSTAKING, STAKED, COMPLETED, REJECTED
- ➖ private/staking/get-open-stake: NEW, PENDING, PENDING_WITHDRAWAL, PENDING_UNSTAKING, STAKED
- ➖ private/staking/get-stake-history: COMPLETED, REJECTED
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Staking instrument name, e.g. SOL.staked
Underlying instrument name, e.g. SOL
Cycle id
Request id
Possible values: [NEW, PENDING, PENDING_WITHDRAWAL, PENDING_UNSTAKING, STAKED, COMPLETED, REJECTED]
Account id
Stake/unstake quantity. For yield-bearing instruments, in terms of original staked token. E.g. when unstaking TSTON.staked, quantity is denominated in TON.
Possible values: [STAKE, UNSTAKE]
STAKE or UNSTAKE
Request creation timestamp in milliseconds in Unix time format.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/staking/get-open-stake",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"instrument_name": "SOL.staked",
"start_time": "1691455454495",
"end_time": "1691545277000",
"limit": "10"
}
}POST /private/staking/get-open-stake HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/staking/get-open-stake",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"instrument_name": "SOL.staked",
"start_time": "1691455454495",
"end_time": "1691545277000",
"limit": "10"
}
}private/staking/get-stake-history
POSTGet stake/unstake request history/private/staking/get-stake-history
Request
Body
required
Request id (echoed in response)
Must be "private/staking/get-stake-history"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Staking instrument name, e.g. SOL.staked
Start time in Unix format (inclusive), ms or ns. Default: end_time - 30 days. Min: end_time - 180 days.
End time in Unix format (inclusive), ms or ns. Default: current system timestamp.
Max number of requests returned. Default: 20. Max: 500.
Schema
- Array [
- Possible values:
- ➖ NEW: Request created
- ➖ PENDING: In progress
- ➖ PENDING_WITHDRAWAL: Withdrawal pending
- ➖ PENDING_UNSTAKING: Unstaking pending
- ➖ STAKED: Staked
- ➖ COMPLETED: Completed
- ➖ REJECTED: Rejected
- Possible values by operations:
- ➖ private/staking/stake: NEW, PENDING, STAKED, COMPLETED, REJECTED
- ➖ private/staking/unstake: NEW, PENDING, PENDING_WITHDRAWAL, PENDING_UNSTAKING, STAKED, COMPLETED, REJECTED
- ➖ private/staking/get-open-stake: NEW, PENDING, PENDING_WITHDRAWAL, PENDING_UNSTAKING, STAKED
- ➖ private/staking/get-stake-history: COMPLETED, REJECTED
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Staking instrument name, e.g. SOL.staked
Underlying instrument name, e.g. SOL
Cycle id
Request id
Possible values: [NEW, PENDING, PENDING_WITHDRAWAL, PENDING_UNSTAKING, STAKED, COMPLETED, REJECTED]
Account id
Stake/unstake quantity. For yield-bearing instruments, in terms of original staked token. After unstaking, shows amount received (e.g. TON for TSTON.staked).
Possible values: [STAKE, UNSTAKE]
STAKE or UNSTAKE
Request creation timestamp in milliseconds in Unix time format.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/staking/get-stake-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"instrument_name": "SOL.staked",
"start_time": "1691455454495",
"end_time": "1691545277000",
"limit": "10"
}
}POST /private/staking/get-stake-history HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/staking/get-stake-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"instrument_name": "SOL.staked",
"start_time": "1691455454495",
"end_time": "1691545277000",
"limit": "10"
}
}private/staking/get-reward-history
POSTGet stake/unstake request history/private/staking/get-reward-history
Request
Body
required
Request id (echoed in response)
Must be "private/staking/get-reward-history"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Staking instrument name, e.g. SOL.staked.
Start time in Unix format (inclusive), ms or ns. Default: end_time - 30 days. Min: end_time - 180 days.
End time in Unix format (inclusive), ms or ns. Default: current system timestamp.
Max number of requests returned. Default: 20. Max: 500.
Schema
- Array [
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Staking instrument name, e.g. SOL.staked.
Underlying instrument name, e.g. SOL.
Reward instrument name, e.g. SOL.staked.
Reward quantity.
Staked balance.
Event timestamp in milliseconds in Unix time format.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/staking/get-reward-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"instrument_name": "SOL.staked",
"start_time": "1691455454495",
"end_time": "1691545277000",
"limit": "10"
}
}POST /private/staking/get-reward-history HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/staking/get-reward-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"instrument_name": "SOL.staked",
"start_time": "1691455454495",
"end_time": "1691545277000",
"limit": "10"
}
}private/staking/convert
POSTCreate a request to convert between staked token with liquid staking token./private/staking/convert
Request
Body
required
Request id (echoed in response)
Must be "private/staking/convert"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Instrument name to convert from, e.g. ETH.staked or CDCETH.
Instrument name to convert to: CDCETH if from is ETH.staked, ETH.staked if from is CDCETH.
Expected conversion rate, from public/staking/get-conversion-rate.
Quantity to be converted in from_instrument_name.
Maximum slippage allowed in basis point.
Schema
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
Instrument name to convert from, e.g. ETH.staked
Instrument name to convert to, e.g. CDCETH
Expected conversion rate
Quantity to be converted in from_instrument_name
Maximum slippage allowed in basis point
Convert request id
Reason for the status, e.g. NO_ERROR
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/staking/convert",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"from_instrument_name": "ETH.staked",
"to_instrument_name": "CDCETH",
"expected_rate": "1.0203",
"from_quantity": "3.14159265",
"slippage_tolerance_bps": "3"
}
}POST /private/staking/convert HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/staking/convert",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"from_instrument_name": "ETH.staked",
"to_instrument_name": "CDCETH",
"expected_rate": "1.0203",
"from_quantity": "3.14159265",
"slippage_tolerance_bps": "3"
}
}private/staking/get-open-convert
POSTGet convert request that status is not in final state./private/staking/get-open-convert
Request
Body
required
Request id (echoed in response)
Must be "private/staking/get-open-convert"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Start time in Unix format (inclusive), ms or ns. Default: end_time - 30 days. Min: end_time - 180 days.
End time in Unix format (inclusive), ms or ns. Default: current system timestamp.
Max number of requests returned. Default: 20. Max: 500.
Schema
- Array [
- ➖ NEW: Request created
- ➖ COMPLETED: Conversion completed
- ➖ REJECTED: Conversion rejected
- Possible values by operations:
- ➖ private/staking/get-open-convert: NEW
- ➖ private/staking/get-convert-history: COMPLETED, REJECTED
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Instrument name to convert from, e.g. ETH.staked or CDCETH
Instrument name to convert to, e.g. CDCETH
Expected conversion rate
Quantity to be converted in from_instrument_name
Maximum slippage allowed in basis point
Actual conversion rate
Quantity converted to to_instrument_name
Convert request id
Possible values: [NEW, COMPLETED, REJECTED]
Status of a convert request (used wherever convert_id is present).
Request creation timestamp in milliseconds in Unix time format.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/staking/get-open-convert",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"start_time": "1691455454495",
"end_time": "1691545277000",
"limit": "10"
}
}POST /private/staking/get-open-convert HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/staking/get-open-convert",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"start_time": "1691455454495",
"end_time": "1691545277000",
"limit": "10"
}
}private/staking/get-convert-history
POSTGet convert request history/private/staking/get-convert-history
Request
Body
required
Request id (echoed in response)
Must be "private/staking/get-convert-history"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1771761038000".
params objectrequired
Start time in Unix format (inclusive), ms or ns. Default: end_time - 30 days. Min: end_time - 180 days.
End time in Unix format (inclusive), ms or ns. Default: current system timestamp.
Max number of requests returned. Default: 20. Max: 500.
Schema
- Array [
- ➖ NEW: Request created
- ➖ COMPLETED: Conversion completed
- ➖ REJECTED: Conversion rejected
- Possible values by operations:
- ➖ private/staking/get-open-convert: NEW
- ➖ private/staking/get-convert-history: COMPLETED, REJECTED
- ]
Echoed request id
Method invoked
0 = success; non-zero indicates error (reason code).
result object
data object[]
Instrument name to convert from, e.g. ETH.staked or CDCETH
Instrument name to convert to, e.g. CDCETH or ETH.staked
Expected conversion rate
Quantity to be converted in from_instrument_name
Maximum slippage allowed in basis point
Actual conversion rate
Quantity converted to to_instrument_name
Convert request id
Possible values: [NEW, COMPLETED, REJECTED]
Status of a convert request (used wherever convert_id is present).
Request creation timestamp in milliseconds in Unix time format.
Response message. Contains additional reason when code !== 0.
Present when code !== 0.
{
"id": "1",
"method": "private/staking/get-convert-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"start_time": "1691455454495",
"end_time": "1691545277000",
"limit": "10"
}
}POST /private/staking/get-convert-history HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": "1",
"method": "private/staking/get-convert-history",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": "1739923200000",
"params": {
"start_time": "1691455454495",
"end_time": "1691545277000",
"limit": "10"
}
}Trading Bot API
Manage automated trading bots including DCA (Dollar-Cost Averaging), TWAP (Time-Weighted Average Price), GRID, and Funding Arbitrage strategies.
Bot Types
| Type | Description |
|---|---|
| DCA | Dollar-Cost Averaging - automatically buys or sells at regular intervals over a preset time frame |
| TWAP | Time-Weighted Average Price - executes large orders by splitting them into smaller slices over a defined time window |
| GRID | Grid Trading - automatically places buy and sell orders within a defined price range |
| FUNDING_ARBITRAGE | Funding Arbitrage - simultaneously holds a spot position and an opposing perpetual swap position to capture funding rate income |
Bot States
| State | Description |
|---|---|
| RUNNING | Bot is actively placing orders |
| PAUSED | Bot is paused, no new orders will be placed |
| TERMINATED | Bot has been terminated |
private/bot/create-trading-bot (DCA)
POSTCreates a new DCA (Dollar-Cost Averaging) Trading Bot that automatically buys or sells at regular intervals over a preset time frame./private/bot/create-trading-bot
DCA trading is used by investors who would like to reduce the influence of volatility and accumulate or decumulate positions gradually.
Request
Body
required
- DCA: Dollar Cost Averaging
- TWAP: Time-Weighted Average Price
- GRID: Grid trading
- FUNDING_ARBITRAGE: Funding arbitrage
- Array [
- ]
- FIXED_DURATION: Fixed interval in milliseconds
- MONTHLY: Monthly investment
Request id (echoed in response)
Must be "private/bot/create-trading-bot"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1610905028000".
params objectrequired
Possible values: [DCA, TWAP, GRID, FUNDING_ARBITRAGE]
Trading bot type:
Whether to receive push notifications on bot state changes
Display name of the trading bot. 4-15 characters; letters, numbers,
settings object required
Whether this is a basket DCA bot (multiple instruments)
allocations object[]required
Instrument name
Percentage allocated (must sum to 100 across all allocations)
Currency used for investment
Possible values: [BUY, SELL]
BUY or SELL. Required when is_basket is false
Possible values: [MARKET, LIMIT]
MARKET or LIMIT. Required when is_basket is false
Whether to automatically stake earned tokens. Required when is_basket is false
Limit price. Required when type is LIMIT
Quantity per order. Either quantity or total_investment is required
Total investment amount. Either quantity or total_investment is required
Possible values: [FIXED_DURATION, MONTHLY]
Investment frequency mode for DCA bots:
Interval between orders in milliseconds. Required when investment_frequency_mode is FIXED_DURATION
Unix timestamp in milliseconds for the first order
Total duration. In number of months when investment_frequency_mode is MONTHLY; in milliseconds when FIXED_DURATION.
Maximum number of orders to place
Stop-loss price. Not supported for basket bots
Take-profit price. Not supported for basket bots
Whether to use simplified mode
Schema
Original request identifier
Method name
0 for success; error code otherwise
Error message for non-zero codes
result object
Newly created Trading Bot ID
{
"id": 1,
"method": "private/bot/create-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_type": "DCA",
"notify_on_bot_change": true,
"settings": {
"is_basket": false,
"allocations": [
{
"instrument_name": "BTC_USDT",
"allocated_percentage": "100"
}
],
"investment_currency": "USDT",
"side": "BUY",
"type": "MARKET",
"auto_stake": false,
"quantity": "0.01",
"investment_frequency_mode": "FIXED_DURATION",
"investment_frequency": 300000,
"max_order": "10",
"first_investment_time": 1691510460000
}
}
}POST /private/bot/create-trading-bot HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": 1,
"method": "private/bot/create-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_type": "DCA",
"notify_on_bot_change": true,
"settings": {
"is_basket": false,
"allocations": [
{
"instrument_name": "BTC_USDT",
"allocated_percentage": "100"
}
],
"investment_currency": "USDT",
"side": "BUY",
"type": "MARKET",
"auto_stake": false,
"quantity": "0.01",
"investment_frequency_mode": "FIXED_DURATION",
"investment_frequency": 300000,
"max_order": "10",
"first_investment_time": 1691510460000
}
}
}private/bot/create-trading-bot (TWAP)
POSTCreates a new TWAP (Time-Weighted Average Price) Trading Bot that executes large orders by splitting them into smaller slices over a defined time window to minimise market impact./private/bot/create-trading-bot
Request
Body
required
- DCA: Dollar Cost Averaging
- TWAP: Time-Weighted Average Price
- GRID: Grid trading
- FUNDING_ARBITRAGE: Funding arbitrage
- Array [
- ]
- FIXED_DURATION: Fixed interval in milliseconds
- MONTHLY: Monthly investment
Request id (echoed in response)
Must be "private/bot/create-trading-bot"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1610905028000".
params objectrequired
Possible values: [DCA, TWAP, GRID, FUNDING_ARBITRAGE]
Trading bot type:
Whether to receive push notifications on bot state changes
Display name of the trading bot. 4-15 characters; letters, numbers,
settings object required
Whether this is a basket DCA bot (multiple instruments)
allocations object[]required
Instrument name
Percentage allocated (must sum to 100 across all allocations)
Currency used for investment
Possible values: [BUY, SELL]
BUY or SELL. Required when is_basket is false
Possible values: [MARKET, LIMIT]
MARKET or LIMIT. Required when is_basket is false
Whether to automatically stake earned tokens. Required when is_basket is false
Limit price. Required when type is LIMIT
Quantity per order. Either quantity or total_investment is required
Total investment amount. Either quantity or total_investment is required
Possible values: [FIXED_DURATION, MONTHLY]
Investment frequency mode for DCA bots:
Interval between orders in milliseconds. Required when investment_frequency_mode is FIXED_DURATION
Unix timestamp in milliseconds for the first order
Total duration. In number of months when investment_frequency_mode is MONTHLY; in milliseconds when FIXED_DURATION.
Maximum number of orders to place
Stop-loss price. Not supported for basket bots
Take-profit price. Not supported for basket bots
Whether to use simplified mode
Schema
Original request identifier
Method name
0 for success; error code otherwise
Error message for non-zero codes
result object
Newly created Trading Bot ID
{
"id": 1,
"method": "private/bot/create-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_type": "TWAP",
"notify_on_bot_change": true,
"settings": {
"instrument_name": "BTC_USDT",
"side": "BUY",
"type": "MARKET",
"quantity": "1000",
"start_time_millis": 1691510460000,
"end_time_millis": 1691513460000
}
}
}POST /private/bot/create-trading-bot HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": 1,
"method": "private/bot/create-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_type": "TWAP",
"notify_on_bot_change": true,
"settings": {
"instrument_name": "BTC_USDT",
"side": "BUY",
"type": "MARKET",
"quantity": "1000",
"start_time_millis": 1691510460000,
"end_time_millis": 1691513460000
}
}
}private/bot/create-trading-bot (GRID)
POSTCreates a new GRID Trading Bot that automatically places buy and sell orders within a defined price range./private/bot/create-trading-bot
Request
Body
required
- DCA: Dollar Cost Averaging
- TWAP: Time-Weighted Average Price
- GRID: Grid trading
- FUNDING_ARBITRAGE: Funding arbitrage
- Array [
- ]
- FIXED_DURATION: Fixed interval in milliseconds
- MONTHLY: Monthly investment
Request id (echoed in response)
Must be "private/bot/create-trading-bot"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1610905028000".
params objectrequired
Possible values: [DCA, TWAP, GRID, FUNDING_ARBITRAGE]
Trading bot type:
Whether to receive push notifications on bot state changes
Display name of the trading bot. 4-15 characters; letters, numbers,
settings object required
Whether this is a basket DCA bot (multiple instruments)
allocations object[]required
Instrument name
Percentage allocated (must sum to 100 across all allocations)
Currency used for investment
Possible values: [BUY, SELL]
BUY or SELL. Required when is_basket is false
Possible values: [MARKET, LIMIT]
MARKET or LIMIT. Required when is_basket is false
Whether to automatically stake earned tokens. Required when is_basket is false
Limit price. Required when type is LIMIT
Quantity per order. Either quantity or total_investment is required
Total investment amount. Either quantity or total_investment is required
Possible values: [FIXED_DURATION, MONTHLY]
Investment frequency mode for DCA bots:
Interval between orders in milliseconds. Required when investment_frequency_mode is FIXED_DURATION
Unix timestamp in milliseconds for the first order
Total duration. In number of months when investment_frequency_mode is MONTHLY; in milliseconds when FIXED_DURATION.
Maximum number of orders to place
Stop-loss price. Not supported for basket bots
Take-profit price. Not supported for basket bots
Whether to use simplified mode
Schema
Original request identifier
Method name
0 for success; error code otherwise
Error message for non-zero codes
result object
Newly created Trading Bot ID
{
"id": 1,
"method": "private/bot/create-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_type": "GRID",
"notify_on_bot_change": true,
"settings": {
"instrument_name": "BTC_USDT",
"total_investment": "1000",
"lower_price": "25000",
"upper_price": "35000",
"grid_mode": "ARITHMETIC",
"grid_no": 10,
"margin_enabled": false,
"trailing_up_enabled": false
}
}
}POST /private/bot/create-trading-bot HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": 1,
"method": "private/bot/create-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_type": "GRID",
"notify_on_bot_change": true,
"settings": {
"instrument_name": "BTC_USDT",
"total_investment": "1000",
"lower_price": "25000",
"upper_price": "35000",
"grid_mode": "ARITHMETIC",
"grid_no": 10,
"margin_enabled": false,
"trailing_up_enabled": false
}
}
}private/bot/create-trading-bot (FUNDING_ARBITRAGE)
POSTCreates a new Funding Arbitrage Trading Bot that simultaneously holds a spot position and an opposing perpetual swap position to capture funding rate income./private/bot/create-trading-bot
Request
Body
required
- DCA: Dollar Cost Averaging
- TWAP: Time-Weighted Average Price
- GRID: Grid trading
- FUNDING_ARBITRAGE: Funding arbitrage
- Array [
- ]
- FIXED_DURATION: Fixed interval in milliseconds
- MONTHLY: Monthly investment
Request id (echoed in response)
Must be "private/bot/create-trading-bot"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1610905028000".
params objectrequired
Possible values: [DCA, TWAP, GRID, FUNDING_ARBITRAGE]
Trading bot type:
Whether to receive push notifications on bot state changes
Display name of the trading bot. 4-15 characters; letters, numbers,
settings object required
Whether this is a basket DCA bot (multiple instruments)
allocations object[]required
Instrument name
Percentage allocated (must sum to 100 across all allocations)
Currency used for investment
Possible values: [BUY, SELL]
BUY or SELL. Required when is_basket is false
Possible values: [MARKET, LIMIT]
MARKET or LIMIT. Required when is_basket is false
Whether to automatically stake earned tokens. Required when is_basket is false
Limit price. Required when type is LIMIT
Quantity per order. Either quantity or total_investment is required
Total investment amount. Either quantity or total_investment is required
Possible values: [FIXED_DURATION, MONTHLY]
Investment frequency mode for DCA bots:
Interval between orders in milliseconds. Required when investment_frequency_mode is FIXED_DURATION
Unix timestamp in milliseconds for the first order
Total duration. In number of months when investment_frequency_mode is MONTHLY; in milliseconds when FIXED_DURATION.
Maximum number of orders to place
Stop-loss price. Not supported for basket bots
Take-profit price. Not supported for basket bots
Whether to use simplified mode
Schema
Original request identifier
Method name
0 for success; error code otherwise
Error message for non-zero codes
result object
Newly created Trading Bot ID
{
"id": 1,
"method": "private/bot/create-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_type": "FUNDING_ARBITRAGE",
"notify_on_bot_change": true,
"settings": {
"total_investment": "5000",
"investment_currency": "USDT",
"spot_leg": {
"instrument_name": "BTC_USDT",
"side": "BUY"
},
"perp_leg": {
"instrument_name": "BTCUSD-PERP",
"side": "SELL"
}
}
}
}POST /private/bot/create-trading-bot HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": 1,
"method": "private/bot/create-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_type": "FUNDING_ARBITRAGE",
"notify_on_bot_change": true,
"settings": {
"total_investment": "5000",
"investment_currency": "USDT",
"spot_leg": {
"instrument_name": "BTC_USDT",
"side": "BUY"
},
"perp_leg": {
"instrument_name": "BTCUSD-PERP",
"side": "SELL"
}
}
}
}private/bot/update-trading-bot (DCA)
POSTUpdates settings for a running or paused DCA (Dollar-Cost Averaging) Trading Bot./private/bot/update-trading-bot
Updatable settings for DCA bots include allocations, order type, price, max_order, stop/take-profit prices, auto_stake, investment parameters, and quantity.
Request
Body
required
- DCA: Dollar Cost Averaging
- TWAP: Time-Weighted Average Price
- GRID: Grid trading
- FUNDING_ARBITRAGE: Funding arbitrage
- Array [
- ]
Request id (echoed in response)
Must be "private/bot/update-trading-bot"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1610905028000".
params objectrequired
Trading Bot ID
Possible values: [DCA, TWAP, GRID, FUNDING_ARBITRAGE]
Trading bot type:
Whether to receive push notifications on bot state changes
Updated display name for the bot. 4-15 characters; letters, numbers,
settings object
allocations object[]
Instrument name
Percentage allocated (must sum to 100 across all allocations)
Possible values: [MARKET, LIMIT]
MARKET or LIMIT
Limit price
Maximum number of orders to place
Stop-loss price
Take-profit price
Whether to automatically stake earned tokens
Total duration. In number of months when investment_frequency_mode is MONTHLY; in milliseconds when FIXED_DURATION.
Interval between orders in milliseconds
Quantity per order
Schema
Original request identifier
Method name
0 for success; error code otherwise
Error message for non-zero codes
{
"id": 1,
"method": "private/bot/update-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_id": 1,
"bot_type": "DCA",
"notify_on_bot_change": true,
"settings": {
"allocations": [
{
"instrument_name": "BTC_USDT",
"allocated_percentage": "60"
},
{
"instrument_name": "ETH_USDT",
"allocated_percentage": "40"
}
],
"stop_price": "20000"
}
}
}POST /private/bot/update-trading-bot HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": 1,
"method": "private/bot/update-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_id": 1,
"bot_type": "DCA",
"notify_on_bot_change": true,
"settings": {
"allocations": [
{
"instrument_name": "BTC_USDT",
"allocated_percentage": "60"
},
{
"instrument_name": "ETH_USDT",
"allocated_percentage": "40"
}
],
"stop_price": "20000"
}
}
}private/bot/update-trading-bot (TWAP)
POSTUpdates a TWAP (Time-Weighted Average Price) Trading Bot./private/bot/update-trading-bot
Note: TWAP bots do not support updating settings. Only display_name and notify_on_bot_change can be changed.
Request
Body
required
- DCA: Dollar Cost Averaging
- TWAP: Time-Weighted Average Price
- GRID: Grid trading
- FUNDING_ARBITRAGE: Funding arbitrage
Request id (echoed in response)
Must be "private/bot/update-trading-bot"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1610905028000".
params objectrequired
Trading Bot ID
Possible values: [DCA, TWAP, GRID, FUNDING_ARBITRAGE]
Trading bot type:
Whether to receive push notifications on bot state changes
Updated display name for the bot. 4-15 characters; letters, numbers,
Schema
Original request identifier
Method name
0 for success; error code otherwise
Error message for non-zero codes
{
"id": 1,
"method": "private/bot/update-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_id": 2,
"bot_type": "TWAP",
"notify_on_bot_change": false,
"display_name": "My TWAP Bot"
}
}POST /private/bot/update-trading-bot HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": 1,
"method": "private/bot/update-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_id": 2,
"bot_type": "TWAP",
"notify_on_bot_change": false,
"display_name": "My TWAP Bot"
}
}private/bot/update-trading-bot (GRID)
POSTUpdates settings for a running or paused GRID Trading Bot./private/bot/update-trading-bot
Updatable settings for GRID bots include stop_price, take_profit_price, and trailing_up_price_cap.
Request
Body
required
- DCA: Dollar Cost Averaging
- TWAP: Time-Weighted Average Price
- GRID: Grid trading
- FUNDING_ARBITRAGE: Funding arbitrage
- Array [
- ]
Request id (echoed in response)
Must be "private/bot/update-trading-bot"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1610905028000".
params objectrequired
Trading Bot ID
Possible values: [DCA, TWAP, GRID, FUNDING_ARBITRAGE]
Trading bot type:
Whether to receive push notifications on bot state changes
Updated display name for the bot. 4-15 characters; letters, numbers,
settings object
allocations object[]
Instrument name
Percentage allocated (must sum to 100 across all allocations)
Possible values: [MARKET, LIMIT]
MARKET or LIMIT
Limit price
Maximum number of orders to place
Stop-loss price
Take-profit price
Whether to automatically stake earned tokens
Total duration. In number of months when investment_frequency_mode is MONTHLY; in milliseconds when FIXED_DURATION.
Interval between orders in milliseconds
Quantity per order
Schema
Original request identifier
Method name
0 for success; error code otherwise
Error message for non-zero codes
{
"id": 1,
"method": "private/bot/update-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_id": 3,
"bot_type": "GRID",
"notify_on_bot_change": true,
"settings": {
"stop_price": "24000"
}
}
}POST /private/bot/update-trading-bot HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": 1,
"method": "private/bot/update-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_id": 3,
"bot_type": "GRID",
"notify_on_bot_change": true,
"settings": {
"stop_price": "24000"
}
}
}private/bot/update-trading-bot (FUNDING_ARBITRAGE)
POSTUpdates a Funding Arbitrage Trading Bot./private/bot/update-trading-bot
Note: Funding Arbitrage bots do not support updating settings. Only display_name and notify_on_bot_change can be changed.
Request
Body
required
- DCA: Dollar Cost Averaging
- TWAP: Time-Weighted Average Price
- GRID: Grid trading
- FUNDING_ARBITRAGE: Funding arbitrage
Request id (echoed in response)
Must be "private/bot/update-trading-bot"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1610905028000".
params objectrequired
Trading Bot ID
Possible values: [DCA, TWAP, GRID, FUNDING_ARBITRAGE]
Trading bot type:
Whether to receive push notifications on bot state changes
Updated display name for the bot. 4-15 characters; letters, numbers,
Schema
Original request identifier
Method name
0 for success; error code otherwise
Error message for non-zero codes
{
"id": 1,
"method": "private/bot/update-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_id": 4,
"bot_type": "FUNDING_ARBITRAGE",
"notify_on_bot_change": true,
"display_name": "My Funding Arb Bot"
}
}POST /private/bot/update-trading-bot HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": 1,
"method": "private/bot/update-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_id": 4,
"bot_type": "FUNDING_ARBITRAGE",
"notify_on_bot_change": true,
"display_name": "My Funding Arb Bot"
}
}private/bot/terminate-trading-bot
POSTTerminates a Trading Bot. All open orders placed by the bot are cancelled./private/bot/terminate-trading-bot
Request
Body
required
- DCA: Dollar Cost Averaging
- TWAP: Time-Weighted Average Price
- GRID: Grid trading
- FUNDING_ARBITRAGE: Funding arbitrage
Request id (echoed in response)
Must be "private/bot/terminate-trading-bot"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1610905028000".
params objectrequired
Trading Bot ID
Possible values: [DCA, TWAP, GRID, FUNDING_ARBITRAGE]
Trading bot type:
For FUNDING_ARBITRAGE - whether to close open positions on termination
Schema
Original request identifier
Method name
0 for success; error code otherwise
Error message for non-zero codes
{
"id": 1,
"method": "private/bot/terminate-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_id": 1,
"bot_type": "DCA"
}
}POST /private/bot/terminate-trading-bot HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": 1,
"method": "private/bot/terminate-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_id": 1,
"bot_type": "DCA"
}
}private/bot/pause-trading-bot
POSTPauses a running Trading Bot. The bot's open orders are cancelled and no new orders will be placed until resumed./private/bot/pause-trading-bot
Request
Body
required
- DCA: Dollar Cost Averaging
- TWAP: Time-Weighted Average Price
- GRID: Grid trading
- FUNDING_ARBITRAGE: Funding arbitrage
Request id (echoed in response)
Must be "private/bot/pause-trading-bot"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1610905028000".
params objectrequired
Trading Bot ID
Possible values: [DCA, TWAP, GRID, FUNDING_ARBITRAGE]
Trading bot type:
Schema
Original request identifier
Method name
0 for success; error code otherwise
Error message for non-zero codes
{
"id": 1,
"method": "private/bot/pause-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_id": 1,
"bot_type": "DCA"
}
}POST /private/bot/pause-trading-bot HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": 1,
"method": "private/bot/pause-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_id": 1,
"bot_type": "DCA"
}
}private/bot/resume-trading-bot
POSTResumes a paused Trading Bot. The bot will restart placing orders according to its configured strategy./private/bot/resume-trading-bot
Request
Body
required
- DCA: Dollar Cost Averaging
- TWAP: Time-Weighted Average Price
- GRID: Grid trading
- FUNDING_ARBITRAGE: Funding arbitrage
Request id (echoed in response)
Must be "private/bot/resume-trading-bot"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1610905028000".
params objectrequired
Trading Bot ID
Possible values: [DCA, TWAP, GRID, FUNDING_ARBITRAGE]
Trading bot type:
Schema
Original request identifier
Method name
0 for success; error code otherwise
Error message for non-zero codes
{
"id": 1,
"method": "private/bot/resume-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_id": 1,
"bot_type": "DCA"
}
}POST /private/bot/resume-trading-bot HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": 1,
"method": "private/bot/resume-trading-bot",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_id": 1,
"bot_type": "DCA"
}
}private/bot/get-trading-bots
POSTReturns a list of Trading Bots filtered by type and state. Results are sorted by update time in descending order./private/bot/get-trading-bots
Request
Body
required
Request id (echoed in response)
Must be "private/bot/get-trading-bots"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1610905028000".
params objectrequired
Find by Trading Bot ID. When provided, state is not required.
Possible values: [DCA, TWAP, GRID, FUNDING_ARBITRAGE]
Filter by bot type
Possible values: [RUNNING, PAUSED, TERMINATED]
Filter by bot state. Required when bot_id is not provided.
Default value: 0
Page number
Default value: 20
Page size. Max 500.
Schema
- Array [
- DCA: Dollar Cost Averaging
- TWAP: Time-Weighted Average Price
- GRID: Grid trading
- FUNDING_ARBITRAGE: Funding arbitrage
- RUNNING: Bot is actively placing orders
- PAUSED: Bot is paused and not placing orders
- TERMINATED: Bot has been permanently stopped
- Array [
- ]
- FIXED_DURATION: Fixed interval in milliseconds
- MONTHLY: Monthly investment
- ]
Original request identifier
Method name
0 for success; error code otherwise
Error message for non-zero codes
result object
bot_list object[]
Trading Bot ID
Possible values: [DCA, TWAP, GRID, FUNDING_ARBITRAGE]
Trading bot type:
Display name of the trading bot
Possible values: [RUNNING, PAUSED, TERMINATED]
Trading bot state:
Termination reason (only present for terminated bots)
Create time in milliseconds (UTC)
Last update time in milliseconds (UTC)
End time in milliseconds (UTC). 0 if still active.
Whether the bot was migrated
settings object
Whether this is a basket DCA bot (multiple instruments)
allocations object[]required
Instrument name
Percentage allocated (must sum to 100 across all allocations)
Currency used for investment
Possible values: [BUY, SELL]
BUY or SELL. Required when is_basket is false
Possible values: [MARKET, LIMIT]
MARKET or LIMIT. Required when is_basket is false
Whether to automatically stake earned tokens. Required when is_basket is false
Limit price. Required when type is LIMIT
Quantity per order. Either quantity or total_investment is required
Total investment amount. Either quantity or total_investment is required
Possible values: [FIXED_DURATION, MONTHLY]
Investment frequency mode for DCA bots:
Interval between orders in milliseconds. Required when investment_frequency_mode is FIXED_DURATION
Unix timestamp in milliseconds for the first order
Total duration. In number of months when investment_frequency_mode is MONTHLY; in milliseconds when FIXED_DURATION.
Maximum number of orders to place
Stop-loss price. Not supported for basket bots
Take-profit price. Not supported for basket bots
Whether to use simplified mode
execution_summary object
Bot execution summary (varies by bot type)
{
"id": 1,
"method": "private/bot/get-trading-bots",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_types": [
"DCA",
"TWAP",
"GRID",
"FUNDING_ARBITRAGE"
],
"state": [
"RUNNING",
"PAUSED"
],
"page": 0,
"page_size": 20
}
}POST /private/bot/get-trading-bots HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": 1,
"method": "private/bot/get-trading-bots",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_types": [
"DCA",
"TWAP",
"GRID",
"FUNDING_ARBITRAGE"
],
"state": [
"RUNNING",
"PAUSED"
],
"page": 0,
"page_size": 20
}
}private/bot/get-trading-bot-executions
POSTReturns the order execution history for a specific Trading Bot./private/bot/get-trading-bot-executions
Request
Body
required
Request id (echoed in response)
Must be "private/bot/get-trading-bot-executions"
Your API key (only required for private REST)
HMAC-SHA256 signature in hex (only required for private REST)
Current timestamp in milliseconds, e.g. "1610905028000".
params objectrequired
Trading Bot ID
Possible values: [PENDING, NEW, ACTIVE, FILLED, CANCELED, REJECTED, EXPIRED]
Filter by order status
basket_bot_filter object
List of instrument symbols to include
Default value: 0
Page number
Default value: 20
Page size. Max 500.
Schema
- Array [
- ]
Original request identifier
Method name
0 for success; error code otherwise
Error message for non-zero codes
result object
execution_list object[]
Instrument display name
Instrument symbol
Execution time in milliseconds (UTC)
Scheduled execution time in milliseconds (UTC)
Possible values: [PENDING, NEW, ACTIVE, FILLED, CANCELED, REJECTED, EXPIRED]
Order status
Possible values: [BUY, SELL]
Order side
Order price
Order quantity
Average fill price
Cumulative filled quantity
Exchange order ID
Last update time in milliseconds (UTC)
Percentage of the order quantity that has been filled
{
"id": 1,
"method": "private/bot/get-trading-bot-executions",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_id": 1,
"page": 0,
"page_size": 20
}
}POST /private/bot/get-trading-bot-executions HTTP/1.1
Host: api.crypto.com/exchange/v1
Content-Type: application/json
{
"id": 1,
"method": "private/bot/get-trading-bot-executions",
"api_key": "YOUR_API_KEY",
"sig": "DIGITAL_SIGNATURE",
"nonce": 1610905028000,
"params": {
"bot_id": 1,
"page": 0,
"page_size": 20
}
}Transaction History
History will be stored for recent 6 months record only. For records over 6 months, please contact our support team.