NAV
API Documentation
python javascript csharp
English 中文

Overview

Welcome to the FTX TR API documentation. We offer complete REST, Websocket, and FIX APIs to suit your algorithmic trading needs. You can find sample code for each connectivity option at https://github.com/ftexchange/ftx.

REST API

HTTP-based API with full trading and asset management functionality, with public orderbook and trades data as well as private account data and order management.

REST endpoint URL: https://ftxtr.com/api

Requests and responses use JSON.

We also have sample code for Python, C# and C++.

Authentication

import time
import hmac
from requests import Request

ts = int(time.time() * 1000)
request = Request('GET', '<api_endpoint>')
prepared = request.prepare()
signature_payload = f'{ts}{prepared.method}{prepared.path_url}'.encode()
signature = hmac.new('YOUR_API_SECRET'.encode(), signature_payload, 'sha256').hexdigest()

prepared.headers['FTXTR-KEY'] = 'YOUR_API_KEY'
prepared.headers['FTXTR-SIGN'] = signature
prepared.headers['FTXTR-TS'] = str(ts)

# Only include line if you want to access a subaccount. Remember to URI-encode the subaccount name if it contains special characters!
# prepared.headers['FTXTR-SUBACCOUNT'] = 'my_subaccount_nickname'
var method = HttpMethod.Get
var endpoint = $"/api/account";
var request = new HttpRequestMessage(method, endpoint);
var _nonce = (DateTime.UtcNow - start).TotalMilliseconds;

var hashMaker = new HMACSHA256(Encoding.UTF8.GetBytes(""YOUR_API_SECRET""));
var signaturePayload = $"{_nonce}{method.ToString().ToUpper()}{endpoint}";
var hash = hashMaker.ComputeHash(Encoding.UTF8.GetBytes(signaturePayload));
var hashString = BitConverter.ToString(hash).Replace("-", string.Empty);
var signature = hashString.ToLower();

request.Headers.Add("FTXTR-KEY", "YOUR_API_KEY");
request.Headers.Add("FTXTR-SIGN", signature);
request.Headers.Add("FTXTR-TS", _nonce.ToString());

For authenticated requests, the following headers should be sent with the request:

You will find a detailed example on how to authenticate here

Rate limits

Hitting our rate limits will result in HTTP 429 errors. Non-order placement requests do not count towards rate limits. Rate limits are tiered by account trading volumes. For details, please see this post here. Note that limits in the linked post are at the account level

Pagination

Generalized Request

GET {endpoint}?start_time=1559881511&end_time=1559881711

FTX supports pagination on most REST API endpoints. Pagination allows you to specify the time range of data to be returned, which also enables you to retrieve more results than are returned by default. You can find sample Python code which demonstrates pagination using the start_time and end_time parameters here

Name Type Value Description
start_time number 1559881511 optional; filter starting time in seconds
end_time number 1559881711 optional; filter ending time in seconds

Subaccounts

To specify a subaccount, include its URI-encoded nickname in the header FTX-SUBACCOUNT with the request.

Get all subaccounts

Request

GET /subaccounts

Response

{
  "success": true,
  "result": [
    {
      "nickname": "sub1",
      "deletable": true,
      "editable": true,
      "competition": true
    }
  ]
}

Requires authentication.

Response format

Name Type Value Description
nickname string sub1 subaccount name
deletable boolean true whether the subaccount can be deleted
editable boolean true whether the nickname of the subaccount can be changed
competition boolean true whether the subaccount was created for a competition

Create subaccount

Request

POST /subaccounts
{
  "nickname": "sub2",
}

Response

{
  "success": true,
  "result": {
    "nickname": "sub2",
    "deletable": true,
    "editable": true,
  }
}

Requires authentication.

Payload format

Name Type Value Description
nickname string sub2

Response format

Name Type Value Description
nickname string sub2 subaccount name
deletable boolean true whether the subaccount can be deleted
editable boolean true whether the nickname of the subaccount can be changed

Change subaccount name

Request

POST /subaccounts/update_name
{
  "nickname": "sub2",
  "newNickname": "newSub2"
}

Response

{
  "success": true,
  "result": null
}

Requires authentication.

Payload format

Name Type Value Description
nickname string sub2 current nickname of subaccount
newNickname string newSub2 new nickname of subaccount

Delete subaccount

Request

DELETE /subaccounts
{
  "nickname": "sub2",
}

Response

{
  "success": true,
  "result": null
}

Requires authentication.

Payload format

Name Type Value Description
nickname string sub2

Get subaccount balances

Request

GET /subaccounts/{nickname}/balances

Response


{
  "success": true,
  "result": [
    {
      "coin": "USDT",
      "free": 4321.2,
      "total": 4340.2,
      "spotBorrow": 0,
      "availableWithoutBorrow": 2320.2
    }
  ]
}

Requires authentication.

Response format

Name Type Value Description
coin string USDT coin id
free number 4321.2 free amount
total number 4340.2 total amount
spotBorrow number 0 amount borrowed using spot margin
availableWithoutBorrow number 2320.2 amount available without borrowing

Transfer between subaccounts

Request

POST /subaccounts/transfer
{
  "coin": "XRP",
  "size": 10000,
  "source": null,
  "destination": "sub1",
}

Response

{
  "success": true,
  "result": {
    "id": 316450,
    "coin": "XRP",
    "size": 10000,
    "time": "2019-03-05T09:56:55.728933+00:00",
    "notes": "",
    "status": "complete",
  }
}

Requires authentication.

Payload format

Name Type Value Description
coin string XRP
size number 31431.0
source string main name of the source subaccount. Use null or 'main' for the main account
destination string sub1 name of the destination subaccount. Use null or 'main' for the main account

Response format

Name Type Value Description
id number 316450
coin string XRP
size number 10000
time string 2019-03-05T09:56:55.728933+00:00
notes string
status string complete always 'complete'

Markets

This section covers all types of markets on FTX: spot, perpetual futures, expiring futures, and MOVE contracts. Examples for each type are BTC/USD, BTC-PERP, BTC-0626, and BTC-MOVE-1005. For futures that expired in 2019, prepend a 2019 to the date, like so: BTC-20190628 or BTC-MOVE-20190923.

Get markets

Request

GET /markets

Response


{
  "success": true,
  "result": [
    {
      "name": "BTC/USD",
      "baseCurrency": null,
      "quoteCurrency": null,
      "quoteVolume24h": 28914.76,
      "change1h": 0.012,
      "change24h": 0.0299,
      "changeBod": 0.0156,
      "highLeverageFeeExempt": false,
      "minProvideSize": 0.001,
      "type": "future",
      "underlying": "BTC",
      "enabled": true,
      "ask": 3949.25,
      "bid": 3949,
      "last": 10579.52,
      "postOnly": false,
      "price": 10579.52,
      "priceIncrement": 0.25,
      "sizeIncrement": 0.0001,
      "restricted": false,
      "volumeUsd24h": 28914.76,
      "largeOrderThreshold": 5000.0
    }
  ]
}

Response format

Name Type Value Description
name string BTC/USD e.g. "BTC/USD" for spot, "BTC-PERP" for futures
baseCurrency string BTC spot markets only
quoteCurrency string USD spot markets only
quoteVolume24h number 28914.76
change1h number 0.012 change in the past hour
change24h number 0.0299 change in the past 24 hours
changeBod number 0.0156 change since start of day (00:00 UTC)
highLeverageFeeExempt boolean false
minProvideSize number 0.001 Minimum maker order size (if >10 orders per hour fall below this size)
type string future "future" or "spot"
underlying string BTC future markets only
enabled boolean true
ask number 3949.25 best ask
bid number 3949.00 best bid
last number 3949.00 last traded price
postOnly boolean false if the market is in post-only mode (all orders get modified to be post-only, in addition to other settings they may have)
price number 10579.52 current price
priceIncrement number 0.25
sizeIncrement number 0.0001
restricted boolean false if the market has nonstandard restrictions on which jurisdictions can trade it
volumeUsd24h number 28914.76 USD volume in past 24 hours
largeOrderThreshold number 5000.0 threshold above which an order is considered large (for VIP rate limits)

Get single market

Request

GET /markets/{market_name}

Response

See /markets

Get orderbook

Request

GET /markets/{market_name}/orderbook?depth={depth}

Response

{
  "success": true,
  "result": {
    "asks": [
      [
        4114.25,
        6.263
      ]
    ],
    "bids": [
      [
        4112.25,
        49.29
      ]
    ]
  }
}

Parameters

Name Type Value Description
market_name string BTC-0628 Required. Name of the market.
depth number 35 max 100, default 20

Response format

Name Type Value Description
asks array [4114.25, 6.263] Array with price and size
bids array [4112, 49.29] Array with price and size

Get trades

Supports pagination

Request

GET /markets/{market_name}/trades

Response

{
  "success": true,
  "result": [
    {
      "id": 3855995,
      "liquidation": false,
      "price": 3857.75,
      "side": "buy",
      "size": 0.111,
      "time": "2019-03-20T18:16:23.397991+00:00"
    }
  ]
}

Parameters

Name Type Value Description
market_name string BTC-0628 name of the market
start_time number 1559881511 optional
end_time number 1559881711 optional

Response format

Name Type Value Description
id number 3855995 trade id
liquidation boolean false if this trade involved a liquidation order
price number 3857.75
side string buy
size number 0.111
time string 2019-03-20T18:16:23.397991+00:00

Get historical prices

Supports pagination

Historical prices of expired futures can be retrieved with this end point but make sure to specify start time and end time.

Request

GET /markets/{market_name}/candles?resolution={resolution}&start_time={start_time}&end_time={end_time}

Response

{
  "success": true,
  "result": [
    {
      "close": 11055.25,
      "high": 11089.0,
      "low": 11043.5,
      "open": 11059.25,
      "startTime": "2019-06-24T17:15:00+00:00",
      "volume": 464193.95725
    }
  ]
}

Parameters

Name Type Value Description
market_name string BTC-0628 name of the market
resolution number 300 window length in seconds. options: 15, 60, 300, 900, 3600, 14400, 86400, or any multiple of 86400 up to 30*86400
start_time number 1559881511 optional
end_time number 1559881711 optional

Response format

Name Type Value Description
startTime string 2019-06-24T17:15:00+00:00 start time of the window
open number 11059.25 mark price at startTime
close number 11055.25 mark price at the end of the window: startTime + resolution
high number 11089.0 highest mark price over the window
low number 11059.25 lowest mark price over the window
volume number 464193.95725 volume traded in the window

Wallet

Get coins

Request

GET /wallet/coins

Response


{
  "success": true,
  "result": [
    {
      "bep2Asset": null,
      "canConvert": true,
      "canDeposit": true,
      "canWithdraw": true,
      "collateral": true,
      "collateralWeight": 0.975,
      "creditTo": null,
      "erc20Contract": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
      "fiat": false,
      "hasTag": false,
      "id": "USDT",
      "isToken": false,
      "methods": ["omni", "erc20", "trx", "sol"],
      "name": "USD Tether",
      "splMint": "BQcdHdAQW1hczDbBi9hiegXAR7A98Q9jx3X3iBBBDiq4",
      "trc20Contract": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
      "usdFungible": false
    }
  ]
}

Response format

Name Type Value Description
canDeposit boolean true true if this coin can be deposited via a crypto transaction
canWithdraw boolean true true if this coin can be withdrawn via a crypto transaction
hasTag boolean false true if addresses for this coin have a tag
id string USDT
name string USD Tether
bep2Asset string null
canConvert boolean true
collateral boolean true
collateralWeight number 0.975
creditTo string null
erc20Contract string 0xdAC17F958D2ee523a2206206994597C13D831ec7
fiat boolean false
isToken boolean false
methods array ["omni", "erc20", "trx", "sol"]
splMint string BQcdHdAQW1hczDbBi9hiegXAR7A98Q9jx3X3iBBBDiq4
trc20Contract string TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t
usdFungible boolean false

Get balances

Request

GET /wallet/balances

Response


{
  "success": true,
  "result": [
    {
      "coin": "USDTBEAR",
      "free": 2320.2,
      "spotBorrow": 0.0,
      "total": 2340.2,
      "usdValue": 2340.2,
      "availableWithoutBorrow": 2320.2
    }
  ]
}

Requires authentication.

Response format

Name Type Value Description
coin string USDTBEAR coin id
free number 2320.2 free amount
spotBorrow number 0 amount borrowed using spot margin
total number 2340.2 total amount
usdValue number 2340.2 approximate total amount in USD
availableWithoutBorrow number 2320.2 amount available without borrowing

Get balances of all accounts

Request

GET /wallet/all_balances

Response


{
  "success": true,
  "result": {
    "main": [
      {
        "coin": "USDTBEAR",
        "free": 2320.2,
        "spotBorrow": 0.0,
        "total": 2340.2,
        "usdValue": 2340.2,
        "availableWithoutBorrow": 2320.2
      },
      {
        "coin": "BTC",
        "free": 2.0,
        "spotBorrow": 0.0,
        "total": 3.2,
        "usdValue": 23456.7,
        "availableWithoutBorrow": 2.0
      }
    ],
    "Battle Royale": [
      {
        "coin": "USD",
        "free": 2000.0,
        "spotBorrow": 0.0,
        "total": 2200.0,
        "usdValue": 2200.0,
        "availableWithoutBorrow": 2000.0
      }
    ]
  }
}

Requires authentication.

The response will contain an object whose keys are the subaccount names. The main account will appear under the key main.

Response format

Name Type Value Description
coin string USDTBEAR coin id
free number 2320.2 free amount
spotBorrow number 0 amount borrowed using spot margin
total number 2340.2 total amount
usdValue number 2340.2 total amount in USD
availableWithoutBorrow number 2320.2 amount available without borrowing

Get deposit address

Request

GET /wallet/deposit_address/{coin}?method={method}

Response

{
  "success": true,
  "result": {
    "address": "0x83a127952d266A6eA306c40Ac62A4a70668FE3BE",
    "tag": null
  }
}

Requires authentication.

Request parameters

Name Type Value Description
coin string USDT
method string erc20 optional; for coins available on different blockchains (e.g USDT)

Response format

Name Type Value Description
address string 0x83a127952d266A6eA306c40Ac62A4a70668FE3BE
tag string null optional

Get deposit address list

Request

POST /wallet/deposit_address/list
[
    {
        "coin": "USDT",
        "method": "erc20"
    },
    {
        "coin": "ETH",
    }
]

Response

{
  "success": true,
  "result": [{
    "coin": "USDT"
    "address": "0x83a127952d266A6eA306c40Ac62A4a70668FE3BE",
    "tag": "null"
  }]
}

Requires authentication.

Request parameters

Name Type Value Description
coin string USDT
method string erc20 optional; for coins available on different blockchains (e.g USDT)

Response format

Name Type Value Description
coin string USDT
address string 0x83a127952d266A6eA306c40Ac62A4a70668FE3BE
tag string null optional

Get deposit history

Request

GET /wallet/deposits

Response

{
  "success": true,
  "result": [
    {
      "coin": "TUSD",
      "confirmations": 64,
      "confirmedTime": "2019-03-05T09:56:55.728933+00:00",
      "fee": 0,
      "id": 1,
      "sentTime": "2019-03-05T09:56:55.735929+00:00",
      "size": 99.0,
      "status": "confirmed",
      "time": "2019-03-05T09:56:55.728933+00:00",
      "txid": "0x8078356ae4b06a036d64747546c274af19581f1c78c510b60505798a7ffcaf1"
    }
  ]
}

Requires authentication.

Supports pagination

Request parameters

Name Type Value Description
start_time number 1564146934 optional; minimum time of items to return, in Unix time (seconds since 1970-01-01)
end_time number 1564233334 optional; maximum time of items to return, in Unix time (seconds since 1970-01-01)

Response format

Name Type Value Description
coin string TUSD coin id
confirmations number 64 number of blockchain confirmations
confirmedTime string 2019-03-05T09:56:55.728933+00:00
fee number 0.0 fee, not included in size
id number 1 deposit id
sentTime string 2019-03-05T09:56:55.735929+00:00
size string 99.0
status string confirmed one of "confirmed", "unconfirmed", or "cancelled"
time string 2019-03-05T09:56:55.728933+00:00
txid string 0x8078356ae4b06a036d64747546c274af19581f1c78c510b60505798a7ffcaf1 optional
notes string Transfer from main account to my_subaccount optional

Request TRY deposit

Request

GET /wallet/fiat_deposits
{
  "coin": "TRY",
  "size": 100.2,
  "notes": "Weekly transfer from bank"
}

Response

{
  "success": true,
  "result": [
    {
      "id": 1,
      "coin": "TRY",
      "size": 99.0,
      "status": "complete",
      "time": "2021-03-05T09:56:55.728933+00:00",
      "confirmedTime": "2021-03-05T09:56:58.864663+00:00",
      "uploadedFile": null,
      "uploadedFileName": null,
      "cancelReason": null,
      "fiat": true,
      "ach": false,
      "type": "bank",
      "iban": "TR123456789",
      "turkishBank": "my bank"
    }
  ]
}

Requires authentication.

Request parameters

Name Type Value Description
coin string TRY fiat to deposit - must be "TRY"
size number 99.0 amount to deposit
notes string Weekly transfer from bank optional

Response format

Name Type Value Description
id number 1 deposit id
coin string TRY coin name
size string 99.0
status string complete one of "initiated", "processing", "complete", or "cancelled"
time string 2021-03-05T09:56:55.728933+00:00
confirmedTime string 2021-03-05T09:56:58.864663+00:00
uploadedFile string null
uploadedFileName string null
cancelReason string null
fiat boolean true
ach boolean false
type string bank
iban string TR123456789 IBAN info for deposit-source bank
turkishBank string my bank

Get withdrawal history

Request

GET /wallet/withdrawals

Response

{
  "success": true,
  "result": [
    {
      "coin": "TUSD",
      "address": "0x83a127952d266A6eA306c40Ac62A4a70668FE3BE",
      "tag": null,
      "fee": 0,
      "id": 1,
      "size": 99.0,
      "status": "complete",
      "time": "2019-03-05T09:56:55.728933+00:00",
      "txid": "0x8078356ae4b06a036d64747546c274af19581f1c78c510b60505798a7ffcaf1"
    }
  ]
}

Requires authentication.

Supports pagination

Request parameters

Name Type Value Description
start_time number 1564146934 optional; minimum time of items to return, in Unix time (seconds since 1970-01-01)
end_time number 1564233334 optional; maximum time of items to return, in Unix time (seconds since 1970-01-01)

Response format

Name Type Value Description
coin string TUSD coin id
address string 0x83a127952d266A6eA306c40Ac62A4a70668FE3BE deposit address the withdrawal was sent to
tag string null
fee number 0.0 fee, not included in size
id number 1 withdrawal id
size string 99.0
status string complete one of "requested", "processing", "sent", "complete", or "cancelled"
time string 2019-03-05T09:56:55.728933+00:00
txid string 0x8078356ae4b06a036d64747546c274af19581f1c78c510b60505798a7ffcaf1 optional
notes string Transfer from main account to my_subaccount optional

Request withdrawal

Request

POST /wallet/withdrawals
{
  "coin": "USDTBEAR",
  "size": 20.2,
  "address": "0x83a127952d266A6eA306c40Ac62A4a70668FE3BE",
  "tag": null,
  "password": "my_withdrawal_password",
  "code": 152823
}

Response

{
  "success": true,
  "result": {
    "coin": "USDTBEAR",
    "address": "0x83a127952d266A6eA306c40Ac62A4a70668FE3BE",
    "tag": null,
    "fee": 0,
    "id": 1,
    "size": 20.2,
    "status": "requested",
    "time": "2019-03-05T09:56:55.728933+00:00",
    "txid": null
  }
}

Requires authentication.

Payload format

Name Type Value Description
coin string USDTBEAR coin to withdraw
size number 20.2 amount to withdraw
address string 0x83a127952d266A6eA306c40Ac62A4a70668FE3BE address to send to
tag string null optional
method string null optional; blockchain to use for withdrawal
password string null optional; withdrawal password if it is required for your account
code string null optiona; 2fa code if it is required for your account

Response format

Name Type Value Description
coin string USDTBEAR coin id
address string 0x83a127952d266A6eA306c40Ac62A4a70668FE3BE deposit address the withdrawal was sent to
tag string null
fee number 0.0 fee, not included in size
id number 1 withdrawal id
size string 20.2
status string requested one of "requested", "processing", "complete", or "cancelled"
time string 2019-03-05T09:56:55.728933+00:00
txid string null

Request TRY withdrawal

Request

POST /wallet/fiat_withdrawals_tr
{
  "coin": "TRY",
  "size": 100.2,
  "address": "{"bank-account-number": TR123456789}",
  "password": "my_withdrawal_password",
  "code": 152823
}

Response

{
  "success": true,
  "result": {
    "id": 453828
    "coin": "TRY",
    "address": "TR123456789",
    "notes": "Bank transfer",
    "size": 100.2,
    "bank": "my bank"
    "fee": 0,
    "status": "requested",
    "time": "2021-03-05T09:56:55.728933+00:00",
    "fiat": true,
    "isPrimetrust": false,
    "reversalFee": 0,
    "supportTicketId": 54322
  }
}

Requires authentication.

Payload format

Name Type Value Description
coin string TRY fiat to withdraw - must be "TRY"
size number 100.2 amount to withdraw
address string {"bank-account-number": TR123456789} IBAN of Turkish bank account
password string my_withdrawal_password optional; withdrawal password if it is required for your account
code string 152823 optiona; 2fa code if it is required for your account

Response format

Name Type Value Description
id number 1 withdrawal id
coin string TRY coin name
address string {"bank-account-number": TR123456789} IBAN of Turkish bank account
notes string Bank transfer
size string 100.2
bank string my bank name of bank for withdrawal
fee number 0.0 fee, not included in size
status string requested one of "requested", "processing", "complete", or "cancelled"
time string 2021-03-05T09:56:55.728933+00:00
fiat boolean true
isPrimetrust boolean false
reversalFee number 0 fee to reverse transaction
supportTicketId number 54322 reference support ticket

Get airdrops

This endpoint provides you with updates to your AMPL balances based on AMPL rebases.

Request

GET /wallet/airdrops

Response

{
  "success": true,
  "result": [
    {
      "coin": "AMPL",
      "id": 1,
      "size": 99.0,
      "time": "2019-03-05T09:56:55.728933+00:00",
      "status": "complete"
    }
  ]
}

Requires authentication.

Supports pagination

Request parameters

Name Type Value Description
start_time number 1564146934 optional; minimum time of items to return, in Unix time (seconds since 1970-01-01)
end_time number 1564233334 optional; maximum time of items to return, in Unix time (seconds since 1970-01-01)

Response format

Name Type Value Description
coin string AMPL coin id
id number 1 aidrop id
size string 99.0
status string confirmed one of "confirmed" or "pending"
time string 2019-03-05T09:56:55.728933+00:00

Get withdrawal fees

Request

GET /wallet/withdrawal_fee
{
  "coin": "USDC",
  "size": 20.2,
  "address": "0x83a127952d266A6eA306c40Ac62A4a70668FE3BE",
  "tag": null
}

Response

{
  "success": true,
  "result": {
    "method": "erc20",
    "address": "0x83a127952d266A6eA306c40Ac62A4a70668FE3BE",
    "fee": 0,
    "congested": false
  }
}

Requires authentication.

Payload format

Name Type Value Description
coin string COIN coin to withdraw
size number 20.2 amount to withdraw
address string 0x83a127952d266A6eA306c40Ac62A4a70668FE3BE address to send to
tag string null optional

Response format

Name Type Value Description
method string blockchain protocol that will be used
fee number 0 fee that will be charged on the withdrawal (size - fee will be sent to the destination)
congested boolean false if this blockchain is currently congested

Get saved addresses

This endpoint provides you with your saved addresses

Request

GET /wallet/saved_addresses

Response

{
  "success": true,
  "result": [
    {
      "address": "0xb2EA1CC386A260c9Ae3ebda2cb7AEd212b034Ab4",
      "coin": "ETH",
      "fiat": false,
      "id": 31189,
      "isPrimetrust": false,
      "lastUsedAt": "2020-09-21T15:38:11.795763+00:00",
      "name": "MetaMask 1",
      "tag": null,
      "whitelisted": true,
      "whitelistedAfter": "2020-08-26T09:41:53.959256+00:00"
    },
    {
      "address": "0xE4Ba8791E0fdbdc50024898A384FecFD90e69553",
      "coin": "ETH",
      "fiat": false,
      "id": 46725,
      "isPrimetrust": false,
      "lastUsedAt": "2020-09-21T09:16:46.918175+00:00",
      "name": "Ledger Nano S",
      "tag": null,
      "whitelisted": true,
      "whitelistedAfter": "2020-09-21T09:16:16.829467+00:00"
    }
  ]
}

Requires authentication.

Request parameters

Name Type Value Description
coin string ETH optional, filters saved addresses by coin;

Response format

Name Type Value Description
address string "0xb2EA1CC386A260c9Ae3ebda2cb7AEd212b034Ab4"
coin string ETH coin id
fiat boolean false
id int 31189
isPrimetrust boolean false
lastUsedAt string "2020-09-21T15:38:11.795763+00:00"
tag string null
whitelisted boolean true true if the address is whitelisted, null if the address has never been whitelisted or has been unwhitelisted
whitelistedAfter string "2020-09-21T09:16:16.829467+00:00" Date after which the address has been whitelisted, null if the address has never been whitelisted or has been unwhitelisted

Create saved addresses

Request

POST /wallet/saved_addresses
{
  "coin": "USDC",
  "address": "0x83a127952d266A6eA306c40Ac62A4a70668FE3BE",
  "wallet": "sol",
  "addressName": "MetaMask",
  "code": 123456
}

Response

{
  "success": true,
  "result": {
    "address": "0x83a127952d266A6eA306c40Ac62A4a70668FE3BE",
    "coin": "USDC",
    "fiat": false,
    "id": 52382,
    "isPrimetrust": false,
    "isSwipeCard": false,
    "lastUsedAt": "2020-10-08T06:11:03.072427+00:00",
    "name": "MetaMask",
    "tag": null,
    "wallet": "sol",
    "whitelisted": null,
    "whitelistedAfter": null
  }
}

Requires authentication.

Request parameters

Name Type Value Description
coin string USDC coin id
address string 0xb2EA1CC386A260c9Ae3ebda2cb7AEd212b034Ab4
wallet string sol chain; must be supplied for multi-chain coins
addressName string MetaMask
isPrimetrust boolean false
tag string null optional, tag for the address
whitelist boolean false Pass true if the user has whitelisting enabled and would like this new address to be whitelisted
code number 123456 optional; 2fa code if it is required for your account

Response format

Name Type Value Description
address string 0xb2EA1CC386A260c9Ae3ebda2cb7AEd212b034Ab4
coin string USDC coin id
fiat boolean false
id int 52382
isPrimetrust boolean false
isSwipeCard boolean false
lastUsedAt string 2020-10-08T06:11:03.072427+00:00
name string MetaMask
tag string null
wallet string sol chain; must be supplied for multi-chain coins
whitelisted boolean null true if the address is whitelisted, null if the address has never been whitelisted or has been unwhitelisted
whitelistedAfter boolean null Date after which the address has been whitelisted, null if the address has never been whitelisted or has been unwhitelisted

Delete saved addresses

Request

DELETE /wallet/saved_addresses/{saved_address_id}

Response

{
  "success": true,
  "result": "Address deleted"
}

Requires authentication.

Request parameters

Name Type Value Description
saved_address_id int 52382

Orders

Get open orders

Request

GET /orders?market={market}

Response

{
  "success": true,
  "result": [
    {
      "createdAt": "2019-03-05T09:56:55.728933+00:00",
      "filledSize": 10,
      "future": "XRP-PERP",
      "id": 9596912,
      "market": "XRP-PERP",
      "price": 0.306525,
      "avgFillPrice": 0.306526,
      "remainingSize": 31421,
      "side": "sell",
      "size": 31431,
      "status": "open",
      "type": "limit",
      "reduceOnly": false,
      "ioc": false,
      "postOnly": false,
      "clientId": null
    }
  ]
}

Requires authentication.

Request parameters

Name Type Value Description
market string BTC-0329 optional; market to limit orders

Response format

Name Type Value Description
id number 9596912
market string XRP-PERP
type string limit
side string sell
price number 0.306525
size number 31431.0
filledSize number 10.0
remainingSize number 31421.0
avgFillPrice number 0.306526
status string new (accepted but not processed yet), open, or closed (filled or cancelled)
createdAt string 2019-03-05T09:56:55.728933+00:00
reduceOnly boolean false
ioc boolean false
postOnly boolean false
clientId string optional; client order id

Get order history

Request

GET /orders/history?market={market}

Response

{
  "success": true,
  "result": [
    {
      "avgFillPrice": 10135.25,
      "clientId": null,
      "createdAt": "2019-06-27T15:24:03.101197+00:00",
      "filledSize": 0.001,
      "future": "BTC-PERP",
      "id": 257132591,
      "ioc": false,
      "market": "BTC-PERP",
      "postOnly": false,
      "price": 10135.25,
      "reduceOnly": false,
      "remainingSize": 0.0,
      "side": "buy",
      "size": 0.001,
      "status": "closed",
      "type": "limit"
    },
  ],
  "hasMoreData": false,
}

Requires authentication.

Supports pagination

Request parameters

Name Type Value Description
market string BTC-0329 optional; market to limit orders
side string buy optional; buy or sell side
orderType string limit optional; market or limit orders
start_time number 1559881511 optional; only fetch orders created after this time
end_time number 1559901511 optional; only fetch orders created before this time

Response format

Name Type Value Description
id number 257132591
market string BTC-PERP
type string limit
side string buy
price number 10135.25
size number 0.001
filledSize number 0.001
remainingSize number 0.0
avgFillPrice number 10135.25
status string new (accepted but not processed yet), open, or closed (filled or cancelled)
createdAt string 2019-06-27T15:24:03.101197+00:00
reduceOnly boolean false
ioc boolean false
postOnly boolean false
clientId string optional; client order id

Get open trigger orders

Request

GET /conditional_orders?market={market}

Response

{
  "success": true,
  "result": [
    {
      "createdAt": "2019-03-05T09:56:55.728933+00:00",
      "error": null,
      "future": "XRP-PERP",
      "id": 50001,
      "market": "XRP-PERP",
      "orderId": null,
      "orderPrice": null,
      "reduceOnly": false,
      "side": "buy",
      "size": 0.003,
      "status": "open",
      "trailStart": null,
      "trailValue": null,
      "triggerPrice": 0.49,
      "triggeredAt": null,
      "type": "stop"
      "orderType": "market",
      "filledSize": 0,
      "avgFillPrice": null,
      "retryUntilFilled": false
  ]
}

Requires authentication.

Request parameters

Name Type Value Description
market string XRP-PERP optional; market to limit orders
type string stop optional; type of trigger order (stop, trailing_stop, or take_profit)

Response format

Name Type Value Description
createdAt string 2019-03-05T09:56:55.728933+00:00
error string null [DEPRECATED] error that occurred on most recent trigger, if exists; otherwise null
future string XRP-PERP
id number 50001
market string XRP-PERP
orderId number null [DEPRECATED] order id of the most recent trigger, if exixsts; otherwise null
orderPrice number 0.50 Limit price for stop limit and take profit limit orders; otherwise null
reduceOnly boolean false
side string buy
size number 31431.0
status string open Always open for this endpoint
trailStart number null trigger price - trail value; only for trailing stop orders
trailValue number null only for trailing stop orders
triggerPrice number 0.49 market price at which this order will trigger
triggeredAt string null time of first trigger. null if never triggered
type string stop Values are stop, trailing_stop, and take_profit
orderType string market Values are market, limit
filledSize number 0
avgFillPrice number null
retryUntilFilled boolean false Whether or not to keep re-triggering until filled

Get trigger order triggers

Request

GET /conditional_orders/{conditional_order_id}/triggers

Response

{
  "success": true,
  "result": [
    {
      "error": null,
      "filledSize": 4.0,
      "orderSize": 10.0,
      "orderId": 38066650,
      "time": "2020-01-19T09:23:36.570904+00:00"
    }
  ]
}

Requires authentication.

Response format

Name Type Value Description
time string 2019-03-05T09:56:55.728933+00:00
orderSize number 31431.0 null if order failed to place
filledSize number 0 null if order failed to place
orderId number null if order failed to place
error string null reason for order failing to be placed, null if successful

Get trigger order history

Request

GET /conditional_orders/history?market={market}

Response

{
  "success": true,
  "result": [
    {
      "createdAt": "2019-03-05T09:56:55.728933+00:00",
      "error": null,
      "future": "XRP-PERP",
      "id": 50000,
      "market": "XRP-PERP",
      "orderId": 2800000,
      "orderPrice": null,
      "reduceOnly": false,
      "side": "buy",
      "size": 31431,
      "status": "triggered",
      "trailStart": null,
      "trailValue": null,
      "triggerPrice": 0.37,
      "triggeredAt": 2019-03-06T03:26:53.268723+00:00,
      "type": "stop",
      "orderType": "market",
      "filledSize": 31431,
      "avgFillPrice": 0.3701,
      "orderStatus": "closed",
      "orderType": "market",
      "filledSize": 0,
      "avgFillPrice": null,
      "retryUntilFilled": false,
    },
  ],
  "hasMoreData": false,
}

Requires authentication.

Supports pagination

Request parameters

Name Type Value Description
market string BTC-0329 optional; market to limit orders
start_time number 1559881511 optional; only fetch orders created after this time
end_time number 1559881511 optional; only fetch orders created before this time
side string buy optional; valid values are buy and sell.
type string trailing_stop optional; valid values are stop, trailing_stop, and take_profit.
orderType string limit optional; valid values are market and limit.

Response format

Name Type Value Description
createdAt string 2019-03-05T09:56:55.728933+00:00
error string null [DEPRECATED] error that occurred on most recent trigger, if exists; otherwise null
future string XRP-PERP
id number 50001
market string XRP-PERP
orderId number null [DEPRECATED] order ID if this order has triggered; otherwise null
orderPrice number 0.50 Limit price for stop limit and take profit limit orders; otherwise null
reduceOnly boolean false
side string buy
size number 31431.0
status string open Values are open, cancelled, and triggered
trailStart number null trigger price - trail value; only for trailing stop orders
trailValue number null only for trailing stop orders
triggerPrice number 0.49 market price at which this order will trigger
triggeredAt string null time of first trigger. null if never triggered
type string stop Values are stop, trailing_stop, and take_profit
orderType string market Values are market and limit
filledSize number 31431
avgFillPrice number 0.3701
orderStatus string closed [DEPRECATED] status of most recent trigger's order: new, open or closed
orderType string market Values are market, limit
filledSize number 0
avgFillPrice number null
retryUntilFilled boolean false Whether or not to keep re-triggering until filled

Place order

Request

POST /orders
{
  "market": "XRP-PERP",
  "side": "sell",
  "price": 0.306525,
  "type": "limit",
  "size": 31431.0,
  "reduceOnly": false,
  "ioc": false,
  "postOnly": false,
  "clientId": null
}

Response

{
  "success": true,
  "result": {
    "createdAt": "2019-03-05T09:56:55.728933+00:00",
    "filledSize": 0,
    "future": "XRP-PERP",
    "id": 9596912,
    "market": "XRP-PERP",
    "price": 0.306525,
    "remainingSize": 31431,
    "side": "sell",
    "size": 31431,
    "status": "open",
    "type": "limit",
    "reduceOnly": false,
    "ioc": false,
    "postOnly": false,
    "clientId": null,
  }
}

Requires authentication.

Payload format

Name Type Value Description
market string XRP-PERP e.g. "BTC/USD" for spot, "XRP-PERP" for futures
side string sell "buy" or "sell"
price number 0.306525 Send null for market orders.
type string limit "limit" or "market"
size number 31431.0
reduceOnly boolean false optional; default is false
ioc boolean false optional; default is false
postOnly boolean false optional; default is false
clientId string null optional; client order id
rejectOnPriceBand boolean false optional; if the order should be rejected if its price would instead be adjusted due to price bands
rejectAfterTs number null optional; if the order would be put into the placement queue after this timestamp, instead reject it. If it would be placed on the orderbook after the timestamp, then immediately close it instead (as if it were, for instance, a post-only order that would have taken)

Response format

Name Type Value Description
createdAt string 2019-03-05T09:56:55.728933+00:00
filledSize number 0.0
future string XRP-PERP
id number 9596912
market string XRP-PERP
price number 0.306525
remainingSize number 31431.0
side string sell
size number 31431.0
status string new (accepted but not processed yet), open, or closed (filled or cancelled)
type string limit
reduceOnly boolean false
ioc boolean false
postOnly boolean false
clientId string optional; client order id, if supplied

Place trigger order

Trigger orders include stop, trailing stop, and take profit.

Request

POST /conditional_orders
  • Stop
{
  "market": "XRP-PERP",
  "side": "sell",
  "triggerPrice": 0.306525,
  "size": 31431.0,
  "type": "stop",
  "reduceOnly": false,
}
  • Trailing stop
{
  "market": "XRP-PERP",
  "side": "sell",
  "trailValue": -0.05,
  "size": 31431.0,
  "type": "trailingStop",
  "reduceOnly": false,
}
  • Take profit
{
  "market": "XRP-PERP",
  "side": "buy",
  "triggerPrice": 0.367895,
  "size": 31431.0,
  "type": "takeProfit",
  "reduceOnly": false,
}

Response

{
  "success": true,
  "result": {
    "createdAt": "2019-03-05T09:56:55.728933+00:00",
    "future": "XRP-PERP",
    "id": 9596912,
    "market": "XRP-PERP",
    "triggerPrice": 0.306525,
    "orderId": null,
    "side": "sell",
    "size": 31431,
    "status": "open",
    "type": "stop",
    "orderPrice": null,
    "error": null,
    "triggeredAt": null,
    "reduceOnly": false,
    "orderType": "market",
    "retryUntilFilled": false,
  }
}

Requires authentication.

Payload format

Name Type Value Description
market string XRP-PERP
side string sell "buy" or "sell"
size number 31431.0
type string stop "stop", "trailingStop", "takeProfit"; default is stop
reduceOnly boolean false optional; default is false
retryUntilFilled boolean false Whether or not to keep re-triggering until filled. optional, default true for market orders

Additional parameters for stop loss orders

Name Type Value Description
triggerPrice number 0.306525
orderPrice number 0.3063 optional; order type is limit if this is specified; otherwise market

Additional parameters for trailing stop orders

Name Type Value Description
trailValue number -0.05 negative for "sell"; positive for "buy"

Additional parameters for take profit orders

Name Type Value Description
triggerPrice number 0.306525
orderPrice number 0.3067 optional; order type is limit if this is specified; otherwise market

Response format

Name Type Value Description
createdAt string 2019-03-05T09:56:55.728933+00:00
future string XRP-PERP
id number 9596912
market string XRP-PERP
triggerPrice number 0.306525
orderId number 123123 [DEPRECATED] ID of the order sent on the most recent trigger, if exists
side string sell
size number 31431.0
status string Values are open, cancelled, and triggered
type string stop
orderPrice number null price of the order sent when this stop loss triggered
error string null [DEPRECATED] error message for unsuccessful order placement when this stop loss triggered
triggeredAt string null time at which this stop loss order triggered
reduceOnly boolean false
orderType string market Values are market, limit
retryUntilFilled boolean false Whether or not to keep re-triggering until filled

Modify order

Request

POST /orders/{order_id}/modify
{
  "size": 31431,
  "price": 0.326525,
}

Response

{
  "success": true,
  "result": {
    "createdAt": "2019-03-05T11:56:55.728933+00:00",
    "filledSize": 0,
    "future": "XRP-PERP",
    "id": 9596932,
    "market": "XRP-PERP",
    "price": 0.326525,
    "remainingSize": 31431,
    "side": "sell",
    "size": 31431,
    "status": "open",
    "type": "limit",
    "reduceOnly": false,
    "ioc": false,
    "postOnly": false,
    "clientId": null,
  }
}

Please note that the order's queue priority will be reset, and the order ID of the modified order will be different from that of the original order. Also note: this is implemented as cancelling and replacing your order. There's a chance that the order meant to be cancelled gets filled and its replacement still gets placed.

Requires authentication.

Payload format

Name Type Value Description
price number 0.306525 optional; either price or size must be specified
size number 31431.0 optional; either price or size must be specified
clientId string order1 optional; client ID for the modified order

Response format

Name Type Value Description
createdAt string 2019-03-05T11:56:55.728933+00:00
filledSize number 0.0
future string XRP-PERP
id number 9596932
market string XRP-PERP
price number 0.326525
remainingSize number 31431.0
side string sell
size number 31431.0
status string new (accepted but not processed yet), open, or closed (filled or cancelled)
type string limit
reduceOnly boolean false
ioc boolean false
postOnly boolean false
clientId string optional; client order id, if supplied

Modify order by client ID

Request

POST /orders/by_client_id/{client_order_id}/modify
{
  "size": 31431,
  "price": 0.326525,
}

Response

{
  "success": true,
  "result": {
    "createdAt": "2019-03-05T11:56:55.728933+00:00",
    "filledSize": 0,
    "future": "XRP-PERP",
    "id": 9596932,
    "market": "XRP-PERP",
    "price": 0.326525,
    "remainingSize": 31431,
    "side": "sell",
    "size": 31431,
    "status": "open",
    "type": "limit",
    "reduceOnly": false,
    "ioc": false,
    "postOnly": false,
    "clientId": null,
  }
}

Please note that the order's queue priority will be reset, and the order ID of the modified order will be different from that of the original order. Also note: this is implemented as cancelling and replacing your order. There's a chance that the order meant to be cancelled gets filled and its replacement still gets placed.

Requires authentication.

Payload format

Name Type Value Description
price number 0.306525 optional; either price or size must be specified
size number 31431.0 optional; either price or size must be specified
clientId string order1 optional; client ID for the modified order

Response format

Name Type Value Description
createdAt string 2019-03-05T11:56:55.728933+00:00
filledSize number 0.0
future string XRP-PERP
id number 9596932
market string XRP-PERP
price number 0.326525
remainingSize number 31431.0
side string sell
size number 31431.0
status string new (accepted but not processed yet), open, or closed (filled or cancelled)
type string limit
reduceOnly boolean false
ioc boolean false
postOnly boolean false
clientId string optional; client order id, if supplied

Modify trigger order

Trigger orders include stop, trailing stop, and take profit.

Request

POST /conditional_orders/{order_id}/modify
  • Stop
{
  "triggerPrice": 0.306225,
  "size": 31431.0,
}
  • Trailing stop
{
  "trailValue": -0.06,
  "size": 31432.0,
}
  • Take profit
{
  "triggerPrice": 0.367885,
  "size": 31433.0,

}

Response

{
  "success": true,
  "result": {
    "createdAt": "2019-03-05T09:56:55.728933+00:00",
    "future": "XRP-PERP",
    "id": 9596912,
    "market": "XRP-PERP",
    "triggerPrice": 0.306225,
    "orderId": null,
    "side": "sell",
    "size": 31431,
    "status": "open",
    "type": "stop",
    "orderPrice": null,
    "error": null,
    "triggeredAt": null,
    "reduceOnly": false,
    "orderType": "market",
    "filledSize": 0,
    "avgFillPrice": null,
    "retryUntilFilled": false
  }
}

Requires authentication.

Payload format

Please note that the order ID of the modified order will be different from that of the original order.

Parameters for stop loss orders

Name Type Value Description
size number 31431.0
triggerPrice number 0.306525
orderPrice number 0.3063 only for stop limit orders

Parameters for trailing stop orders

Name Type Value Description
size number 31431.0
trailValue number -0.05 negative for sell orders; positive for buy orders

Parameters for take profit orders

Name Type Value Description
size number 31431.0
triggerPrice number 0.306525
orderPrice number 0.3067 only for take profit limit orders

Response format

Name Type Value Description
createdAt string 2019-03-05T12:56:55.728933+00:00
future string XRP-PERP
id number 9596912
market string XRP-PERP
triggerPrice number 0.306525
orderId number 123123 [DEPRECATED] ID of the order sent on the most recent trigger, if exists
side string sell
size number 31431.0
status string Values are open, cancelled, and triggered
type string stop
orderPrice number null price of the order sent when this stop loss triggered
error string null [DEPRECATED] error message for unsuccessful order placement of the most recent trigger, if exists
triggeredAt string null time at which this stop loss first triggered
reduceOnly boolean false
orderType string market Values are market, limit
retryUntilFilled boolean false Whether or not to keep re-triggering until filled

Get order status

Request

GET /orders/{order_id}

Response

{
  "success": true,
  "result": {
    "createdAt": "2019-03-05T09:56:55.728933+00:00",
    "filledSize": 10,
    "future": "XRP-PERP",
    "id": 9596912,
    "market": "XRP-PERP",
    "price": 0.306525,
    "avgFillPrice": 0.306526,
    "remainingSize": 31421,
    "side": "sell",
    "size": 31431,
    "status": "open",
    "type": "limit",
    "reduceOnly": false,
    "ioc": false,
    "postOnly": false,
    "clientId": null
  }
}

Requires authentication.

Response format

Name Type Value
id number 9596912
market string XRP-PERP
type string limit
side string sell
price number 0.306525
size number 31431.0
filledSize number 10.0
remainingSize number 31421.0
avgFillPrice number 0.306526
status string new (accepted but not processed yet), open, or closed (filled or cancelled)
createdAt string 2019-03-05T09:56:55.728933+00:00
reduceOnly boolean false
ioc boolean false
postOnly boolean false
clientId string client order id

Get order status by client id

Request

GET /orders/by_client_id/{client_order_id}

Response

{
  "success": true,
  "result": {
    "createdAt": "2019-03-05T09:56:55.728933+00:00",
    "filledSize": 10,
    "future": "XRP-PERP",
    "id": 9596912,
    "market": "XRP-PERP",
    "price": 0.306525,
    "avgFillPrice": 0.306526,
    "remainingSize": 31421,
    "side": "sell",
    "size": 31431,
    "status": "open",
    "type": "limit",
    "reduceOnly": false,
    "ioc": false,
    "postOnly": false,
    "clientId": "your_client_order_id"
  }
}

Requires authentication.

Response format

Name Type Value
id number 9596912
market string XRP-PERP
type string limit
side string sell
price number 0.306525
size number 31431.0
filledSize number 10.0
remainingSize number 31421.0
avgFillPrice number 0.306526
status string new (accepted but not processed yet), open, or closed (filled or cancelled)
createdAt string 2019-03-05T09:56:55.728933+00:00
reduceOnly boolean false
ioc boolean false
postOnly boolean false
clientId string client order id

Cancel order

Request

DELETE /orders/{order_id}

Response

{
  "success": true,
  "result": "Order queued for cancelation"
}

Requires authentication.

Cancel order by client id

Request

DELETE /orders/by_client_id/{client_order_id}

Response

{
  "success": true,
  "result": "Order queued for cancellation"
}

Requires authentication.

Cancel open trigger order

Request

DELETE /conditional_orders/{id}

Response

{
  "success": true,
  "result": "Order cancelled"
}

Requires authentication.

Cancel all orders

This will also cancel conditional orders (stop loss and trailing stop orders).

Request

DELETE /orders
{
  "market": "BTC-PERP",
}

Response

{
  "success": true,
  "result": "Orders queued for cancelation"
}

Requires authentication.

Payload format

Name Type Value Description
market string USDTBEAR optional; restrict to cancelling orders only on this market
side string buy optional; restrict to cancelling orders only on this side
conditionalOrdersOnly boolean false optional; restrict to cancelling conditional orders only
limitOrdersOnly boolean false optional; restrict to cancelling existing limit orders (non-conditional orders) only

Bulk cancel orders

Request

DELETE /bulk_orders
{
  "orderIds": [123, 456, 789],
}

Response

{
  "success": true,
  "result": [123, 456]
}

Requires authentication.

Payload format

Name Type Value Description
orderIds list [1234, 456] List of order ids to cancel.

Response format

Name Type Value Description
result list [1234, 456] Ids of orders that were successfully queued for cancellation.

The response will exclude the order ids that were not queued for cancellation (e.g. the order with the given id does not exist).

Bulk cancel orders by client id

Request

DELETE /bulk_orders_by_client_id
{
  "clientOrderIds": ["example", "example2"],
}

Response

{
  "success": true,
  "result": ["example", "example2"]
}

Requires authentication.

Payload format

Name Type Value Description
clientOrderIds list ["example", "example2"] List of client order ids to cancel.

Response format

Name Type Value Description
result list [1234, 456] Client order ids that were successfully queued for cancellation.

The response will exclude the order ids that were not queued for cancellation (e.g. the order with the given id does not exist).

Fills

Request

GET /fills?market={market}

Response

{
  "success": true,
  "result": [
    {
      "fee": 20.1374935,
      "feeCurrency": "USD",
      "feeRate": 0.0005,
      "future": "EOS-0329",
      "id": 11215,
      "liquidity": "taker",
      "market": "EOS-0329",
      "baseCurrency": null,
      "quoteCurrency": null,
      "orderId": 8436981,
      "tradeId": 1013912,
      "price": 4.201,
      "side": "buy",
      "size": 9587,
      "time": "2019-03-27T19:15:10.204619+00:00",
      "type": "order"
    }
  ]
}

Requires authentication.

Supports pagination

Please note that fills generated by Converts will show up as 'type': 'otc'

Request parameters

Name Type Value Description
market string BTC-0329 optional; market to limit fills
start_time number 1564146934 optional; minimum time of fills to return, in Unix time (seconds since 1970-01-01)
end_time number 1564233334 optional; maximum time of fills to return, in Unix time (seconds since 1970-01-01)
order string null optional; default is descending, supply 'asc' to receive fills in ascending order of time
orderId number null

Response format

Name Type Value Description
fee number 20.1374935
feeCurrency string USD
feeRate number 0.0005
future string EOS-0329
id number 11215 fill id
liquidity string taker "taker" or "maker"
market string EOS-0329
baseCurrency string BTC spot markets only
quoteCurrency string USD spot markets only
orderId number 8436981
tradeId number 1013912 null for trades before 2019-02-19 10:00:00
price number 4.201
side string buy
size number 9587.0
time string 2019-03-27T19:15:10.204619+00:00
type string order

Staking

Get stakes

Request

GET /staking/stakes

Response

{
  "success": true,
  "result": [
        {
            "coin": "SRM",
            "createdAt": "2020-08-12T12:13:56.900236+00:00",
            "id": 2447,
            "size": 0.1,
        }
      ]
}
Name Type Value
coin string SRM
createdAt string 2020-08-12T12:13:56.900236+00:00
id int 2447
size number 0.1

Unstake request

Request

GET /staking/unstake_requests

Response

{
  "success": true,
  "result": [
        {
          "coin": "SRM",
          "createdAt": "2020-08-12T20:49:07.210200+00:00",
          "id": 121,
          "size": 0.1,
          "status": "pending",
          "unlockAt": "2020-08-19T20:49:07.225716+00:00",
        }
      ]
}
Name Type Value
coin string SRM
createdAt string 2020-08-12T20:49:07.210200+00:00
id int 121
size number 0.1
status string pending (pending, cancelled, processed)
unlockAt string 2020-08-19T20:49:07.225716+00:00

Get stake balances

Returns actively staked, scheduled for unstaking and lifetime rewards balances

Request

GET /staking/balances

Response

{
  "success": true,
  "result": [
    {   "coin": "SRM",
        "lifetimeRewards": 1.98e-06,
        "scheduledToUnstake": 0.1,
        "staked": 0.0},
    {   "coin": "MSRM",
        "lifetimeRewards": 0,
        "scheduledToUnstake": 0,
        "staked": 0.0},
    {   "coin": "MSRM_LOCKED",
        "lifetimeRewards": 0,
        "scheduledToUnstake": 0,
        "staked": 0.0},
    {   "coin": "SRM_LOCKED",
        "lifetimeRewards": 1.98e-06,
        "scheduledToUnstake": 0,
        "staked": 0.0,
    }
      ]
}

Unstake request

Request parameters

Request

POST /staking/unstake_requests

Response

{
  "success": true,
  "result": [
    {   "coin": "SRM",
        "createdAt": "2020-08-12T21:03:21.539419+00:00",
        "id": 122,
        "size": 0.1,
        "status": "pending",
        "unlockAt": "2020-08-19T21:03:21.543783+00:00",
    }
      ]
}
Name Type Value
coin string SRM
size number 0.1
Name Type Value
coin string SRM
createdAt string 2020-08-12T21:03:21.539419+00:00
size number 0.1
status string pending (pending, cancelled, processed)
unlockAt string 2020-08-19T21:03:21.543783+00:00

Cancel unstake request

Request

DELETE /staking/unstake_requests/{request_id}

Response

{
  "success": true,
  "result": ["Cancelled"]
}

Get staking rewards

Request

GET /staking/staking_rewards

Response

{
  "success": true,
  "result": [
    {   "coin": "SRM",
        "id": 99730,
        "size": 0.1,
        "status": "complete",
        "time": "2020-08-12T20:15:25.260879+00:00"},
    }
      ]
}
Name Type Value
coin string SRM
id int 99730
size number 0.1
status string complete
time string 2020-08-12T20:15:25.260879+00:00

Stake request

Request parameters

Request

POST /srm_stakes/stakes

Response

{
  "success": true,
  "result": [
  {   "coin": "SRM",
      "createdAt": "2020-08-12T21:17:39.884879+00:00",
      "id": 3001,
      "size": 0.1,
  }
    ]
}
Name Type Value
coin string SRM
size number 0.1
Name Type Value
coin string SRM
createdAt string 2020-08-12T21:17:39.884879+00:00
id int 3001
size number 0.1

Convert

Request quote

Request

POST /otc/quotes
{
  "fromCoin": "BTC",
  "toCoin": "USD",
  "size": 0.05
}

Response

{
  "success": true,
  "result": {
    "quoteId": 1031
  }
}

Requires authentication.

Payload format

Name Type Value Description
fromCoin string BTC
toCoin string USD
size number 0.05 denominated in units of fromCoin

Response format

Name Type Value Description
quoteId number 1031

Get quote status

Request

GET /otc/quotes/{quoteId}

Response

{
  "success": true,
  "result": [
    {
      "baseCoin": "BTC",
      "cost": 0.05,
      "expired": false,
      "expiry": 1630355607.399486,
      "filled": false,
      "fromCoin": "BTC",
      "id": 1031,
      "price": 7695.4,
      "proceeds": 384.77,
      "quoteCoin": "USD",
      "side": "sell",
      "toCoin": "USD"
    }
  ]
}

Requires authentication.

Request parameters

Name Type Value Description
market string BTC/USD optional; market to limit orders

Response format

Name Type Value Description
baseCoin string BTC
cost number 0.05 cost of accepting the quote in units of fromCoin
expired bool false if the quote is expired (if so, cannot accep tit)
filled bool false if the quote is already accepted
id number 1031
price number 7695.4 price in units of quoteCoin
proceeds number 384.77 proceeds of accepting the quote in units of toCoin
quoteCoin string USD
side string "sell" "sell" if fromCoin is baseCoin, otherwise "buy"
toCoin string USD

Accept quote

Request

POST /otc/quotes/{quote_id}/accept

Response

{
  "success": true,
  "result": null
}

Requires authentication.

Payload format

Name Type Value Description
quoteId number 1031

Latency statistics

See latency statistics for a period of time and for one or all subaccounts.

days specifies the time period, from days days ago up to now - defaults to 1.

You can specify a subaccount by passing its nickname to subaccount_nickname, or specify the main account by using subaccount_nickname='_main'. Leaving this field blank will return results aggregated across all subaccounts.

Request

GET /stats/latency_stats?days={days}&subaccount_nickname={subaccount_nickname}

Parameters

Name Type Value Description
days int 5 Optional. Number of days in the past to check.
subaccount_nickname str '_main' Optional. Subaccount name to get stats for specific subaccount (or main).

Response format

Response

{
  "success": true,
  "result": [
    {
      "bursty": true,
      "p50": 0.059,
      "requestCount": 43,
    },
    {
      "bursty": false,
      "p50": 0.047,
      "requestCount": 27
    },
  ]
}
Name Type Value Description
bursty boolean true Whether the orders are "bursty" (two or more orders sent from the same account simultaneously)
p50 number 0.059 50th-percentile latency experienced by your account in the last 24 hours
requestCount number 43 Number of orders placed by your account in the last 24 hours

Support tickets

Get all support tickets

Get all your support tickets (limit 100).

Requires authentication.

Request

GET /support/tickets

Response

{
  "success": true,
  "result": [
    {
      "id": 42,
      "title": "Support ticket for your GBP deposit",
      "time": "2021-07-14T22:27:11.041873+00:00",
      "category": "fiat deposit",
      "status": "open",
      "error": None,
      "fiatDeposit": {
        "id": 37,
        "coin": "GBP",
        "size": 12.34,
        "status": "complete",
        "time": "2021-07-13T22:27:11.041873+00:00",
        "confirmedTime": "2021-07-13T22:27:12.041873+00:00",
        "uploadedFile": None,
        "uploadedFileName": None,
        "cancelReason": None,
        "fiat": True,
        "ach": False,
        "type": "bank"
      },
      "depositHelpRequest": None,
      "autoExpireAt": None
    },
    {
      "id": 43,
      "title": "BUSD not arriving.",
      "time": "2021-07-15T22:27:11.041873+00:00",
      "category": "crypto deposit",
      "status": "open",
      "error": None,
      "fiatDeposit": None,
      "depositHelpRequest": {
        "id": 73,
        "coin": "BUSD",
        "wallet": "bsc",
        "txid": "0xd232f8a398c8ed84a4344ab0076a0af0735a30fab7698541bee96230274de13e",
        "size": None,
        "transactionTime": "2021-07-14T21:27:11.041873+00:00",
        "creditedSize": None
      },
      "autoExpireAt": None
    },
    {
      "id": 44,
      "title": "Help",
      "time": "2021-07-16T22:27:11.041873+00:00",
      "category": "other",
      "status": "closed",
      "error": None,
      "fiatDeposit": None,
      "depositHelpRequest": None,
      "autoExpireAt": None
    }
  ]
}

Response format

Name Type Value Description
id number 42 Support ticket ID
title string "Support ticket for your GBP deposit" Support ticket title
time string "2021-07-14T22:27:11.041873+00:00" Support ticket creation time
category string "fiat deposit" Support ticket category
status string "open" Support ticket status
error string None Support ticket error; null if no error
fiatDeposit dict None Fiat deposit this support ticket relates to; null if not a fiat deposit ticket
depositHelpRequest dict None Deposit help request this support ticket relates to; null if not a crypto deposit ticket
autoExpireAt strong None Time at which the ticket expires; null by default

Get support ticket messages

View all messages for one support ticket. You can only view messages for support tickets for your account.

Requires authentication.

Request

GET /support/tickets/<int:ticket_id>/messages

Response

{
  "ticket": {
    "id": 44,
    "title": "Help",
    "time": "2021-07-16T22:27:11.041873+00:00",
    "category": "other",
    "status": "closed",
    "error": None,
    "fiatDeposit": None,
    "depositHelpRequest": None,
    "autoExpireAt": None
  },
  "messages": [
    {
      "id": 164,
      "message": "I need help.",
      "uploadedFileName": None,
      "authorIsCustomer": True,
      "time": "2021-07-16T22:27:11.041873+00:00"
    },
    {
      "id": 173,
      "message": "Can you elaborate?",
      "uploadedFileName": None,
      "authorIsCustomer": False,
      "time": "2021-07-16T22:47:11.041873+00:00"
    },
    {
      "id": 189,
      "message": "I don't know where to find the FTX API documentation.",
      "authorIsCustomer": True,
      "time": "2021-07-16T23:27:11.041873+00:00"
    },
    {
      "id": 191,
      "message": "You can find it at https://docs.ftx.com/.",
      "authorIsCustomer": False,
      "time": "2021-07-16T23:29:11.041873+00:00"
    },
    {
      "id": 201,
      "message": "Great, thank you!",
      "authorIsCustomer": True,
      "time": "2021-07-16T23:30:11.041873+00:00"
    }
  ]
}

Parameters

Name Type Value Description
ticket_id int 42 ID of the support ticket you want to view

Response format

Name Type Value Description
ticket dict Ticket object (see above)
messages list List of message objects (see below)

Message object format

Name Type Value Description
id number 164 Message ID
message string "I need help." Content of the message
uploadedFileName string None File attached to the message; null if no such file
authorIsCustomer bool True True if the author of the message is the customer, false if the author is one of our support team members
time string "2021-07-16T23:30:11.041873+00:00" The time at which the message was sent

Send a support message

Send a new message to one of your support tickets. Note that there is a limit of 100 messages per ticket.

Requires authentication.

Request

POST /support/tickets
Content-Type: multipart/form-data

Response

{
  "success": true,
  "result": null
}

Payload format

Name Type Value Description
title string "Help" Title of your new support ticket.
category string "other" Category for your new support ticket.
message string "I need help." Initial message for your new support ticket.
fiatDepositId int None Optional. ID of the fiat deposit relating to your new support ticket.
supportFile file None Optional. Supported file formats (.png .jpg .pdf .doc .docx)

Send a support message

Send a new message to one of your support tickets. Note that there is a limit of 100 messages per ticket.

Requires authentication.

Request

POST /support/tickets/<int:ticket_id>/messages
Content-Type: multipart/form-data

Response

{
  "success": true,
  "result": null
}

Payload format

Name Type Value Description
ticket_id int 44 The ID of the ticket you want to send to.
message string "Thank you." The message you want to send.
supportFile file None Optional. Supported file formats (.png .jpg .pdf .doc .docx)

Update the status of your support ticket

Requires authentication.

Request

POST /support/tickets/<int:ticket_id>/status
{
  "status": "closed"
}

Response

{
  "success": true,
  "result": null
}

Payload format

Name Type Value Description
ticket_id int 44 The ID of the ticket you want to update.
status string "closed" "closed" to close an open support ticket and "open" to reopen a closed one.

Count total number of unread support messages

Returns the total number of unread messages across all your support tickets.

Requires authentication.

Request

GET /support/tickets/count_unread

Response

{
  "success": true,
  "result": 42
}

Mark support messages read

Marks all support messages for the given ticket as read.

Requires authentication.

Request

POST /support/tickets/<int:ticket_id>/mark_as_read

Response

{
  "success": true,
  "result": null
}

Websocket API

Streaming API with the most up-to-date market and account order data. With this API, you can send messages to a server and receive event-driven responses without having to poll the server for a reply.

Websocket endpoint URL: wss://ftx.com/ws/

Requests and responses use JSON.

You can find sample code here: https://github.com/ftexchange/ftx

Request process

Websocket connections go through the following lifecycle:

Request format

Messages sent to the server should contain the following dictionary items:

Response format

Public Channels

Ticker

The ticker channel provides the latest best bid and offer market data. All messages are updates (update), and the data field contains: - bid: Best bid price if a bid exists, else null - ask: Best ask price if an ask exists, else null - last: Last trade price if it exists, else null - time: Timestamp

Markets

The markets channel provides information on the full set of tradable markets and their specifications. After subscription and whenever any market lists, delsists, or changes, you will receive a partial message with information on all markets. The data field both types of messages will contain a list of market information dictionaries, each of which contains:

Trades

The trades channel provides data on all trades in the market. All messages are updates of new trades (update) and the data field contains: - price: Price of the trade - size: Size of the trade - side: Side of the taker in the trade - liquidation: true if the trade involved a liquidation order, else false - time: Timestamp

Orderbooks

The orderbook channel provides data about the orderbook's best 100 orders on either side.

Initial snapshot

Upon subscribing, you will receive one snapshot of the orderbook (partial) with a data field containing:

The bids and asks are formatted like so: [[best price, size at price], [next next best price, size at price], ...]

Updates

After receiving your snapshot, you will be streamed updates (message type is update) that have data fields with:

The bids and asks fields contain updates to the orderbook.

Checksum

Every message contains a signed 32-bit integer checksum of the orderbook. You can run the same checksum on your client orderbook state and compare it to checksum field. If they are the same, your client's state is correct. If not, you have likely lost or mishandled a packet and should re-subscribe to receive the initial snapshot.

The checksum operates on a string that represents the first 100 orders on the orderbook on either side. The format of the string is:

For example, if the orderbook was comprised of the following two bids and asks:

The string would be '5005.5:10:5001.0:6:4995.0:5:5002.0:7'

If there are more orders on one side of the book than the other, then simply omit the information about orders that don't exist.

For example, if the orderbook had the following bids and asks:

The string would be '5005.5:10:5001.0:6:4995.0:5'

The final checksum is the crc32 value of this string.

Grouped Orderbooks

The grouped orderbooks channel supplies orderbook data with grouped (collapsed) prices.

Disclaimer

Please note that we do NOT recommend using the grouped orderbooks channel in general: it should only be used for retrieving lower-granularity, possibly higher-depth information about the orderbook.

Subscribing

To subscribe, send a message specifying market and price grouping: {'channel': 'orderbookGrouped', 'market': 'BTC-PERP', 'grouping': 500}. grouping controls the granularity of price levels reported by the channel.

Messages

All messages from the orderbookGrouped channel contain two fields: bids and asks. Each are formatted like so: [[best (grouped) price, size at price], [next next best price, size at price], ...].

The first message you are sent will contain a snapshot of the whole orderbook.

Subsequent messages only contain updates. For instance if you received the message: {'bids': [[9000, 1780.0]], 'asks': []}, you should interpret that as meaning that since the last update you received, the only thing that has changed is that the total bid size at the 9000 level is now 1780.0.

Note that the price groupings are conservative: with a price grouping of 100, the size for a bid at 9395.5 would be attributed to the 9300 level, and the size for an ask at the same price would be attributed to the 9400 level.

Private Channels

Authentication

You can log in by sending a message like so %{code}

{
  "args": {
    "key": "<api_key>",
    "sign": "<signature>",
    "time": <ts>
  },
  "op": "login"
}

As an example, if:

sign would be d10b5a67a1a941ae9463a60b285ae845cdeac1b11edc7da9977bef0228b96de9

One websocket connection may be logged in to at most one user. If the connection is already authenticated, further attempts to log in will result in 400s.

Fills

You will receive messages like so:

{
  "channel": "fills",
  "data": {
    "fee": 78.05799225,
    "feeRate": 0.0014,
    "future": "BTC-PERP",
    "id": 7828307,
    "liquidity": "taker",
    "market": "BTC-PERP",
    "orderId": 38065410,
    "tradeId": 19129310,
    "price": 3723.75,
    "side": "buy",
    "size": 14.973,
    "time": "2019-05-07T16:40:58.358438+00:00",
    "type": "order"
  },
  "type": "update"
}

This channel streams your fills across all markets. You can subscribe to it on an authenticated connection by sending {'op': 'subscribe', 'channel': 'fills'}.

Orders

You will receive messages like so:

{
  "channel": "orders",
  "data": {
    "id": 24852229,
    "clientId": null,
    "market": "XRP-PERP",
    "type": "limit",
    "side": "buy",
    "size": 42353.0,
    "price": 0.2977,
    "reduceOnly": false,
    "ioc": false,
    "postOnly": false,
    "status": "closed",
    "filledSize": 0.0,
    "remainingSize": 0.0,
    "avgFillPrice": 0.2978,
    "createdAt": "2021-05-02T22:40:07.217963+00:00"
  },
  "type": "update"
}

This channel streams updates to your orders across all markets. You can subscribe to it on an authenticated connection by sending {'op': 'subscribe', 'channel': 'orders'}.

FIX API

FIX (Financial Information eXchange) is a standard electronic messaging protocol which can be used to place orders, receive order updates and executions, and cancel orders. Our FIX api is based on the FIX 4.2 specification and modeled after FIX implementations of other popular cryptocurrency exchanges.

You can find sample client code here: https://github.com/ftexchange/ftx

FIX endpoint URL: tcp+ssl://fix.ftx.com:4363

Clients should connect to the endpoint using SSL.

Sequence numbers are reset for each connection. Resend request and sequence reset messages are not supported.

Messages

8=FIX.4.2|9=162|35=A|49=zyfvB4QPg0A3kkVgqUE9V1fOA-Y6jhdG3seqIIZx|56=FTX

All messages should include the following header:

This documentation uses | to represent the FIX field separator (byte 0x01). It should be replaced by 0x01 in actual messages.

Tag Name Example Description
8 BeginString FIX.4.2 Must be set to "FIX.4.2"
9 BodyLength 162 Length of the message body in bytes
35 MsgType 8 Message type
49 SenderCompID zyfvB4QPg0A3kkVgqUE9V1fOA-Y6jhdG3seqIIZx Client API key (for messages from the client)
56 TargetCompID FTX Must be set to "FTX" (for messages from the client)
34=1|52=20190525-07:17:48

Messages should also include a sequence number MsgSeqNum (34) and a timestamp SendingTime (52). Sequence numbers start at 1 and must be incremented with every message. Messages with duplicate or out-of-order sequence numbers will be rejected. Sequence numbers are reset on new connections.

Logon (A)

Sent by the client to initiate a FIX session. Must be the first message sent after a connection is established. Only one session can be established per connection; additional Logon messages are rejected.

Request

8=FIX.4.2|9=162|35=A|49=zyfvB4QPg0A3kkVgqUE9V1fOA-Y6jhdG3seqIIZx|56=FTX|34=1|52=20190525-07:51:51|98=0|108=30|96=8f7e7d37f8033ad249c1833687c230b6f4663f0dd72752899776bab9aa064783|10=237|
Tag Name Example Description
35 MsgType A
98 EncryptMethod 0 Must be set to "0" (None)
108 HeartBInt 30 Must be set to "30"
96 RawData 8f7e...4783 Signature (see below)
8013 CancelOrdersOnDisconnect Y "Y": all account orders will be cancelled at the end of the session. "S": all orders placed during the session will be cancelled at the end of the session. Default: no orders will be cancelled.
1 Account "my_subaccount" Optional subaccount name; can be omitted if authenticating for main account

Signature

from datetime import datetime
import hmac

api_key = 'YOUR_API_KEY'
api_secret = 'YOUR_API_SECRET'

sending_time = datetime.now().strftime('%Y%m%d-%H:%M:%S')

sign_target = '\x01'.join([
    sending_time,  # SendingTime
    'A',  # MsgType
    '1',  # MsgSeqNum
    api_key,  # SenderCompID
    'FTX',  # TargetCompID
])

signature = hmac.new(api_secret.encode(), sign_target.encode(), 'sha256').hexdigest()

let crypto = require('crypto');

let apiKey = 'YOUR_API_KEY';
let apiSecret = 'YOUR_API_SECRET';

let sendingTime = '20190525-07:51:51';

let signTarget = [
    sendingTime,  // SendingTime
    'A',  // MsgType
    '1',  // MsgSeqNum
    apiKey,  // SenderCompID
    'FTX',  // TargetCompID
].join('\x01');

let hmac = crypto.createHmac('sha256', apiSecret);
let signature = hmac.update(signTarget).digest('hex');

For security, the Logon message must be signed by the client. To compute the signature, concatenate the following fields, joined by the FIX field separator (byte 0x01), and compute the SHA256 HMAC using the API secret:

The resulting hash should be hex-encoded.








Response

8=FIX.4.2|9=98|35=A|49=FTX|56=zyfvB4QPg0A3kkVgqUE9V1fOA-Y6jhdG3seqIIZx|34=1|98=0|108=30|52=20190525-07:51:51.838|10=099
Tag Name Value
35 MsgType A
98 EncryptMethod 0
108 HeartBInt 30

Heartbeat (0)

Sent by either side if a message has not been received in the past 30 seconds. Should also be sent in response to a TestRequest (1).

8=FIX.4.2|9=86|35=1|49=zyfvB4QPg0A3kkVgqUE9V1fOA-Y6jhdG3seqIIZx|56=FTX|34=2|52=20190525-07:52:24.029|10=049|
Tag Name Value Description
35 MsgType 0
112 TestReqID 123 If this heartbeat is in response to a TestRequest, copied from the TestRequest.

Test Request (1)

May be sent by either side at any time.

8=FIX.4.2|9=112|35=1|49=zyfvB4QPg0A3kkVgqUE9V1fOA-Y6jhdG3seqIIZx|56=FTX|34=3|112=20190525-08:26:38.989|52=20190525-08:26:38.989|10=140|
Tag Name Value Description
35 MsgType 1
112 TestReqID 123 Arbitrary string, to be echoed back by a Heartbeat.

Logout (5)

Sent by either side to terminate the session. The other side should respond with another Logout message to acknowledge session termination. The connection will be closed afterwards.

Tag Name Value
35 MsgType 5

New Order Single (D)

Sent by the client to submit a new order. Only limit orders are currently supported by the FIX API.

Tag Name Value Description
35 MsgType D
21 HandlInst 1 Must be set to "1" (AutomatedExecutionNoIntervention)
11 ClOrdID order123 Arbitrary client-selected string to identify the order; must be unique
55 Symbol BTC-PERP Symbol name
40 OrdType 2 Must be set to "2" (Limit)
38 OrderQty 1.1 Order size in base units
44 Price 8000 Limit price
54 Side 1 "1": buy; "2": sell
59 TimeInForce 1 Must be set to "1" (Good Till Cancel) or "3" (Immediate or Cancel)
18 ExecInst E This parameter is optional. "E": reduce only, "6": post only, not supplied: standard
1368 RejectOnPriceBand 'Y' This parameter is optional. 'Y' for rejecting the order if its price would instead be adjusted due to price bands. 'N' (or omitted) otherwise.
1369 RejectAfterTs 1640080635 This parameter is optional. If the order would be put into the placement queue after this timestamp, instead reject it. If it would be placed on the orderbook after the timestamp, then immediately close it instead (as if it were, for instance, a post-only order that would have taken)

If the order is accepted, an ExecutionReport (8) with ExecType=A (Pending New) will be returned. Otherwise, an ExecutionReport with ExecType=8 (Rejected) will be returned.

Order Cancel Request (F)

Sent by the client to request to cancel an order.

Tag Name Value Description
35 MsgType F
37 OrderID 123456 System-assigned order ID of the order
41 OrigClOrdID order123 Client-assigned order ID of the order

Only one of OrderID (37) and OrigClOrdID (41) should be provided.

If the order is successfully cancelled, an ExecutionReport (8) with ExecType=6 (Pending Cancel) will be returned. Otherwise, an OrderCancelReject (9) will be returned.

Order Cancel Reject (9)

Sent by the server to notify the client that an OrderCancelRequest (F) failed.

Tag Name Value Description
35 MsgType 9
11 ClOrdID cancel123 Copied from OrderCancelRequest
37 OrderID 123456 Copied from OrderCancelRequest
41 OrigClOrdID order123 Copied from OrderCancelRequest
39 OrdStatus 4 "4" (Canceled) if the order was already cancelled
102 CxlRejReason 1 "0": order already cancelled, "1": unknown order
434 CxlRejResponseTo 1 Always set to "1"

Mass Order Cancel Request (q)

Sent by the server in response to a Mass Order Cancel Request (q)

Tag Name Value Description
35 MsgType q
530 MassCancelRequestType 7 7 for cancelling all orders on all markets, 1 for cancelling all orders on a specific market
11 ClOrdID order123 optional; client-assigned ID for mass order cancellation request
55 Symbol BTC-PERP optional; symbol name. This field is is required if MassCancelRequestType is set to 1, and ignored otherwise

A Mass Order Cancel Report (r) will be returned to the client.

Mass Order Cancel Report (r)

Sent by the server in response to a Mass Order Cancel Request (q)

Tag Name Value Description
35 MsgType r
530 MassCancelRequestType 7 the MassCancelRequestType of the corresponding Mass Order Cancel Request
11 ClOrdID order123 optional; the ClOrdID of the corresponding Mass Order Cancel Request. Omitted if no ClOrdID was supplied.
531 MassCancelResponse 0 if the request was rejected, otherwise set to the MassCancelRequestType of the corresponding Mass Order Cancel Request
532 MssCancelRejectReason optional; 0 if the market specified in the Mass Order Cancel Request was unknown

Order Status Request (H)

Sent by the client to request the status of an order.

Tag Name Value Description
35 MsgType H
37 OrderID 123456 OrderID of the order to request, or "*" to request all pending orders
41 OrigClOrdID order123 Client-assigned order ID of the order
20000 IncludeFillInfo N If Y, server will include fill info

The server will respond with an ExecutionReport (8) with ExecType=I (OrderStatus) with the requested order or orders. Only one of OrderID (37) and OrigClOrdID (41) should be provided. When there are no open orders, the server will include Text (58) of "No open orders".

Additional fields included with IncludeFillInfo (20000=Y):

Tag Name Value Description
1362 NoFills 1 Number of fills for this order

The following fields are included zero or more times, once for each fill:

Tag Name Value Description
1363 FillExecID 23436 Fill ID
1364 FillPx 10.1 Fill price
1365 FillQty 6.32 Fill quantity
1366 FillTradeID 101293 Fill trade ID. This will be shared by the fill corresponding to the other side of the trade.
1367 FillTime 20200219-08:33:26.513 Fill time
1443 FillLiquidityInd 2 1 for maker, 2 for taker
20100 FeeRate 0.0007 Fees paid on the fill, in percent
20101 Fee 0.0446824 Fees paid on the fill, in USD

Execution Report (8)

Sent by the server whenever an order receives a fill, whenever the status of an order changes, or in response to a NewOrderSingle (D), OrderCancelRequest (F), or OrderStatusRequest (H) message from the client.

Tag Name Value Description
35 MsgType 8
11 ClOrdID order123 Client-selected order ID.
37 OrderID 123456 Server-assigned order ID
17 ExecID d840c87b-ad98-47b1-95d3-4d41950fa776 unique execution ID. Equal to Fill ID if this message was the result of a fill
55 Symbol BTC-PERP Symbol name
54 Side 1 "1": buy; "2": sell
38 OrderQty 1.2 Original order quantity
44 Price 8000 Original order price
150 ExecType 1 Reason for this message (see below)
39 OrdStatus 0 Order status (see below)
14 CumQty 0.4 Quantity of order that has already been filled
151 LeavesQty 0.8 Quantity of order that is still open
84 CxlQty 0.0 Quantity cancelled by self-trade prevention. Only present if the cancelled quantity is greater than zero
60 TransactTime 20190525-08:26:38.989 Time of the order update. Only present on order updates
31 LastPx 7999.25 Fill price. Only present if this message was the result of a fill
32 LastQty 0.4 Fill quantity. Only present if this message was the result of a fill
1057 AggressorIndicator Y "Y": taker fill; "N": maker fill. Only present if this message was the result of a fill
1366 FillTradeID 101293 Fill trade ID. Only present if this message was the result of a fill
6 AvgPx 7999.25 Average fill price for all fills in order. Only present if this message was the result of a fill
12 Commission 0.0067307233000000 Fee for trade, reported in USD. Only present if this message was the result of a fill
13 CommType 3 Always 3 (absolute)
103 OrdRejReason 3 Reason the order was rejected (see below). Only present on rejected NewOrderSingle (D) requests
58 Text 58 Description of the reason the order was rejected (e.g., Too many requests). Only present on rejected NewOrderSingle (D) requests
5000 Liquidation 58 "Y": messages corresponds to an on-market liquidation order. "N" or absent: it does not.

ExecType values

The ExecType (150) field indicates the reason why this ExecutionReport was sent.

ExecType Description
0 New order
1 New fill for order
3 Order done (fully filled)
4 Order cancelled
5 Order resized (possible for reduce-only orders)
A Response to a successful NewOrderSingle (D) request
8 Response to a rejected NewOrderSingle (D) request
6 Response to a successful OrderCancelRequest (F) request
I Response to a OrderStatusRequest (H) request

Note that every fill will generate a new ExecType=1 message. If a fill causes an order to be fully filled, both a ExecType=1 message and a ExecType=3 message will be generated. Similarly, a newly placed order that is immediately matched against an opposing order will generate both a ExecType=0 message and a ExecType=1 message.

OrdStatus values

OrdStatus Description
A Pending order
0 New order
1 Partially filled order
3 Fully filled order
4 Cancelled order
5 Resized order
6 Pending cancel

OrdRejReason values

OrdRejReason Description
3 Risk limits exceeded
99 Too many requests
0 Other errors

Reject (3)

Sent by the server in response to an invalid message.

Tag Name Value Description
35 MsgType 3
45 RefSeqNum 2 Sequence number of the rejected message
371 RefTagID 38 Tag number of the rejected field
372 RefMsgType D Message type of the rejected message
58 Text Missing quantity Human-readable description of the reason for the rejection
373 SessionRejectReason 1 Code to identify the rejection reason (see below)

Rejection reason codes

SessionRejectReason Description
1 Required tag missing
5 Value incorrect for this tag
6 Incorrect data format for value
11 Invalid MsgType