EX.IO API Documentation
Welcome to the EX.IO API Documentation. We offer HTTP-based REST API for trading and account operations, and WebSocket subscriptions for real-time streaming data.
Some endpoints require API Key authentication. API Keys can be created in the User Settings panel. You are recommended to set IP restrictions on the keys for security reasons.
Important notes on API usage:
- You should NEVER share your API key/secret details to anyone.
- API keys without explicit permissions allow only read-only account data access, e.g. fetching live orders, but not placing orders.
- Fields in response payload will be omitted if the value is:
- an empty string for string data type, or
- zero for numeric data types, or
- containing no elements for arrays, or
- containing no entries for maps/dictionaries
- Testnet assets are used in UAT environment, and Mainnet assets are used in Production environment.
- EX.IO is not responsible for any loss of assets due to API misuse.
Environment | Base URL | Asset Network |
---|---|---|
UAT | https://uat.ex.io | Testnet |
Production | https://www.ex.io | Mainnet |
Authentication
const method = 'GET';
const path = '<target_endpoint>';
const timestamp = Math.floor(Date.now() / 1000);
const body = '';
const signingString = method + path + timestamp + body;
const signature = CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(signingString, 'YOUR_API_SECRET'));
axios.get(path, {
headers: {
'req-apikey': 'YOUR_API_KEY',
'req-timestamp': timestamp,
'req-signature': signature
}
})
.then((response) => {
console.log(response);
})
.catch((error) => {
console.error(error);
});
import time
import base64
import hmac
from requests import Request
timestamp = int(time.time())
req = Request('GET', '<target_endpoint>')
prepped = req.prepare()
signing_string = f'{prepped.method}{prepped.path_url}{timestamp}'
if prepped.body:
signing_string += prepped.body
signature = base64.b64encode(hmac.new('YOUR_API_SECRET'.encode(), signing_string.encode(), 'sha256').digest())
req.headers['req-apikey'] = 'YOUR_API_KEY'
req.headers['req-timestamp'] = str(timestamp)
req.headers['req-signature'] = signature
For API endpoints and WebSocket subscriptions requiring authentication, the following headers should be sent with the request:
req-apikey
: Your API Keyreq-timestamp
: Unix timestamp in secondsreq-signature
: HMAC-SHA256 hash in Base64 string from concatenation of the following strings in order, using API secret:- HTTP method in upper case (e.g.
GET
,POST
) - Request path, including leading slash and any URL request parameters, without hostname (e.g.
/api/v1/order
) - Unix timestamp for request (e.g.
1661299200
) - Request body, if applicable
- HTTP method in upper case (e.g.
Deposit
Query Deposit Addresses
GET /api/v1/deposit/address
Returning a list of existing deposit addresses
Example responses
default Response
{
"addresses": [
{
"address": "string",
"asset": "string",
"network": "string"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
default | Default | default response | CryptoAddressList |
Create Deposit Address
POST /api/v1/deposit/address
Creating deposit address for the given asset and network
Body parameter
{
"asset": "string",
"network": "string"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | CreateDepositAddressRequest | true | none |
asset | body | string | true | Asset |
network | body | string | true | Network |
Example responses
default Response
{
"address": "string",
"asset": "string",
"network": "string"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
default | Default | default response | CryptoAddress |
Query Deposit Bank Accounts
GET /api/v1/deposit/bank-account
Returning a list of existing deposit bank accounts
Example responses
default Response
{
"bankAccounts": [
{
"accName": "string",
"accNo": "string",
"bankCode": "string",
"ccys": [
"string"
],
"countryCode": "string",
"swiftCode": "string"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
default | Default | default response | BankAccountList |
Create Deposit Bank
POST /api/v1/deposit/bank-account
Creating deposit bank account for the given currency
Body parameter
{
"currency": "string"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | CreateDepositBankAccountRequest | true | none |
currency | body | string | true | Currency |
Example responses
default Response
{
"bankAccounts": [
{
"accName": "string",
"accNo": "string",
"bankCode": "string",
"ccys": [
"string"
],
"countryCode": "string",
"swiftCode": "string"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
default | Default | default response | BankAccountList |
Order
Cancel all active orders
DELETE /api/v1/order
Cancelling all active orders
Required permission: TRADING
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Success | None |
Query orders
GET /api/v1/order
Returning a list of live orders for the given time range
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | integer(int32) | false | Page number of records (page size is 100 as determined by system) |
Example responses
200 Response
{
"orders": [
{
"clientOrderId": "string",
"cumQty": 0.1,
"error": "string",
"id": "string",
"instrument": {
"feedcode": "string"
},
"leaveQty": 0.1,
"px": 0.1,
"qty": 0.1,
"side": "BUY",
"status": "NEW",
"timeInForce": "GOOD_TILL_CANCEL",
"ts": "string",
"tsNano": "string",
"type": "LIMIT"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Success | OrderEntries |
Insert new order
POST /api/v1/order
Creating a new order
Required permission: TRADING
Body parameter
{
"clientOrderId": "string",
"feedcode": "string",
"px": 0,
"qty": 0,
"side": "BUY",
"timeInForce": "GOOD_TILL_CANCEL",
"type": "LIMIT"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | OrderCreateRequest | true | none |
clientOrderId | body | string | true | Client Order ID |
feedcode | body | string | true | Feedcode |
px | body | number | false | Price (required for limit orders) |
qty | body | number | true | Quantity |
side | body | string | true | Side |
timeInForce | body | string | false | Time in Force (required for limit orders) |
type | body | string | true | Order Type |
Enumerated Values
Parameter | Value |
---|---|
side | BUY |
side | SELL |
timeInForce | GOOD_TILL_CANCEL |
timeInForce | IMMEDIATE_OR_CANCEL |
type | LIMIT |
type | MARKET |
type | POST_ONLY |
Example responses
200 Response
{
"clientOrderId": "string",
"cumQty": 0.1,
"error": "string",
"id": "string",
"instrument": {
"feedcode": "string"
},
"leaveQty": 0.1,
"px": 0.1,
"qty": 0.1,
"side": "BUY",
"status": "NEW",
"timeInForce": "GOOD_TILL_CANCEL",
"ts": "string",
"tsNano": "string",
"type": "LIMIT"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Success | OrderEntry |
Cancel order
DELETE /api/v1/order/{orderId}
Cancelling an existing order
Required permission: TRADING
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
orderId | path | string | true | Order ID |
Example responses
200 Response
{
"clientOrderId": "string",
"cumQty": 0.1,
"error": "string",
"id": "string",
"instrument": {
"feedcode": "string"
},
"leaveQty": 0.1,
"px": 0.1,
"qty": 0.1,
"side": "BUY",
"status": "NEW",
"timeInForce": "GOOD_TILL_CANCEL",
"ts": "string",
"tsNano": "string",
"type": "LIMIT"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Success | OrderEntry |
Modify order
PATCH /api/v1/order/{orderId}
Modifying an existing order
Required permission: TRADING
Body parameter
{
"feedcode": "string",
"px": 0,
"qty": 0
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
orderId | path | string | true | Order ID |
body | body | OrderUpdateRequest | true | none |
feedcode | body | string | true | Feedcode |
px | body | number | true | Price |
qty | body | number | true | Quantity |
Example responses
200 Response
{
"clientOrderId": "string",
"cumQty": 0.1,
"error": "string",
"id": "string",
"instrument": {
"feedcode": "string"
},
"leaveQty": 0.1,
"px": 0.1,
"qty": 0.1,
"side": "BUY",
"status": "NEW",
"timeInForce": "GOOD_TILL_CANCEL",
"ts": "string",
"tsNano": "string",
"type": "LIMIT"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Success | OrderEntry |
Order History
Query order history
GET /api/v1/order-history
Returning a list of user historical orders for the given time range
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
from | query | integer(int64) | false | Start time (inclusive) in seconds since Unix epoch |
to | query | integer(int64) | false | End time (inclusive) in seconds since Unix epoch |
page | query | integer(int32) | false | Page number of records (page size is 100 as determined by system) |
feedcode | query | string | false | Feedcode |
Example responses
200 Response
{
"orders": [
{
"clientOrderId": "string",
"cumQty": 0.1,
"error": "string",
"id": "string",
"instrument": {
"feedcode": "string"
},
"leaveQty": 0.1,
"px": 0.1,
"qty": 0.1,
"side": "BUY",
"status": "NEW",
"timeInForce": "GOOD_TILL_CANCEL",
"ts": "string",
"tsNano": "string",
"type": "LIMIT"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Success | OrderEntries |
Position
Get positions
GET /api/v1/position
Returning user positions
Example responses
default Response
{
"positions": [
{
"account": "FUND",
"asset": "string",
"available": "string",
"held": "string",
"updateTime": "string"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
default | Default | default response | PositionEntries |
Internal transfer
POST /api/v1/position/transfer
Transferring fund between accounts
Body parameter
{
"asset": "string",
"from": "FUND",
"qty": 0,
"to": "FUND"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | InternalTransferRequest | true | none |
asset | body | string | true | Asset |
from | body | string | true | Originating account |
qty | body | number | true | Quantity/Amount |
to | body | string | true | Destination account |
Enumerated Values
Parameter | Value |
---|---|
from | FUND |
from | SPOT |
to | FUND |
to | SPOT |
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Market Data
Get BBO Bar Data
GET /api/v1/public/market/bbo-ohlc/{feedcode}/{interval}
Returning BBO OHLC data of the given interval for the given feedcode and time range
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
feedcode | path | string | true | Feedcode |
interval | path | string | true | Interval |
from | query | integer(int32) | true | Start time (inclusive) of BBO OHLC data in seconds since Unix epoch |
to | query | integer(int32) | true | End time (inclusive) of BBO OHLC data in seconds since Unix epoch |
Enumerated Values
Parameter | Value |
---|---|
interval | 1 |
interval | 3 |
interval | 5 |
interval | 15 |
interval | 30 |
interval | 60 |
interval | 120 |
interval | 240 |
interval | 360 |
interval | 480 |
interval | 720 |
interval | 1D |
interval | 3D |
interval | 1W |
Example responses
default Response
{
"bars": [
{
"c": 0.1,
"h": 0.1,
"l": 0.1,
"o": 0.1,
"ts": "string"
}
],
"from": 0,
"interval": "1",
"intervalSec": 0,
"ix": "string",
"to": 0
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
default | Default | default response | BarData |
Get Bar Data
GET /api/v1/public/market/ohlc/{feedcode}/{interval}
Returning OHLC data of the given interval for the given feedcode and time range
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
feedcode | path | string | true | Feedcode |
interval | path | string | true | Interval |
from | query | integer(int32) | true | Start time (inclusive) of OHLC data in seconds since Unix epoch |
to | query | integer(int32) | true | End time (inclusive) of OHLC data in seconds since Unix epoch |
Enumerated Values
Parameter | Value |
---|---|
interval | 1 |
interval | 3 |
interval | 5 |
interval | 15 |
interval | 30 |
interval | 60 |
interval | 120 |
interval | 240 |
interval | 360 |
interval | 480 |
interval | 720 |
interval | 1D |
interval | 3D |
interval | 1W |
Example responses
default Response
{
"bars": [
{
"c": 0.1,
"h": 0.1,
"l": 0.1,
"o": 0.1,
"ts": "string"
}
],
"from": 0,
"interval": "1",
"intervalSec": 0,
"ix": "string",
"to": 0
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
default | Default | default response | BarData |
Query order book
GET /api/v1/public/market/order-book/{feedcode}
Returning order book for the given feedcode
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
feedcode | path | string | true | Feedcode |
Example responses
200 Response
{
"asks": [
{
"px": 0.1,
"qty": 0.1
}
],
"bids": [
{
"px": 0.1,
"qty": 0.1
}
],
"instrument": {
"baseAsset": "string",
"feedcode": "string",
"lotSize": 0.1,
"maxPrice": 0.1,
"minQty": 0.1,
"pi": true,
"quoteAsset": "string",
"tickSize": 0.1,
"tradable": true
},
"seq": "string",
"ts": "string",
"tsNano": "string"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Success | OrderBookEntry |
Get Market Snapshots
GET /api/v1/public/market/snapshot
Returning a list of snapshots, including 1-day change, high and low
Example responses
default Response
{
"stats": {
"property1": {
"d1H": 0,
"d1L": 0,
"d1PrevC": 0,
"d1V": 0,
"ts": 0
},
"property2": {
"d1H": 0,
"d1L": 0,
"d1PrevC": 0,
"d1V": 0,
"ts": 0
}
},
"ticks": {
"property1": 0.1,
"property2": 0.1
},
"ts": 0
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
default | Default | default response | MarketSnapshotReply |
Get recent market trades
GET /api/v1/public/market/trade/{feedcode}
Returning a list of recent market trades for the given feedcode
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
feedcode | path | string | true | Feedcode |
Example responses
200 Response
{
"marketTrades": [
{
"aggressiveSide": "BUY",
"fee": "string",
"id": "string",
"instrument": {
"feedcode": "string"
},
"px": 0.1,
"qty": "string",
"ts": "string",
"tsNano": "string"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Success | MarketTradeEntries |
Trading Info
Get supported cryptos
GET /api/v1/public/trading/crypto
Returning a list of supported crypto currencies
Example responses
default Response
{
"cryptoList": {
"property1": {
"displayName": "string",
"meta": {
"property1": "string",
"property2": "string"
},
"minDeposit": 0.1,
"minWithdrawal": 0.1,
"name": "string",
"network": {
"property1": {
"extra": "string",
"std": "string"
},
"property2": {
"extra": "string",
"std": "string"
}
},
"pi": true,
"withdrawalFeeQty": 0.1
},
"property2": {
"displayName": "string",
"meta": {
"property1": "string",
"property2": "string"
},
"minDeposit": 0.1,
"minWithdrawal": 0.1,
"name": "string",
"network": {
"property1": {
"extra": "string",
"std": "string"
},
"property2": {
"extra": "string",
"std": "string"
}
},
"pi": true,
"withdrawalFeeQty": 0.1
}
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
default | Default | default response | CryptoList |
Get supported fiats
GET /api/v1/public/trading/fiat
Returning a list of supported fiat currencies
Example responses
default Response
{
"fiatList": {
"property1": {
"displayName": "string",
"minWithdrawal": 0.1,
"pi": true,
"tradable": true,
"withdrawalFeeQty": 0.1
},
"property2": {
"displayName": "string",
"minWithdrawal": 0.1,
"pi": true,
"tradable": true,
"withdrawalFeeQty": 0.1
}
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
default | Default | default response | FiatList |
Get trading instruments
GET /api/v1/public/trading/instrument
Returning a list of trading instruments
Example responses
default Response
{
"instrumentList": [
{
"baseAsset": "string",
"feedcode": "string",
"lotSize": 0.1,
"maxPrice": 0.1,
"minQty": 0.1,
"pi": true,
"quoteAsset": "string",
"tickSize": 0.1,
"tradable": true
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
default | Default | default response | InstrumentList |
Trade
Query user trades
GET /api/v1/trade
Returning a list of user trades for the given time range
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
from | query | integer(int64) | false | Start time (inclusive) in seconds since Unix epoch |
to | query | integer(int64) | false | End time (inclusive) in seconds since Unix epoch |
page | query | integer(int32) | false | Page number of records (page size is 100 as determined by system) |
feedcode | query | string | false | Feedcode |
Example responses
200 Response
{
"trades": [
{
"fee": "string",
"id": "string",
"instrument": {
"feedcode": "string"
},
"order": {
"clientOrderId": "string",
"cumQty": 0.1,
"error": "string",
"id": "string",
"instrument": {
"feedcode": "string"
},
"leaveQty": 0.1,
"px": 0.1,
"qty": 0.1,
"side": "BUY",
"status": "NEW",
"timeInForce": "GOOD_TILL_CANCEL",
"ts": "string",
"tsNano": "string",
"type": "LIMIT"
},
"px": 0.1,
"qty": "string",
"side": "BUY",
"ts": "string",
"tsNano": "string"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Success | TradeEntries |
Transaction
Query transactions
GET /api/v1/transaction
Returning a list of transactions (deposits, withdrawals and settlements) for the given time range
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
from | query | integer(int64) | false | Start time (inclusive) in seconds since Unix epoch |
to | query | integer(int64) | false | End time (inclusive) in seconds since Unix epoch |
page | query | integer(int32) | false | Page number of records (page size is determined by system) |
asset | query | string | false | Asset |
account | query | string | false | Account |
transType | query | string | false | Transaction type |
Enumerated Values
Parameter | Value |
---|---|
account | FUND |
account | SPOT |
transType | SETTLEMENT |
transType | DEPOSIT |
transType | WITHDRAWAL |
transType | TRADE_FEE |
transType | WITHDRAWAL_FEE |
transType | INTERNAL_TRANSFER |
Example responses
default Response
{
"transactions": [
{
"account": "FUND",
"asset": "string",
"description": "string",
"qty": 0.1,
"transHash": "string",
"transId": "string",
"transTime": 0,
"type": "SETTLEMENT"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
default | Default | default response | TransactionEntries |
Whitelist
Delete Whitelist Address
DELETE /api/v1/whitelist
Deleting address in whitelist
Body parameter
{
"address": "string",
"network": "string"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | WhitelistAddressDeleteRequest | true | none |
address | body | string | false | none |
network | body | string | false | none |
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Get Whitelist Addresses
GET /api/v1/whitelist
Getting address in whitelist
Example responses
200 Response
"string"
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | string |
Update Whitelist Address
PATCH /api/v1/whitelist
Updating address in whitelist
Body parameter
{
"address": "string",
"network": "string",
"remarks": "string"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | WhitelistAddressUpdateRequest | true | none |
address | body | string | false | none |
network | body | string | false | none |
remarks | body | string | false | none |
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Add Whitelist Address
POST /api/v1/whitelist
Adding address to whitelist
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Review Whitelist Addresses
PUT /api/v1/whitelist
Review addresses in whitelist
Body parameter
[
{
"address": "string",
"network": "string"
}
]
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Delete Whitelist Bank Accounts
DELETE /api/v1/whitelist/bank-account
Deleting bank accounts in whitelist
Body parameter
{
"accNo": "string",
"ccy": "string"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | WhitelistBankAccountDeleteRequest | true | none |
accNo | body | string | false | none |
ccy | body | string | false | none |
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Get Whitelist Bank Accounts
GET /api/v1/whitelist/bank-account
Getting bank accounts in whitelist
Example responses
200 Response
"string"
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | string |
Withdrawal
Query completed withdrawals
GET /api/v1/withdrawal
Returning a list of completed withdrawals for the given time range
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
from | query | integer(int64) | false | Start time (inclusive) in seconds since Unix epoch |
to | query | integer(int64) | false | End time (inclusive) in seconds since Unix epoch |
page | query | integer(int32) | false | Page number of records (page size is 100 as determined by system) |
asset | query | string | false | Asset |
account | query | string | false | Account |
Enumerated Values
Parameter | Value |
---|---|
account | FUND |
account | SPOT |
Example responses
200 Response
{
"withdrawals": [
{
"address": {
"address": "string",
"asset": "string",
"network": "string"
},
"asset": "string",
"description": "string",
"qty": 0.1,
"remitChannel": "FPS",
"status": "string",
"toAccount": {
"accName": "string",
"accNo": "string",
"bankCode": "string",
"ccys": [
"string"
],
"countryCode": "string",
"swiftCode": "string"
},
"transHash": "string",
"transId": "string",
"type": "SETTLEMENT",
"updateTime": 0,
"withdrawalFeeQty": 0.1
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Success | WithdrawalEntries |
Submit Withdrawal Request
POST /api/v1/withdrawal
Requesting withdrawal
Required permission: WITHDRAW
Body parameter
{
"accNo": "string",
"address": "string",
"asset": "string",
"bankCode": "string",
"ccy": "string",
"network": "string",
"qty": 0,
"remitChannel": "string",
"swiftCode": "string"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | WithdrawalRequest | true | none |
accNo | body | string | false | Account Number (for fiat only) |
address | body | string | false | Address (for crypto only; memo, if applicable, is separated by "|" char) |
asset | body | string | false | Asset (for crypto only) |
bankCode | body | string | false | Bank Code (for fiat only; mandatory if swift code is not available) |
ccy | body | string | false | Currency (for fiat only) |
network | body | string | false | Network (for crypto only) |
qty | body | number | true | Quantity/Amount |
remitChannel | body | string | false | Remit channel (for fiat only) |
swiftCode | body | string | false | Swift Code (for fiat only; mandatory if bank code is not available) |
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Get pending withdrawals
GET /api/v1/withdrawal/pending
Returning all pending withdrawals
Example responses
200 Response
{
"withdrawals": [
{
"address": {
"address": "string",
"asset": "string",
"network": "string"
},
"asset": "string",
"description": "string",
"qty": 0.1,
"remitChannel": "FPS",
"status": "string",
"toAccount": {
"accName": "string",
"accNo": "string",
"bankCode": "string",
"ccys": [
"string"
],
"countryCode": "string",
"swiftCode": "string"
},
"transHash": "string",
"transId": "string",
"type": "SETTLEMENT",
"updateTime": 0,
"withdrawalFeeQty": 0.1
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Success | WithdrawalEntries |
Schemas
Address
{
"address": "string",
"asset": "string",
"network": "string"
}
Wallet Address
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
address | string | false | none | Address |
asset | string | false | none | Asset |
network | string | false | none | Network |
BankAccount
{
"accName": "string",
"accNo": "string",
"bankCode": "string",
"ccys": [
"string"
],
"countryCode": "string",
"swiftCode": "string"
}
Bank Account
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
accName | string | true | none | Account Name |
accNo | string | true | none | Account Number |
bankCode | string | false | none | Bank Code |
ccys | [string] | true | none | Currencies |
countryCode | string | false | none | Country Code |
swiftCode | string | false | none | Swift Code |
BankAccountList
{
"bankAccounts": [
{
"accName": "string",
"accNo": "string",
"bankCode": "string",
"ccys": [
"string"
],
"countryCode": "string",
"swiftCode": "string"
}
]
}
Bank Account List
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
bankAccounts | [BankAccount] | false | none | Bank Accounts |
Bar
{
"c": 0.1,
"h": 0.1,
"l": 0.1,
"o": 0.1,
"ts": "string"
}
Bar entry
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
c | number(double) | false | none | Close |
h | number(double) | false | none | High |
l | number(double) | false | none | Low |
o | number(double) | false | none | Open |
ts | string | false | none | Bar timestamp - seconds since Unix Epoch |
BarData
{
"bars": [
{
"c": 0.1,
"h": 0.1,
"l": 0.1,
"o": 0.1,
"ts": "string"
}
],
"from": 0,
"interval": "1",
"intervalSec": 0,
"ix": "string",
"to": 0
}
Bar Data
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
bars | [Bar] | false | none | Bars |
from | integer(int32) | false | none | Starting timestamp - seconds since Unix Epoch |
interval | string | false | none | Interval: * 1 - 1-minute* 3 - 3-minute* 5 - 5-minute* 15 - 15-minute* 30 - 30-minute* 60 - 1-hour* 120 - 2-hour* 240 - 4-hour* 360 - 6-hour* 480 - 8-hour* 720 - 12-hour* 1D - 1-day* 3D - 3-day* 1W - 1-week |
intervalSec | integer(int32) | false | none | Interval in seconds |
ix | string | false | none | Index |
to | integer(int32) | false | none | Ending timestamp - seconds since Unix Epoch |
Enumerated Values
Property | Value |
---|---|
interval | 1 |
interval | 3 |
interval | 5 |
interval | 15 |
interval | 30 |
interval | 60 |
interval | 120 |
interval | 240 |
interval | 360 |
interval | 480 |
interval | 720 |
interval | 1D |
interval | 3D |
interval | 1W |
CreateDepositAddressRequest
{
"asset": "string",
"network": "string"
}
Create deposit address request
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
asset | string | true | none | Asset |
network | string | true | none | Network |
CreateDepositBankAccountRequest
{
"currency": "string"
}
Create deposit bank account request
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
currency | string | true | none | Currency |
CryptoAddress
{
"address": "string",
"asset": "string",
"network": "string"
}
Crypto Address
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
address | string | true | none | Address (memo, if applicable, is separated by "|" char) |
asset | string | true | none | Asset |
network | string | true | none | Network |
CryptoAddressList
{
"addresses": [
{
"address": "string",
"asset": "string",
"network": "string"
}
]
}
Crypto Address List
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
addresses | [CryptoAddress] | false | none | Crypto addresses |
CryptoInfo
{
"displayName": "string",
"meta": {
"property1": "string",
"property2": "string"
},
"minDeposit": 0.1,
"minWithdrawal": 0.1,
"name": "string",
"network": {
"property1": {
"extra": "string",
"std": "string"
},
"property2": {
"extra": "string",
"std": "string"
}
},
"pi": true,
"withdrawalFeeQty": 0.1
}
Crypto asset info
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
displayName | string | false | none | Display name |
meta | object | false | none | Meta data |
» additionalProperties | string | false | none | Meta data |
minDeposit | number(double) | false | none | Minimum deposit amount |
minWithdrawal | number(double) | false | none | Minimum withdrawal amount |
name | string | false | none | Asset name |
network | object | false | none | Supported networks |
» additionalProperties | CryptoNetworkInfo | false | none | Crypto network info |
pi | boolean | false | none | none |
withdrawalFeeQty | number(double) | false | none | Withdrawal fee quantity |
CryptoList
{
"cryptoList": {
"property1": {
"displayName": "string",
"meta": {
"property1": "string",
"property2": "string"
},
"minDeposit": 0.1,
"minWithdrawal": 0.1,
"name": "string",
"network": {
"property1": {
"extra": "string",
"std": "string"
},
"property2": {
"extra": "string",
"std": "string"
}
},
"pi": true,
"withdrawalFeeQty": 0.1
},
"property2": {
"displayName": "string",
"meta": {
"property1": "string",
"property2": "string"
},
"minDeposit": 0.1,
"minWithdrawal": 0.1,
"name": "string",
"network": {
"property1": {
"extra": "string",
"std": "string"
},
"property2": {
"extra": "string",
"std": "string"
}
},
"pi": true,
"withdrawalFeeQty": 0.1
}
}
}
Supported crypto assets
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
cryptoList | object | false | none | Crypto asset map |
» additionalProperties | CryptoInfo | false | none | Crypto asset info |
CryptoNetworkInfo
{
"extra": "string",
"std": "string"
}
Crypto network info
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
extra | string | false | none | Extra address property, such as Tag or Memo |
std | string | false | none | Network standard |
FiatInfo
{
"displayName": "string",
"minWithdrawal": 0.1,
"pi": true,
"tradable": true,
"withdrawalFeeQty": 0.1
}
Fiat asset info
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
displayName | string | false | none | Display name |
minWithdrawal | number(double) | false | none | Minimum withdrawal |
pi | boolean | false | none | none |
tradable | boolean | false | none | none |
withdrawalFeeQty | number(double) | false | none | Withdrawal fee |
FiatList
{
"fiatList": {
"property1": {
"displayName": "string",
"minWithdrawal": 0.1,
"pi": true,
"tradable": true,
"withdrawalFeeQty": 0.1
},
"property2": {
"displayName": "string",
"minWithdrawal": 0.1,
"pi": true,
"tradable": true,
"withdrawalFeeQty": 0.1
}
}
}
Supported fiat assets
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
fiatList | object | false | none | Fiat asset map |
» additionalProperties | FiatInfo | false | none | Fiat asset info |
Instrument
{
"baseAsset": "string",
"feedcode": "string",
"lotSize": 0.1,
"maxPrice": 0.1,
"minQty": 0.1,
"pi": true,
"quoteAsset": "string",
"tickSize": 0.1,
"tradable": true
}
Instrument
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
baseAsset | string | false | none | Base asset |
feedcode | string | false | none | Feedcode |
lotSize | number(double) | false | none | Lot size |
maxPrice | number(double) | false | none | Max price |
minQty | number(double) | false | none | Min quantity |
pi | boolean | false | none | none |
quoteAsset | string | false | none | Quote asset |
tickSize | number(double) | false | none | Tick size |
tradable | boolean | false | none | none |
InstrumentIdentifier
{
"feedcode": "string"
}
Instrument
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
feedcode | string | false | none | Feedcode |
InstrumentList
{
"instrumentList": [
{
"baseAsset": "string",
"feedcode": "string",
"lotSize": 0.1,
"maxPrice": 0.1,
"minQty": 0.1,
"pi": true,
"quoteAsset": "string",
"tickSize": 0.1,
"tradable": true
}
]
}
Instrument List
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
instrumentList | [Instrument] | false | none | Instruments |
InternalTransferRequest
{
"asset": "string",
"from": "FUND",
"qty": 0,
"to": "FUND"
}
Internal transfer request
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
asset | string | true | none | Asset |
from | string | true | none | Originating account |
qty | number | true | none | Quantity/Amount |
to | string | true | none | Destination account |
Enumerated Values
Property | Value |
---|---|
from | FUND |
from | SPOT |
to | FUND |
to | SPOT |
MarketSnapshotReply
{
"stats": {
"property1": {
"d1H": 0,
"d1L": 0,
"d1PrevC": 0,
"d1V": 0,
"ts": 0
},
"property2": {
"d1H": 0,
"d1L": 0,
"d1PrevC": 0,
"d1V": 0,
"ts": 0
}
},
"ticks": {
"property1": 0.1,
"property2": 0.1
},
"ts": 0
}
Market Snapshot Reply
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
stats | object | false | none | Market statistics map by feedcodes |
» additionalProperties | MarketStatEntry | false | none | Market Statistics Entry |
ticks | object | false | none | Tick snapshot map by feedcodes |
» additionalProperties | number(double) | false | none | Tick snapshot map by feedcodes |
ts | integer(int64) | false | none | Timestamp - seconds since Unix Epoch |
MarketStatEntry
{
"d1H": 0,
"d1L": 0,
"d1PrevC": 0,
"d1V": 0,
"ts": 0
}
Market Statistics Entry
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
d1H | integer(int64) | false | none | 1-day high |
d1L | integer(int64) | false | none | 1-day low |
d1PrevC | integer(int64) | false | none | 1-day previous close |
d1V | integer(int64) | false | none | 1-day volume |
ts | integer(int64) | false | none | Timestamp - seconds since Unix Epoch |
MarketTradeEntries
{
"marketTrades": [
{
"aggressiveSide": "BUY",
"fee": "string",
"id": "string",
"instrument": {
"feedcode": "string"
},
"px": 0.1,
"qty": "string",
"ts": "string",
"tsNano": "string"
}
]
}
List of market trades
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
marketTrades | [MarketTradeEntry] | false | none | Market trades |
MarketTradeEntry
{
"aggressiveSide": "BUY",
"fee": "string",
"id": "string",
"instrument": {
"feedcode": "string"
},
"px": 0.1,
"qty": "string",
"ts": "string",
"tsNano": "string"
}
Market trade
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
aggressiveSide | string | false | none | Side |
fee | string | false | none | Fee |
id | string | false | none | Trade Id |
instrument | InstrumentIdentifier | false | none | Instrument |
px | number(double) | false | none | Trade price |
qty | string | false | none | Quantity |
ts | string | false | none | Trade time - seconds since Unix Epoch |
tsNano | string | false | none | Trade time - nanoseconds within the second |
Enumerated Values
Property | Value |
---|---|
aggressiveSide | BUY |
aggressiveSide | SELL |
OrderBookEntry
{
"asks": [
{
"px": 0.1,
"qty": 0.1
}
],
"bids": [
{
"px": 0.1,
"qty": 0.1
}
],
"instrument": {
"baseAsset": "string",
"feedcode": "string",
"lotSize": 0.1,
"maxPrice": 0.1,
"minQty": 0.1,
"pi": true,
"quoteAsset": "string",
"tickSize": 0.1,
"tradable": true
},
"seq": "string",
"ts": "string",
"tsNano": "string"
}
Order book
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
asks | [PriceLevelEntry] | false | none | Ask depth |
bids | [PriceLevelEntry] | false | none | Bid depth |
instrument | Instrument | false | none | Instrument |
seq | string | false | none | Sequence number |
ts | string | false | none | Update time - seconds since Unix Epoch |
tsNano | string | false | none | Update time - nanoseconds within the second |
OrderCreateRequest
{
"clientOrderId": "string",
"feedcode": "string",
"px": 0,
"qty": 0,
"side": "BUY",
"timeInForce": "GOOD_TILL_CANCEL",
"type": "LIMIT"
}
Order creation request
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
clientOrderId | string | true | none | Client Order ID |
feedcode | string | true | none | Feedcode |
px | number | false | none | Price (required for limit orders) |
qty | number | true | none | Quantity |
side | string | true | none | Side |
timeInForce | string | false | none | Time in Force (required for limit orders) |
type | string | true | none | Order Type |
Enumerated Values
Property | Value |
---|---|
side | BUY |
side | SELL |
timeInForce | GOOD_TILL_CANCEL |
timeInForce | IMMEDIATE_OR_CANCEL |
type | LIMIT |
type | MARKET |
type | POST_ONLY |
OrderEntries
{
"orders": [
{
"clientOrderId": "string",
"cumQty": 0.1,
"error": "string",
"id": "string",
"instrument": {
"feedcode": "string"
},
"leaveQty": 0.1,
"px": 0.1,
"qty": 0.1,
"side": "BUY",
"status": "NEW",
"timeInForce": "GOOD_TILL_CANCEL",
"ts": "string",
"tsNano": "string",
"type": "LIMIT"
}
]
}
Order entries
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
orders | [OrderEntry] | false | none | Orders |
OrderEntry
{
"clientOrderId": "string",
"cumQty": 0.1,
"error": "string",
"id": "string",
"instrument": {
"feedcode": "string"
},
"leaveQty": 0.1,
"px": 0.1,
"qty": 0.1,
"side": "BUY",
"status": "NEW",
"timeInForce": "GOOD_TILL_CANCEL",
"ts": "string",
"tsNano": "string",
"type": "LIMIT"
}
Order
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
clientOrderId | string | false | none | Client Order Id |
cumQty | number(double) | false | none | Cumulative quantity |
error | string | false | none | Error |
id | string | false | none | Order Id |
instrument | InstrumentIdentifier | false | none | Instrument |
leaveQty | number(double) | false | none | Leave quantity |
px | number(double) | false | none | Price |
qty | number(double) | false | none | Quantity |
side | string | false | none | Side |
status | string | false | none | Order Status |
timeInForce | string | false | none | Time in Force |
ts | string | false | none | Order update time - seconds since Unix Epoch |
tsNano | string | false | none | Order update time - nanoseconds within the second |
type | string | false | none | Type |
Enumerated Values
Property | Value |
---|---|
side | BUY |
side | SELL |
status | NEW |
status | PARTIALLY_FILLED |
status | FILLED |
status | DONE_FOR_DAY |
status | CANCELED |
status | PENDING_CANCEL |
status | STOPPED |
status | REJECTED |
status | SUSPENDED |
status | PENDING_NEW |
status | CALCULATED |
status | EXPIRED |
status | ACCEPTED_FOR_BIDDING |
status | PENDING_REPLACE |
timeInForce | GOOD_TILL_CANCEL |
timeInForce | IMMEDIATE_OR_CANCEL |
type | LIMIT |
type | MARKET |
type | POST_ONLY |
OrderUpdateRequest
{
"feedcode": "string",
"px": 0,
"qty": 0
}
Order update request
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
feedcode | string | true | none | Feedcode |
px | number | true | none | Price |
qty | number | true | none | Quantity |
PositionEntries
{
"positions": [
{
"account": "FUND",
"asset": "string",
"available": "string",
"held": "string",
"updateTime": "string"
}
]
}
List of positions
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
positions | [PositionEntry] | false | none | Positions |
PositionEntry
{
"account": "FUND",
"asset": "string",
"available": "string",
"held": "string",
"updateTime": "string"
}
Position
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
account | string | false | none | Account |
asset | string | false | none | Asset |
available | string | false | none | Available amount |
held | string | false | none | Amount being held |
updateTime | string | false | none | Update time - seconds since Unix Epoch |
Enumerated Values
Property | Value |
---|---|
account | FUND |
account | SPOT |
PriceLevelEntry
{
"px": 0.1,
"qty": 0.1
}
Price level
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
px | number(double) | false | none | Price |
qty | number(double) | false | none | Quantity |
TradeEntries
{
"trades": [
{
"fee": "string",
"id": "string",
"instrument": {
"feedcode": "string"
},
"order": {
"clientOrderId": "string",
"cumQty": 0.1,
"error": "string",
"id": "string",
"instrument": {
"feedcode": "string"
},
"leaveQty": 0.1,
"px": 0.1,
"qty": 0.1,
"side": "BUY",
"status": "NEW",
"timeInForce": "GOOD_TILL_CANCEL",
"ts": "string",
"tsNano": "string",
"type": "LIMIT"
},
"px": 0.1,
"qty": "string",
"side": "BUY",
"ts": "string",
"tsNano": "string"
}
]
}
Trade entries
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
trades | [TradeEntry] | false | none | Trades |
TradeEntry
{
"fee": "string",
"id": "string",
"instrument": {
"feedcode": "string"
},
"order": {
"clientOrderId": "string",
"cumQty": 0.1,
"error": "string",
"id": "string",
"instrument": {
"feedcode": "string"
},
"leaveQty": 0.1,
"px": 0.1,
"qty": 0.1,
"side": "BUY",
"status": "NEW",
"timeInForce": "GOOD_TILL_CANCEL",
"ts": "string",
"tsNano": "string",
"type": "LIMIT"
},
"px": 0.1,
"qty": "string",
"side": "BUY",
"ts": "string",
"tsNano": "string"
}
Trades
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
fee | string | false | none | Fee |
id | string | false | none | Trade Id |
instrument | InstrumentIdentifier | false | none | Instrument |
order | OrderEntry | false | none | Order |
px | number(double) | false | none | Trade price |
qty | string | false | none | Quantity |
side | string | false | none | Side |
ts | string | false | none | Trade time - seconds since Unix Epoch |
tsNano | string | false | none | Trade time - nanoseconds within the second |
Enumerated Values
Property | Value |
---|---|
side | BUY |
side | SELL |
TransactionEntries
{
"transactions": [
{
"account": "FUND",
"asset": "string",
"description": "string",
"qty": 0.1,
"transHash": "string",
"transId": "string",
"transTime": 0,
"type": "SETTLEMENT"
}
]
}
List of transactions
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
transactions | [TransactionEntry] | false | none | Transactions |
TransactionEntry
{
"account": "FUND",
"asset": "string",
"description": "string",
"qty": 0.1,
"transHash": "string",
"transId": "string",
"transTime": 0,
"type": "SETTLEMENT"
}
Transaction
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
account | string | false | none | Account |
asset | string | false | none | Asset |
description | string | false | none | Description |
qty | number(double) | false | none | Quantity |
transHash | string | false | none | Transaction hash |
transId | string | false | none | Transaction ID |
transTime | integer(int64) | false | none | Transaction time |
type | string | false | none | Type |
Enumerated Values
Property | Value |
---|---|
account | FUND |
account | SPOT |
type | SETTLEMENT |
type | DEPOSIT |
type | WITHDRAWAL |
type | TRADE_FEE |
type | WITHDRAWAL_FEE |
type | INTERNAL_TRANSFER |
WhitelistAddressDeleteRequest
{
"address": "string",
"network": "string"
}
Delete whitelist address request
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
address | string | false | none | none |
network | string | false | none | none |
WhitelistAddressReviewRequest
{
"address": "string",
"network": "string"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
address | string | false | none | none |
network | string | false | none | none |
WhitelistAddressUpdateRequest
{
"address": "string",
"network": "string",
"remarks": "string"
}
Update whitelist address request
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
address | string | false | none | none |
network | string | false | none | none |
remarks | string | false | none | none |
WhitelistBankAccountDeleteRequest
{
"accNo": "string",
"ccy": "string"
}
Delete whitelist address request
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
accNo | string | false | none | none |
ccy | string | false | none | none |
WithdrawalEntries
{
"withdrawals": [
{
"address": {
"address": "string",
"asset": "string",
"network": "string"
},
"asset": "string",
"description": "string",
"qty": 0.1,
"remitChannel": "FPS",
"status": "string",
"toAccount": {
"accName": "string",
"accNo": "string",
"bankCode": "string",
"ccys": [
"string"
],
"countryCode": "string",
"swiftCode": "string"
},
"transHash": "string",
"transId": "string",
"type": "SETTLEMENT",
"updateTime": 0,
"withdrawalFeeQty": 0.1
}
]
}
List of withdrawals
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
withdrawals | [WithdrawalEntry] | false | none | Withdrawals |
WithdrawalEntry
{
"address": {
"address": "string",
"asset": "string",
"network": "string"
},
"asset": "string",
"description": "string",
"qty": 0.1,
"remitChannel": "FPS",
"status": "string",
"toAccount": {
"accName": "string",
"accNo": "string",
"bankCode": "string",
"ccys": [
"string"
],
"countryCode": "string",
"swiftCode": "string"
},
"transHash": "string",
"transId": "string",
"type": "SETTLEMENT",
"updateTime": 0,
"withdrawalFeeQty": 0.1
}
Withdrawal
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
address | Address | false | none | Wallet Address |
asset | string | false | none | Asset |
description | string | false | none | Description |
qty | number(double) | false | none | Quantity |
remitChannel | string | false | none | Remit Channel |
status | string | false | none | Status |
toAccount | BankAccount | false | none | Bank Account |
transHash | string | false | none | Transaction hash (for crypto) |
transId | string | false | none | Transaction ID |
type | string | false | none | Type (Can only be WITHDRAWAL here) |
updateTime | integer(int64) | false | none | Update time |
withdrawalFeeQty | number(double) | false | none | Withdrawal fee quantity |
Enumerated Values
Property | Value |
---|---|
remitChannel | FPS |
remitChannel | SWIFT |
remitChannel | CHATS |
type | SETTLEMENT |
type | DEPOSIT |
type | WITHDRAWAL |
type | TRADE_FEE |
type | WITHDRAWAL_FEE |
type | INTERNAL_TRANSFER |
WithdrawalRequest
{
"accNo": "string",
"address": "string",
"asset": "string",
"bankCode": "string",
"ccy": "string",
"network": "string",
"qty": 0,
"remitChannel": "string",
"swiftCode": "string"
}
Withdrawal request
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
accNo | string | false | none | Account Number (for fiat only) |
address | string | false | none | Address (for crypto only; memo, if applicable, is separated by "|" char) |
asset | string | false | none | Asset (for crypto only) |
bankCode | string | false | none | Bank Code (for fiat only; mandatory if swift code is not available) |
ccy | string | false | none | Currency (for fiat only) |
network | string | false | none | Network (for crypto only) |
qty | number | true | none | Quantity/Amount |
remitChannel | string | false | none | Remit channel (for fiat only) |
swiftCode | string | false | none | Swift Code (for fiat only; mandatory if bank code is not available) |
WebSocket API
We offer subscription-based data streaming functionality for real-time RFQ data and index updates through STOMP over WebSocket.
Connection
const wsUrl = "{{WEBSOCKET_HOST}}";
const apiKey = "{{YOUR_API_KEY}}";
const apiSecret = "{{YOUR_API_SECRET}}";
// signature
const ts = Math.floor(Date.now() / 1000);
const signingString = "GET/feeds" + ts;
const hash = CryptoJS.HmacSHA256(signingString, apiSecret);
const signature = CryptoJS.enc.Base64.stringify(hash);
// connection
const headers = {
"req-apikey": apiKey,
"req-timestamp": ts,
"req-signature": signature;
};
var client = Stomp.client(wsUrl, headers);
client.heartbeat.outgoing = 30000;
client.heartbeat.incoming = 30000;
client.connect(headers, onConnect, onError);
// subscription
var sub = client.subscribe("/topic/public/market/order-book/BTC-USDT", onMessage);
// unsubscription
sub.unsubscribe();
// disconnection
client.disconnect(onDisconnect);
function onConnect() {
console.log("connected");
}
function onMessage(message) {
console.log(message.body);
}
function onDisconnect() {
console.log("disconnected");
}
function onError(error) {
console.error(error?.headers?.message ?? error);
}
Connect your WebSocket client to:
Environment | Base URL |
---|---|
Testing | wss://dev.ex.io/feeds |
Production | wss://www.ex.io/feeds |
Feed messages are in JSON format, and contain a field event
as a summary.
This is a sample code snippet for WebSocket connection using Javascript:
Order Book
{
"event": "ORDER_BOOK_UPDATE",
"orderBook": {
"instrument": {
"feedcode": "BTC-USDT"
},
"ts": "1684037635",
"tsNano": "318274375",
"bids": [
{
"px": 27038.41,
"qty": 1.321
},
{
"px": 27011.44,
"qty": 0.248
},
{
"px": 26988.88,
"qty": 0.404
},
{
"px": 26966.32,
"qty": 1.061
},
{
"px": 26950.74,
"qty": 0.489
},
{
"px": 26943.29,
"qty": 1.53
},
{
"px": 26942.09,
"qty": 1.416
},
{
"px": 26935.13,
"qty": 0.237
},
{
"px": 26931.47,
"qty": 0.103
},
{
"px": 26928.88,
"qty": 1.734
},
{
"px": 26925.36,
"qty": 1.462
},
{
"px": 26925.09,
"qty": 0.237
},
{
"px": 26918.4,
"qty": 1.478
},
{
"px": 26914.28,
"qty": 0.612
},
{
"px": 26911.34,
"qty": 1.727
},
{
"px": 26725.18,
"qty": 1.82
},
{
"px": 26685.44,
"qty": 0.038
},
{
"px": 26672.02,
"qty": 0.215
},
{
"px": 26668.33,
"qty": 0.572
},
{
"px": 26667.63,
"qty": 1.677
}
],
"asks": [
{
"px": 27068.55,
"qty": 0.072
},
{
"px": 27088.1,
"qty": 0.817
},
{
"px": 27098.8,
"qty": 0.433
},
{
"px": 27110.34,
"qty": 1.736
},
{
"px": 27123.8,
"qty": 1.635
},
{
"px": 27160.62,
"qty": 0.959
},
{
"px": 27170.87,
"qty": 0.93
},
{
"px": 27171.44,
"qty": 1.589
},
{
"px": 27178.08,
"qty": 0.989
},
{
"px": 27183.24,
"qty": 1.849
},
{
"px": 27210.68,
"qty": 1.738
},
{
"px": 27215.2,
"qty": 1.274
},
{
"px": 27215.43,
"qty": 0.004
},
{
"px": 27219.07,
"qty": 0.758
},
{
"px": 27239.56,
"qty": 0.695
},
{
"px": 27239.64,
"qty": 0.489
},
{
"px": 27254.42,
"qty": 0.451
},
{
"px": 27265.83,
"qty": 0.654
},
{
"px": 27266.98,
"qty": 1.077
},
{
"px": 27315.21,
"qty": 1.15
}
]
}
}
Destination: /topic/public/market/order-book/{{feedcode}}
This provides the latest order book update for the specified feedcode.
ORDER_BOOK_UPDATE
- Latest update of order book for specified feedcode
Market Trade
{
"event": "NEW_MARKET_TRADE",
"marketTrade": {
"instrument": {
"feedcode": "BTC-USDT"
},
"px": 26973.49,
"qty": 0.299,
"ts": "1684038050",
"tsNano": "838449652",
"aggressiveSide": "BUY"
}
}
Destination: /topic/public/market/trade/{{feedcode}}
This provides new market trades for the specified feedcode.
NEW_MARKET_TRADE
- New market trade on the specified feedcode
Market Snapshots
{
"event": "TICK_SNAPSHOT",
"market": {
"ts": "1721957241",
"ticks": {
"ETH-USDT": 3180.66,
"BTC-ETH": 20.92,
"BTC-USDT": 66285.47
},
"stats": {
"BTC-USDT": {
"ts": "1721956800",
"d1PrevC": 65794.91,
"d1H": 66546.59,
"d1L": 65713.41,
"d1V": 1.353
},
"BTC-ETH": {
"ts": "1721956800",
"d1PrevC": 20.75,
"d1H": 21.01,
"d1L": 20.45,
"d1V": 1.04155
},
"ETH-USDT": {
"ts": "1721956800",
"d1PrevC": 3175.29,
"d1H": 3208.73,
"d1L": 3170.65,
"d1V": 20.826
}
}
}
}
{
"event": "TICK_UPDATE",
"market": {
"ts": "1721957244",
"ticks": {
"ETH-USDT": 3180.66,
"BTC-ETH": 21.03,
"BTC-USDT": 66267.78
}
}
}
{
"event": "BAR_STATS_UPDATE",
"market": {
"ts": "1721957400",
"stats": {
"ETH-USDT": {
"ts": "1721957400",
"d1PrevC": 3175.29,
"d1H": 3208.73,
"d1L": 3170.65,
"d1V": 23.558
},
"BTC-ETH": {
"ts": "1721957400",
"d1PrevC": 20.75,
"d1H": 21.09,
"d1L": 20.45,
"d1V": 1.17288
},
"BTC-USDT": {
"ts": "1721957400",
"d1PrevC": 65794.91,
"d1H": 66546.59,
"d1L": 65713.41,
"d1V": 1.519
}
}
}
}
Destination: /topic/public/market/snapshot
This provides BBO (best-bid-offer) snapshots on all orderbooks.
TICK_SNAPSHOT
- Latest BBO snapshot data of all orderbooks and basic statistics on current trading day
TICK_UPDATE
- Latest BBO update of orderbooks
BAR_STATS_UPDATE
- Periodic update for basic statistics of all orderbooks on current trading day
Index Snapshots
{
"event": "INDEX_SNAPSHOT",
"market": {
"ts": "1721957046",
"indexes": {
"BTC": {
"L": 66313.08,
"components": [
{
"ds": "Binance",
"px": 66312.0
},
{
"ds": "Coinbase",
"px": 66313.44
},
{
"ds": "Okx",
"px": 66313.8
}
]
},
"ETH": {
"L": 3180.86,
"components": [
{
"ds": "Binance",
"px": 3181.06
},
{
"ds": "Coinbase",
"px": 3180.63
},
{
"ds": "Okx",
"px": 3180.9
}
]
},
"USDT": {
"L": 0.9998,
"components": [
{
"ds": "Coinbase",
"px": 0.9998
}
]
}
}
}
}
Destination: /topic/public/indexes
This provides periodic updates for all supported indexes.
INDEX_SNAPSHOT
- Index snapshot update for all supported indexes
Indexes
{
"event": "INDEX_UPDATE",
"index": {
"crypto": {
"name": "BTC"
},
"ts": "1721956821",
"L": 66329.74
}
}
Destination: /topic/public/indexes/{{asset}}
This provides real-time updates for index of the specific asset.
INDEX_UPDATE
- Index update on the specific asset
User Order
{
"event": "ORDER_UPDATED",
"order": {
"id": "b3d47b81-e5af-47d6-8db6-72d37d58b90f",
"clientOrderId": "1684038888261",
"instrument": {
"feedcode": "ETH-USDT"
},
"side": "SELL",
"px": 1815.06,
"qty": 20.557,
"leaveQty": 20.557,
"status": "NEW",
"type": "LIMIT",
"timeInForce": "GOOD_TILL_CANCEL",
"ts": "1684038888",
"tsNano": "294842051"
}
}
{
"event": "ORDER_UPDATED",
"order": {
"id": "b3d47b81-e5af-47d6-8db6-72d37d58b90f",
"clientOrderId": "1684038888261",
"instrument": {
"feedcode": "ETH-USDT"
},
"side": "SELL",
"px": 1815.06,
"qty": 20.557,
"cumQty": 10.889,
"leaveQty": 9.668,
"status": "PARTIALLY_FILLED",
"type": "LIMIT",
"timeInForce": "GOOD_TILL_CANCEL",
"ts": "1684038914",
"tsNano": "753022684"
}
}
{
"event": "ORDER_UPDATED",
"order": {
"id": "b3d47b81-e5af-47d6-8db6-72d37d58b90f",
"clientOrderId": "1684038888261",
"instrument": {
"feedcode": "ETH-USDT"
},
"side": "SELL",
"px": 1815.06,
"qty": 20.557,
"cumQty": 20.557,
"status": "FILLED",
"type": "LIMIT",
"timeInForce": "GOOD_TILL_CANCEL",
"ts": "1684038919",
"tsNano": "801084670"
}
}
{
"event": "ORDER_UPDATED",
"order": {
"id": "e0f5de98-4fbb-4d03-b7b4-14d625bafdb6",
"clientOrderId": "1684039375470",
"instrument": {
"feedcode": "BTC-USDT"
},
"side": "SELL",
"px": 27013.99,
"qty": 1.172,
"cumQty": 0.442,
"status": "CANCELED",
"type": "LIMIT",
"timeInForce": "GOOD_TILL_CANCEL",
"ts": "1684039639",
"tsNano": "602554592"
}
}
Destination: /user/queue/order
This provides user order updates.
ORDER_UPDATED
- Order updates for current session user
- Please refer to
status
field for the latest order status
User Trade
{
"event": "NEW_FILL",
"fill": {
"id": "1e423adf-2a2b-4d05-b0a7-94891817aeb1",
"order": {
"id": "b3d47b81-e5af-47d6-8db6-72d37d58b90f",
"clientOrderId": "1684038888261"
},
"instrument": {
"feedcode": "ETH-USDT"
},
"side": "SELL",
"px": 1815.06,
"qty": 9.668,
"fee": 2.0E-4,
"ts": "1684038919",
"tsNano": "800580540"
}
}
Destination: /user/queue/trade
This provides user new trades on the market.
NEW_FILL
- New fill (trade) for current session user
User Position
{
"event": "POSITION_UPDATED",
"positions": [
{
"asset": "ETH",
"available": 6028.824,
"held": 343.631,
"updateTime": "1684038928"
}
]
}
Destination: /user/queue/position
This provides user position updates for the affected assets.
POSITION_UPDATED
- Position updates for current session user
- Only contains assets which position has changed
User Deposit
{
"event": "DEPOSIT_SUCCESS",
"deposit": {
"type": "DEPOSIT",
"asset": "ETH",
"qty": 5.0,
"transId": "8b76e457-cb3c-489d-ae70-1cb05756f175",
"address": {
"asset": "ETH",
"network": "Holesky",
"address": "0xc9a2Db65967F8abae4E2dF6C4Fa19da1C6D04c44"
},
"updateTime": "1719295922",
"status": "SUCCESS"
}
}
Destination: /user/queue/deposit
This provides user deposit updates.
DEPOSIT_SUCCESS
- Update for successful deposits
User Withdrawal
{
"event": "WITHDRAWAL_SUCCESS",
"withdrawal": {
"type": "WITHDRAWAL",
"asset": "USDT",
"qty": -1000.0,
"transId": "6fa5293b-667f-4e45-b4cc-22633daab93f",
"address": {
"asset": "USDT",
"network": "Holesky",
"address": "0xBAB18143eAe5D537CBe89e9488a609B4812118C5"
},
"updateTime": "1721962088",
"status": "SUCCESS",
"withdrawalFeeQty": -14.0,
"reqIp": "101.78.139.234",
"reqCountryCode": "HK"
}
}
Destination: /user/queue/withdrawal
This provides user withdrawal updates.
WITHDRAWAL_PENDING
- Update for pending withdrawal
WITHDRAWAL_SUCCESS
- Update for successful withdrawal
WITHDRAWAL_FAILED
- Update for failed withdrawal
Error Codes
This table shows API error codes and corresponding descriptions in case of errors for API calls.
Error Code | Description |
---|---|
10000 | Server took too long to respond |
10001 | Not available for this region |
10002 | Missing service entity data |
10003 | Invalid server response |
10004 | Missing user profiles |
10005 | Missing user attributes |
10006 | Unexpected data size |
10020 | Captcha verification failed |
10021 | Captcha verification error |
10022 | Bad captcha data |
10030 | Operation is unauthorized |
10031 | Forbidden due to ineligible authentication method |
10032 | User does not have sufficient privileges for this operation |
10033 | API key does not have sufficient permission for this operation |
10034 | Forbidden for user |
10035 | Missing API key headers |
10036 | API signature has expired |
10037 | Invalid API key |
10038 | API key has expired |
10039 | Invalid API key signature |
10040 | Unknown remote IP address |
10041 | Forbidden for IP address |
10050 | Failed to read/update user |
10051 | User not found |
10052 | Bad user credential |
10053 | User authentication error |
10054 | Bad user session |
10055 | Failed to create new user |
10056 | Account already exists |
10057 | Invalid email address |
10058 | Invalid password |
10059 | Invalid phone number |
10060 | Unchanged phone number |
10061 | Unchanged email address |
10062 | Username is not accepted |
10063 | Ineligible operation |
10064 | Invalid account |
10065 | Too many subusers |
10500 | Failed to login user |
10501 | Login session has expired |
10502 | Failed to login user: missing MFA code |
10503 | Failed to login user: missing username/password |
10510 | Invalid verification channel |
10511 | Verification failed |
10512 | Verification code has expired |
10513 | Verification code is incorrect |
10514 | Verification request error |
10515 | Verification request too frequent |
10516 | Too many attempts |
10520 | Authenticator app not yet configured |
10521 | Authenticator app already configured |
10522 | Bad authenticator code |
10523 | Error processing authenticator code |
10530 | Withdrawal password already set up |
10531 | Withdrawal password is incorrect |
10532 | Withdrawal suspended due to recent account security updates |
10533 | Withdrawal password not yet set up |
11000 | Invalid expiry time |
11001 | Invalid IP range definition |
11002 | Invalid time range |
11003 | Missing feedcode |
11004 | Invalid feedcode |
11005 | Invalid price |
11006 | Invalid quantity |
11007 | Invalid side |
11008 | Invalid order ID |
11009 | Invalid asset |
11010 | Invalid time in force |
12010 | Failed to initialize KYC flow |
12020 | Rate is not available for given asset |
12030 | Referral ID is not acceptable |
12031 | Referral ID is already in use |
12032 | Referral ID does not exist |
12033 | Too many referral IDs |
12050 | Missing version |
12051 | Invalid version |
12052 | Missing answer |
12053 | Invalid answer |
12054 | Attempt too frequent |
12055 | Knowledge test failed |
12070 | Bad address type |
12071 | Unsupported network |
12072 | Invalid address |
12073 | Bad signature |
12074 | Signature not accepted |
12075 | Whitelist address not found |
12076 | Whitelist address already exists |
12077 | Address not accepted |
20000 | Forbidden over proxy |
3000700 | Unknown error |
3000701 | Failed to fetch registry data |
3001700 | Unknown error |
3001701 | Bad request |
3001702 | User already exists |
3001703 | User not found |
3001704 | Server is not available |
3002700 | Unknown error |
3002701 | User not found |
3002702 | Invalid instrument |
3002703 | Order not found |
3002720 | Insufficient asset |
3002721 | Position already held |
3002722 | Invalid order status |
3002723 | Invalid order modification |
3002724 | Requests exceed rate limit |
3002725 | Invalid order price |
3002726 | Position over limit |
3002727 | Daily trading over limit |
3006700 | Unknown error |
3006701 | User not found |
3006702 | Withdrawal request already exists |
3006703 | Insufficient asset |
3006704 | Requests exceed rate limit |
3006705 | Withdrawal over limit |
3007700 | Unknown error |
3007701 | User not found |
3007702 | Order not found |
3007703 | Insufficient asset |
3007704 | Requests exceed rate limit |
3007705 | Position over limit |
3007706 | Daily trading over limit |
3010700 | Unknown error |
3010701 | OTC book not found |
3010702 | OTC requester not found |
3010706 | OTC offeror not found |
3103700 | Unknown error |
3103701 | Bad trade stat request |
3200700 | Unknown error |
3200701 | Missing API key |
3200702 | API key not found |
3200703 | Failed to read API key |
3200704 | Missing user |
3200705 | Failed to read user API keys |
3200706 | Failed to create API key |
3200707 | Failed to create API key |
3200708 | Failed to delete API key |
3200709 | Too many API keys |
3200710 | Invalid API key expiry |
3200711 | Too many IP address entries |
3200712 | Missing IP address |
3202700 | Unknown error |
3202701 | Server is not ready |
3202702 | Missing information for operation |
3202703 | Asset/Network is not supported |
3202704 | Failed to create address |
3202705 | Bad quantity |
3202706 | Asset/Network is not supported |
3202707 | Invalid address |
3202708 | Failed to submit withdrawal request |
3202709 | Failed to query addresses |
3202710 | Invalid time range |
3202711 | Failed to query transactions |
3202712 | Deposit address not ready |
3202713 | Failed to trigger cold withdrawal |
3202714 | Failed to query wallet ratio |
3202715 | Address creation too frequent |
3202716 | Withdrawal address not accepted |
3202717 | Failed to quert trouble deposits |
3202718 | Failed to trigger refund of trouble deposit |
3202719 | Invalid trouble deposit ID |
3202720 | Trouble deposit not found |
3202721 | Missing cold transfer tasks |
3202722 | Invalid cold transfer task state |
3202723 | Cold transfer in process |
3204700 | Unknown error |
3204701 | Bad notification request |
3204702 | Attachment not found |
3205700 | Unknown error |
3205701 | Missing information for operation |
3205702 | Network is not supported as per configuration |
3205703 | Vendor rejected the request |
3206700 | Unknown error |
3206701 | Request failed |
3206702 | Missing IP |
3206703 | Forbidden over proxy |
3206704 | Forbidden IP address |
3206705 | Forbidden in originating region |
3207700 | Unknown error |
3207701 | Invalid request |
3207702 | Missing user ID |
3207703 | Missing user profile |
3207704 | Missing user attributes |
3207705 | User not found |
3207706 | Too many attempts |
3207707 | Already in review |
3207708 | Workflow not found |
3207709 | Invalid workflow operation |
3207710 | Self review not allowed |
3207711 | Forbidden operation |
3207712 | Invalid status |
3207713 | Invalid for user type |
3207714 | Active workflow already exists |
3207715 | User not onboarded |
3207716 | Country not accepted |
3207717 | Invalid workflow type |
3207718 | Invalid workflow status |
3207719 | Invalid questionnaire version |
3207720 | Whitelist address already in use |
3207721 | Whitelist bank account already in use |
3208700 | Unknown error |
3208701 | Failed to submit withdrawal request |
3208702 | Failed to create bank deposit account |
3208703 | Invalid response from bank. |
3208704 | Bank API request failed |
3208705 | Bank token request failed |
3208706 | Unknown jurisdiction for the bank. |
3208707 | The transaction has already been prcoessed before |
3208708 | The transaction does not exist in bank ledger |
3208709 | Failed to process transaction callback from bank |
3208710 | Failed to trigger refund of fiat trouble deposit |
3208711 | Failed to trigger crediting of fiat trouble deposit |