NAV Navbar
javascript python

Revision History


EQUOS Platform version, will be available in the in the server FIX Logon<1> message from the next release

Date Ver API End Point Type Description
2020/08/06 4.5 REST/WS Python Sample Codes for REST / WS and Up to date REST / WS / FIX API documents Enhancement Python Sample Codes added for REST / WS APIs and Updated REST/WS/FIX APIs documentation
2020/07/28 4.4 REST/WS GET https://equos.io/api/userTrades
wss://equos.io/ws//userTrades
Enhancement Average execution price added
2020/07/21 4.2.7 REST/WS GET https://equos.io/api/getTradeHistory
wss://equos.io/ws/tradehistory
Enhancement AggressorSide added to tradeHistory endpoint
2020/06/17 4.2 FIX ExecutionReport<8> Enhancement Commission fields added to ExecutionReport
2020/05/15 3.10 All All New Feature USD/USDC Book consolidation
2020/05/15 3.10 All All System Change USD Instruments removed from the trading list
2020/05/15 3.10 REST New https://equos.io/api/
Legacy https://trade.equos.io/api/
System Change Endpoint URL change
2020/05/06 3.02 FIX Logon<1> New Feature Cancel on Disconnect
2020/04/28 3.00 ccxt github developer resources New Feature ccxt API support released
2020/04/06 2.20 REST POST https://trade.equos.io/api/logon
POST https://trade.equos.io/api/order
POST https://trade.equos.io/api/cancelOrder
POST https://trade.equos.io/api/cancelReplaceOrder
POST https://trade.equos.io/api/getOrders
POST https://trade.equos.io/api/getOrder
POST https://trade.equos.io/api/getPositions
POST https://trade.equos.io/api/getRisk
Update Institutional/multiple account support in REST
2020/03/27 2.00 All EQUOS developer documentation site Initial Document Release

Introduction

Welcome to the EQUOS Exchange developer site

What is an API?

API is the acronym for Application Programming Interface. An API provides a means for one application to interact with another according to a rules of engagement. The EQUOS developer documentation, describes the rules by which your application can interact with the EQUOS exchange.

EQUOS supports a variety of popular Application Programming Interfaces:

If you would like to discuss which API might best suits your business requirements, please feel free to reach out to our API support team.

Using the EQUOS API?

The EQUOS Exchange API allows access to all the features of the EQUOS Exchange platform. Developers can leverage the API to build custom trading applications, or connect existing application with the EQUOS Exchange. Through use of our comprehensive suite of APIs you can:

Generally every function which you might use via the GUI web application can be replicated through use of the API.

Support

Please refer to your account manager, or integration support for further information.

Registered users can reach live support through the following channels:

Terms of Service

By accessing or using any EQUOS public or private API endpoint you have agreed to be bound by the EQUOS API Terms of Service. Usage of, or interaction with any product or service offered by EQUOS, whether by API or any other method of access is bound by the EQUOS Terms and Conditions and Business Rules of EQUOS. References in this API to “EQUOS”, “we”, “our”, or “us”, are to Diginex Capital Pte. Ltd. (company number 079903) and the Diginex Group depending on the services being discussed.

API Keys

All API keys are used at your own risk and expense. EQUOS will not be held responsible for any error, malfunction, negligence, compromised security, cyber attack, or other force majeure affecting this platform. Users of the API will indemnify and hold harmless, the Diginex Group EQUOS, its Affiliates, and affiliated and other group companies from all damages losses and claims associate with the usage of this API and trading system.

Authentication

A registered user should have API access to Equos via FIX, REST, and WebSocket. Please refer to this help article on how to obtain your credentials for API access:

Once you have completed this step, you can follow the authentication steps as in the respective section for FIX, REST, and WebSocket.

REST API Overview

Overview

The REST API has endpoints for

Data fields use enums defined in the FIX 4.4 standard, unless otherwise specified.

REST Public Endpoints

The Market Data API is a public set of endpoints for retrieving market data. These endpoints provide snapshots of market data.

For real-time market data updates, see the Websocket Feed documentation for connecting and re-creating a perfect real-time copy of the order book and trades.

By accessing the Equos Market Data API, you agree to be bound by the Terms of Service.

Get Instruments


Get a list of available currency for trading.

HTTPS Request

// Request
GET /getInstruments
# Request
GET /getInstruments
Environment URL
Testnet GET https://testnet.equos.io/api/getInstruments
Production GET https://equos.io/api/getInstruments

Request Parameters

None

Response

// Response
{
  "instruments": [
    [2,"ETH",2,6,1,0.0001,"ETH",true],
    [3,"BTC",2,6,1,0.0001,"BTC",true],
    [29,"USDC",2,2,1,0.0001,"USDC",true],
    [31,"USD",2,2,1,0.0001,"USD",true]
  ]
}
# Response
{
  "instruments": [
    [2,"ETH",2,6,1,0.0001,"ETH",true],
    [3,"BTC",2,6,1,0.0001,"BTC",true],
    [29,"USDC",2,2,1,0.0001,"USDC",true],
    [31,"USD",2,2,1,0.0001,"USD",true]
  ]
}

Main Section

Field Type Description
instruments [] See Instrument section for details

Instrument Section (Comma Delimited)

Field Type Description
instrumentId int
symbol string
price_scale int
quantity_scale int
status int
withdraw_fee double
name string
withdrawal_pct boolean true if withdrawal fee is a percentage, false if absolute

Get Instrument Pairs


Get a list of available currency pairs for trading.

HTTPS Request

// Request
GET /getInstrumentPairs
# Request
GET /getInstrumentPairs
Environment URL
Testnet GET https://testnet.equos.io/api/getInstrumentPairs
Production GET https://equos.io/api/getInstrumentPairs

Request Parameters

None

Response

// Response
{
  "instrumentPairs": [
    [15,"ETH/BTC",3,2,6,6,1,"ETH/BTC"],
    [32,"ETH/USD",31,2,2,6,1,"ETH/USD"],
    [33,"BTC/USD",31,3,2,6,1,"BTC/USD"],
    [42,"BTC/USDC",29,3,2,6,1,"BTC/USDC"],
    [43,"ETH/USDC",29,2,2,6,1,"ETH/USDC"]
  ]
}
# Response
{
  "instrumentPairs": [
    [15,"ETH/BTC",3,2,6,6,1,"ETH/BTC"],
    [32,"ETH/USD",31,2,2,6,1,"ETH/USD"],
    [33,"BTC/USD",31,3,2,6,1,"BTC/USD"],
    [42,"BTC/USDC",29,3,2,6,1,"BTC/USDC"],
    [43,"ETH/USDC",29,2,2,6,1,"ETH/USDC"]
  ]
}

Main Section

Field Type Description
instrumentPairs [] See Instrument Pair section for details

Instrument Pair Section (Comma Delimited)

Field Type Description
instrumentId int
symbol string For example: ETH/USD
quoteId int For example: instrumentId of USD for the currency pair ETH/USD
baseId int For example: instrumentId of ETH for the currency pair ETH/USD
price_scale int
quantity_scale int
status int
name string

Get Order Book


Get realtime snapshot of orderbook

Polling is discouraged in favor of connecting via the websocket stream.

HTTPS Request

// Request
GET /getOrderBook?pairId={var}
# Request
GET /getOrderBook?pairId={int}
Environment URL
Testnet GET https://testnet.equos.io/api/getOrderBook
Production GET https://equos.io/api/getOrderBook

Request Parameters

Field Required Type Description
pairId true int

Response

// Response
{
    "bids": [
        [
            1131294,
            265000,
            1596508725841
        ],
        [
            1130841,
            6366000,
            1596508725841
        ],
        ...
    ]
    "asks": [
        [
            1132010,
            2400000,
            1596508725841
        ],
        [
            1132426,
            264000,
            1596508725841
        ],
        ...
    ]
    "usdMark": 11323.74,
    "marketStatus": 0,
    "estFundingRate": 0.0,
    "fundingRateTime": 0,
    "auctionPrice": 0.0,
    "auctionVolume": 0.0
}
# Response
{
    "bids": [
        [
            1131294,
            265000,
            1596508725841
        ],
        [
            1130841,
            6366000,
            1596508725841
        ],
        ...
    ]
    "asks": [
        [
            1132010,
            2400000,
            1596508725841
        ],
        [
            1132426,
            264000,
            1596508725841
        ],
        ...
    ]
    "usdMark": 11323.74,
    "marketStatus": 0,
    "estFundingRate": 0.0,
    "fundingRateTime": 0,
    "auctionPrice": 0.0,
    "auctionVolume": 0.0
}

Main Section

Field Type Description
bids [] See Bids / Asks Section for details
asks [] See Bids / Asks Section for details

Bids / Asks Section (Comma Delimited)

Field Type Description
price int
quantity int
timestamp int

Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs

Get Trade History


Get most recent trades for the specified pair

Polling is discouraged in favor of connecting via the websocket stream.

HTTPS Request

// Request
GET /getTradeHistory?pairId={var}
# Request
GET /getTradeHistory?pairId={int}
Environment URL
Testnet GET https://testnet.equos.io/api/getTradeHistory
Production GET https://equos.io/api/getTradeHistory

Request Parameters

Field Required Type Description
pairId true int

Response

// Response
{
    "trades": [
        [
            1132030,
            264000,
            "20200804-02:39:44.495",
            23998,
            1
        ],
        [
            1135330,
            264000,
            "20200804-02:12:03.607",
            23997,
            2
        ],
        ...
    ]
}
# Response
{
    "trades": [
        [
            1132030,
            264000,
            "20200804-02:39:44.495",
            23998,
            1
        ],
        [
            1135330,
            264000,
            "20200804-02:12:03.607",
            23997,
            2
        ],
        ...
    ]
}

Main Section

Field Type Description
trades [] See Trade section for details

Trade Section (Comma Delimited)

Field Type Description
price int
quantity int
timestamp string
sequenceNumber string
aggressorSide string 1 = Buy 2 = Sell

Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs

Get Chart


Returns an array of chart data points in OHLC format

HTTPS Request

// Request
GET /getChart?pairId={pairId}&timespan={timespan}
# Request
GET /getChart?pairId={pairId}&timespan={timespan}
Environment URL
Testnet GET https://testnet.equos.io/api/getChart
Production GET https://equos.io/api/getChart

Request Parameters

// Request
GET /getChart?pairId={var}&timespan={var}
# Request
GET /getChart?pairId={int}&timespan={int}

Main Section

Field Required Type Description
pairId true int
timespan true int

Timespan Enum Values

Enum Value
ONE_MINUTE 1
FIVE_MINUTE 2
FIFTEEN_MINUTE 3
ONE_HOUR 4
SIX_HOUR 5
ONE_DAY 6
ONE_WEEK 7

Response

// Response
{
    "pairId": 52,
    "t": 1,
    "s": "BTC/USDC",
    "lastPx": 1132030,
    "lastQty": 264000,
    "o": 11190.900000000001,
    "h": 11427.110000000002,
    "l": 11128.420000000002,
    "c": 11320.300000000003,
    "v": 841713.4744600004,
    "q": 74.72000000000003,
    "chart": [
        [
            1596508740000,
            1132030,
            1132030,
            1132030,
            1132030,
            0,
            351
        ],
        [
            1596508680000,
            1132030,
            1132030,
            1132030,
            1132030,
            0,
            350
        ],
        ...
    ]
}
# Response
{
    "pairId": 52,
    "t": 1,
    "s": "BTC/USDC",
    "lastPx": 1132030,
    "lastQty": 264000,
    "o": 11190.900000000001,
    "h": 11427.110000000002,
    "l": 11128.420000000002,
    "c": 11320.300000000003,
    "v": 841713.4744600004,
    "q": 74.72000000000003,
    "chart": [
        [
            1596508740000,
            1132030,
            1132030,
            1132030,
            1132030,
            0,
            351
        ],
        [
            1596508680000,
            1132030,
            1132030,
            1132030,
            1132030,
            0,
            350
        ],
        ...
    ]
}

Main Section

Field Type Description
chart [] See Chart section for details

Chart Section (Comma Delimited)

Field Type Description
timestamp int Unix Timestamp
open int
high int
low int
close int
volume int
seqNumber int

Open, high, low, close, volume are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs

REST Private Endpoints

Private endpoints are available for order management, and account management. Every private request must be signed using the described authentication scheme.

Roles

Equos supports Role Based Access Control. When creating API Keys account administrators may restrict or delegate user access to the private endpoints. Please refer to documentation below to see what API key permissions are required for a specific route.

Trade

Allows a key to enter orders, as well as retrieve trade data. This includes POST /orders and several GET endpoints.

View

Allows a key read permissions. This includes all GET endpoints.

Logon


Logon

HTTPS Request

POST /logon
Environment URL
Testnet POST https://testnet.equos.io/api/logon
Production POST https://equos.io/api/logon

API Permissions

This endpoint requires either the “view” or “trade” permission.

Retail Logon

Request Body (JSON)

Field Required Type Description
login true string
password true string
userId false int
code true string 2FA Code

Response

Field Type Description
id int User ID
requestToken string User's Request Token
requestSecret string User's Request Secret
uiThemeId int Theme ID

Institutional Logon

Institutional users has 1 or more Exchange Account. The institutional logon flow helps institutional users to log into their multiple Exchange Accounts.

Assume an institutional user with the following information:

The institutional user would need to log into 2705, 2703, and 2704 to place an order / get positions for his respective Exchange Account, via the following steps:

Step 1: Obtain Submitter Request Token and Request Secret

Request Body (JSON)

{"login":"user1","password":"xxxxx","userId":2705}
Field Required Type Description
login true string Submitter's Logon
password true string Submitter's Password
userId false int Submitter's User ID

Response

{"id":2705,"requestToken":"AAAAAAAAAA","requestSecret":"aaaaaaaaaa"}

Step 2: Obtain the request token and request secret for exchange account 2703

Request Body (JSON)

{"login":"user1","password":"xxxxx","userId":2705,"account":2703}
Field Required Type Description
login true string Submitter's Logon
password true string Submitter's Password
userId false int Submitter's User ID
account true int Exchange Account's User ID

Response

{"id":2703,"requestToken":"BBBBBBBBBB","requestSecret":"bbbbbbbbbb"}

With the above 2 steps, 2 pairs of { requestToken, request } are returned:

The corresponding { requestToken, requestSecret } shall be used for signing message under order management vs querying order and position. Please see their respective section in this document for details.

Main Section (Account)

Field Type Description
id int Exchange Account ID
requestToken string Exchange Account's Request Token
requestSecret string Exchange Account's Request Secret

Signing REST API Calls


function sign(requestSecret, requestBodyJSON) {
    return CryptoJS.HmacSHA384(JSON.stringify(requestBodyJSON), requestSecret);
}

// Valid Example of requestBodyJSON (no formatting)
{"userId":1045725,"instrumentId":5,"side":1,"ordType":2,"symbol":"SPY/USD","quantity":125,"quantity_scale":2,"price":245,"price_scale":2}

// Invalid Example of requestBodyJSON (due to formatting)
{
  "userId": 1045725,
  "instrumentId": 5,
  "side": 1,
  "ordType": 2,
  "symbol": "SPY/USD",
  "quantity": 125,
  "quantity_scale": 2,
  "price": 245,
  "price_scale": 2
}

import hashlib
import hmac
import json
import requests

UID = uid   # integer
API_KEY = "key"   # string
SECRET_KEY = "secret"   # string

def sign_api_request(api_secret, requestbody):
    signature_hash = hmac.new(api_secret.encode(), requestbody.encode(),  hashlib.sha384).hexdigest()
    return signature_hash

# Request body
params = {"key":value}  # dict
requestbody = json.dumps(params, separators=(',', ':'))

# Request header
sig = sign_api_request(SECRET_KEY, requestbody)
requestheader = {"requestToken": API_KEY, "signature": sig}

# http post request
r = requests.post(BASE_URL, data=requestbody, headers=requestheader)

All private REST requests should be signed based on the requestSecret obtained from a successful /logon. The requests should have the following structure using HTTP POST:

HTTP Header

Field Required Type Description
requestToken true string A successful /logon returns a pair of requestToken and requestSecret
signature true string sign(requestSecret, requestBodyJSON)
Content-Type false string application/json

Request Body (JSON)

All request bodies should have content type application/json and be valid JSON without formatting. See example for details.

Place a New Order

Place a new order.

Data fields use enums defined in the FIX 4.4 standard You can place two types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your account funds will be put on hold for the duration of the order. How much and which funds are put on hold depends on the order type and parameters specified. See the Holds details below.

HTTPS Request

Environment URL
Testnet POST https://testnet.equos.io/api/order
Production POST https://equos.io/api/order

API Key Permissions

This endpoint requires the “trade” permission.

Request Body (JSON)

{"userId":1045725,"instrumentId":5,"side":1,"ordType":2,"symbol":"SPY/USD","quantity":125,"quantity_scale":2,"price":245,"price_scale":2}

These parameters are common to all order types. Depending on the order type, additional parameters will be required (see below). Open orders do not expire and will remain open until they are either filled or canceled.

Field Required Type Description
id false int
userId true int User ID: aka Submitter for Institutional User. Please use its corresponding { requestToken, requestSecret } for signing the request
account true (for Institutional User) int Account ID: The account which the position to be maintained
instrumentId true int
symbol true String
clOrdId true String
side true int 1 = Buy, 2 = Sell
ordType true int 1 = Market, 2 = Limit, 3 = Stop, 4 = Stop limit
price true int
price_scale true int
quantity true int
quantity_scale true int
stopPx false int (not required unless stop order)
stopPx_scale false int (not required unless stop order)
targetStrategy false int
isHidden false bool
timeInForce false int (not required, defaults to 1 = Good Till Cancel (GTC))
interval false int
intervalCount false int
intervalDelay false int
price2 false int
price2_scale false int

Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs

Response

{
  "status": "sent",
  "id": 0,
  "instrumentId": 15,
  "clOrdId": "1595329351003232854",
  "userId": 2705,
  "price": 0,
  "quantity": 1357,
  "ordType": 1
}
Field Type Description
status string
id int
instrumentId int
clOrdId string
userId int
price int
quantity int
ordType int

Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs

Cancel Order

Cancel a previously placed order.

Data fields use enums defined in the FIX 4.4 standard You can place two types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your account funds will be put on hold for the duration of the order. How much and which funds are put on hold depends on the order type and parameters specified. See the Holds details below.

HTTPS Request

Environment URL
Testnet POST https://testnet.equos.io/api/cancelOrder
Production POST https://equos.io/api/cancelOrder

API Key Permissions

This endpoint requires the “trade” permission.

Request Body (JSON)

{"id":2705,"origOrderId":3262670236,"userId":2751,"symbol":"ETH/BTC","instrumentId":15,"side":2,"ordType":2,"price":10000000,"price_scale":6,"quantity":1000000,"quantity_scale":6}

These parameters are common to all order types. Depending on the order type, additional parameters will be required (see below). Open orders do not expire and will remain open until they are either filled or canceled.

Field Required Type Description
id false int
origOrderId true String
userId true int User ID: aka Submitter for Institutional User. Please use its corresponding { requestToken, requestSecret } for signing the request
account false int
symbol false String
instrumentId true int
side false int 1 = Buy, 2 = Sell
ordType false int 1 = Market, 2 = Limit, 3 = Stop, 4 = Stop limit
price true int
price_scale true int
quantity false int
quantity_scale false int
stopPx false int (not required unless stop order)
stopPx_scale false int (not required unless stop order)
timeInForce false int (not required, defaults to 1 = Good Till Cancel (GTC))

Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs

Response

{
  "status": "sent",
  "id": 2705,
  "origOrderId": 3262670236,
  "instrumentId": 15,
  "userId": 2751,
  "price": 10000000,
  "quantity": 1000000,
  "ordType": 2
}
Field Type Description
status string
id int
origOrderId int
instrumentId int
userId int
price int
quantity int
ordType int

Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs

Cancel Reject

If the order could not be canceled (already filled or previously canceled, etc), then an error response will indicate the reason in the message field.

Cancel Replace

With best effort, cancel a previously placed order and replace it.

Data fields use enums defined in the FIX 4.4 standard You can place two types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your account funds will be put on hold for the duration of the order. How much and which funds are put on hold depends on the order type and parameters specified. See the Holds details below.

HTTPS Request

Environment URL
Testnet POST https://testnet.equos.io/api/cancelReplaceOrder
Production POST https://equos.io/api/cancelReplaceOrder

API Key Permissions

This endpoint requires the “trade” permission.

Request Body (JSON)

{"id":2705,"origOrderId":3262670236,"userId":2751,"symbol":"ETH/BTC","instrumentId":15,"side":2,"ordType":2,"price":10000000,"price_scale":6,"quantity":1000000,"quantity_scale":6}

These parameters are common to all order types. Depending on the order type, additional parameters will be required (see below). Open orders do not expire and will remain open until they are either filled or canceled.

Field Required Type Description
id false int
origOrderId true String
userId false int User ID: aka Submitter for Institutional User. Please use its corresponding { requestToken, requestSecret } for signing the request
account false int
symbol false String
instrumentId false int
side false int 1 = Buy, 2 = Sell
ordType false int 1 = Market, 2 = Limit, 3 = Stop, 4 = Stop limit
price true int
price_scale true int
quantity false int
quantity_scale false int
stopPx false int (not required unless stop order)
stopPx_scale false int (not required unless stop order)
timeInForce false int (not required, defaults to 1 = Good Till Cancel (GTC))

Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs

Response

{
  "status": "sent",
  "id": 2705,
  "origOrderId": 3262670236,
  "instrumentId": 15,
  "userId": 2751,
  "price": 10000000,
  "quantity": 1000000,
  "ordType": 2
}
Field Type Description
status string
id int
origOrderId int
instrumentId int
userId int
price int
quantity int
ordType int

Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs

Cancel Reject

If the order could not be canceled (already filled or previously canceled, etc), then an error response will indicate the reason in the message field.

Get Orders List

Return a list of orders, ordered by id descending

Data fields use enums defined in the FIX 4.4 standard

All types or orders are returned with their statuses

HTTPS Request

Environment URL
Testnet POST https://testnet.equos.io/api/getOrders
Production POST https://equos.io/api/getOrders

API Key Permissions

This endpoint requires the “trade” permission.

Request Body (JSON)

// Request body
{"userId":var,"limit":var}    // Request body: your uid as integer, limit as integer

POST /getOrders
# Request body
{"userId":int,"limit":int}    # Request body: your uid as integer, limit as integer

POST /getOrders

These parameters are common to all order types.

Field Required Type Description
userId true int For institutional user, set this = account id
account false int For institutional user, set this = account id
symbol false String Cannot be used with symbol
instrumentId false int Cannot be used with instrumentId
limit false int
execType false String
ordStatus false int
timestamp false long If specified, all orders transacted at or after the timestamp in msec (GMT) will be shown.

Response

// Response
{
   "orders":[
      {
         "orderId":3250468309,
         "orderUpdateSeq":1,
         "clOrdId":"1585663508742001815",
         "symbol":"ETH/BTC",
         "instrumentId":15,
         "side":"1",
         "userId":2751,
         "account":2751,
         "execType":"F",
         "ordType":"1",
         "ordStatus":"0",
         "timeInForce":"1",
         "timeStamp":"20200331-14:05:08.788",
         "execId":14363339,
         "fee":0,
         "feeTotal":0,
         "fee_scale":6,
         "feeInstrumentId":3,
         "price":0,
         "price_scale":6,
         "quantity":2468,
         "quantity_scale":6,
         "leavesQty":0,
         "leavesQty_scale":6,
         "cumQty":2468,
         "cumQty_scale":6,
         "lastPx":205,
         "lastPx_scale":6,
         "lastQty":2468,
         "lastQty_scale":6
      }
   ]
}
# Response
{
   "orders":[
      {
         "orderId":your uid,
         "orderUpdateSeq":1,
         "clOrdId":"1585663508742001815",
         "symbol":"ETH/BTC",
         "instrumentId":15,
         "side":"1",
         "userId":2751,
         "account":2751,
         "execType":"F",
         "ordType":"1",
         "ordStatus":"0",
         "timeInForce":"1",
         "timeStamp":"20200331-14:05:08.788",
         "execId":14363339,
         "fee":0,
         "feeTotal":0,
         "fee_scale":6,
         "feeInstrumentId":3,
         "price":0,
         "price_scale":6,
         "quantity":2468,
         "quantity_scale":6,
         "leavesQty":0,
         "leavesQty_scale":6,
         "cumQty":2468,
         "cumQty_scale":6,
         "lastPx":205,
         "lastPx_scale":6,
         "lastQty":2468,
         "lastQty_scale":6
      }
   ]
}

Main Section

Field Type Description
orders [] See Order section for details

Order Section

Field Type Description
orderId int
orderUpdateSeq int
clOrdId string
symbol string
instrumentId int
side string
userId int
account int
execType string
ordType string
ordStatus string
timeInForce string
timeStamp string
execId int
targetStrategy int
isHidden bool
isReduceOnly bool
isLiquidation bool
fee int
feeTotal int
fee_scale int
feeInstrumentId int
price int
price_scale int
quantity int
quantity_scale int
leavesQty int
leavesQty_scale int
cumQty int
cumQty_scale int
lastPx int
lastPx_scale int
avgPx int
avgPx_scale int
lastQty int
lastQty_scale int

Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs

Get Order

Return an order with its status

Data fields use enums defined in the FIX 4.4 standard

All types or orders are returned with their statuses

HTTPS Request

Environment URL
Testnet POST https://testnet.equos.io/api/getOrder
Production POST https://equos.io/api/getOrder

API Key Permissions

This endpoint requires the “trade” permission.

Request Body (JSON)

{"userId":2751,"orderId":3250468309}

These parameters are common to all order types.

Field Required Type Description
userId true int For institutional user, set this = account id
account false int For institutional user, set this = account id
orderId true int

Response

{
 "orderId":3250468309,
 "orderUpdateSeq":1,
 "clOrdId":"1585663508742001815",
 "symbol":"ETH/BTC",
 "instrumentId":15,
 "side":"1",
 "userId":2751,
 "account":2751,
 "execType":"F",
 "ordType":"1",
 "ordStatus":"0",
 "timeInForce":"1",
 "timeStamp":"20200331-14:05:08.788",
 "execId":14363339,
 "fee":0,
 "feeTotal":0,
 "fee_scale":6,
 "feeInstrumentId":3,
 "price":0,
 "price_scale":6,
 "quantity":2468,
 "quantity_scale":6,
 "leavesQty":0,
 "leavesQty_scale":6,
 "cumQty":2468,
 "cumQty_scale":6,
 "lastPx":205,
 "lastPx_scale":6,
 "lastQty":2468,
 "lastQty_scale":6
}
Field Type Description
orderId int
orderUpdateSeq int
clOrdId string
symbol string
instrumentId int
side string
userId int
execType string
ordType string
ordStatus string
timeInForce string
timeStamp string
execId int
fee int
feeTotal int
fee_scale int
feeInstrumentId int
price int
price_scale int
quantity int
quantity_scale int
leavesQty int
leavesQty_scale int
cumQty int
cumQty_scale int
lastPx int
lastPx_scale int
lastQty int
lastQty_scale int

Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs

Get Order History

Return a list of orders history for a given orderid

Data fields use enums defined in the FIX 4.4 standard

All types or orders are returned with their statuses

HTTPS Request

Environment URL
Testnet POST https://testnet.equos.io/api/getOrderHistory
Production POST https://equos.io/api/getOrderHistory

API Key Permissions

This endpoint requires the “trade” permission.

Request Body (JSON)

{"userId":"357","orderId":"5263446159"}

These parameters are common to all order types.

Field Required Type Description
userId true int For institutional user, set this = account id
orderId true int For institutional user, set this = account id

Response

{"orders":[
    {"orderId":5263446159,"orderUpdateSeq":0,"clOrdId":"1591255141636981057","symbol":"BTC/USDC","instrumentId":52,"side":"1","userId":357,"account":357,"execType":"0","ordType":"2","ordStatus":"0","timeInForce":"1","timeStamp":"20200604-07:19:01.633","execId":0,"fee":0,"feeTotal":0,"fee_scale":0,"feeInstrumentId":0,"price":1,"price_scale":2,"quantity":10000,"quantity_scale":6,"leavesQty":10000,"leavesQty_scale":6,"cumQty":0,"cumQty_scale":0,"lastPx":0,"lastPx_scale":2,"lastQty":0,"lastQty_scale":6},
    {"orderId":5263446159,"orderUpdateSeq":1,"clOrdId":"1591255141636981057","symbol":"BTC/USDC","instrumentId":52,"side":"1","userId":357,"account":357,"execType":"4","ordType":"2","ordStatus":"4","timeInForce":"1","timeStamp":"20200604-08:12:05.890","execId":0,"fee":0,"feeTotal":0,"fee_scale":0,"feeInstrumentId":0,"price":1,"price_scale":2,"quantity":10000,"quantity_scale":6,"leavesQty":10000,"leavesQty_scale":6,"cumQty":0,"cumQty_scale":6,"lastPx":0,"lastPx_scale":2,"lastQty":0,"lastQty_scale":6}
]}

Main Section

Field Type Description
orders [] See Order section for details

Order Section

Field Type Description
orderId int
orderUpdateSeq int
clOrdId string
symbol string
instrumentId int
side string
userId int
execType string
ordType string
ordStatus string
timeInForce string
timeStamp string
execId int
fee int
feeTotal int
fee_scale int
feeInstrumentId int
price int
price_scale int
quantity int
quantity_scale int
leavesQty int
leavesQty_scale int
cumQty int
cumQty_scale int
lastPx int
lastPx_scale int
lastQty int
lastQty_scale int

Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs

Get User Trade History

Return a list of trade history for a given orderid

Data fields use enums defined in the FIX 4.4 standard

All types or orders are returned with their statuses

HTTPS Request

Environment URL
Testnet POST https://testnet.equos.io/api/userTrades
Production POST https://equos.io/api/userTrades

API Key Permissions

This endpoint requires the “trade” permission.

Request Body (JSON)

{"userId": your uid}
#Request
{"userId":your uid}  # Request body: your uid as integer
POST /userTrades

These parameters are common to all order types.

Field Required Type Description
userId true int For institutional user, set this = account id
timestamp false long If specified, all trades transacted at or after the timestamp in msec (GMT) will be shown.

Response

// Response
{"trades":[
    {
        "accountId":your uid,
        "buyer":true,
        "commission":"0.0",
        "commissionAsset":"USDC",
        "id":15744657,
        "ordType":"2",
        "ordStatus":"2",
        "execType":"F",
        "maker":true,
        "orderId":3458710212,
        "price":"225.00",
        "qty":"2.700000",
        "lastPx":"225.00",
        "avgPx":"225.00",
        "cumQty":"10.000000",
        "quoteQty":"10.000000",
        "realizedPnl":0.0,
        "side":"BUY",
        "symbol":"ETH/USDC",
        "time":1595342367044}
    }
    //...
    ]
}
// Response
{"trades":[
    {
        "accountId":your uid,
        "buyer":true,
        "commission":"0.0",
        "commissionAsset":"USDC",
        "id":15744657,
        "ordType":"2",
        "ordStatus":"2",
        "execType":"F",
        "maker":true,
        "orderId":3458710212,
        "price":"225.00",
        "qty":"2.700000",
        "lastPx":"225.00",
        "avgPx":"225.00",
        "cumQty":"10.000000",
        "quoteQty":"10.000000",
        "realizedPnl":0.0,
        "side":"BUY",
        "symbol":"ETH/USDC",
        "time":1595342367044}
    }
    //...
    ]
}

Main Section

Field Type Description
trades [] See Trade section for details

Order Section

Field Type Description
account int Trading Account
commission decimal Commission
commCurrency string Commission Currency
execId int Execution ID
ordType string Describes the specific Execution Report

0 = New
4 = Canceled
5 = Replace
8 = Rejected
C = Expired
F = Fill Status
ordStatus string Identifies status of order.

0 = New
1 = Partially filled
2 = Filled
3 = Done for Day
4 = Cancelled
8 = Rejected
C = Expired
execType string
aggressorIndicator bool Used to identify whether the order initiator is an aggressor or not in the trade.

Y = Order initiator is aggressor
N = Order initiator is passive
orderId string Unique order identifier assigned by Equos
price decimal Order limit price
qty decimal Order quantity
lastPx decimal Price of this (last) fill.
avgPx decimal Average execution price or 0.0 if not executed yet or rejected
cumQty decimal Total amount of an order currently executed in a chain of partial fills.
quoteQty decimal
side string Side of order:

1 = Buy
2 = Sell
symbol string Equos exchange Symbol
clOrdId string
submitterId int ID of the entering User
targetStrategy string
time long

Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs

List Position

Return list of all positions / balances

Data fields use enums defined in the FIX 4.4 standard

All types or orders are returned with their statuses

HTTPS Request

Environment URL
Testnet POST https://testnet.equos.io/api/getPositions
Production POST https://equos.io/api/getPositions

API Key Permissions

This endpoint requires the “trade” permission.

Request Body (JSON)

{"userId":your uid}
#Request
{"userId":your uid}  # Request body: your uid as integer
POST /getOrders

These parameters are common to all order types.

Field Required Type Description
userId true int For institutional user, set this = account id
account false int For institutional user, set this = account id

Response

// Response
{
  "positions": [
    {
      "instrumentId": 2,
      "userId": "your uid",
      "quantity": 1567000,
      "availableQuantity": 1566900,
      "quantity_scale": 6,
      "symbol": "ETH",
      "assetType": "ASSET",
      "usdCostBasis": 0,
      "usdAvgCostBasis": 0,
      "usdValue": 207,
      "usdUnrealized": 0,
      "usdRealized": 0,
      "baseUsdMark": 132.1,
      "settleCoinUsdMark": 0,
      "settleCoinUnrealized": 0,
      "settleCoinRealized": 0
    },
    {
      "instrumentId": 3,
      "userId": "your uid",
      "quantity": 0,
      "availableQuantity": 0,
      "quantity_scale": 6,
      "symbol": "BTC",
      "assetType": "ASSET",
      "usdCostBasis": 0,
      "usdAvgCostBasis": 0,
      "usdValue": 0,
      "usdUnrealized": 0,
      "usdRealized": 0,
      "baseUsdMark": 0,
      "settleCoinUsdMark": 0,
      "settleCoinUnrealized": 0,
      "settleCoinRealized": 0
    }
    // ...
  ]
}
# Response
{
  "positions": [
    {
      "instrumentId": 2,
      "userId": "your uid",
      "quantity": 1567000,
      "availableQuantity": 1566900,
      "quantity_scale": 6,
      "symbol": "ETH",
      "assetType": "ASSET",
      "usdCostBasis": 0,
      "usdAvgCostBasis": 0,
      "usdValue": 207,
      "usdUnrealized": 0,
      "usdRealized": 0,
      "baseUsdMark": 132.1,
      "settleCoinUsdMark": 0,
      "settleCoinUnrealized": 0,
      "settleCoinRealized": 0
    },
    {
      "instrumentId": 3,
      "userId": "your uid",
      "quantity": 0,
      "availableQuantity": 0,
      "quantity_scale": 6,
      "symbol": "BTC",
      "assetType": "ASSET",
      "usdCostBasis": 0,
      "usdAvgCostBasis": 0,
      "usdValue": 0,
      "usdUnrealized": 0,
      "usdRealized": 0,
      "baseUsdMark": 0,
      "settleCoinUsdMark": 0,
      "settleCoinUnrealized": 0,
      "settleCoinRealized": 0
    }
    #...
}

Main Section

Field Type Description
positions [] See Position section for details

Position Section

Field Type Description
instrumentId int
userId int
quantity int
availableQuantity int
quantity_scale int
symbol string
assetType string
usdCostBasis int
usdAvgCostBasis int
usdValue double
usdUnrealized double
usdRealized double
baseUsdMark int
settleCoinUsdMark int
settleCoinUnrealized int
settleCoinRealized int

Quantity, availableQuantity are integer numbers. To convert them to double, use their respective scale defined in the response message.

Get Deposit Addresses

Return list of addresses for each coin

HTTPS Request

Environment URL
Testnet POST https://testnet.equos.io/api/getDepositAddresses
Production POST https://equos.io/api/getDepositAddresses

API Key Permissions

This endpoint requires the “trade” permission.

Request Body (JSON)

{"userId":6214,"account":"4245","instrumentId":3}
Field Required Type Description
userId true int
account false int Required for institutional user
instrumentId false int

Response

{
    "addresses": [
        {
            "instrumentId": 3,
            "userId": 4245,
            "symbol": "BTC",
            "address": "AAAAAAAAAABBBBBBBCCCCCCCDDDDDDDEEEEEE",
            "status": 1
        }
    ]
}

Main Section

Field Type Description
addresses [] See Address section for details

Address Section

Field Type Description
instrumentId int
userId int
symbol string
address string
status int

List Withdraw Requests

List the Withdaw Requests

HTTPS Request

Environment URL
Testnet POST https://testnet.equos.io/api/getWithdrawRequests
Production POST https://equos.io/api/getWithdrawRequests

API Key Permissions

This endpoint requires the “trade” permission.

Request Body (JSON)

{"userId":6214,"account":"4245"}
Field Required Type Description
userId true int
account false int Required for institutional user

Response

{
    "addresses":[
        {
            "id":3841,
            "instrumentId":3,
            "userId":4245,
            "symbol":"BTC",
            "address":"XXXXXYYYYYZZZZZ",
            "timestamp":"20200806-11:04:35.053",
            "status":0,
            "balance":1,
            "balance_scale":3,
            "confirms":0,
            "transactionId":"null"
        }
    ]
}

Main Section

Field Type Description
addresses [] See Address section for details

Address Section

Field Type Description
instrumentId int
userId int
symbol string
address string
timestamp string
status int
balance int
balance_scale int
confirms int
transactionId string

Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs

Send Withdraw Request

Request to send coins to an external address

HTTPS Request

Environment URL
Testnet POST https://testnet.equos.io/api/sendWithdrawRequest
Production POST https://equos.io/api/sendWithdrawRequest

API Key Permissions

This endpoint requires the “trade” permission.

Request Body (JSON)

{"code":"796496","userId":6214,"instrumentId":3,"quantity":1,"quantity_scale":3,"symbol":"BTC","address":"XXXXXYYYYYZZZZZ","account":"4245"}
Field Required Type Description
code true string 2FA
userId true int
account false int Required for institutional user
instrumentId true int
quantity true int
quantity_scale true int
symbol true string
address true string

Response

{
  "addresses":[
    {
      "instrumentId":3,
      "userId":4245,
      "symbol":"BTC",
      "address":"XXXXXYYYYYZZZZZ",
      "timestamp":"20200806-11:04:35.053",
      "status":0,
      "balance":1,
      "balance_scale":3,
      "confirms":0
    }
  ]
}

Main Section

Field Type Description
addresses [] See Address section for details

Address Section

Field Type Description
instrumentId int
userId int
symbol string
address string
timestamp string
status int
balance int
balance_scale int
confirms int

Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs

Get Risk

Return real-time risk metrics

Data fields use enums defined in the FIX 4.4 standard

HTTPS Request

Environment URL
Testnet POST https://testnet.equos.io/api/getRisk
Production POST https://equos.io/api/getRisk

API Key Permissions

This endpoint requires the “trade” permission.

Request Body (JSON)

{"userId":2751}

These parameters are common to all order types.

Field Required Type Description
userId true int For institutional user, set this = account id
account false int For institutional user, set this = account id

Response

{
  "userId": 2751,
  "usdValue": 75000000,
  "usdPositionValue": 0,
  "usdOpenOrdersValue": 0,
  "usdOpenOrdersRequiredValue": 0,
  "usdMarginValue": 0,
  "usdMarginRequiredValue": 0,
  "usdMarginMaintValue": 0,
  "leverageRatio": 0,
  "usdUnrealized": 0,
  "riskUpdateDate": "20200331-12:37:08.886"
}
Field Type Description
userId string
usdValue double
usdPositionValue double
usdOpenOrdersValue double
usdOpenOrdersRequiredValue double
usdMarginValue double
usdMarginRequiredValue double
usdMarginMaintValue double
leverageRatio double
riskUpdateDate string

Create a new report

tbd

Get report status

tbd

WebSocket Overview

Real-time market data updates provide the fastest insight into order flow and trades. This however means that you are responsible for reading the message stream and using the message relevant for your needs which can include building real-time order books or tracking real-time trades. The websocket feed is publicly available, but connections to it are rate-limited to 1 per 4 seconds per IP.

Protocol Overview

The websocket feed uses a bidirectional protocol, which encodes all messages as JSON objects. All messages have a type attribute that can be used to handle the message appropriately. Please note that new message types can be added at any point in time. Clients are expected to ignore messages they do not support. Error messages: Most failure cases will cause an error message (a message with the type "error") to be emitted. This can be helpful for implementing a client or debugging issues.

While a websocket connection is over TCP, the websocket servers receive market data in a manner which can result in dropped messages. Your feed consumer should either be designed to expect and handle sequence gaps and out-of-order messages, or use channels that guarantee delivery of messages.

Subscribe

To begin receiving feed messages, you must first send a subscribe message to the server indicating which channels and products to receive. This message is mandatory — you will be disconnected if no subscribe has been received within 5 seconds.

WebSocket Public Channels

Public channels provide market data as stream. To subscribe, send a subscribe message with pairId obtained from /getInstrumentPairs endpoint.

Order Book Channel


Get realtime snapshot of orderbook streamed

Websocket Channel

Environment URL
Test Net wss://testnet.equos.io/ws/orderbook
Production wss://equos.io/ws/orderbook

Subscribe Message

// Subscribe Message
{"pairId":var}
# Subscribe Message
{"pairId":int}
Field Required Type Description
pairId true int

Response

// Response
{
    "bids": [
        [
            1131294,
            265000,
            1596508725841
        ],
        [
            1130841,
            6366000,
            1596508725841
        ],
        ...
    ]
    "asks": [
        [
            1132010,
            2400000,
            1596508725841
        ],
        [
            1132426,
            264000,
            1596508725841
        ],
        ...
    ]
    "usdMark": 11323.74,
    "marketStatus": 0,
    "estFundingRate": 0.0,
    "fundingRateTime": 0,
    "auctionPrice": 0.0,
    "auctionVolume": 0.0
}
# Response
{
    "bids": [
        [
            1131294,
            265000,
            1596508725841
        ],
        [
            1130841,
            6366000,
            1596508725841
        ],
        ...
    ]
    "asks": [
        [
            1132010,
            2400000,
            1596508725841
        ],
        [
            1132426,
            264000,
            1596508725841
        ],
        ...
    ]
    "usdMark": 11323.74,
    "marketStatus": 0,
    "estFundingRate": 0.0,
    "fundingRateTime": 0,
    "auctionPrice": 0.0,
    "auctionVolume": 0.0
}

Main Section

Field Type Description
type int 1 = Order Book Snapshot
pairId int
bids [] See Bids / Asks Section for details
asks [] See Bids / Asks Section for details

Bids / Asks Section (Comma Delimited)

Field Type Description
price int
quantity int
timestamp int

Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs

Trade History Channel


Get realtime trade history

Websocket Channel

Environment URL
Test Net wss://testnet.equos.io/ws/tradehistory
Production wss://equos.io/ws/tradehistory

Subscribe Message

// Subscribe Message
{"pairId":var}
# Subscribe Message
{"pairId":int}
Field Required Type Description
pairId true int

Response

// Response
{
    "trades": [
        [
            1132030,
            264000,
            "20200804-02:39:44.495",
            23998,
            1
        ],
        [
            1135330,
            264000,
            "20200804-02:12:03.607",
            23997,
            2
        ],
        ...
    ]
}
# Response
{
    "trades": [
        [
            1132030,
            264000,
            "20200804-02:39:44.495",
            23998,
            1
        ],
        [
            1135330,
            264000,
            "20200804-02:12:03.607",
            23997,
            2
        ],
        ...
    ]
}

Main Section

Field Type Description
type int 3 = Trade History
pairId int
trades [] See Trade section for details

Trade Section (Comma Delimited)

Field Type Description
price int Price
quantity int
timestamp string
sequenceNumber int
aggressorSide int 1 = Buy 2 = Sell

Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs

Chart Channel


Returns an array of chart data points in OHLC format

HTTPS Request

Environment URL
Testnet wss://testnet.equos.io/ws/chart
Production wss://equos.io/ws/chart

Request Parameters

// Subscribe Message
{"pairId":var,"timespan":var}
# Subscribe Message
{"pairId":int,"timespan":int}

Main Section

Field Required Type Description
pairId true int
timespan true int

Timespan Enum Values

Enum Value
ONE_MINUTE 1
FIVE_MINUTE 2
FIFTEEN_MINUTE 3
ONE_HOUR 4
SIX_HOUR 5
ONE_DAY 6
ONE_WEEK 7

Response

// Response
{
    "pairId": 52,
    "t": 1,
    "s": "BTC/USDC",
    "lastPx": 1132030,
    "lastQty": 264000,
    "o": 11190.900000000001,
    "h": 11427.110000000002,
    "l": 11128.420000000002,
    "c": 11320.300000000003,
    "v": 841713.4744600004,
    "q": 74.72000000000003,
    "chart": [
        [
            1596508740000,
            1132030,
            1132030,
            1132030,
            1132030,
            0,
            351
        ],
        [
            1596508680000,
            1132030,
            1132030,
            1132030,
            1132030,
            0,
            350
        ],
        ...
    ]
}
# Response
{
    "pairId": 52,
    "t": 1,
    "s": "BTC/USDC",
    "lastPx": 1132030,
    "lastQty": 264000,
    "o": 11190.900000000001,
    "h": 11427.110000000002,
    "l": 11128.420000000002,
    "c": 11320.300000000003,
    "v": 841713.4744600004,
    "q": 74.72000000000003,
    "chart": [
        [
            1596508740000,
            1132030,
            1132030,
            1132030,
            1132030,
            0,
            351
        ],
        [
            1596508680000,
            1132030,
            1132030,
            1132030,
            1132030,
            0,
            350
        ],
        ...
    ]
}

Main Section

Field Type Description
chart [] See Chart section for details

Chart Section (Comma Delimited)

Field Type Description
timestamp int Unix Timestamp
open int
high int
low int
close int
volume int
seqNumber int

Open, high, low, close, volume are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs

WebSocket Private Channels

Authentication is required for private data channels. It is done via sending a subscribe message with API Username and API Password.

User Orders Channel


Get user order updates streamed through a websocket channel

Websocket Channel

Environment URL
Test Net wss://testnet.equos.io/ws/userorders
Production wss://equos.io/ws/userorders

This private channel must be subscribed to by authenticating

Subscribe Message

{"login":"trader123","password":"pwd","userId":53234,"account":123}
Field Required Type Description
login true string
password true string
userId false int
account true (for Institutional User) int

Response

Main Section

Field Type Description
type int 5 = User Orders
isInitialSnap boolean
order [] See Order section for details

Order Section

Field Type Description
orderId int
orderUpdateSeq int
clOrdId string
symbol string
instrumentId int
side string
userId int
account int for Institutional User
execType string
ordType string
ordStatus string
timeInForce string
timeStamp string
execId int
fee int
feeTotal int
fee_scale int
feeInstrumentId int
price int
price_scale int
quantity int
quantity_scale int
leavesQty int
leavesQty_scale int
cumQty int
cumQty_scale int
lastPx int
lastPx_scale int
lastQty int
lastQty_scale int

Fee, FeeTotal(?), Price, quantity, leavesQty, cumQty, lastPx, lastQty are integer numbers. To convert them to double, use their respective scale defined in the response message.

User Position Channel


Get user risk updates streamed through a websocket channel

Websocket Channel

Environment URL
Test Net wss://testnet.equos.io/ws/userposition
Production wss://equos.io/ws/userposition

Subscribe Message

{"login":"trader123","password":"pwd","userId":53234,"account":123}
Field Required Type Description
login true string
password true string
userId false int
account true (for Institutional User) int

Response

Main Section

Field Type Description
type int 7 = User Position
positions [] See Position section for details

Position Section

Field Type Description
instrumentId int
userId int
quantity int
availableQuantity int
quantity_scale int
symbol string
assetType string
usdCostBasis int
usdAvgCostBasis int
usdValue double
usdUnrealized double
usdRealized double
baseUsdMark int
settleCoinUsdMark int
settleCoinUnrealized int
settleCoinRealized int

Quantity, availableQuantity are integer numbers. To convert them to double, use their respective scale defined in the response message.

User Risk Channel


Get user risk updates streamed through a websocket channel

Websocket Channel

Environment URL
Test Net wss://testnet.equos.io/ws/userrisk
Production wss://equos.io/ws/userrisk

Subscribe Message

{"login":"trader123","password":"pwd","userId":53234,"account":123}
Field Required Type Description
login true string
password true string
userId false int
account true (for Institutional User) int

Response

Field Type Description
type int 6 = User Risk
userId string
usdValue double
usdPositionValue double
usdOpenOrdersValue double
usdOpenOrdersRequiredValue double
usdMarginValue double
usdMarginRequiredValue double
usdMarginMaintValue double
leverageRatio double
riskUpdateDate string

FIX Overview

FIX Dictionary


The Equos FIX implementation is based on the FIX Protocol 4.4 Specification, but also includes some tags from other versions and service packs of the FIX Specification, as well as several User Defined Fields.

Equos provides a custom dictionary in the QuickFIX XML format, which is also compatible with a number of other vendors FIX engine implementations.

Please contact integration@equos.io for access to the dictionary


Non FIX44 Tags

The following FIX tags, may need to be added to your FIX44 dictionary.

Tag Name Introduced Message
1057 AggressorIndicator FIX.4.4 EP21 ExecutionReport
TradeCaptureReport
1079 MaturityTime FIX.4.4 EP21 SecurityList
1140 MaxTradeVol FIX.5.0 EP42 SecurityList
1146 MinPriceIncrementAmount FIX.5.0 EP42 SecurityList
2576 InstrumentPricePrecision FIX.5.0SP2 EP195 SecurityList
6867 CancelOnDisconnect User Defined Fields Logon

Testnet Environment


Equos operates a test network which is a replication of our production environment. API users are strongly recommended to create a testnet account, to test and validate API workflows prior to connection to the production environment.

Setup a Testnet Account

You can create a Testnet account at https://testnet.equos.io

Equos FIX Gateways

Note: Drop Copy Gateway is not yet deployed for testing

Environment                FIX Gateway                Server Address             Port Number           TargetCompID
Integration Testing Market Data fix.testnet.equos.io 4801 testnet.fix-md.equos
Integration Testing Order Management fix.testnet.equos.io 4802 testnet.fix-om.equos
Integration Testing Drop Copy fix.testnet.equos.io 4803 testnet.fix-dc.equos
Production Market Data fix.equos.io 5801 prod.fix-md.equos
Production Order Management fix.equos.io 5802 prod.fix-om.equos
Production Drop Copy fix.equos.io 5803 prod.fix-dc.equos

SSL Proxy


Equos FIX endpoints only accept TCP connections secured by SSL/TLS. If your FIX client library cannot establish an SSL/TLS connection natively, you will need to run a local proxy that will establish a secure connection and allow unencrypted local connections.

Stunnel Configuration

[DEMO.EQUOS.MD]
client=yes
accept=4801
connect=fix.demo.equos.io:4801
verify=4
CAfile=/home/user1/pem/DEMO.EQUOS.MD.pem

[DEMO.EQUOS.OM]
client=yes
accept=4802
connect=fix.demo.equos.io:4802
verify=4
CAfile=/home/user1/pem/DEMO.EQUOS.OM.pem

[DEMO.EQUOS.DC]
client=yes
accept=4803
connect=fix.demo.equos.io:4803
verify=4
CAfile=/home/user1/pem/DEMO.EQUOS.DC.pem

[PROD.EQUOS.MD]
client=yes
accept=5801
connect=fix.equos.io:5801
verify=4
CAfile=/home/user1/pem/PROD.EQUOS.MD.pem

[PROD.EQUOS.OM]
client=yes
accept=5802
connect=fix.equos.io:5802
verify=4
CAfile=/home/user1/pem/PROD.EQUOS.OM.pem

[PROD.EQUOS.DC]
client=yes
accept=5803
connect=fix.equos.io:5803
verify=4
CAfile=/home/user1/pem/PROD.EQUOS.DC.pem

This is an example configuration file for stunnel to listen on a port locally and proxy unencrypted TCP connections to the encrypted SSL connection. The service name (EQUOS) and the accept port may be changed to any suitable values.

PEM Certificate Download

# Testnet
> openssl s_client -showcerts -connect fix.demo.equos.io:4801 < /dev/null | openssl x509 -outform PEM > /home/user1/pem/DEMO.EQUOS.MD.pem
> openssl s_client -showcerts -connect fix.demo.equos.io:4802 < /dev/null | openssl x509 -outform PEM > /home/user1/pem/DEMO.EQUOS.OM.pem
> openssl s_client -showcerts -connect fix.demo.equos.io:4803 < /dev/null | openssl x509 -outform PEM > /home/user1/pem/DEMO.EQUOS.DC.pem

# PROD
> openssl s_client -showcerts -connect fix.equos.io:5801 < /dev/null | openssl x509 -outform PEM > /home/user1/pem/PROD.EQUOS.MD.pem
> openssl s_client -showcerts -connect fix.equos.io:5802 < /dev/null | openssl x509 -outform PEM > /home/user1/pem/PROD.EQUOS.OM.pem
> openssl s_client -showcerts -connect fix.equos.io:5803 < /dev/null | openssl x509 -outform PEM > /home/user1/pem/PROD.EQUOS.DC.pem

If your system has OpenSSL installed, you can run this command to download the certificate:

Third Party Platform and Network Support


Under development

Instruments and Trading Pairs Symbols


tbc

Instruments

The following instruments are designated Settlement Currencies or Funding Currencies with the

Instrument Settlement Currency Funding Currency Account Precision
USD 0.01 USD (1e-2)
USDC 0.000001 USDC (1e-6)
BTC 0.000001 BTC (1e-6)
ETH 0.000001 ETH (1e-6)


Currency Fields in FIX Protocol

The following FIX tags describe the currency and settlement profile for financial products listed on the Equos Exchange, each of these values is published as part of the SecurityList < x > message send in response to a SecurityListRequest < y > message.

FIX Field Description
Currency<15> Quantity CCY Base or left hand currency code in the trading pair.
ContAmtCurr<521> Price CCY Quote or right hand currency code in the trading pair, or contract denomination for derivatives.
SettlCurrency<120> Specifies the currency code of Settlement Account which will settle the trade P&L.
CommCurrency<479> Specifies the currency code used for the Funding Account which will settle the commission charge.



Trading Pairs

The following Trading Pairs are valid values for the Symbol<55> field.

Symbols are formatted as CCY1/CCY2 where prices are in CCY2 Price CCY and quantities are in CCY1 Quantity CCY and "/" is the delimiter.

Symbol Price CCY Quantity CCY Min Order Size Minimum order increment Minimum price increment
BTC/USDC USDC BTC 0.001 BTC (1e-3) 0.000001 BTC (1e-6) 0.01 USDC (1e-2)
ETH/BTC BTC ETH 0.01 ETH (1e-2) 0.000001 ETH (1e-6) 0.01 BTC (1e-2)
ETH/USDC USDC ETH 0.01 ETH (1e-2) 0.000001 ETH (1e-6) 0.000001 USDC (1e-6)

Message Identifiers


Client Supplied Identifiers

Equos recommends clients use UUID

UUID selected by client to identify the order
Unique identifier for Order as assigned by the client. Uniqueness must be guaranteed within a single trading session by the sender for clients who do not submit long dated orders (GTC/GTD). Clients who submit long dated orders must guarantee uniqueness across trading sessions.

Indentifier Message
ClOrdID NewOrderSingle
ExecutionReport
OrigClOrdID ExecutionReport
SecurityReqID
SecurityStatusReqID
MDReqID MarketDataRequest

Equos Supplied Identifiers

A sentence about how we make the STRING up

Indentifier Message
SecurityResponseID SecurityList
OrderID NewOrderSingle
ExecutionReport
ExecID

Data Types


tbc

Standard Header


Each administrative or application message is preceded by a Standard Header. The header identifies the message type, length, destination, sequence number, origination point and timeTwo fields help with resending messages.

The PossDupFlag<43> is set to Y when resending a message as the result of a session level event (i.e. the retransmission of a message reusing a sequence number). The PossResend<97> is set to Y when reissuing a message with a new sequence number (e.g. resending an order). The receiving application should process these messages as follows:

Sender Identification

Equos Exchange participants are recommended to use the additional FIX Sender Identifiers in the following scenarios, or as needed. Extended identifers set on NewOrderSingle < D> messages, will be echoed in the corresponding ExecutionReport<8> messages.

FIX Identifier Usage
SenderCompID<49> Assigned by Equos to identify one or more of the clients FIX connections
Where the order initiator is a human user, via a shared FIX connection, the Equos UserID. Where the order initiator is a trading bot, Equos recommends using a separate static identifier for each bot with the prefix "bot"
Field maybe used at the discretion of the user.



Third-party Message Delivery

Under development: Message routing via third-parties or FIX order routing networks. Please email api.support@equos.io with any business requirements you might have for this feature.

FIX Identifier Usage
Assigned value used to identify firm originating message if the message was delivered by a third party i.e. the third party firm identifier would be delivered in the SenderCompID <49> field and the firm originating the message in this field.
Assigned value used to identify the firm targeted to receive the message if the message is delivered by a third party i.e. the third party firm identifier would be delivered in the TargetCompID <56> field and the ultimate receiver firm ID in this field.



Tag Field Name Data Type Req Description
8 BeginString DATATYPE Y Identifies the beginning of new message and protocol version. Always the first tag in the message. Valid Value:

FIX4.4
9 BodyLength DATATYPE Y Message length, in bytes, forward to the CheckSum <10> field. Always the second tag in the message.
35 MsgType DATATYPE Y Defines message type. Always the third tag in the message.
34 MesSeqNum SEQNUM Y Message sequence number.
49 SenderCompID STRING Y Equos Assigned value used to identify firm sending message. SenderCompID = 1000000000+ UserID (which is visible at your user profile page [link?]).
50 STRING N User specified, to identifier initiator of the order (Equos UserID, trader, bot, etc.)
142 STRING N User specified identifier
56 TargetCompID STRING Y Equos Assigned value used to identify receiving FIX gateway. Please note TargetCompID name varies by environment and gateways vary by port number, please see Conencting for specific details.
115 STRING N Assigned value used to identify firm originating message if the message was delivered by a third party i.e. the third party firm identifier would be delivered in the SenderCompID <49> field and the firm originating the message in this field.
128 STRING N Assigned value used to identify the firm targeted to receive the message if the message is delivered by a third party i.e. the third party firm identifier would be delivered in the TargetCompID <56> field and the ultimate receiver firm ID in this field.
43 PossDupFlag BOOLEAN C Indicates possible retransmission of message with this sequence number

Y = Possible duplicate
97 PossResend BOOLEAN C The Equos FIX gateway will set PosResend=Y for selected set of messages after a gateway restart (if the gateway is not sure whether particular message was sent earlier or not)..

N = Original Transmission
Y = Possible Resend
52 SendingTime UTCTIMESTAMP C The GMT timestamp on the message.
122 OrigSendingTime UTCTIMESTAMP C Required for messages sent as a result of a ResendRequest. Original time of message transmission in UTC.

Standard Trailer


Each message, administrative or application, is terminated by a Standard Trailer. The trailer is used to segregate messages and contains the three digit character representation of the CheckSum<10> value.

Tag Field Name Data Type Req Description
10 CheckSum STRING Y Three bytes, simple checksum. Always last field in message.

FIX Session Management

EQUOS Exchange does not mandate a fixed FIX Session commencement or ending time, nor specify or limited the length of time a client maintains a FIX session.

Commencing a Session

EQUOS runs the server side of the FIX connection ("acceptor"). Equos never resets sequence numbers on the server side during the logon workflow unless the client explicitly requests it.

The client ("initiator") can reset sequence numbers during Logon < A > by setting ResetSeqNumFlag <141> to Y.

Equos recommends that client consider configuring the FIX initiator to automatically reset sequence numbers under the following conditions:

While synchronizing sequence numbers after a replay, the client may send a Sequence Reset <4> with GapFillFlag <123> = Y in lieu of a replay.

Ending a Session

The client may send the server an optional Logout <5> message but the exchange will not interpret its absence as being an abnormal condition.

Under certain conditions, the server may send the client a Logout <5> message where the Text <58> field contains the reason, such as scheduled maintenance.

Logon < A >


Heartbeat

Clients may select any HeartBtInt<108> interval, however Equos recommends 10 seconds. Clients using the Cancel-On-Disconnect feature should give careful consideration to their heartbeat interval which the server uses in initiating order cancellation.

Passwords

Note: Password reset on Logon message is not support on MVP release.

Passwords must be a minimum of 8 characters in length. Passwords are valid for 90 Days, and when reset must be different to the previous 12 passwords used. The account will lock after 6 failed attempts.

The new password must meet at least three of the following criteria:

Tag         Field Name Data Type Req Description
Standard Header Y MsgType = A
98 EncryptMethod INT Y Always the first tag in the message.

Valid Values:
0 = not encrypted is the only accepted value.
108 HeartBtInt INT Y Heartbeat interval in seconds.
141 ResetSeqNumFlag BOOLEAN C Required to establish logon. Indicates both sides of a FIX session should reset sequence numbers.

Y = Yes, reset sequence numbers

Note MsgSeqNum(34) should be set to 1.
789 SEQNUM Y Next expected MsgSeqNum value to be received. Required when connecting to the secondary (standby) FIX Drop Copy server. Please see the FIX Trading Community FIX Session Protocol description on the use of this tag for recovery.
553 Username STRING Y
554 Password STRING Y Password for the given FIX user identified in SenderCompID. Only specified in the initial client Logon Message
6867 CancelOnDisconnect BOOLEAN N When enabled, at Logon, the trading system will cancel all user orders associated with the SenderCompID upon disconnection.

Y = enable cancel on disconnect.
N = disable cancel on disconnect.
58 Text STRING N
Standard Trailer Standard Trailer Y

Logout < 5 >


The Logout<5> message initiates or confirms the termination of a FIX session. Disconnection without the exchange of Logout<5> messages should be interpreted as an abnormal condition.

Before actually closing the session, the logout initiator should wait for the opposite side to respond with a confirming Logout<5> message. This gives the remote end a chance to perform any Gap Fill operations that may be necessary. The session may be terminated if the remote side does not respond in an appropriate timeframe.

After sending the Logout<5> message, the logout initiator should not send any messages unless requested to do so by the logout acceptor via a ResendRequest<2>.

Tag         Field Name Data Type Req Description
Standard Header Y MsgType = 5
58 Text STRING N A unique ID assigned by the client to the market data request
1409 INT N Status of the FIX session. Not sent for scheduled server initiated log outs

3 = New session password does not comply with policy
4 = Session logout complete
5 = Invalid username or password
6 = Account locked
7 = Logons are not allowed at this time
8 = Password expired
9 = Received MsgSeqNum (34) is too low
10 = Received NextExpectedMsgSeqNum (789) is too high
101 = Requested MsgSeqNum unknown (a request has been made for a sequence number that has not been sent by the server).
Standard Trailer Y

Heartbeat <0>


The Heartbeat (0) monitors the status of the communication link and identifies when the last of a string of messages was not received.

When either end of a FIX connection has not sent any data for [ HeartBtInt (108) ] seconds, it will transmit a Heartbeat (0) message. When either end of the connection has not received any data for ( HeartBtInt (108) + "some reasonable transmission time") seconds, it will transmit a Test Request (1) message. If there is still no Heartbeat (0) message received after ( HeartBtInt (108) + "some reasonable transmission time") seconds then the connection should be considered lost and corrective action be initiated. If HeartBtInt (108) is set to zero then no regular heartbeat messages will be generated. Note that a test request message can still be sent independent of the value of the HeartBtInt (108) , which will force a Heartbeat (0) message.

Heartbeats issued as the result of Test Request (1) must contain the TestReqID<112> transmitted in the Test Request (1) message. This is useful to verify that the Heartbeat (0) is the result of the Test Request (1) and not as the result of a regular timeout.

Tag Field Name Data Type Req Description
Standard Header Y MsgType = 0
112 TestReqID STRING N Identifier included in Test Request (1) message to be returned in resulting Heartbeat (0)
Standard Trailer Y

TestRequest <1>


The TestRequest<1> message forces a heartbeat from the opposing application. The TestRequest<1> message checks sequence numbers or verifies communication line status. The opposite application responds to the TestRequest<1> with a HeartBeat<0> containing the TestReqID<112>.

The TestReqID<112> verifies that the opposite application is generating the heartbeat as the result of TestRequest<1> and not a normal timeout. The opposite application includes the TestReqID<112> in the resulting TestRequest<1>. Any string can be used as the TestReqID<112> (one suggestion is to use a timestamp string).

Tag         Field Name Data Type Req Description
Standard Header Y MsgType = 1
112 TestReqID STRING Y Identifier included in Test Request (1) message to be returned in resulting Heartbeat (0)
Standard Trailer Y

ResendRequest <2>


The resend request is sent by the receiving application to initiate the retransmission of messages. This function is utilized if a sequence number gap is detected, if the receiving application lost a message, or as a function of the initialization process.

The resend request can be used to request a single message, a range of messages or all messages subsequent to a particular message.

Note: the sending application may wish to consider the message type when resending messages; e.g. if a new order is in the resend series and a significant time period has elapsed since its original inception, the sender may not wish to retransmit the order given the potential for changed market conditions. (The SequenceReset<4> Gap Fill message is used to skip messages that a sender does not wish to resend.)

Note: it is imperative that the receiving application process messages in sequence order, e.g. if message number 7 is missed and 8-9 received, the application should ignore 8 and 9 and ask for a resend of 7-9, or, preferably, 7-0 (0 represents infinity). This latter approach is strongly recommended to recover from out of sequence conditions as it allows for faster recovery in the presence of certain race conditions when both sides are simultaneously attempting to recover a gap.

Tag         Field Name Data Type Req Description
Standard Header Y MsgType = 2
7 BeginSeqNo STRING Y First sequence number in the range to be resent.
16 EndSeqNo STRING Y Last sequence number in the range to be resent. For single message resend requests, set BeginSeqNo = EndSeqNo. If request is for all messages subsequent to a particular message, EndSeqNo = 0.
Standard Trailer Y

Reject < 3 >


Session Level Message Rejection

Equos sends a Reject<3> message in response to a message which is received but cannot be properly processed due to a session-level rule violation. An example of when a reject may be appropriate would be the receipt of a message with invalid basic data (e.g. MsgType=&) which successfully passes de-encryption, CheckSum (10) and BodyLength (9) checks.

As a rule, messages should be forwarded to the trading application for business level rejections whenever possible.

Tag         Field Name Data Type Req Description
Standard Header Y MsgType = 3
45 RefSeqNum SEQNUM Y Message Sequence Number of rejected message
371 RefTagID STRING Y The tag number of the FIX field being referenced.
372 RefMsgType STRING Y The MsgType(35) of the FIX message being rejected.
373 SessionRejectReason INT Y Code to identify reason for a session-level Reject message.

1 = Required tag missing
5 = Value is incorrect (out of range) for this tag
6 = Incorrect data format for value
11 = Invalid MsgType (35)
58 Text STRING N Text message elaboriting Reject Reason, where required
Standard Trailer Y

SequenceReset < 4 >


The Sequence Reset <4> message is used in response to a Resend Request <2> message when one or more messages must be skipped over for the following reasons:

During normal resend processing, the sending application may choose not to send a message (e.g. an aged order). During normal resend processing, a number of administrative messages are skipped and not resent (such as Heartbeat <0> and Test Request <1>).

Tag         Field Name Data Type Req Description
Standard Header Y MsgType = W
123 GapFillFlag BOOLEAN N Indicates that the Sequence Reset message is replacing administrative or application messages which will not be resent.

Y = Gap Fill Message, Msg Seq Num Field Valid
N = Sequence Reset, Ignore Msg Seq Num
36 NewSeqNo SEQNUM Y New sequence number
Standard Trailer Y

BusinessMessageReject < j >


The BusinessMessageReject message can reject an application-level message which fulfills session-level rules and cannot be rejected via any other means. Note if the message fails a session-level rule (e.g. body length is incorrect), a session-level Reject<3> message should be issued.

Tag         Field Name Data Type Req Description
Standard Header Y MsgType = j
45 RefSeqNum SEQNUM N Message Sequence Number of rejected message
372 RefMsgType STRING Y The Message Type of the FIX message being rejected
371 RefTagID INT N The tag number of the FIX field being referenced. Only sent when ‘Business Reject Message’ message is generated by the FIX engine.
379 BusinessRejectRefID STRING N The value of the business-level "ID" field on the message being referenced.
380 BusinessRejectReason INT Y Code to identify reason for this reject message:

1 = Unknown ID
2 = Unknown Security
3 = Unsupported Message Type
5 = Conditionally Required field missing
6 = Not authorized
0 = Other
58 Text STRING N Additional description of the error, when required
Standard Trailer Y

FIX Market Data

tbd

SecurityListRequest < x >


The Security List Request message is used to return a list of securities from Equos that match criteria provided on the request. Subscription for security status can be optionally specified by including the SecurityListRequestType(559) field on the message.

SubscriptionRequestType(263) specifies the criteria of the request:

Presently 559=4 is the only supported lookup

Tag         Field Name Data Type Req Description
Standard Header Y MsgType = x
320 SecurityReqID STRING Y Unique security request ID set by client
559 SecurityListRequestType INT Y Identifies the type/criteria of Security List Request

0 = Symbol
1 = CFICode
4 = All Securities
5 = MarketID
263 SubscriptionRequestType INT N Subscription Request Type

0 = Snapshot
1 = Snapshot + Updates (Subscribe)
2 = Disable previous Snapshot + Update Request (Unsubscribe)
55 Symbol STRING C Equos echange Symbol
48 SecurityID STRING C Equos Instrument ID
22 SecurityIDSource STRING C Identifies source of the SecurityID(48) value.

M = Equos Exchange Instrument ID
461 STRING C Indicates the type of security using ISO 10962 standard, Classification of Financial Instruments (CFI code) values.
1301 MarketID STRING C ISO 10383 Market Identifier Code (MIC).
Standard Trailer Y

SecurityList < y >


The Security List message is used to return a list of securities (instruments) that match the criteria specified in a Security List Request.

SecurityAltID

Equos supports 3 alternative Security Identifier Sources:


Security Status

When Equos lists a new Trading Pair or creates a new Derivative Contract, it will be added to the Security List

Tag Usage by Security Type

Tag     FIX Name                                     Spot         Perpetual    Future       Option      
Instrument Data
55 Symbol
Underlying
311 UnderlyingSymbol
309 UnderlyingSecurityID
305 UnderlyingSecurityIDSource
Trading Rules
55 Symbol





Tag         Field Name Data Type Req Description
Standard Header Y MsgType = y
320 SecurityReqID STRING N Unique security request ID set by client
322 SecurityResponseID STRING N Equos Identifier for the Security List message
893 LastFragment BOOLEAN N Indicates whether this message is the last in a sequence of messages for those messages that support fragmentation, such as Security List.

N = Not last message
Y = Last message.
393 TotNoRelatedSym INT N Used to indicate the total number of securities being returned for this request. Used in the event that message fragmentation is required.
560 SecurityRequestResult INT N Result of the Security Request identified by the SecurityReqID.

0 = Valid request
1 = Invalid or unsupported request
2 = No instruments found that match selection criteria.
146 NoRelatedSym NUMINGROUP Y Specifies the number of repeating symbols (instruments) specified
→ 55 Symbol STRING C Equos exchange Symbol
→ 48 SecurityID STRING C Equos Instrument ID
→ 22 SecurityIDSource STRING C Identifies source of the SecurityID(48) value.

M = Equos Exchange Instrument ID
→ 454 NoSecurityAltID NUMINGROUP ? Number of SecurityAltID (455) entries.
→ → 455 SecurityAltID STRING C Financial Instrument Global Identifier see OpenFIGI
→ → 456 SecurityAltIDSource STRING C Identifies source of the SecurityID(48) value.

S = Financial Instrument Global Identifier
→ → 455 SecurityAltID STRING C Financial Instrument Global Identifier see OpenFIGI
→ → 456 SecurityAltIDSource STRING C Identifies source of the SecurityID(48) value.

S = Financial Instrument Global Identifier
→ 461 CFICode STRING C Indicates the type of security using ISO 10962 standard, Classification of Financial Instruments (CFI code) values.
→ 1301 MarketID STRING C ISO 10383 Market Identifier Code (MIC).
→ 107 SecurityDesc STRING C Textual description for the instrument.
→ 965 SecurityStatus INT Y Denotes the current state of the Instrument

1 = Active
2 = Inactive
3 = Active, closing orders only
4 = Expired (Contract)
5 = Delisted
9 = Suspended
10 = Published
→ 15 Currency CURRENCY N Base or left hand currency code in the trading pair.
→ 521 ContAmtCurr CURRENCY N Quote or right hand currency code in the trading pair.
→ 120 SettlCurrency CURRENCY N Currency code of settlement denomination.
→ 479 CommCurrency CURRENCY N Specifies currency code used for commission.
→ 311 UnderlyingSymbol STRING N Underlying security's Symbol, for derivatives contracts.
→ 309 UnderlyingSecurityID STRING N Underlying security’s SecurityID. See SecurityID (48) field for description.
→ 305 UnderlyingSecurityIDSource STRING N Underlying security’s SecurityIDSource. Valid values: see SecurityIDSource (22) field.
→ 308 UnderlyingSecurityExchange STRING N Underlying security's SecurityExchange. Can be used to identify the underlying security.
→ 255 IssueDate UTCTIMESTAMP C Date the instrument issued, becomes active for trading.
→ 200 MaturityMonthYear MONTHYEAR C Can be used with standardized derivatives vs. the MaturityDate (541) field. Month and Year of the maturity (used for standardized futures and options). Format: YYYYMM (i.e. 99903) YYYYMMDD (20030323) YYYYMMwN (200303w) for week A specific date or can be appended to the MaturityMonthYear. For instance, if multiple standard products exist that mature in the same Year and Month, but actually mature at a different time, a value can be appended, such as "w" or "w2" to indicate week as opposed to week 2 expiration. Likewise, the date (0-3) can be appended to indicate a specific expiration (maturity date).
→ 541 MaturityDate UTCTIMESTAMP C Date of a derivatives contract maturity.
→ 1079 MaturityTime UTCTIMESTAMP C Time of a derivatives contract maturity.
→ 854 QtyType INT C Type of quantity specified in a quantity field:

0 = Units (shares, par, currency)
1 = Contracts (if used - must specify ContractMultiplier (tag 231))
→ 231 ContractMultiplier FLOAT C For a futures instrument: The quantity of underlying units per 1 futures contract
→ 201 PutOrCall BOOLEAN C Indicates whether an option contract is a put or call:

0 = Put
1 = Call
→ 202 StrikePrice PRICE C Strike Price for an Option.
→ 947 StrikeCurrency CURRENCY C Currency in which the StrikePrice is denominated.
→ 2576 InstrumentPricePrecision INT C Specifies the number of decimal places for instrument prices.
→ 969 MinPriceIncrement INT C Minimum price change for a given symbol.
→ 1146 MinPriceIncrementAmount AMOUNT C Minimum price increment amount associated with the MinPriceIncrement(969). For listed derivatives, the value can be calculated by multiplying MinPriceIncrement by ContractValueFactor(231).
→ 562 MinTradeVol QTY N The minimum order quantity that can be submitted for an order.
→ 1140 MaxTradeVol QTY N The maximum order quantity that can be submitted for a security.
Standard Trailer Y

MarketDataRequest < V >


Tag         Field Name Data Type Req Description
Standard Header Y MsgType = V
262 MDReqID STRING N A unique ID assigned by the client to the market data request
263 SubscriptionRequestType CHAR Y Subscription Request Type:

1 = Snapshot + Updates (Subscribe)
2 = Disable previous Snapshot + Update Request (Unsubscribe)
264 MarketDepth INT Y Depth of Market for Snapshot:

0 = Full Book
1 = Top of Book
265 MDUpdateType INT N Specifies the type of Market Data update. Required if SubscriptionRequestType = 1 Snapshot + Updates (Subscribe)

0 = Full refresh
1 = Incremental refresh
266 AggregatedBook BOOLEAN Y Specifies whether or not book entries should be aggregated.

Y = book entries to be aggregated
N = book entries should not be aggregated
Repeating Group < NoMDEntryTypes > (No of Market Data Entry Types)
267 NoMDEntryTypes NUMINGROUP Y Number of Market Data types being requested in MDEntryType
→ 269 MDEntryType CHAR Type of Market Data entry

0 = Bid
1 = Offer
2 = Trade (Trade-By-Level if Request contains AggregatedBook (266=Y))
3 = Index Value
4 = Opening Price
5 = Closing Price
6 = Settlement Price
7 = Trading session high price
8 = Trading session low price
A = Imbalance
B = Total Traded Volume / Volume (VOI) when paired with 269=C
C = Open Interest
D = Composite Underlying Price
J = Empty book
M = Prior Settle Price
Q = Auction Clearing Price (Equilibrium Price)
u = Anomalous Order Threshold Reference Price
v = Anomalous Order Threshold Upper Range
w = Anomalous Order Threshold Lower Range
x = Extreme Trade Range Reference Price
y = Extreme Trade Range Upper Range
z = Extreme Trade Range Lower Range.
end group < NoMDEntryTypes >
group < NoRelatedSym >
146 NoRelatedSym NUMINGROUP Y Number of Symbols in the request.
→ 55 Symbol STRING C Equos Exchange Symbol, if using Se
→ 48 SecurityID STRING C The Security Indentifier (type) as specified/requested in SecurityIDSource(22)
→ 22 SecurityIDSource STRING C Identifies class or source of the SecurityID(48) value.
end group < NoRelatedSym >
Standard Trailer Standard Trailer Y

MarketDataRequestReject < Y >


The Market Data Request Reject < Y > is used when Equos cannot honor the Market Data Request, due to business or technical reasons. Clients may choose to limit various parameters, such as the size of requests, whether just the top of book or the entire book may be displayed, and whether Full or Incremental updates must be used.

Tag         Field Name Data Type Req Description
Standard Header Y MsgType = Y
262 MDReqID STRING Y A unique ID assigned by the client to the market data request, which is being rejected
281 MDReqRejReason CHAR N Reason for the rejection of a Market Data request:

0 = Unknown symbol
1 = Duplicate MDReqID
2 = Insufficient Bandwidth
3 = Insufficient Permissions
4 = Unsupported SubscriptionRequestType
5 = Unsupported MarketDepth
6 = Unsupported MDUpdateType
7 = Unsupported AggregatedBook
8 = Unsupported MDEntryType
9 = Unsupported TradingSessionID
A = Unsupported Scope
B = Unsupported OpenCloseSettleFlag
C = Unsupported MDImplicitDelete
D = Insufficient credit
58 Text STRING N Free format text string describing the reason for the rejection.
Standard Trailer Standard Trailer Y

MarketDataSnapshotFullRefresh < W >


The Market Data messages are used as the response to a Market Data Request message. In all cases, one Market Data message refers only to one Market Data Request. It can be used to transmit a 2-sided book of orders or list of quotes, a list of trades, index values, opening, closing, settlement, high, low, or VWAP prices, the trade volume or open interest for a security, or any combination of these.

Tag         Field Name Data Type Req Description
Standard Header Y MsgType = W
262 MDReqID STRING N A unique ID assigned by the client when responding to a MarketDataRequest < V >
55 Symbol STRING C Equos Exchange Symbol
48 SecurityID STRING C The Security Identifier (type) as specified/requested in SecurityIDSource(22)
22 SecurityIDSource STRING C Identifies class or source of the SecurityID(48) value.
461 CFICode STRING N Indicates the type of security using ISO 10962 standard, Classification of Financial Instruments (CFI code) values.
1301 MarketID STRING N ISO 10383 standard: Market Identifier Code (MIC)
group < NoMDEntries >
268 NoMDEntries NUMINGROUP Y Number of entries following.
→ 269 MDEntryType CHAR Y Must be the first field in this repeating group.

0 = Bid
1 = Offer
2 = Trade (Trade-By-Level if Request contains AggregatedBook (266=Y))
3 = Index Value
4 = Opening Price
5 = Closing Price
6 = Settlement Price
7 = Trading session high price
8 = Trading session low price
A = Imbalance
B = Total Traded Volume / Volume (VOI) when paired with 269=C
C = Open Interest
D = Composite Underlying Price
J = Empty book
M = Prior Settle Price
Q = Auction Clearing Price (Equilibrium Price).
u = Anomalous Order Threshold Reference Price
v = Anomalous Order Threshold Upper Range
w = Anomalous Order Threshold Lower Range
x = Extreme Trade Range Reference Price
y = Extreme Trade Range Upper Range
z = Extreme Trade Range Lower Range
→ 270 MDEntryPx PRICE Price of the Market Data Entry.
→ 271 MDEntrySize QTY Size of the Market Data Entry.
→ 272 MDEntryDate UTCDateOnly C Date of Market Data Entry (Trades only).
→ 273 MDEntryTime UTCTimeOnly C Time of Market Data Entry (Trades only).
→ 274 TickDirection CHAR C Direction of the "tick"

0 = Plus Tick
1 = Zero-Plus Tick
2 = Minus Tick
3 = Zero-Minus Tick
end group < NoMDEntries >
Standard Trailer Y

MarketDataIncrementalRefresh < X >


The second Market Data message format is used for incremental updates. Market Data Entries may have an MDEntryID <278> unique among all currently active Market Data Entries so they can be referenced for the purposes of deleting and changing them later. When changing a Market Data Entry, it may keep the same MDEntryID <278>, in which case only MDEntryID <278> would be populated, or the MDEntryID <278> may change, in which case MDEntryID <278> will contain the new ID, and MDEntryRefID <280> will contain the ID of the Market Data Entry being changed. An MDEntryID <278> can be reused within a day only if it has first been deleted.

Tag         Field Name Data Type Req Description
Standard Header Y MsgType = X
262 MDReqID STRING Y A unique ID assigned by the client to the market data request
group < NoMDEntries > Number of Market Data entries
268 NoMDEntries NUMINGROUP Y Number of Market Data entries following.
→ 279 MDUpdateAction CHAR Y Must be the first tag in each repeating group. Valid values:

0 = New
1 = Change
2 = Delete.
→ 285 DeleteReason CHAR Y Reason for deletion. Valid values:

0 = Cancellation / Trade Bust
1 = Error
→ 55 Symbol STRING N Equos Exchange Symbol
→ 48 SecurityID STRING N The Security Identifier (type) as specified/requested in SecurityIDSource(22)
→ 22 SecurityIDSource STRING N Identifies class or source of the SecurityID(48) value.
→ 461 CFICode STRING N Indicates the type of security using ISO 10962 standard, Classification of Financial Instruments (CFI code) values.
→ 1301 MarketID STRING N ISO 10383 standard: Market Identifier Code (MIC)
→ 269 MDEntryType CHAR Y Must be the first field in this repeating group.

0 = Bid
1 = Offer
2 = Trade (Trade-By-Level if Request contains AggregatedBook (266=Y))
3 = Index Value
4 = Opening Price
5 = Closing Price
6 = Settlement Price
7 = Trading session high price
8 = Trading session low price
A = Imbalance
B = Total Traded Volume / Volume (VOI) when paired with 269=C
C = Open Interest
D = Composite Underlying Price
J = Empty book
M = Prior Settle Price
Q = Auction Clearing Price (Equilibrium Price).
u = Anomalous Order Threshold Reference Price
v = Anomalous Order Threshold Upper Range
w = Anomalous Order Threshold Lower Range
x = Extreme Trade Range Reference Price
y = Extreme Trade Range Upper Range
z = Extreme Trade Range Lower Range
→ 270 MDEntryPx PRICE Price of the Market Data Entry.
→ 271 MDEntrySize QTY Size of the Market Data Entry.
→ 272 MDEntryDate UTCDateOnly C Date of Market Data Entry (Trades only).
→ 273 MDEntryTime UTCTimeOnly C Time of Market Data Entry (Trades only).
→ 274 TickDirection CHAR C Direction of the "tick"

0 = Plus Tick
1 = Zero-Plus Tick
2 = Minus Tick
3 = Zero-Minus Tick
end group < NoMDEntries >
Standard Trailer Y

FIX Order Management

NewOrderSingle< D>


The NewOrderSingle< D> message is used to submit an order to Equos Exchange for execution. If accepted or rejected Equos will respond with an ExecutionReport<8> message.

If SecurityID is used the ID and SecurityIDSource will be echoed in ExecutionReport<8>

Tag         Field Name Data Type Req Description
Standard Header Y MsgType = D
1 Account STRING N Specify valid account id for on behalf of order submission. Submitting session user should have required privilege.
11 ClOrdID STRING Y UUID selected by client to identify the order
Unique identifier for Order as assigned by the client. Uniqueness must be guaranteed within a single trading session by the sender for clients who do not submit long dated orders (GTC/GTD). Clients who submit long dated orders must guarantee uniqueness across trading sessions.
55 Symbol STRING C Equos exchange Symbol, if using SecurityID/SecurityIDSource fields, set Symbol to N/A
48 SecurityID STRING C Security identifier of the form specified SecurityIDSource<22>
22 SecurityIDSource STRING C Identifies source of the SecurityID<48> value.

M = Equos Instrument ID
8 = Equos Exchange Symbol
S = Financial Instrument Global Identifier
54 Side CHAR Y Side of order:

1 = Buy
2 = Sell
38 OrderQty QTY Y Order quantity specified in the base Currency<15> or Contracts
40 OrdType CHAR Y The following order types can be replaced:

1 = Market Order
2 = Limit Order
3 = Stop Order
4 = Stop Limit Order
18 ExecInst MultipleValueString N Instructions for handling the order. If more than one instruction is applicable to an order, this field can contain multiple instructions separated by space.

6 = Participate don't initiate (Post Only)
E = Do not increase - DNI (under development)

44 Price PRICE N Order limit price.
99 StopPx PRICE C The price at which the stop is triggered. Required for OrdType<40> = 3 (Stop Order) or = 4 (Stop Limit Order)
59 TimeInForce CHAR N Specifies how long the order remains in effect. Absence of this field is interpreted as "Good Till Cancel". Valid values:

1 = Good Till Cancel (GTC)
3 = Immediate or Cancel (IOC)
4 = Fill or Kill (FOK)
5 = Good Till Crossing (GTX)
6 = Good Till Date (GTD)
110 MinQty QTY N The minimum quantity for which the order can be executed for TimeInForce<110> = 3 (Immediate or Cancel).
432 ExpireDate LOCALMKTDATE C Conditionally required if TimeInForce<59> = GTD and ExpireTime<126> is not specified.
126 ExpireTime UTCTIMESTAMP C Conditionally required if TimeInForce<59> = GTD and ExpireDate<432> is not specified..
775 BookingType INT N Method for booking out this order. Used when notifying Equos that an order to be settled as an OTC derivative (e.g. CFD or similar)

0 = Regular Spot booking
1 = CFD (Contract for difference)
2 = Total Return Swap
20003 UserOrderLabel STRING N User specified order label, will be echoed on all ExecutionReport<8> with this ClOrdID<11> Maximum of 60 characters
60 TransactTime UTCTIMESTAMP Y Timestamp when the business transaction represented by the message occurred.
Standard Trailer Y

ExecutionReport<8>


The Execution Report (8) message is used to:
* Confirm the receipt of an order * Confirm changes to an existing order * Confirm or convey an order cancellation or expiration * Convey fill information on working orders * Reject orders * Convey information about re-stated long orders carried from one trading session to the next.

Tag         Field Name Data Type Req Description
Standard Header Y MsgType = 8
1 Account STRING Y Specify valid account id for on behalf of order submission. Submitting session user should have required privilege.
37 OrderID STRING Y Unique order identifier assigned by Equos
198 SecondaryOrderID STRING N
11 ClOrdID STRING Y UUID selected by client to identify the order
Unique identifier for Order as assigned by the client. Uniqueness must be guaranteed within a single trading session by the sender for clients who do not submit long dated orders (GTC/GTD). Clients who submit long dated orders must guarantee uniqueness across trading sessions.
41 OrigClOrdID STRING N ClOrdID of the order to cancel (originally assigned by the client).
453 NoPartyIDs NUMINGROUP N
→ 448 PartyID STRING N Used to identify source of PartyID <448>. Required if PartyIDSource <447> is specified. Required if NoPartyIDs <453> > 0.
→ 447 PartyIDSource CHAR N Identifies class or source of the PartyID <448> value. Required if PartyID <448> is specified. Note: applicable values depend upon PartyRole <452> specified.
→ 452 PartyRole INT N Identifies the type of PartyID <448> (e.g. Executing Broker). Required if NoPartyIDs <453> > 0.
584 MassStatusReqID STRING N Value assigned by issuer of Mass Status Request to uniquely identify the request.
17 ExecID STRING N identifier of the execution report (not an actual execution).
150 ExecType CHAR Y The execution report’s type.

0 = New
4 = Canceled
5 = Replace
8 = Rejected
C = Expired
F = Fill Status
I = Order Status.
39 OrdStatus CHAR Y Identifies status of order.

0 = New
1 = Partially filled
2 = Filled
3 = Done for Day
4 = Cancelled
8 = Rejected
C = Expired.
103 OrdRejReason CHAR N Only present when ExecType = 8, Rejected.

1 = Unknown Symbol
2 = Exchange Closed
3 = Order exceeds limit
5 = Unknown Order
6 = Duplicate Order (e.g. dupe CLOdID)
11 = Unsupported order characteristic
13 = Incorrect Quantity
15 = Unknown Account
16 = Price exceeds current price band
18 = Invalid Price
19 = Invalid Order Qty
25 = Insufficient credit limit
27 = Exceed maximum notional order amount
101 = Instrument halted
v = Order exceeds Anomalous Order Threshold Upper Range
w = Order exceeds Anomalous Order Threshold Lower Range
55 Symbol STRING C Equos exchange Symbol, still returned even if using SecurityID/SecurityIDSource fields used in in the initiating order, and set Symbol<55> set to N/A
48 SecurityID STRING C Security identifier of the form specified SecurityIDSource<22> of the type used on the initiating order
22 SecurityIDSource STRING C Identifies source of the SecurityID<48> value.

M = Equos Instrument ID
8 = Equos Exchange Symbol
S = Financial Instrument Global Identifier

of the type used on the initiating order
1301 MarketID STRING C ISO 10383 Market Identifier Code (MIC).
15 Currency CURRENCY N Currency of the Price, base or left hand currency code in the trading pair.
54 Side CHAR Y Side of order:

1 = Buy
2 = Sell
38 OrderQty QTY Y Order quantity specified in the base Currency<15> or Contracts
40 OrdType CHAR Y The following order types can be replaced:

1 = Market Order
2 = Limit Order
3 = Stop Order
4 = Stop Limit Order
18 ExecInst MultipleValueString N Instructions for handling the order. If more than one instruction is applicable to an order, this field can contain multiple instructions separated by space.

6 = Participate don't initiate (Post Only)
G = All or none - AON
R = Primary peg (primary market - buy at bid/sell at offer)
44 Price PRICE N Order limit price.
99 StopPx PRICE C The price at which the stop is triggered. Required for OrdType<40> = 3 (Stop Order) or = 4 (Stop Limit Order)
59 TimeInForce CHAR N Specifies how long the order remains in effect. Absence of this field is interpreted as "Good Till Cancel". Valid values:

1 = Good Till Cancel (GTC)
3 = Immediate or Cancel (IOC)
4 = Fill or Kill (FOK)
5 = Good Till Crossing (GTX)
6 = Good Till Date (GTD)
432 ExpireDate LOCALMKTDATE C Conditionally required if TimeInForce<59> = GTD and ExpireTime<126> is not specified.
126 ExpireTime UTCTIMESTAMP C Conditionally required if TimeInForce<59> = GTD and ExpireDate<432> is not specified..
775 BookingType INT N Method for booking out this order. Used when notifying Equos that an order to be settled as an OTC derivative (e.g. CFD or similar)

0 = Regular Spot booking
1 = CFD (Contract for difference)
2 = Total Return Swap
854 QtyType INT Y Type of quantity specified in a quantity field:

0 = Units (currency)
1 = Contracts (if used - must specify ContractMultiplier (tag 231))
231 ContractMultiplier FLOAT C Specifies a multiply factor to convert from contracts to total units)
32 LastQty QTY C Quantity bought/sold on this (last) fill.
31 LastPx PRICE C Price of this (last) fill.
6 AvgPx PRICE C Average execution price or 0.0 if not executed yet or rejected.
151 LeavesQty QTY C Amount of order open for further execution. If the OrdStatus 39 = 4, C, the order is no longer active and LeavesQty can = 0. Otherwise, LeavesQty = OrderQty - CumQty
14 CumQty QTY C Total amount of an order currently executed in a chain of partial fills.
84 CxlQty QTY C Average execution price or 0.0 if not executed yet or rejected.
1057 AggressorIndicator CHAR N Used to identify whether the order initiator is an aggressor

Y = Order initiator is aggressor
N = Order initiator is passive
1003 TradeID STRING N The unique ID assigned to the trade entity once it is received or matched by the exchange or central counterparty.
434 CxlRejResponseTo CHAR Y Identifies the type of request that a Cancel Reject is in response to.

1 = Order cancel request
2 = Order cancel/replace request.
102 CxlRejReason CHAR N Code to identify reason for cancel rejection.

0 = Too late to cancel
1 = Unknown order
2 = Broker/Exchange Option
6 = Duplicate ClOrdID (11) received
8 = Price exceeds current price band
100 = Order not currently accessible for cancellation or modification
20003 UserOrderLabel STRING N User specified order label, will be echoed from NewOrderSingle with this ClOrdID<11> Maximum of 60 characters
60 TransactTime UTCTIMESTAMP Y Timestamp when the business transaction represented by the message occurred.
Standard Trailer Standard Trailer Y

OrderCancelRequest


The Order Cancel Request message requests the cancellation of all of the remaining quantity of an existing order. Note that the Order Cancel/Replace Request should be used to partially cancel (reduce) an order.

The request will only be accepted if the order can successfully be pulled back from the exchange floor without executing.

A cancel request is assigned a ClOrdID <11> and is treated as a separate entity. If rejected, the ClOrdID <11> of the cancel request will be sent in the Cancel Reject <3> message, as well as the ClOrdID <11> of the actual order in the OrigClOrdID <41> field. The ClOrdID <11> assigned to the cancel request must be unique amongst the ClOrdID <11> assigned to regular orders and replacement orders.

An immediate response to this message is required. It is recommended that an ExecutionReport with ExecType <150>=Pending Cancel be sent unless the Order Cancel Request can be immediately accepted (ExecutionReport with ExecType <150>=Canceled) or rejected (Order Cancel Reject <9> message).

Either Symbol or SecurityID/SecurityIDSource must be specified

Tag         Field Name Data Type Req Description
Standard Header Y MsgType = F
1 Account STRING N Specify valid account id for on behalf of order submission. Submitting session user should have required privilege.
11 ClOrdID STRING Y UUID selected by client to identify the order
Unique identifier for Order as assigned by the client. Uniqueness must be guaranteed within a single trading session by the sender for clients who do not submit long dated orders (GTC/GTD). Clients who submit long dated orders must guarantee uniqueness across trading sessions.
41 OrigClOrdID STRING N ClOrdID of the order to cancel (originally assigned by the client).
37 OrderID STRING Y Unique order identifier assigned by Equos
55 Symbol STRING C Equos exchange Symbol, if using SecurityID/SecurityIDSource fields, set Symbol to N/A
48 SecurityID STRING C Security identifier of the form specified SecurityIDSource<22>
22 SecurityIDSource STRING N Identifies source of the SecurityID<48> value.

M = Equos Instrument ID
8 = Equos Exchange Symbol
S = Financial Instrument Global Identifier
54 Side CHAR N Side of order:

1 = Buy
2 = Sell
60 TransactTime UTCTIMESTAMP Y Timestamp when the business transaction represented by the message occurred.
Standard Trailer Y

OrderCancelReplaceRequest


The order cancel/replace request is used to change the parameters of an existing order.

Do not use this message to cancel the remaining quantity of an outstanding order, use the Order Cancel Request message for this purpose.

Cancel/Replace will be used to change any valid attribute of an open order (i.e. reduce/increase quantity, change limit price, change instructions, etc.), Subject <147> to agreement between counterparties, it can be used to re-open a filled order by increasing OrderQty <38>.

An immediate response to this message is required. It is recommended that an ExecutionRpt with ExecType <150>=Pending Replace be sent unless the Order Cancel/Replace Request can be immediately accepted (ExecutionRpt with ExecType <150>=Replace) or rejected (Order Cancel Reject <9> message).

The Cancel/Replace request will only be accepted if the order can successfully be pulled back from the exchange floor without executing. Requests which cannot be processed will be rejected using the Cancel Reject <3> message. The Cancel Reject <3> message should provide the ClOrdID <11> and OrigClOrdID <41> values which were specified on the Cancel/Replace Request message for identification.

Note that while it is necessary for the ClOrdID <11> to change and be unique, the broker's OrderID <37> field does not necessarily have to change as a result of the Cancel/Replace request.

The protocol supports the chaining of multiple cancel/replace requests, though trading counterparties may not support this functionality. Care should be taken if the order sender wishes to send a cancel/replace request when there is one or more cancel/replaces which have not been accepted or rejected - in general:

The order sender should chain client order ids on an ‘optimistic' basis, i.e. set the OrigClOrdID <41> to the last non rejected ClOrdID <11> sent

The order receiver should chain client order ids on a ‘pessimistic' basis, i.e. set the OrigClOrdID <41> on execution reports that convey the receipt or successful application of a cancel/replace and Order Cancel Reject <9> messages to be the last ‘accepted' ClOrdID <11> (See "Order State Change Matrices" for examples of this)

In the event that the order sender wants to chain order cancel/replaces rapidly then they should ensure that each replace request contains the full details of the order as they would now like it to be. For example if an attempt is made to change the limit price and then an immediate request to change the quantity is issued then if the desired behavior is that both the limit price and quantity should be changed then the second request should include the revised limit price (in case the first replace request is rejected).

All of the application-level fields in the original order should be retransmitted with the original values in the Order Cancel/Replace Request , except the fields that are being changed. Any field may be changed with this message except those in the <> component block and limited changes to the Side <54> field (noted below), however, buy-side firms should note that sell-side firms may further restrict which fields they allow to change; hence bilateral agreement is required. For example, some sell-side firms may not allow fields such as Side <54>, SettlDate <64>, etc. to change. Sell-side firms should validate the Order Cancel/Replace Request to ensure that the client is not requesting a change for a field that the sell-side cannot change; in this case the sell-side should send a Cancel Reject <3> message with CxlRejReason <102> = 2 (Broker/Exchange Option).

When modifying ExecInst <18> values in a replacement order, it is necessary to re-declare all ExecInst <18> in the replacement order. ExecInst <18> values will not be carried forward from the original order to the replacement unless re-declared.

Order Cancel/Replace Request (a.k.a. Order Modification Request)

Tag         Field Name Data Type Req Description
Standard Header Y MsgType = F
11 ClOrdID STRING Y UUID selected by client to identify the order
Unique identifier for Order as assigned by the client. Uniqueness must be guaranteed within a single trading session by the sender for clients who do not submit long dated orders (GTC/GTD). Clients who submit long dated orders must guarantee uniqueness across trading sessions.
41 OrigClOrdID STRING Y ClOrdID of the order to cancel (originally assigned by the client).
37 OrderID STRING Y Unique order identifier assigned by Equos
1 Account STRING N Specify valid account id for on behalf of order submission. Submitting session user should have required privilege.
55 Symbol STRING C Equos exchange Symbol, if using SecurityID/SecurityIDSource fields, set Symbol to N/A
48 SecurityID STRING C Security identifier of the form specified SecurityIDSource<22>
22 SecurityIDSource STRING C Identifies source of the SecurityID<48> value.

M = Equos Instrument ID
8 = Equos Exchange Symbol
S = Financial Instrument Global Identifier
54 Side CHAR Y Side of order:

1 = Buy
2 = Sell
44 Price PRICE N Original order price.
640 Price2 PRICE N New price of the order.
38 OrderQty QTY Y Orignial order quantity specified in the base Currency<15> or Contracts
192 OrderQty2 QTY Y New order quantity specified in the base Currency<15> or Contracts
40 OrdType CHAR Y The following order types can be replaced:

1 = Market Order
2 = Limit Order
3 = Stop Order
4 = Stop Limit Order
99 StopPx PRICE C The price at which the stop is triggered. Required for OrdType<40> = 3 (Stop Order) or = 4 (Stop Limit Order)
59 TimeInForce CHAR N Specifies how long the order remains in effect. Absence of this field is interpreted as "Good Till Cancel". Valid values:

1 = Good Till Cancel (GTC)
3 = Immediate or Cancel (IOC)
4 = Fill or Kill (FOK)
5 = Good Till Crossing (GTX)
6 = Good Till Date (GTD)
1 Account STRING Y Specify valid account id for on behalf of order submission. Submitting session user should have required privilege.
60 TransactTime UTCTIMESTAMP Y Timestamp when the business transaction represented by the message occurred.
Standard Trailer Y

OrderCancelReject<9>


The order cancel reject message is issued by the broker upon receipt of a cancel request or cancel/replace request message which cannot be honored. Requests to change price or decrease quantity are executed only when an outstanding quantity exists. Filled orders cannot be changed (i.e quantity reduced or price change. However, the broker/sellside may support increasing the order quantity on a currently filled order).

When rejecting a Cancel/Replace Request (or Cancel Request), the Cancel Reject <3> message should provide the ClOrdID <11> which was specified on the Cancel/Replace Request (or Cancel Request) message for identification, and the OrigClOrdId should be that of the last accepted order (except in the case of CxlRejReason <102> = 'Unknown Order'.

When rejecting an Order Mass Cancel Request, the ClOrdID <11> should be set to the ClOrdID <11> value of the Order Mass Cancel Request. OrigClOrdID <41> is not specified for a rejected Order Mass Cancel Requests

The execution message responds to accepted cancel request and cancel/replace request messages.

Tag         Field Name Data Type Req Description
Standard Header Y MsgType = 9
1 Account STRING Y Specify valid account id for on behalf of order submission. Submitting session user should have required privilege.
37 OrderID STRING Y Unique order identifier assigned by Equos
11 ClOrdID STRING Y Unique identifier for Order as assigned by the client.
41 OrigClOrdID STRING Y ClOrdID of the order to cancel (originally assigned by the client).
39 OrdStatus CHAR Y Identifies status of order.

0 = New
1 = Partially filled
2 = Filled
3 = Done for Day
4 = Cancelled
8 = Rejected
C = Expired.
434 CxlRejResponseTo CHAR Y Identifies the type of request that a Cancel Reject is in response to.

1 = Order cancel request
2 = Order cancel/replace request.
102 CxlRejReason CHAR N Code to identify reason for cancel rejection.

0 = Too late to cancel
1 = Unknown order
2 = Broker/Exchange Option
6 = Duplicate ClOrdID (11) received
8 = Price exceeds current price band
100 = Order not currently accessible for cancellation or modification
58 Text STRING Y Descriptive text message elaborating on the reason of the Cancel Reject if required
60 TransactTime UTCTIMESTAMP Y Timestamp when the business transaction represented by the message occurred.
Standard Trailer Y

OrderMassStatusRequest


Under Development

The order mass status request message requests the status for orders matching criteria specified within the request.

A mass status request is assigned a ClOrdID <11> and is treated as a separate entity.

ExecutionReports with ExecType <150>="Order Status" are returned for all orders matching the criteria provided on the request.

Specifying order selection criteria is specified using the MassStatusReqType <585> field:

Tag         Field Name Data Type Req Description
Standard Header Y MsgType = AF
584 MassStatusReqID STRING Y Unique mass status request ID set by requesting client
585 MassStatusReqType STRING Y Mass Status Request Type

1 = Status for orders for a Security
2 = Status for orders for an Underlying Security
4 = Status for orders for a CFICode
6 = Status for orders for a trading session
7 = Status for all orders
55 Symbol STRING C Equos exchange Symbol, if using SecurityID/SecurityIDSource fields, set Symbol to N/A
48 SecurityID STRING C Security identifier of the form specified SecurityIDSource<22>
22 SecurityIDSource STRING C Identifies source of the SecurityID<48> value.

M = Equos Instrument ID
8 = Equos Exchange Symbol
S = Financial Instrument Global Identifier
60 TransactTime UTCTIMESTAMP Y Timestamp when the business transaction represented by the message occurred.
Standard Trailer Y

FIX Drop Copy

tbd

ccxt

ccxt is an open source library, that provides a normalised interface to trade on more than 100 cryptocurrency exchanges.

This provides quick access to market data for storage, analysis, visualization, indicator development, algorithmic trading, strategy backtesting, bot programming, and related software engineering. It is intended to be used by coders, developers, technically-skilled traders, data-scientists and financial analysts for building trading algorithms.

Current feature list:

To get started, visit ccxt’s GitHub page (https://github.com/ccxt/ccxt/) and check out EQUOS’s integrations in either:

Revision History


EQUOS Platform version, will be available in the in the server FIX Logon<1> message from the next release

Date Ver API End Point Type Description
2020/08/06 4.5 REST/WS Python Sample Codes for REST / WS and Up to date REST / WS / FIX API documents Enhancement Python Sample Codes added for REST / WS APIs and Updated REST/WS/FIX APIs documentation
2020/07/28 4.4 REST/WS GET https://equos.io/api/userTrades
wss://equos.io/ws//userTrades
Enhancement Average execution price added
2020/07/21 4.2.7 REST/WS GET https://equos.io/api/getTradeHistory
wss://equos.io/ws/tradehistory
Enhancement AggressorSide added to tradeHistory endpoint
2020/06/17 4.2 FIX ExecutionReport<8> Enhancement Commission fields added to ExecutionReport
2020/05/15 3.10 All All New Feature USD/USDC Book consolidation
2020/05/15 3.10 All All System Change USD Instruments removed from the trading list
2020/05/15 3.10 REST New https://equos.io/api/
Legacy https://trade.equos.io/api/
System Change Endpoint URL change
2020/05/06 3.02 FIX Logon<1> New Feature Cancel on Disconnect
2020/04/28 3.00 ccxt github developer resources New Feature ccxt API support released
2020/04/06 2.20 REST POST https://trade.equos.io/api/logon
POST https://trade.equos.io/api/order
POST https://trade.equos.io/api/cancelOrder
POST https://trade.equos.io/api/cancelReplaceOrder
POST https://trade.equos.io/api/getOrders
POST https://trade.equos.io/api/getOrder
POST https://trade.equos.io/api/getPositions
POST https://trade.equos.io/api/getRisk
Update Institutional/multiple account support in REST
2020/03/27 2.00 All EQUOS developer documentation site Initial Document Release