NAV
JavaScript Python

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:

EnvironmentBase URLAsset Network
Testinghttps://dev.ex.ioTestnet
Productionhttps://www.ex.ioMainnet

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:

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

Order

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"
      },
      "minWithdrawal": 0.1,
      "name": "string",
      "network": {
        "property1": {
          "extra": "string",
          "std": "string"
        },
        "property2": {
          "extra": "string",
          "std": "string"
        }
      },
      "withdrawalFeeQty": 0.1
    },
    "property2": {
      "displayName": "string",
      "meta": {
        "property1": "string",
        "property2": "string"
      },
      "minWithdrawal": 0.1,
      "name": "string",
      "network": {
        "property1": {
          "extra": "string",
          "std": "string"
        },
        "property2": {
          "extra": "string",
          "std": "string"
        }
      },
      "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",
      "tradable": true
    },
    "property2": {
      "displayName": "string",
      "tradable": true
    }
  }
}

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 Address

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

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": [
    {
      "asset": "string",
      "description": "string",
      "qty": 0.1,
      "transId": "string",
      "transTime": 0,
      "type": "SETTLEMENT"
    }
  ]
}

Responses

Status Meaning Description Schema
200 OK Success WithdrawalEntries

Submit Withdrawal Request

POST /api/v1/withdrawal

Requesting withdrawal

Required permission: WITHDRAW

Body parameter

{
  "address": "string",
  "asset": "string",
  "network": "string",
  "qty": 0
}

Parameters

Name In Type Required Description
body body WithdrawalRequest true none
address body string true Address (memo, if applicable, is separated by "|" char)
asset body string true Asset
network body string true Network
qty body number true Quantity/Amount

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": [
    {
      "asset": "string",
      "description": "string",
      "qty": 0.1,
      "transId": "string",
      "transTime": 0,
      "type": "SETTLEMENT"
    }
  ]
}

Responses

Status Meaning Description Schema
200 OK Success WithdrawalEntries

Schemas

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

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"
  },
  "minWithdrawal": 0.1,
  "name": "string",
  "network": {
    "property1": {
      "extra": "string",
      "std": "string"
    },
    "property2": {
      "extra": "string",
      "std": "string"
    }
  },
  "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
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
withdrawalFeeQty number(double) false none Withdrawal fee quantity

CryptoList

{
  "cryptoList": {
    "property1": {
      "displayName": "string",
      "meta": {
        "property1": "string",
        "property2": "string"
      },
      "minWithdrawal": 0.1,
      "name": "string",
      "network": {
        "property1": {
          "extra": "string",
          "std": "string"
        },
        "property2": {
          "extra": "string",
          "std": "string"
        }
      },
      "withdrawalFeeQty": 0.1
    },
    "property2": {
      "displayName": "string",
      "meta": {
        "property1": "string",
        "property2": "string"
      },
      "minWithdrawal": 0.1,
      "name": "string",
      "network": {
        "property1": {
          "extra": "string",
          "std": "string"
        },
        "property2": {
          "extra": "string",
          "std": "string"
        }
      },
      "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",
  "tradable": true
}

Fiat asset info

Properties

Name Type Required Restrictions Description
displayName string false none Display name
tradable boolean false none none

FiatList

{
  "fiatList": {
    "property1": {
      "displayName": "string",
      "tradable": true
    },
    "property2": {
      "displayName": "string",
      "tradable": true
    }
  }
}

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

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

WithdrawalEntries

{
  "withdrawals": [
    {
      "asset": "string",
      "description": "string",
      "qty": 0.1,
      "transId": "string",
      "transTime": 0,
      "type": "SETTLEMENT"
    }
  ]
}

List of withdrawals

Properties

Name Type Required Restrictions Description
withdrawals [WithdrawalEntry] false none Withdrawals

WithdrawalEntry

{
  "asset": "string",
  "description": "string",
  "qty": 0.1,
  "transId": "string",
  "transTime": 0,
  "type": "SETTLEMENT"
}

Withdrawal

Properties

Name Type Required Restrictions Description
asset string false none Asset
description string false none Description
qty number(double) false none Quantity
transId string false none Transaction ID
transTime integer(int64) false none Transaction time
type string false none Type

Enumerated Values

Property Value
type SETTLEMENT
type DEPOSIT
type WITHDRAWAL
type TRADE_FEE
type WITHDRAWAL_FEE
type INTERNAL_TRANSFER
type WITHDRAWAL

WithdrawalRequest

{
  "address": "string",
  "asset": "string",
  "network": "string",
  "qty": 0
}

Withdrawal request

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
qty number true none Quantity/Amount

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:

EnvironmentBase URL
Testingwss://dev.ex.io/feeds
Productionwss://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.

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.

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.

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.

UserPosition

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

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
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
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
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
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
3204700 Unknown error
3204701 Bad notification request
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