2021/3/1 Revision History – API Reference

Revision History Introduction What is an API? Using the EQUOS API? Support Terms of Service Authentication REST API Overview Overview REST Public Endpoints Get Instruments Get Instrument Pairs Get Order Book Get Trade History Get Funding Rate History Get Chart REST Private Endpoints Roles Logon Signing REST API Calls Place a New Order Cancel Order Cancel Replace Get Orders List Get Order Status Get Order History Get User Trade History List Position Cancel All Orders Get User History Get Risk REST Wallet Endpoints Get Deposit Addresses List Withdraw Requests Send Withdraw Request Get Transfer History WebSocket Overview Protocol Overview Heartbeat / Websocket Ping Pong Subscribe Unsubscribe WebSocket Public Channels Order Book Channel Trade History Channel Chart Channel Ticker WebSocket Private Channels User Orders Channel https://developer.equos.io/#revision-history 1/113 2021/3/1 Revision History – API Reference User Position Channel User Risk Channel FIX Overview FIX Dictionary Testnet Environment SSL Proxy Third Party Platform and Network Support Instruments and Trading Pairs Symbols Message Identifiers Data Types Standard Header Standard Trailer FIX Session Management Commencing a Session Ending a Session Logon < A > Logout < 5 > Heartbeat <0> TestRequest <1> ResendRequest <2> Reject < 3 > SequenceReset < 4 > BusinessMessageReject < j > FIX Data SecurityListRequest < x > SecurityList < y > MarketDataRequest < V > MarketDataRequestReject < Y > MarketDataSnapshotFullRefresh < W > MarketDataIncrementalRefresh < X > FIX Order Management NewOrderSingle< D > ExecutionReport<8> OrderCancelRequest < F > OrderCancel/ReplaceRequest< G > OrderCancelReject<9> OrderMassStatusRequest < AF > FIX Drop Copy ccxt Revision History

Revision History

Date Ver API End Point Type Description

https://developer.equos.io/#revision-history 2/113 2021/3/1 Revision History – API Reference

Date Ver API End Point Type Description

REST https://equos.io/api/sendWithdrawRequest https://equos.io/api/getTransferHistory Updates for crypto New Features 2021/02/03 5.0 REST withdrawal endpoint and https://equos.io/api/getUserHistory and updates order endpoints https://equos.io/api/cancelOrder https://equos.io/api/userTrades https://equos.io/api/cancelAll

REST https://equos.io/api/getRisk

REST & Updated mandatory fields 2021/01/12 4.13 WSS Updates WSS for Institutional User wss://equos.io/ws/userrisk wss://equos.io/ws/userorders wss://equos.io/ws/userposition

REST updated REST api/getRisk https://equos.io/api/getRisk wss/userrisk wss://equos.io/ws/userrisk api/getOrderStatus( REST & 2021/01/11 4.12 https://equos.io/api/getOrderStatus Updates removed old endpoint FIX /getOrder) FIX MarketDataRequest < V > FIX updated MDEntryType<269>

https://equos.io/api/userTrades https://equos.io/api/getInstrumentPairs https://equos.io/api/getRisk wss://equos.io/ws/userrisk updates to api/userTrades REST & https://equos.io/api/getOrder and updates to 2021/01/08 4.11 Updates WSS https://equos.io/api/getInstruments getInstrumentPairs with https://equos.io/api/getInstrumentPairs example for Perpetuals https://equos.io/api/getOrderBook https://equos.io/api/getTradeHistory https://equos.io/api/getChart

New API health check https://equos.io/api/health New Feature endpoint and 2020/12/24 4.10 REST https://equos.io/api/getOrderStatus and updates api/getOrderStatus endpoint

wss://equos.io/ws/ticker wss://equos.io/w Public Websocket endpoints with Unsubscribe s/orderbook wss://equos.io/ws/tradehistor 2020/11/24 4.9 WSS New Feature and updates on description y wss://equos.io/ws/chart https://equos.i of the FIX and REST o/api/userTrades endpoints and examples.

2020/09/20 4.8 WSS wss://equos.io/ws/ticker New Feature Ticker Endpoint

GET https://equos.io/api/getFundingRateHis Perpetual Funding Rate 2020/09/05 4.7 REST New Feature tory History

https://developer.equos.io/#revision-history 3/113 2021/3/1 Revision History – API Reference

Date Ver API End Point Type Description

User History Reports 2020/09/05 4.7 REST POST https://equos.io/api/getUserHistory New Feature supporting Order, Trade, Funding History, Position

Expanded reference data GET https://equos.io/api/getInstrumentPai 2020/08/25 4.6 REST Enhancement fields to support Perpetuals, rs Futures & Options

Expanded fields for 2020/08/25 4.6 WSS wss://equos.io/ws/orderbook Enhancement perpetual contract data

Wait for orderId from 2020/08/25 4.6 REST POST https://equos.io/api/order Enhancement matching engine control flag added

Python Sample Codes Python Sample Codes for REST / WS and Up to date added for REST / WS APIs 2020/08/06 4.5 REST/WS Enhancement REST / WS / FIX API documents and Updated REST/WS/FIX APIs documentation

GET https://equos.io/api/userTrades Average execution price 2020/07/28 4.4 REST/WS Enhancement wss://equos.io/ws//userTrades added

GET https://equos.io/api/getTradeHistory AggressorSide added to 2020/07/21 4.2.7 REST/WS Enhancement wss://equos.io/ws/tradehistory tradeHistory endpoint

Commission fields added to 2020/06/17 4.2 FIX ExecutionReport<8> Enhancement ExecutionReport

USD/USDC Book 2020/05/15 3.10 All All New Feature consolidation

System USD Instruments removed 2020/05/15 3.10 All All Change from the trading list

New https://equos.io/api/ System 2020/05/15 3.10 REST Endpoint URL change Legacy https://trade.equos.io/api/ 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

POST https://trade.equos.io/api/logon POST https://trade.equos.io/api/order POST https://trade.equos.io/api/cancelOrd er POST https://trade.equos.io/api/cancelRepl Institutional/multiple 2020/04/06 2.20 REST aceOrder Update account support in REST POST https://trade.equos.io/api/getOrders POST https://trade.equos.io/api/getOrder POST https://trade.equos.io/api/getPositi ons POST https://trade.equos.io/api/getRisk

2020/03/27 2.00 All EQUOS developer documentation site Initial Document Release https://developer.equos.io/#revision-history 4/113 2021/3/1 Revision History – API Reference

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:

REST Web Sockets FIX Protocol ccxt library

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:

Instrument information on the products traded on the EQUOS Exchange Retrieve historical or stream live market data Submit and manage orders Retrieve Order History Retrieve Positions Check balances Automate Deposit and Withdrawal Requests

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.

Integration Support and technical onboarding please contact [email protected] API support, errors or omissions in this document [email protected]

https://developer.equos.io/#revision-history 5/113 2021/3/1 Revision History – API Reference

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 , 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:

API Username API Password SenderCompID (specific for FIX connectivity)

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

Public market data access Account management Order management

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. https://developer.equos.io/#revision-history 6/113 2021/3/1 Revision History – API Reference

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

Get Instruments

Get a list of available for trading.

HTTPS Request

// 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,"ETH",true], [3,"BTC",2,6,1,0,"BTC",true], [1,"USDC",2,6,1,0,"USDC",true] ] }

Main Section

Field Type Description

instruments [] See Instrument section for details

Instrument Section (Comma Delimited)

Field Type Description

instrumentId int id of instrument eg. instrumentId = 52 is BTC/USDC

symbol string eg. BTC for Bitcoin

price_scale int

quantity_scale int https://developer.equos.io/#revision-history 7/113 2021/3/1 Revision History – API Reference

Field Type Description

status int 1 = enabled for trading, 0 = disabled for trading

withdraw_fee double

name string

withdrawal_pct boolean true if withdrawal fee is a percentage, false if absolute

Get Instrument Pairs

Provides the static product reference data, and trading status for all instruments listed on the EQUOS Exchange. API user is suggested to include verbose=true into the URL path to receive description of fields in the response.

Security Status

When EQUOS lists a new Trading Pair or creates a new Derivative Contract, it will be added to the Security List * One week prior to IssueDate<225> SecurityStatus<965> 10 = Published * On the IssueDate<225> SecurityStatus<965> 1 = Active * After MaturityDate<541> SecurityStatus<965> 4 = Expired

HTTPS Request

// Request GET /getInstrumentPairs?verbose=true

Environment URL

Testnet GET https://testnet.equos.io/api/getInstrumentPairs

Production GET https://equos.io/api/getInstrumentPairs

Request Parameters

Field Required Type Description

verbose false string true = returns field names

Response https://developer.equos.io/#revision-history 8/113 2021/3/1 Revision History – API Reference

// Response { "instrumentPairs": [ { "instrumentId": 52, "symbol": "BTC/USDC", "quoteId": 1, "baseId": 3, "price_scale": 2, "quantity_scale": 6, "securityStatus": 1, "securityDesc": "BTC/USDC", "assetType": "PAIR", "currency": "BTC", "contAmtCurr": "USDC", "settlCurrency": "USDC", "commCurrency": "USDC", "cfiCode": "XXXXXX", "securityExchange": "XXXX", "instrumentPricePrecision": 2, "minPriceIncrement": 1.0, "minPriceIncrementAmount": 1.0, "roundLot": 1, "minTradeVol": 0.001000, "maxTradeVol": 0.000000 }, { "instrumentId": 53, "symbol": "ETH/USDC", "quoteId": 1, "baseId": 2, "price_scale": 2, "quantity_scale": 6, "securityStatus": 1, "securityDesc": "ETH/USDC", "assetType": "PAIR", "currency": "ETH", "contAmtCurr": "USDC", "settlCurrency": "USDC", "commCurrency": "USDC", "cfiCode": "XXXXXX", "securityExchange": "XXXX", "instrumentPricePrecision": 2, "minPriceIncrement": 1.0, "minPriceIncrementAmount": 1.0, "roundLot": 1, "minTradeVol": 0.010000, "maxTradeVol": 0.000000 }, { "instrumentId": 57, "symbol": "ETH/BTC", "quoteId": 3, https://developer.equos.io/#revision-history 9/113 2021/3/1 Revision History – API Reference "baseId": 2, "price_scale": 6, "quantity_scale": 6, "securityStatus": 1, "securityDesc": "ETH/BTC", "assetType": "PAIR", "currency": "ETH", "contAmtCurr": "BTC", "settlCurrency": "BTC", "commCurrency": "BTC", "cfiCode": "XXXXXX", "securityExchange": "XXXX", "instrumentPricePrecision": 6, "minPriceIncrement": 1.0, "minPriceIncrementAmount": 1.0, "roundLot": 1, "minTradeVol": 0.010000, "maxTradeVol": 0.000000 }, { "instrumentId": 25, "symbol": "BTC/USDC[F]", "quoteId": 1, "baseId": 3, "price_scale": 2, "quantity_scale": 6, "securityStatus": 1, "securityDesc": "BTC/USDC[F]", "assetType": "PERPETUAL_SWAP", "currency": "BTC", "contAmtCurr": "USDC", "settlCurrency": "USDC", "commCurrency": "USDC", "cfiCode": "XXXXXX", "securityExchange": "XXXX", "instrumentPricePrecision": 2, "minPriceIncrement": 1.0, "minPriceIncrementAmount": 1.0, "roundLot": 1, "minTradeVol": 0.001000, "maxTradeVol": 0.000000, "qtyType": 0, "contractMultiplier": 1.0, "issueDate": 1598608087000 } ] }

Main Section

Field Type Description

instrumentPairs [] See Instrument Pair section for details https://developer.equos.io/#revision-history 10/113 2021/3/1 Revision History – API Reference

Instrument Pair Section (Comma Delimited)

Field Spot Perp Future Type Example Description

instrumentId ✓ ✓ ✓ ✓ int 135 EQUOS Instrument ID

symbol ✓ ✓ ✓ ✓ string BTC/USD[P]Now14_6000 EQUOS Exchange Symbol

EQUOS Instrument ID for quoteId ✓ ✓ ✓ ✓ int 1 Quote Currency

EQUOS Instrument ID for baseId ✓ ✓ ✓ ✓ int 3 Base Currency

int to decimal conversion price_scale ✓ ✓ ✓ ✓ int 2 factor for Price

int to decimal conversion quantity_scale ✓ ✓ ✓ ✓ int 6 factor for quantity

Trading Status of the securityStatus ✓ ✓ ✓ ✓ int 1 instrument

Full description of the securityDesc ✓ ✓ ✓ ✓ string BTC/USD[P]Now10_6000 instrument

assetType ✓ ✓ ✓ ✓ string OPTION_PUT Asset Type

Base (left hand) currency currency ✓ ✓ ✓ ✓ string BTC symbol

Quote or Contract (right contAmtCurr ✓ ✓ ✓ ✓ string USDC hand) currency symbol

Settlement currency settleCurrency ✓ ✓ ✓ ✓ string USDC symbol

commCurrency ✓ ✓ ✓ ✓ string USDC Commission Currency

CFI Code (ISO cfiCode ✓ ✓ ✓ ✓ string XXXXXX Classification of Financial Instruments)

MIC Code (ISO Market micCode ✓ ✓ ✓ ✓ string XXXX Identification Code)

Specifies the number of instrumentPricePrecision ✓ ✓ ✓ ✓ int 2 decimal places for instrument prices.

Minimum price increase minPriceIncrement ✓ ✓ ✓ ✓ number 1.0 for a given exchange- traded Instrument

https://developer.equos.io/#revision-history 11/113 2021/3/1 Revision History – API Reference

Field Spot Perp Future Option Type Example Description

Minimum price increment amount associated with the MinPriceIncrement. For listed derivatives, the minPriceIncrementAmount ✓ ✓ ✓ ✓ number 1.0 value can be calculated by multiplying MinPriceIncrement by contractMultiplier.

The trading lot size of a roundLot ✓ ✓ ✓ ✓ int 1 instrument

minTradeVol ✓ ✓ ✓ ✓ number 1000 Minium trade volume

maxTradeVol ✓ ✓ ✓ ✓ number 0 Maximum trade volume

Type of quantity specified in a quantity field qtyType ✓ ✓ ✓ ✓ int 0 0 = Currency or notional value 1 = Contracts

Specifies the ratio or multiply factor to convert contractMultiplier ✓ ✓ ✓ ✓ number 1.0 from contracts to shares (e.g. 1.0, 100, 1000, etc).

Underlying Instrument for underlyingSymbol ✗ ✓ ✓ ✓ string BTC/USDC Futures and Options

underlyingSecurityID ✗ ✓ ✓ ✓ int 52 EQUOS Instrument ID

EQUOS Instrument ID UnderlyingSecurityIDSource ✗ ✓ ✓ ✓ string M Source type = M

MIC Code of the underlyingSecurityExchange ✗ ✓ ✓ ✓ string XXXX underlying instrument

Date/time on which the issueDate ✗ ✓ ✓ ✓ int 1598608087000 derivative becomes active for trading

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} https://developer.equos.io/#revision-history 12/113 2021/3/1 Revision History – API Reference

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 }

Main Section https://developer.equos.io/#revision-history 13/113 2021/3/1 Revision History – API Reference

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 Price level of limit orders in the order book

quantity int Quantity level of limit orders in the order book

timestamp int Unix timestamp in milliseconds

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}

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, https://developer.equos.io/#revision-history 14/113 2021/3/1 Revision History – API Reference "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 Price level of limit orders in the order book

quantity int Quantity level of limit orders in the order book

timestamp string Unix timestamp in millisecond

sequenceNumber string * this is not an incremental sequence id unique to a specific instrumentId

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 Funding Rate History

The basis funding rate is a fee paid by one side of the contract to the other (e.g. Longs pay Shorts or vice versa). Its purpose is to encourage the price of the perpetual futures contract to stay near the underlying spot index price.

This endpoint allows EQUOS users to retrieve the historical rates used to calculate these payments.

HTTPS Request

Environment URL

Testnet GET https://testnet.equos.io/api/getFundingRateHistory https://developer.equos.io/#revision-history 15/113 2021/3/1 Revision History – API Reference

Environment URL

Production GET https://equos.io/api/getFundingRateHistory

API Key Permissions

This endpoint is public and does not require authentication.

Request Body (JSON)

{"instrumentId":25,"symbol":"BTC/USD[F]","limit":200,"startTime":1,"startTime":2}

Field Required Type Description

Returns funding payments for the specified EQUOS Instrument ID, else all instruments are instrumentId false int returned

symbol false string Returns funding payments for the specified EQUOS Symbol, else all instruments are returned

Specifies the number of records to be returned. If used, startTime and endTime filtering will be limit false int ignored

startTime false string The beginning (earlier) date and time from which the records will be returned.

The ending (nearer) data and time to which the records will be return. Absence of the endTime endTime false string parameter will return records from the startTime to present.

Response

{

"id": 87078, "periodicSettlementTime": "2020-09-14 04:00:00", "instrumentId": 25, "symbol": "BTC/USDC[F]", "fundingRate": 0.003750, "markPrice ": 10229.5, "settlCurrency": "USDC",

}

Field Type Description

id int Report ID

periodicSettlementTime string The Periodic Settlement time, against which the basis funding rate was calculated

instrumentId int EQUOS Exchange instrument ID https://developer.equos.io/#revision-history 16/113 2021/3/1 Revision History – API Reference

Field Type Description

symbol string EQUOS Exchange Symbol

Basis Funding Rate, an amount in the Settlement Currency, paid or received during periodic fundingRate float settlement

markPrice float The instrument’s mark price at the periodic settlement time point.

settlCurrency string The settlement currency of the fundingRate amount

Get Chart

Returns an array of chart data points in OHLC format

HTTPS Request

Environment URL

Testnet GET https://testnet.equos.io/api/getChart

Production GET https://equos.io/api/getChart

Request Parameters

// Request GET /getChart?pairId={var}×pan={var}

Main Section

Field Required Type Description

pairId true int instrumentId

timespan true int Please refer to the timespan enum values

limit false int limit of results from the latest entry

Timespan Enum Values

Enum Value

ONE_MINUTE 1

FIVE_MINUTE 2

FIFTEEN_MINUTE 3

ONE_HOUR 4

https://developer.equos.io/#revision-history 17/113 2021/3/1 Revision History – API Reference

Enum Value

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 ], ... ] }

Main Section

Field Type Description

chart [] See Chart section for details

Chart Section (Comma Delimited) https://developer.equos.io/#revision-history 18/113 2021/3/1 Revision History – API Reference

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

Environment URL

https://developer.equos.io/#revision-history 19/113 2021/3/1 Revision History – API Reference

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:

User ID: 2705 Exchange Account ID(s): 2703, 2704

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 https://developer.equos.io/#revision-history 20/113 2021/3/1 Revision History – API Reference

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 { requestToken, requestSecret } for Submitter (Step 1): This is used for order management operation such as placing / amend / cancelling orders. The { requestToken, requestSecret } for Account (Step 2): This is used for querying order and position under the Exchange Account.

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

https://developer.equos.io/#revision-history 21/113 2021/3/1 Revision History – API Reference

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,"

// 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 }

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/

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.

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 https://developer.equos.io/#revision-history 22/113 2021/3/1 Revision History – API Reference 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.

blockWaitAck=1 must be added to the order message to receive an Order ID from the matching engine.

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,"

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

User ID: aka Submitter for Institutional User. Please use its corresponding { requestToken, userId true int requestSecret } for signing the request

account false int true (for Institutional User) Account ID: The account which the position to be maintained

instrumentId true int

symbol true String

clOrdId true String

Side of order:

side true int 1 = Buy 2 = Sell

The following order types can be placed:

1 = Market Order ordType true int 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order limit

price true int Price per unit of quantity. Required for “Limit Order”” and “Stop Limit Order” ordType.

price_scale true int

quantity true int https://developer.equos.io/#revision-history 23/113 2021/3/1 Revision History – API Reference

Field Required Type Description

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

1 = wait for order acknowledgement. When set, response will include the matching engine blockWaitAck false int "orderId" field

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 https://developer.equos.io/#revision-history 24/113 2021/3/1 Revision History – API Reference

Field Type Description

price int Price per unit of quantity. Required for “Limit Order”” and “Stop Limit Order” ordType.

quantity int

The order type being submitted:

1 = Market Order ordType int 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order

orderId int Unique order identifier assigned by the EQUOS matching engine.

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)

{ "instrumentId": "52", "userId": "2707", "origOrderId": 2877533546 }

{ "instrumentId": "52", "userId": "16989", "clOrdId": "apitest_e123456" } https://developer.equos.io/#revision-history 25/113 2021/3/1 Revision History – API Reference

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.

REST API client can cancel an order either by order Id (inputted into origOrderId) or client order id (inputted into clOrdId).

We recommend client to listen to Websocket userorders channel or query getOrderStatus with the orderId to get a confirmation that the submitted order for cancellation is executed.

Field Required Type Description

origOrderId false String orderId. Either origOrderId or clOrdId must be specified

clOrdId false String Either origOrderId or clOrdId must be specified

User ID: aka Submitter for Institutional User. Please use its corresponding { requestToken, userId true int requestSecret } for signing the request

account false int If user is an institutional account user, this must be specified

instrumentId true 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, "origOrderId": 0, "instrumentId": 52, "userId": 16989, "price": 0, "quantity": 0, "ordType": 0 }

Field Type Description

status string

id int

origOrderId int

instrumentId int

userId int

price int

quantity int

ordType int

https://developer.equos.io/#revision-history 26/113 2021/3/1 Revision History – API Reference

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,"p

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

User ID: aka Submitter for Institutional User. Please use its corresponding { requestToken, userId false int requestSecret } for signing the request

account false int

symbol false String

instrumentId false int

Side of order:

side false int 1 = Buy 2 = Sell

ordType false int 1 = Market, 2 = Limit, 3 = Stop, 4 = Stop limit

price true int Price per unit of quantity. Required for “Limit Order”” and “Stop Limit Order” ordType.

price_scale true int

quantity false int https://developer.equos.io/#revision-history 27/113 2021/3/1 Revision History – API Reference

Field Required Type Description

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 Price per unit of quantity. Required for “Limit Order”” and “Stop Limit Order” ordType.

quantity int

The order type being submitted or reported:

1 = Market Order ordType int 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order

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. https://developer.equos.io/#revision-history 28/113 2021/3/1 Revision History – API Reference

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

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

The execution report’s type:

0 = New 4 = Canceled execType false string 5 = Replace 8 = Rejected C = Expired F = Fill Status I = Order Status

https://developer.equos.io/#revision-history 29/113 2021/3/1 Revision History – API Reference

Field Required Type Description

Identifies status of order

0 = New 1 = Partially filled ordStatus false string 2 = Filled 4 = Cancelled 8 = Rejected C = Expired

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 } ] }

Main Section https://developer.equos.io/#revision-history 30/113 2021/3/1 Revision History – API Reference

Field Type Description

orders [] See Order section for details

Order Section

Field Type Description

orderId int Unique order identifier assigned by the EQUOS matching engine.

orderUpdateSeq int

clOrdId string

symbol string

instrumentId int

Side of order:

side string 1 = Buy 2 = Sell

userId int

account int

The execution report’s type:

0 = New 4 = Canceled execType string 5 = Replace 8 = Rejected C = Expired F = Fill Status I = Order Status

The order type being submitted or reported:

1 = Market Order ordType string 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order

Identifies status of order.

0 = New 1 = Partially filled ordStatus string 2 = Filled 4 = Cancelled 8 = Rejected C = Expired

timeInForce string

timeStamp string

execId int https://developer.equos.io/#revision-history 31/113 2021/3/1 Revision History – API Reference

Field Type Description

targetStrategy int

isHidden bool

isReduceOnly bool

isLiquidation bool

fee int

feeTotal int

fee_scale int

feeInstrumentId int

price int Price per unit of quantity. Required for “Limit Order”” and “Stop Limit Order” ordType.

price_scale int

quantity int

quantity_scale int

leavesQty int

leavesQty_scale int

cumQty int The cumulative quantity of an order, currently executed in a chain of partial fills.

cumQty_scale int Same as quantity scale

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 Status

/getOrder endpoint is deprecated, please use getOrderStatus.

Return an order with its status

Data fields use enums defined in the FIX 4.4 standard https://developer.equos.io/#revision-history 32/113 2021/3/1 Revision History – API Reference

All types or orders are returned with their statuses

HTTPS Request

Environment URL

Testnet POST https://testnet.equos.io/api/getOrderStatus

Production POST https://equos.io/api/getOrderStatus

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 Unique order identifier assigned by the EQUOS matching engine.

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, https://developer.equos.io/#revision-history 33/113 2021/3/1 Revision History – API Reference "leavesQty_scale":6, "cumQty":2468, "cumQty_scale":6, "lastPx":205, "lastPx_scale":6, "lastQty":2468, "lastQty_scale":6 }

Field Type Description

orderId int Unique order identifier assigned by the EQUOS matching engine.

orderUpdateSeq int

clOrdId string

symbol string

instrumentId int

side string

userId int

The execution report’s type:

0 = New 4 = Canceled execType string 5 = Replace 8 = Rejected C = Expired F = Fill Status I = Order Status

The order type being submitted or reported:

1 = Market Order ordType string 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order

Identifies status of order

0 = New 1 = Partially filled ordStatus string 2 = Filled 4 = Cancelled 8 = Rejected C = Expired

timeInForce string

timeStamp string

execId int

https://developer.equos.io/#revision-history 34/113 2021/3/1 Revision History – API Reference

Field Type Description

fee int

feeTotal int

fee_scale int

feeInstrumentId int

price int Price per unit of quantity. Required for “Limit Order”” and “Stop Limit Order” ordType.

price_scale int

quantity int

quantity_scale int

leavesQty int

leavesQty_scale int

cumQty int The cumulative quantity of an order, currently executed in a chain of partial fills.

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

https://developer.equos.io/#revision-history 35/113 2021/3/1 Revision History – API Reference

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

account true int For institutional user, set this = account id

orderId true int Unique order identifier assigned by the EQUOS matching engine.

Response

{"orders":[ {"orderId":5263446159,"orderUpdateSeq":0,"clOrdId":"1591255141636981057","symbol":"BTC/USDC","instrumentId {"orderId":5263446159,"orderUpdateSeq":1,"clOrdId":"1591255141636981057","symbol":"BTC/USDC","instrumentId ]}

Main Section

Field Type Description

orders [] See Order section for details

Order Section

Field Type Description

orderId int Unique order identifier assigned by the EQUOS matching engine.

orderUpdateSeq int

clOrdId string

symbol string

instrumentId int

Side of order:

side string 1 = Buy 2 = Sell

userId int

https://developer.equos.io/#revision-history 36/113 2021/3/1 Revision History – API Reference

Field Type Description

The execution report’s type:

0 = New 4 = Canceled execType string 5 = Replace 8 = Rejected C = Expired F = Fill Status I = Order Status

The order type being submitted or reported:

1 = Market Order ordType string 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order

ordStatus string

timeInForce string

timeStamp string

execId int

fee int

feeTotal int

fee_scale int

feeInstrumentId int

price int Price per unit of quantity. Required for “Limit Order”” and “Stop Limit Order” ordType.

price_scale int

quantity int

quantity_scale int

leavesQty int

leavesQty_scale int

cumQty int The cumulative quantity of an order, currently executed in a chain of partial fills.

cumQty_scale int Same as quantity scale

lastPx int

lastPx_scale int

lastQty int

lastQty_scale int https://developer.equos.io/#revision-history 37/113 2021/3/1 Revision History – API Reference

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 userId

Data fields use enums defined in the FIX 4.4 standard

All trades are returned. ( Maximum of 10,000 records in descending order from order of creation or the Trades.) If more records are needed than 10,000 then need to split with use additional time parameters (startTime and endTime ) to have results < 10000, and multiple API calls to split will be needed. e.g. startTime, endTime etc. as paginating and total returned records should be less than 10000.

Also, if Instrument Pair / security is provided, the trades for that Instrument Pair would be returned. In this case, maximum records are 1000. These 1000 records max are also in descending order of creation of the Trades.

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":"23715", "account":"23750", //applicable only for institutional account "instrumentId":"52", "startTime":"1612242132260" }

{ "userId":"23715", "instrumentId":"52", "startTime":"1612242132260", "endTime":"1612242132760" }

{ "userId":"23715", "instrumentId":"52", "timestamp":"1612242132560" } https://developer.equos.io/#revision-history 38/113 2021/3/1 Revision History – API Reference

These parameters are common to all order types.

Field Required Type Description

userId true int

account false int For institutional user, set this = account id

If specified, all trades transacted for this instrument will be returned. If instrumentId id wrong, it instrumentId false int will return all instrument / instrument pairs' trades

If specified, all trades transacted at or after the timestamp in msec (GMT) will be shown. Used with startTime false long endTime to filter to a specific period.

If specified, all trades transacted at or before the timestamp in msec (GMT) will be shown. Used endTime false long with startTime to filter to a specific period.

If specified, all trades transacted at or after the timestamp in msec (GMT) will be shown. Used timestamp false long when startTime and endTime are not used. If startTime and endTime mentioned, those will take precedence.

Response

// Response { "trades": [ { "account": 23750, "commission": "-0.051214", "commCurrency": "USDC", "execId": 16761385, "ordType": "2", "ordStatus": "2", "execType": "F", "aggressorIndicator": true, "orderId": 2877532158, "price": "35619.28", "qty": "0.001000", "lastPx": "34143.19", "avgPx": "34143.19", "cumQty": "0.001000", "quoteQty": "0.001000", "side": "BUY", "symbol": "BTC/USDC", "clOrdId": "1612242132259520719", "submitterId": 23715, "targetStrategy": "0", "time": 1612242132260, "date": "20210202-05:02:12.260" } ] } //... https://developer.equos.io/#revision-history 39/113 2021/3/1 Revision History – API Reference ] }

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

The order type being submitted or reported:

1 = Market Order ordType string 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order

Identifies status of order.

0 = New 1 = Partially filled ordStatus string 2 = Filled 3 = Done for Day 4 = Cancelled 8 = Rejected C = Expired

The execution report’s type:

0 = New 4 = Canceled execType string 5 = Replace 8 = Rejected C = Expired F = Fill Status I = Order Status

Used to identify whether the order initiator is an aggressor or not in the trade.

aggressorIndicator bool Y = Order initiator is aggressor N = Order initiator is passive

orderId string Unique order identifier assigned by the EQUOS matching engine.

price decimal Price per unit of quantity. Required for “Limit Order”” and “Stop Limit Order” ordType.

https://developer.equos.io/#revision-history 40/113 2021/3/1 Revision History – API Reference

Field Type Description

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 The cumulative quantity of an order, currently executed in a chain of partial fills.

quoteQty decimal

Side of order:

side string 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}

https://developer.equos.io/#revision-history 41/113 2021/3/1 Revision History – API Reference

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 } // ... ] }

https://developer.equos.io/#revision-history 42/113 2021/3/1 Revision History – API Reference

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.

Cancel All Orders

Cancel all open orders.

HTTPS Request

Environment URL

Testnet POST https://testnet.equos.io/api/cancelAll https://developer.equos.io/#revision-history 43/113 2021/3/1 Revision History – API Reference

Environment URL

Production POST https://equos.io/api/cancelAll

API Key Permissions

This endpoint requires the “trade” permission.

Request Body (JSON)

{ "userId":"23754", "account":"23750", //Required if institutional account "instrumentId":"52" }

Field Required Type Description

User ID: aka Submitter for Institutional User. Please use its corresponding { requestToken, userId true int requestSecret } for signing the request

account false int Required for Institutional account

instrumentId false int Cancel all open orders for specified instrumentId

Response

{ "status": "sent", "id": 0, "origOrderId": 0, "instrumentId": 52, "userId": 23750, "price": 0, "quantity": 0, "ordType": 0 }

Get User History

Provides historical report download for

Orders Trades Positions Funding Payments

In csv or json format

https://developer.equos.io/#revision-history 44/113 2021/3/1 Revision History – API Reference

HTTPS Request

Environment URL

Testnet POST https://testnet.equos.io/api/getUserHistory

Production POST https://equos.io/api/getUserHistory

API Key Permissions

This endpoint requires the “trade” permission.

URL Parameters

Field Required Type Description

instrumentId false int filter by EQUOS Exchange instrument identifier

Specifies the number of records to be returned. If used, startTime and endTime filtering will be limit false int ignored

startTime false long If specified, all trades transacted at or after the timestamp in msec (GMT) will be shown.

endTime false long

format string Report format "csv" or "json"

type false string Report type "order" "trade" "position" "fundingPayment"

Request Body

Field Required Type Description

userId true int

account false int Required for Institutional accounts

Example

{{URL}}/getUserHistory?format=JSON&instrumentId=25&startTime=1611913406443

Example Request Body { "userId":"23715", "account":"23750" } https://developer.equos.io/#revision-history 45/113 2021/3/1 Revision History – API Reference

Example Response { "orderHistory": [ , { "instrumentId": 25, "account": 23750, "clOrdId": "1611913406442158887", "symbol": "BTC/USDC[F]", "side": "BUY", "ordType": "LIMIT", "execType": "TRADE", "ordStatus": "FILLED", "orderId": 2877506175, "secondaryOrderId": 385115, "execId": 16746220, "secondaryExecId": 115117, "targetStrategy": 0, "oderQty": 100000, "orderQty_scale": 6, "leavesQty": 0, "leavesQty_scale": 6, "cumQty": 100000, "cumQty_scale": 6, "getPrice": 3847611, "price_scale": 2, "avgPx": 3602065, "avgPx_scale": 2, "lastPx": 3602065, "lastPx_scale": 2, "lastQty": 100000, "lastQty_scale": 6, "stopPx": 0, "stopPx_scale": 0, "timeInForce": "3", "expireTime": 0, "timestampMillis": 1611913406443, "expireTimeMillis": 0, "aggressorSide": "BUY", "price2": 0, "price2Scale": 0, "sourceSeqNum": 6969, "sourceSendTime": 0, "snapId": 0, "kafkaRecordOffset": 35014174, "transactionId": 1611913406443199307, "isLastMessageInTransaction": false, "timestamp": "20210129-09:43:26.443", "feePositionQuantityChange": -1.8010320000000004, "settlePositionQuantityChange": 0.0 }, { "instrumentId": 25, https://developer.equos.io/#revision-history 46/113 2021/3/1 Revision History – API Reference "account": 23750, "clOrdId": "1611913406442158887", "symbol": "BTC/USDC[F]", "side": "BUY", "ordType": "LIMIT", "execType": "NEW", "ordStatus": "NEW", "orderId": 2877506175, "secondaryOrderId": 385115, "execId": 0, "secondaryExecId": 0, "targetStrategy": 0, "oderQty": 100000, "orderQty_scale": 6, "leavesQty": 100000, "leavesQty_scale": 6, "cumQty": 0, "cumQty_scale": 0, "getPrice": 3847611, "price_scale": 2, "avgPx": 0, "avgPx_scale": 0, "lastPx": 0, "lastPx_scale": 2, "lastQty": 0, "lastQty_scale": 6, "stopPx": 0, "stopPx_scale": 0, "timeInForce": "3", "expireTime": 0, "timestampMillis": 1611913406443, "expireTimeMillis": 0, "aggressorSide": "BUY", "price2": 0, "price2Scale": 0, "sourceSeqNum": 6969, "sourceSendTime": 0, "snapId": 0, "kafkaRecordOffset": 35014174, "transactionId": 1611913406443199307, "isLastMessageInTransaction": false, "timestamp": "20210129-09:43:26.443", "feePositionQuantityChange": 0.0, "settlePositionQuantityChange": 0.0 } ] }

Response

orderHistory Report

https://developer.equos.io/#revision-history 47/113 2021/3/1 Revision History – API Reference

{ "instrumentId": 29, "account": 6285, "clOrdId": "1598317184238899164", "symbol": "ETH/USD[F]", "side": "BUY", "ordType": "MARKET", "execType": "TRADE", "ordStatus": "FILLED", "orderId": 3459746267, "secondaryOrderId": 176613, "execId": 15759356, "secondaryExecId": 755, "targetStrategy": 0, "oderQty": 1000000, "orderQty_scale": 6, "leavesQty": 0, "leavesQty_scale": 6, "cumQty": 1000000, "cumQty_scale": 6, "getPrice": 0, "price_scale": 2, "avgPx": 49000, "avgPx_scale": 2, "lastPx": 49000, "lastPx_scale": 2, "lastQty": 1000000, "lastQty_scale": 6, "stopPx": 0, "stopPx_scale": 0, "timeInForce": "1", "expireTime": 0, "timestampMillis": 1598317184238, "expireTimeMillis": 0, "aggressorSide": "BUY", "price2": 0, "price2Scale": 0, "sourceSeqNum": 97, "sourceSendTime": 0, "snapId": 0, "kafkaRecordOffset": 43981771, "transactionId": 1598317184238344975, "isLastMessageInTransaction": false, "timestamp": "20200825-00:59:44.238", "feePositionQuantityChange": -0.19600000000000004, "settlePositionQuantityChange": 0.0 },

Field Type Description

instrumentId int 29

https://developer.equos.io/#revision-history 48/113 2021/3/1 Revision History – API Reference

Field Type Description

account int 6285

clOrdId string 1598317184238899164

symbol string ETH/USD[F]

Side of order:

side 1 = Buy 2 = Sell

The order type being submitted or reported:

1 = Market Order ordType string 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order

The execution report’s type:

0 = New 4 = Canceled execType string 5 = Replace 8 = Rejected C = Expired F = Fill Status I = Order Status

Identifies status of order.

0 = New 1 = Partially filled ordStatus 2 = Filled 4 = Cancelled 8 = Rejected C = Expired

orderId int Unique order identifier assigned by the EQUOS matching engine.

secondaryOrderId 176613

execId 15759356

secondaryExecId 755

targetStrategy 0

oderQty 1000000

orderQty_scale 6

leavesQty 0

leavesQty_scale 6

cumQty The cumulative quantity of an order, currently executed in a chain of partial fills. https://developer.equos.io/#revision-history 49/113 2021/3/1 Revision History – API Reference

Field Type Description

cumQty_scale Same as quantity scale

getPrice 0

price_scale 2

avgPx 49000

avgPx_scale 2

lastPx 49000

lastPx_scale 2

lastQty 1000000

lastQty_scale 6

stopPx 0

stopPx_scale 0

timeInForce 1

expireTime 0

timestampMillis 1598317184238

expireTimeMillis 0

aggressorSide BUY

price2 0

price2Scale 0

sourceSeqNum 97

sourceSendTime 0

snapId 0

kafkaRecordOffset 43981771

transactionId 1598317184238344975

isLastMessageInTransaction false

timestamp 20200825-00:59:44.238

feePositionQuantityChange -0.19600000000000004

settlePositionQuantityChange 0.0

https://developer.equos.io/#revision-history 50/113 2021/3/1 Revision History – API Reference tradeHistory Report

{ "accountId": 6285, "time": 20200825-00: 59: 44.238, "symbol": "ETH/USD[F]", "side": "BUY", "price": "0.0", "qty": "1.0", "fee": "-0.19600000000000004", "feeAsset": "USDC", "ordType": "1", "ordStatus": "2", "execType": "F", "maker": false, "orderId": 3459746267, "tradeId": 15759356, "quoteQty": "1.0", "realizedPnl": 0.0, "clOrdId": "1598317184238899164", "targetStrategy": "0", "timeInForce": "1", "expireTimeMillis": "0", "leavesQty": "0.0", "cumQty": "1.0", "avgPx": "490.0", "lastPx": "490.0", "lastQty": "1.0", "stopPx": "0.0", "price2": "0.0" },

Field Type Description

accountId 6285

time 20200825-00: 59: 44.238

symbol ETH/USD[F]

side BUY

price Price per unit of quantity. Required for “Limit Order”” and “Stop Limit Order” ordType.

qty 1.0

fee -0.19600000000000004"

feeAsset USDC

https://developer.equos.io/#revision-history 51/113 2021/3/1 Revision History – API Reference

Field Type Description

The order type being submitted or reported:

1 = Market Order ordType string 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order

Identifies status of order.

0 = New 1 = Partially filled ordStatus 2 = Filled 4 = Cancelled 8 = Rejected C = Expired

The execution report’s type:

0 = New 4 = Canceled execType string 5 = Replace 8 = Rejected C = Expired F = Fill Status I = Order Status

maker false

orderId Unique order identifier assigned by the EQUOS matching engine.

tradeId 15759356

quoteQty 1.0

realizedPnl 0.0

clOrdId 1598317184238899164

targetStrategy 0

timeInForce 1

expireTimeMillis 0

leavesQty 0.0

cumQty int The cumulative quantity of an order, currently executed in a chain of partial fills.

avgPx 490.0

lastPx 490.0

lastQty 1.0

stopPx 0.0

https://developer.equos.io/#revision-history 52/113 2021/3/1 Revision History – API Reference

Field Type Description

price2 0.0

positionHistory Report

Field Type Description

postionHistory

Account Summary

reportid 4498181

created 2020-08-25 03:30:01.562623

userid 6285

usdvalue 1.1671425446000001E8

usdnotionalpositionvalue 1573.96

usdmaxexposurepositionandopenordersvalue 1573.96

usdopenordersrequiredvalue 0.0

usdmarginvalue 0.0

usdmarginrequiredvalue 78.69

usdmarginmaintvalue 39.34

leverageratio 0.0

usdunrealized -116.03

sourceseqnum 0

sourcesendtime 0

snapid 0

kafkarecordoffset 0

transactionid 1598326201557031027,

islastmessageintransaction false

decodedtime 0

matchtime 0

publishtime 1598326201561

https://developer.equos.io/#revision-history 53/113 2021/3/1 Revision History – API Reference

Field Type Description

txnType 4020

execId 0

orderId Unique order identifier assigned by the EQUOS matching engine.

instrumentId1 1

qty1 13865323105

change1 -4380465

positions

instrumentid 53

assettype PAIR

quantity 0

quantityscale 0

availablequantity 0

availablequantityscale 0

usdcostbasis 0

usdcostbasisscale 8

usdavgcostbasis 0

usdavgcostbasisscale 6

usdvalue 0.0

usdunrealized 0.0

quotedusdmark 233.14000000000001

settlecoinusdmark 0.0

settlecoinunrealized 0.0

settlecoinrealized 0.0

bankruptpriceint 0

fundingPaymentHistory Report

{ "fundingPaymentHistory": [ https://developer.equos.io/#revision-history 54/113 2021/3/1 Revision History – API Reference { "reportid": 860237, "userid": 6285, "account": "periodicSettlementTime": "2020-09-17 05:50:02.978227", "instrumentId": 29, "symbol": "ETH/USD[F]", "fundingRate": -0.0037500000000000007, "fundingSettlement": -1444387, "closingBalance": 1740157882, "settlCurrency": "USDC", "postingTime" : 1600321802986, }, },

Field Type Description

reportid int 29

userid 6285

account string 6285

periodicSettlementTime

instrumentId int 29

symbol string ETH/USD[F]

fundingRate

fundingSettlement

closingBalance

settlCurrency string USDC

postingTime

Get Risk

Return real-time risk metrics

HTTPS Request

Environment URL

Testnet POST https://testnet.equos.io/api/getRisk

https://developer.equos.io/#revision-history 55/113 2021/3/1 Revision History – API Reference

Environment URL

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": 12143, "usdValue": 99088.08, "usdUnrealized": -1145.43, "riskUpdateDate": "20210111-15:23:05.984", "usdOpenOrdersNotional": 0, "usdMarginReservedBuys": -9.24, "usdMarginReservedSells": 0, "usdMarginAvailable": 96112.57, "usdPositionsValue": 10603.66, "usdMarginReserve": 0, "usdMarginAccountTotal": 96198.6, "usdMarginInitial": 86.03, "usdMarginTrigger": 43.01, "accountLeverage": 0.11 }

NOTE: There are additional fields in response from this API endpoint than below. Those are legacy fields and could be ignored.

Field Type Description

userId int

usdValue double Total USDC value of the account including unrealized P&L

riskUpdateDate string Date and Time when the User Risk was last updated

usdOpenOrdersNotional double Notional value of derivative product open orders

usdMarginReservedBuys double The additional Initial Margin required if all open buy orders would be filled

https://developer.equos.io/#revision-history 56/113 2021/3/1 Revision History – API Reference

Field Type Description

usdMarginReservedSells double The additional Initial Margin required if all open sell orders would be filled

usdMarginAvailable double Margin available to place new orders

usdPositionsValue double USDC notional of current position(s)

Reserved Margin for open orders, expressed as the maximum of usdMarginReservedBuys and usdMarginReserve double usdMarginReservedSells

usdMarginInitial double The Initial Margin required for open position(s) and open orders

usdMarginTrigger double Minimum Total Account Margin required to prevent liquidation

Sum of equivalent USDC notional of all assets available for margin including unrealized P&L, less usdMarginAccountTotal double any capital required for open spot orders

accountLeverage double Account leverage expressing Notional Position as multiple of Total Account Margin j

REST Wallet Endpoints

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

https://developer.equos.io/#revision-history 57/113 2021/3/1 Revision History – API Reference

Field Required Type Description

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

https://developer.equos.io/#revision-history 58/113 2021/3/1 Revision History – API Reference

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 https://developer.equos.io/#revision-history 59/113 2021/3/1 Revision History – API Reference

Field Type Description

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

This endpoint can only be used using the wallet request token and secret which can be found on EQUOS Web API section REST API users are not able to withdraw using the wallet request credentials with the wallet 2FA toggle on. User must toggle wallet 2FA off in order to use this feature.

When toggle wallet 2FA is off, API user is able to withdraw crypto thru REST using the wallet API keys without the need of 2FA in the requestBody. Generating new set of API keys will revert the state of 2FA required for withdrawals using wallet API credentials.

To send withdrawal request using this endpoint, User is required to disable the 2FA for the wallet request credentials.

Disabling 2FA for wallet API keys does not disable User's account 2FA.

HTTPS Request

Environment URL

Testnet POST https://testnet.equos.io/api/sendWithdrawRequest

Production POST https://equos.io/api/sendWithdrawRequest

API Key Permissions

For Authorised Person account, this endpoint requires the “trade” permission to be granted with Withdraw toggle enabled.

Request Header

Parameters Required Description

walletRequestToken Y Wallet API token can be obtained from EQUOS GUI Profile -> Account -> API

requesttoken N User must use walletRequestToken header for this endpoint

signature Y https://developer.equos.io/#revision-history 60/113 2021/3/1 Revision History – API Reference

Request Body (JSON)

{ "userId":"23754", "account":"23750", "instrumentId":"1", // eg.instrumentId = 1 is for USDC "quantity":"100", "quantity_scale":"0", "address":"2MvW97yT6E2Kq8bWc1aj1DqfbgMzjRNk2LE" }

Field Required Type Description

userId true int

account false int Required for institutional user

Refer to getInstruments instrumentId true int eg. 1 for USDC

quantity true int

quantity_scale false int

address true string Address destination

Response

{ "instrumentId": 1, "userId": 23750, "symbol": "USDC", "timestamp": "20200201-05:37:16.584", "status": 1, "userUuid": "b9e33713-c28f-468f-99bd-f6deab0dd854", "currencyCode": "USDC", "address": "2MvW97yT6E2Kq8bWc1aj1DqfbgMzjRNk2LE", "quantity": 20, "requestUuid": "56782b34-8a78-4f5f-b164-4b8f7d583b7f", "transactionUuid": "1004eb0f-41e1-41e9-9d48-8eefcc6c09f2", "transactionId": "WS23436", "destinationWalletAlias": "Test", "quantity_scale": 0 }

Main Section

Field Type Description

addresses [] See Address section for details

Address Section

https://developer.equos.io/#revision-history 61/113 2021/3/1 Revision History – API Reference

Field Type Description

instrumentId int

userId int

symbol string

address string

timestamp string

status number

quantity number

userUuid string

requestUuid string

transactionUuid string

transactionId string

destinationWalletAlias string

quantity scale number

Get Transfer History

Returns historic deposits and withdrawals

HTTPS Request

Environment URL

Testnet POST https://testnet.equos.io/api/getTransferHistory

Production POST https://equos.io/api/getTransferHistory

API Key Permissions

For Authorised Person account, this endpoint requires the “trade” permission to be granted with Withdraw toggle enabled.

Request Body (JSON)

{ "userId":"23715", "account":"23750", https://developer.equos.io/#revision-history 62/113 2021/3/1 Revision History – API Reference "instrumentId":"1", "transferType":"WITHDRAWAL" }

Field Required Type Description

userId true int

account false int Required for institutional user

instrumentId false int Refer to getInstruments

transferType false int DEPOSIT or WITHDRAWALS

Response

{ "transferHistory": [ { "id": "WC22201", "instrumentId": 3, "userId": 23750, "symbol": "BTC", "transferType": "WITHDRAWAL", "fromAddress": null, "toAddress": { "accountName": "", "accountNumber": "", "alias": "BTC 2", "bankAddress": "", "info": "2NBdGoVoYCBLC3nKn1E9V3H26KWfQjNSt7W", "swiftCode": "N/A", "routingNumber": "", "bankContact": "" } } ] }

Main Section

Field Type Description

transferHistory [] Refer to below requestBody

Field Type Description

id string

instrumentId int

https://developer.equos.io/#revision-history 63/113 2021/3/1 Revision History – API Reference

Field Type Description

userId int

symbol string

transferType string

fromAddress object information of sender

toAddress object information of receiver

timestamp int

updatedAt int

status string

quantity int

quantity_scale int

transactionId string transaction hash of transfer (crypto)

netQuantity int

netQuantity_scale int

confirms int

balanace int

balance_change int

bankName string

address string

internalId string

uuid string fromAddress

Field Type Description

accountName string

accountNumber string

alias string

bankAddress string

info string

swiftCode string https://developer.equos.io/#revision-history 64/113 2021/3/1 Revision History – API Reference

Field Type Description

routingNumber string

bankContact string toAddress

Field Type Description

accountName string

accountNumber string

alias string

bankAddress string

info string

swiftCode string

routingNumber string

bankContact string

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.

HEARTBEAT / WEBSOCKET PING PONG

To keep Websocket session alive, clients would need to send the heartbeats at least every 30 seconds or less intervals. {"heartbeat": timestamp msec} this will return same value received as a result.

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. https://developer.equos.io/#revision-history 65/113 2021/3/1 Revision History – API Reference UNSUBSCRIBE

To stop receiving feed messages, you must first send a unsubscribe message to the server indicating which channels and products to stop receiving. This currently works fine for Public Websocket endpoints.

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}

Field Required Type Description

pairId true int

Unsubscribe Message

// Unsubscribe {"pairId": var, "unsubscribe": 1}

Field Required Type Description

pairId true int

unsubscribe true int Provide 1 for Unsubscribe

Response

https://developer.equos.io/#revision-history 66/113 2021/3/1 Revision History – API Reference

// 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 https://developer.equos.io/#revision-history 67/113 2021/3/1 Revision History – API Reference

Field Type Description

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}

Field Required Type Description

pairId true int

Unsubscribe Message

// Unsubscribe {"pairId": var, "unsubscribe": 1}

Field Required Type Description

pairId true int

unsubscribe true int Provide 1 for Unsubscribe

Response

// Response { "trades": [ [ 1132030, 264000, https://developer.equos.io/#revision-history 68/113 2021/3/1 Revision History – API Reference "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

tradeId int 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

https://developer.equos.io/#revision-history 69/113 2021/3/1 Revision History – API Reference

Environment URL

Testnet wss://testnet.equos.io/ws/chart

Production wss://equos.io/ws/chart

Request Parameters

// Subscribe Message {"pairId":var,"timespan":var} // Unsubscribe {"pairId": var, "unsubscribe": 1}

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

Unsubscribe Message

// Unsubscribe {"pairId": var, "unsubscribe": 1}

Field Required Type Description

pairId true int

unsubscribe true int Provide 1 for Unsubscribe

Response

https://developer.equos.io/#revision-history 70/113 2021/3/1 Revision History – API Reference

// 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 https://developer.equos.io/#revision-history 71/113 2021/3/1 Revision History – API Reference

Field Type Description

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

Ticker

Publishes ticket events

HTTPS Request

Environment URL

Testnet wss://testnet.equos.io/ws/ticker

Production wss://equos.io/ws/ticker

Request Parameters

Field Required Type Description

connect true boolean Set true for start subscribing

// Subscribe Message {"connect": true}

Unsubscribe Message

// Unsubscribe {"unsubscribe": 1}

Field Required Type Description

unsubscribe true int Provide 1 for Unsubscribe

Response

// Response

# Response { [ https://developer.equos.io/#revision-history 72/113 2021/3/1 Revision History – API Reference c: 16051.940000000002 h: 16172.300000000003 l: 15463.020000000002 lastPx: 1605194 lastQty: 79000 o: 15475.920000000004 q: 424.96300000000014 symbol: "BTC/USDC" v: 6707528.054710004 ], [ c: 468.5000000000001 h: 474.9000000000001 l: 460.8100000000001 lastPx: 46850 lastQty: 50000 o: 462.6400000000001 q: 295.0100000000001 symbol: "ETH/USDC" v: 138191.36140000008 ], [ c: 0.02929600000000001 h: 0.02929600000000001 l: 0.02929600000000001 lastPx: 29296 lastQty: 160000 o: 0.02929600000000001 q: 0.16000000000000006 symbol: "ETH/BTC" v: 0.004687360000000003 ], type: 9 volume1day: 684637660 volume7day: 3576361226 volume30day: 15989756234 }

Ticks Section (Comma Delimited)

Field Type Description

c float Last Traded Price

h float 24 hour rolling High

l float 24 hour rolling Low

lastPx int Last Traded Price

lastQty int Last Traded Quantity

o float Open from 24 hours ago

https://developer.equos.io/#revision-history 73/113 2021/3/1 Revision History – API Reference

Field Type Description

q float 24 hour quantity

symbol string trading symbol eg BTC/USDC

v float Volume USDe

Main Section

Field Type Description

type int websocket channel number

volume1day int 1 day Exchange Volume USDe

volume7day int 7 day Exchange Volume USDe

volume30day int 30 day Exchange Volume USDe

lastPx, lastQty 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}

https://developer.equos.io/#revision-history 74/113 2021/3/1 Revision History – API Reference

Field Required Type Description

login true string

password true string

userId true (for Institutional User) 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 Unique order identifier assigned by the EQUOS matching engine.

orderUpdateSeq int

clOrdId string

symbol string

instrumentId int

Side of order:

side string 1 = Buy 2 = Sell

userId int

account int for Institutional User

The execution report’s type:

0 = New 4 = Canceled execType string 5 = Replace 8 = Rejected C = Expired F = Fill Status I = Order Status

https://developer.equos.io/#revision-history 75/113 2021/3/1 Revision History – API Reference

Field Type Description

The order type being submitted or reported:

1 = Market Order ordType string 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order

Identifies status of order.

0 = New 1 = Partially filled ordStatus string 2 = Filled 4 = Cancelled 8 = Rejected C = Expired

timeInForce string

timeStamp string

execId int

fee int

feeTotal int

fee_scale int

feeInstrumentId int

price int Price per unit of quantity. Required for “Limit Order”” and “Stop Limit Order” ordType.

price_scale int

quantity int

quantity_scale int

leavesQty int

leavesQty_scale int

cumQty int The cumulative quantity of an order, currently executed in a chain of partial fills.

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. https://developer.equos.io/#revision-history 76/113 2021/3/1 Revision History – API Reference

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 true (for Institutional User) 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

https://developer.equos.io/#revision-history 77/113 2021/3/1 Revision History – API Reference

Field Type Description

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

Testnet wss://testnet.equos.io/ws/userrisk

Production wss://equos.io/ws/userrisk

Subscribe Message

{"login":"trader123","password":"pwd","account":123}

Field Required Type Description

login true string

password true string

account false (required only for Institutional User) int

Response

NOTE: There are additional fields in response from Websocket than below. Those are legacy fields and could be ignored. https://developer.equos.io/#revision-history 78/113 2021/3/1 Revision History – API Reference

Field Type Description

type int 6 = User Risk

userId int

usdValue double Total USDC value of the account including unrealized P&L

usdPositionsValue double USDC notional of current position(s) and open orders

usdOpenOrdersNotional double Notional value of derivative product open orders

Reserved Margin for open orders, expressed as the maximum of usdMarginReservedBuys and usdMarginReserve double usdMarginReservedSells

usdMarginReservedBuys double The additional Initial Margin required if all open buy orders would be filled

usdMarginReservedSells double The additional Initial Margin required if all open sell orders would be filled

usdMarginInitial double The Initial Margin required for open position(s) and open orders

usdMarginTrigger double Minimum Total Account Margin required to prevent liquidation

accountLeverage double Account leverage expressing Notional Position as multiple of Total Account Margin

usdUnrealized double Unrealized P&L in USDC

usdMarginAvailable double Margin available to place new orders

riskUpdateDate string Date and Time when the User Risk was last updated

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 [email protected] 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

https://developer.equos.io/#revision-history 79/113 2021/3/1 Revision History – API Reference

Tag Name Introduced Message

ExecutionReport 1057 AggressorIndicator FIX.4.4 EP21 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 https://developer.equos.io/#revision-history 80/113 2021/3/1 Revision History – API Reference

[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/ > openssl s_client -showcerts -connect fix.demo.equos.io:4802 < /dev/null | openssl x509 -outform PEM > /home/ > openssl s_client -showcerts -connect fix.demo.equos.io:4803 < /dev/null | openssl x509 -outform PEM > /home/

# PROD https://developer.equos.io/#revision-history 81/113 2021/3/1 Revision History – API Reference > openssl s_client -showcerts -connect fix.equos.io:5801 < /dev/null | openssl x509 -outform PEM > /home/user1 > openssl s_client -showcerts -connect fix.equos.io:5802 < /dev/null | openssl x509 -outform PEM > /home/user1 > openssl s_client -showcerts -connect fix.equos.io:5803 < /dev/null | openssl x509 -outform PEM > /home/user1

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

https://developer.equos.io/#revision-history 82/113 2021/3/1 Revision History – API Reference

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

NewOrderSingle ClOrdID ExecutionReport

OrigClOrdID ExecutionReport

SecurityReqID

SecurityStatusReqID

MDReqID MarketDataRequest

Equos Supplied Identifiers

A sentence about how we make the STRING up

Indentifier Message

SecurityResponseID SecurityList

NewOrderSingle OrderID ExecutionReport

ExecID https://developer.equos.io/#revision-history 83/113 2021/3/1 Revision History – API Reference

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:

PossDupFlag<43> — if a message with this sequence number has been previously received, ignore message, if not, process normally.

PossResend<97> — forward message to application and determine if previously received (i.e. verify order id and parameters).

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 SenderSubID<50> initiator is a trading bot, Equos recommends using a separate static identifier for each bot with the prefix "bot"

SenderLocationID<142> 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 [email protected] 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. OnBehalfOfCompID<115> 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 DeliverToCompID<128> 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.

https://developer.equos.io/#revision-history 84/113 2021/3/1 Revision History – API Reference

Tag Field Name Data Type Req Description

Identifies the beginning of new message and protocol version. Always the first tag in the message. Valid Value: 8 BeginString DATATYPE Y

FIX4.4

Message length, in bytes, forward to the CheckSum <10> field. Always the 9 BodyLength DATATYPE Y 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.

Equos Assigned value used to identify firm sending message. SenderCompID = 49 SenderCompID STRING Y 1000000000+ UserID (which is visible at your user profile page [link?]).

User specified, to identifier initiator of the order (Equos UserID, , bot, 50 SenderSubID STRING N etc.)

142 SenderLocationID STRING N User specified identifier

Equos Assigned value used to identify receiving FIX gateway. Please note 56 TargetCompID STRING Y TargetCompID name varies by environment and gateways vary by port number, please see Conencting for specific details.

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 115 OnBehalfOfCompID STRING N 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 128 DeliverToCompID STRING N delivered in the TargetCompID <56> field and the ultimate receiver firm ID in this field.

Indicates possible retransmission of message with this sequence number 43 PossDupFlag BOOLEAN C Y = Possible duplicate

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).. 97 PossResend BOOLEAN C

N = Original Transmission Y = Possible Resend

52 SendingTime UTCTIMESTAMP C The GMT timestamp on the message.

Required for messages sent as a result of a ResendRequest. Original time of 122 OrigSendingTime UTCTIMESTAMP C message transmission in UTC.

https://developer.equos.io/#revision-history 85/113 2021/3/1 Revision History – API Reference

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:

logon logout disconnect error

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.

https://developer.equos.io/#revision-history 86/113 2021/3/1 Revision History – API Reference

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:

Contain a numeral (0-9) Contain a English lower case character (a-z) Contain a English upper case character (A-Z) Contain one or more of the following non-alphanumeric special characters: !@#$%^&*()_+|~-=`{}[]:";'<>?,./) Contain any character that is categorized as an alphabetic character but is not uppercase or lowercase, this includes characters from Asian languages.

Data Tag Field Name Req Description Type

Standard Header Y MsgType = A

Always the first tag in the message.

98 EncryptMethod INT Y Valid Values: 0 = not encrypted is the only accepted value.

108 HeartBtInt INT Y Heartbeat interval in seconds.

Required to establish logon. Indicates both sides of a FIX session should reset sequence numbers.

141 ResetSeqNumFlag BOOLEAN C Y = Yes, reset sequence numbers

Note MsgSeqNum(34) should be set to 1.

Next expected MsgSeqNum value to be received. Required when connecting to the secondary (standby) FIX Drop Copy server. Please see 789 NextExpectedMsgSeqNum SEQNUM Y the FIX Trading Community FIX Session Protocol description on the use of this tag for recovery.

553 Username STRING Y

Password for the given FIX user identified in SenderCompID. Only 554 Password STRING Y specified in the initial client Logon Message

When enabled, at Logon, the trading system will cancel all user orders associated with the SenderCompID upon disconnection. 6867 CancelOnDisconnect BOOLEAN N Y = enable cancel on disconnect. N = disable cancel on disconnect.

58 Text STRING N

Standard Standard Trailer Y Trailer

https://developer.equos.io/#revision-history 87/113 2021/3/1 Revision History – API Reference

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

Data Tag Field Name Req Description Type

Standard Y MsgType = 5 Header

58 Text STRING N A unique ID assigned by the client to the market data request

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 1409 SessionStatus INT N 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 Y Trailer

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.

https://developer.equos.io/#revision-history 88/113 2021/3/1 Revision History – API Reference

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).

Data Tag Field Name Req Description Type

Standard Y MsgType = 1 Header

Identifier included in Test Request (1) message to be returned in resulting 112 TestReqID STRING Y 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.

To request a single message: BeginSeqNo<7> = EndSeqNo<16>

To request a range of messages: BeginSeqNo<7> = first message of range, EndSeqNo<16> = last message of range https://developer.equos.io/#revision-history 89/113 2021/3/1 Revision History – API Reference

To request all messages subsequent to a particular message: BeginSeqNo<7> = first message of range, = 0 (represents infinity) .

Data Tag Field Name Req Description Type

Standard Y MsgType = 2 Header

7 BeginSeqNo STRING Y First sequence number in the range to be resent.

Last sequence number in the range to be resent. For single message resend requests, set 16 EndSeqNo STRING Y BeginSeqNo = EndSeqNo. If request is for all messages subsequent to a particular message, EndSeqNo = 0.

Standard Y Trailer

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.

Code to identify reason for a session-level Reject message.

1 = Required tag missing 373 SessionRejectReason INT Y 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 > https://developer.equos.io/#revision-history 90/113 2021/3/1 Revision History – API Reference

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>).

Data Tag Field Name Req Description Type

Standard Y MsgType = W Header

Indicates that the Sequence Reset message is replacing administrative or application messages which will not be resent. 123 GapFillFlag BOOLEAN N Y = Gap Fill Message, Msg Seq Num Field Valid N = Sequence Reset, Ignore Msg Seq Num

36 NewSeqNo SEQNUM Y New sequence number

Standard Y Trailer

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.

Data Tag Field Name Req Description Type

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

The tag number of the FIX field being referenced. Only sent when ‘Business 371 RefTagID INT N 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.

Code to identify reason for this reject message:

1 = Unknown ID 2 = Unknown Security 380 BusinessRejectReason INT Y 3 = Unsupported Message Type 5 = Conditionally Required field missing 6 = Not authorized 0 = Other

https://developer.equos.io/#revision-history 91/113 2021/3/1 Revision History – API Reference

Data Tag Field Name Req Description Type

58 Text STRING N Additional description of the error, when required

Standard Trailer Y

FIX Market Data

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:

0 - Symbol<55> - only the specified symbol 1 - CFICode<461> - all symbols matching the CFICode 4 - All Securities - all symbols on Equos 5 = MarketID - all symbols for a specific market

Presently 559=4 is the only supported lookup

Data Tag Field Name Req Description Type

Standard Header Y MsgType = x

320 SecurityReqID STRING Y Unique security request ID set by client

Identifies the type/criteria of Security List Request

0 = Symbol 559 SecurityListRequestType INT Y 1 = CFICode 4 = All Securities 5 = MarketID

Subscription Request Type

263 SubscriptionRequestType INT N 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

Identifies source of the SecurityID(48) value. 22 SecurityIDSource STRING C M = Equos Exchange Instrument ID

https://developer.equos.io/#revision-history 92/113 2021/3/1 Revision History – API Reference

Data Tag Field Name Req Description Type

Indicates the type of security using ISO 10962 standard, Classification of 461 CFICode STRING C 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:

M = Equos Exchange Instrument ID 8 = Equos Exchange Symbol (used in tag Symbol<55>) S = Financial Instrument Global Identifier

Security Status

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

One week prior to IssueDate<225> SecurityStatus<965> 10 = Published On the IssueDate<225> SecurityStatus<965> 1 = Active After MaturityDate<541> SecurityStatus<965> 4 = Expired

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

https://developer.equos.io/#revision-history 93/113 2021/3/1 Revision History – API Reference

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

Indicates whether this message is the last in a sequence of messages for those messages that support fragmentation, such as Security List. 893 LastFragment BOOLEAN N

N = Not last message Y = Last message.

Used to indicate the total number of securities being returned for 393 TotNoRelatedSym INT N this request. Used in the event that message fragmentation is required.

Result of the Security Request identified by the SecurityReqID.

560 SecurityRequestResult INT N 0 = Valid request 1 = Invalid or unsupported request 2 = No instruments found that match selection criteria.

Specifies the number of repeating symbols (instruments) 146 NoRelatedSym NUMINGROUP Y specified

→ 55 Symbol STRING C Equos exchange Symbol

→ 48 SecurityID STRING C Equos Instrument ID

Identifies source of the SecurityID(48) value. → 22 SecurityIDSource STRING C M = Equos Exchange Instrument ID

→ 454 NoSecurityAltID NUMINGROUP ? Number of SecurityAltID (455) entries.

→ → 455 SecurityAltID STRING C Financial Instrument Global Identifier see OpenFIGI

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

→ → 455 SecurityAltID STRING C Financial Instrument Global Identifier see OpenFIGI

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

Indicates the type of security using ISO 10962 standard, → 461 CFICode STRING C 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. https://developer.equos.io/#revision-history 94/113 2021/3/1 Revision History – API Reference

Tag Field Name Data Type Req Description

Denotes the current state of the Instrument

1 = Active 2 = Inactive → 965 SecurityStatus INT Y 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.

Underlying security’s SecurityID. See SecurityID (48) field for → 309 UnderlyingSecurityID STRING N description.

Underlying security’s SecurityIDSource. Valid values: see → 305 UnderlyingSecurityIDSource STRING N SecurityIDSource (22) field.

Underlying security's SecurityExchange. Can be used to identify → 308 UnderlyingSecurityExchange STRING N the underlying security.

→ 255 IssueDate UTCTIMESTAMP C Date the instrument issued, becomes active for trading.

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 → 200 MaturityMonthYear MONTHYEAR C 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.

Type of quantity specified in a quantity field:

→ 854 QtyType INT C 0 = Units (shares, par, currency) 1 = Contracts (if used - must specify ContractMultiplier (tag 231))

For a futures instrument: The quantity of underlying units per 1 → 231 ContractMultiplier FLOAT C futures contract

https://developer.equos.io/#revision-history 95/113 2021/3/1 Revision History – API Reference

Tag Field Name Data Type Req Description

Indicates whether an option contract is a put or call:

→ 201 PutOrCall BOOLEAN C 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.

Minimum price increment amount associated with the MinPriceIncrement(969). For listed derivatives, the value can be → 1146 MinPriceIncrementAmount AMOUNT C calculated by multiplying MinPriceIncrement by ContractValueFactor(231).

→ 562 MinTradeVol QTY N The minimum order quantity that can be submitted for an order.

The maximum order quantity that can be submitted for a → 1140 MaxTradeVol QTY N security.

Standard Trailer Y

MarketDataRequest < V >

A Market Data Request is a general request for subscribing market data.

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

Subscription Request Type:

263 SubscriptionRequestType CHAR Y 1 = Snapshot + Updates (Subscribe) 2 = Disable previous Snapshot + Update Request (Unsubscribe)

Depth of Market for Snapshot:

264 MarketDepth INT Y 0 = Full Book 1 = Top of Book

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

https://developer.equos.io/#revision-history 96/113 2021/3/1 Revision History – API Reference

Tag Field Name Data Type Req Description

Specifies whether or not book entries should be aggregated.

266 AggregatedBook BOOLEAN Y 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

Type of Market Data entry

→ 269 MDEntryType CHAR 0 = Bid 1 = Offer

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

The Security Indentifier (type) as specified/requested in → 48 SecurityID STRING C SecurityIDSource(22)

→ 22 SecurityIDSource STRING C Identifies class or source of the SecurityID(48) value.

end group < NoRelatedSym >

Standard Standard Trailer Y Trailer

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

A unique ID assigned by the client to the market data request, which is being 262 MDReqID STRING Y rejected

https://developer.equos.io/#revision-history 97/113 2021/3/1 Revision History – API Reference

Tag Field Name Data Type Req Description

Reason for the rejection of a Market Data request:

0 = Unknown symbol 1 = Duplicate MDReqID 281 MDReqRejReason CHAR N 2 = Insufficient Bandwidth 3 = Insufficient Permissions 4 = Unsupported SubscriptionRequestType 5 = Unsupported MarketDepth 6 = Unsupported MDUpdateType

58 Text STRING N Free format text string describing the reason for the rejection.

Standard Standard Trailer Y Trailer

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

A unique ID assigned by the client when responding to a MarketDataRequest 262 MDReqID STRING N < 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.

Indicates the type of security using ISO 10962 standard, Classification of 461 CFICode STRING N 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.

https://developer.equos.io/#revision-history 98/113 2021/3/1 Revision History – API Reference

Tag Field Name Data Type Req Description

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 → 269 MDEntryType CHAR Y 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 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).

Direction of the "tick"

0 = Plus Tick → 274 TickDirection CHAR C 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. https://developer.equos.io/#revision-history 99/113 2021/3/1 Revision History – API Reference

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.

Must be the first tag in each repeating group. Valid values:

→ 279 MDUpdateAction CHAR Y 0 = New 1 = Change 2 = Delete.

Reason for deletion. Valid values:

→ 285 DeleteReason CHAR Y 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.

Indicates the type of security using ISO 10962 standard, Classification of → 461 CFICode STRING N Financial Instruments (CFI code) values.

→ 1301 MarketID STRING N ISO 10383 standard: Market Identifier Code (MIC)

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 → 269 MDEntryType CHAR Y 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.

https://developer.equos.io/#revision-history 100/113 2021/3/1 Revision History – API Reference

Tag Field Name Data Type Req Description

→ 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).

Direction of the "tick"

0 = Plus Tick → 274 TickDirection CHAR C 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

Specify valid account id for on behalf of order submission. Submitting 1 Account STRING N session user should have required privilege.

UUID selected by client to identify the order Unique identifier for Order as assigned by the client. Uniqueness must be 11 ClOrdID STRING Y 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.

Equos exchange Symbol, if using SecurityID/SecurityIDSource fields, set 55 Symbol STRING C Symbol to N/A

48 SecurityID STRING C Security identifier of the form specified SecurityIDSource<22>

Identifies source of the SecurityID<48> value.

22 SecurityIDSource STRING C M = Equos Instrument ID 8 = Equos Exchange Symbol S = Financial Instrument Global Identifier https://developer.equos.io/#revision-history 101/113 2021/3/1 Revision History – API Reference

Tag Field Name Data Type Req Description

Side of order:

54 Side CHAR Y 1 = Buy 2 = Sell

38 OrderQty QTY Y Order quantity specified in the base Currency<15> or Contracts

The following order types can be placed:

1 = Market Order 40 OrdType CHAR Y 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order

Instructions for handling the order. If more than one instruction is applicable to an order, this field can contain multiple instructions separated by space. 18 ExecInst MultipleValueString N 6 = Participate don't initiate (Post Only) E = Do not increase - DNI (under development)

44 Price PRICE N Order limit price.

The price at which the stop is triggered. Required for OrdType<40> = 3 99 StopPx PRICE C (Stop Order) or = 4 (Stop Limit Order)

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) 59 TimeInForce CHAR N 3 = Immediate or Cancel (IOC) 4 = Fill or Kill (FOK) 5 = Good Till Crossing (GTX) 6 = Good Till Date (GTD)

The minimum quantity for which the order can be executed for 110 MinQty QTY N TimeInForce<110> = 3 (Immediate or Cancel).

Conditionally required if TimeInForce<59> = GTD and ExpireTime<126> 432 ExpireDate LOCALMKTDATE C is not specified.

Conditionally required if TimeInForce<59> = GTD and ExpireDate<432> 126 ExpireTime UTCTIMESTAMP C is not specified..

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)

775 BookingType INT N 0 = Regular Spot booking 1 = CFD (Contract for difference) 2 = Total Return

User specified order label, will be echoed on all ExecutionReport<8> with 20003 UserOrderLabel STRING N this ClOrdID<11> Maximum of 60 characters

Timestamp when the business transaction represented by the message 60 TransactTime UTCTIMESTAMP Y occurred. https://developer.equos.io/#revision-history 102/113 2021/3/1 Revision History – API Reference

Tag Field Name Data Type Req Description

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

37 OrderID STRING Y Unique order identifier assigned by the EQUOS matching engine.

198 SecondaryOrderID STRING N

UUID selected by client to identify the order Unique identifier for Order as assigned by the client. Uniqueness must 11 ClOrdID STRING Y 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

Used to identify source of PartyID <448>. Required if PartyIDSource → 448 PartyID STRING N <447> is specified. Required if NoPartyIDs <453> > 0.

Identifies class or source of the PartyID <448> value. Required if → 447 PartyIDSource CHAR N PartyID <448> is specified. Note: applicable values depend upon PartyRole <452> specified.

Identifies the type of PartyID <448> (e.g. Executing Broker). Required if → 452 PartyRole INT N NoPartyIDs <453> > 0.

17 ExecID STRING N identifier of the execution report (not an actual execution).

The execution report’s type:

0 = New 4 = Canceled 150 ExecType CHAR Y 5 = Replace 8 = Rejected C = Expired F = Fill Status I = Order Status

https://developer.equos.io/#revision-history 103/113 2021/3/1 Revision History – API Reference

Tag Field Name Data Type Req Description

Identifies status of order.

0 = New 1 = Partially filled 39 OrdStatus CHAR Y 2 = Filled 3 = Done for Day 4 = Cancelled 8 = Rejected C = Expired.

Specify valid account id for on behalf of order submission. Submitting 1 Account STRING Y session user should have required privilege.

Identifies the type of request that a Cancel Reject is in response to.

434 CxlRejResponseTo CHAR Y 1 = Order cancel request 2 = Order cancel/replace request.

Code to identify reason for cancel rejection.

0 = Too late to cancel 1 = Unknown order 102 CxlRejReason CHAR N 2 = Broker/Exchange Option 6 = Duplicate ClOrdID (11) received 8 = Price exceeds current price band 100 = Order not currently accessible for cancellation or modification

Equos exchange Symbol, still returned even if using 55 Symbol STRING C SecurityID/SecurityIDSource fields used in in the initiating order, and set Symbol<55> set to N/A

Security identifier of the form specified SecurityIDSource<22> of the 48 SecurityID STRING C type used on the initiating order

Identifies source of the SecurityID<48> value.

M = Equos Instrument ID 22 SecurityIDSource STRING C 8 = Equos Exchange Symbol S = Financial Instrument Global Identifier

of the type used on the initiating order

Side of order:

54 Side CHAR Y 1 = Buy 2 = Sell

38 OrderQty QTY Y Order quantity specified in the base Currency<15> or Contracts

The following order types can be replaced:

1 = Market Order 40 OrdType CHAR Y 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order

https://developer.equos.io/#revision-history 104/113 2021/3/1 Revision History – API Reference

Tag Field Name Data Type Req Description

Instructions for handling the order. If more than one instruction is applicable to an order, this field can contain multiple instructions separated by space. 18 ExecInst MultipleValueString N 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.

The price at which the stop is triggered. Required for OrdType<40> = 99 StopPx PRICE C 3 (Stop Order) or = 4 (Stop Limit Order)

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) 59 TimeInForce CHAR N 3 = Immediate or Cancel (IOC) 4 = Fill or Kill (FOK) 5 = Good Till Crossing (GTX) 6 = Good Till Date (GTD)

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.

Amount of order open for further execution. If the OrdStatus 39 = 4, C, 151 LeavesQty QTY C the order is no longer active and LeavesQty can = 0. Otherwise, LeavesQty = OrderQty - CumQty

The cumulative quantity of an order, currently executed in a chain of 14 CumQty QTY C partial fills.

84 CxlQty QTY C Average execution price or 0.0 if not executed yet or rejected.

Timestamp when the business transaction represented by the message 60 TransactTime UTCTIMESTAMP Y occurred.

Commission amount paid (positive value) or received (negative value) 12 Commission AMT N for each partial fill quantity in LastQty(32).

Commission Type 13 CommType CHAR N 3 = Absolute (Total monetary amount)

479 CommCurrency UTCTIMESTAMP Y Currency of the commission

The unique ID assigned to the trade entity once it is received or 1003 TradeID STRING N matched by the exchange or central counterparty.

Used to identify whether the order initiator is an aggressor

1057 AggressorIndicator CHAR N Y = Order initiator is aggressor N = Order initiator is passive

https://developer.equos.io/#revision-history 105/113 2021/3/1 Revision History – API Reference

Tag Field Name Data Type Req Description

Standard Trailer Standard Trailer Y

OrderCancelRequest < F >

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. The ClOrdID <11> assigned to the cancel request must be unique amongst the ClOrdID <11> assigned to regular orders and replacement orders.

If rejected, the ClOrdID <11> of the cancel request will be sent in the 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

Specify valid account id for on behalf of order submission. Submitting 1 Account STRING N session user should have required privilege.

UUID selected by client to identify the order Unique identifier for Order as assigned by the client. Uniqueness must be 11 ClOrdID STRING Y 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 the EQUOS matching engine.

Equos exchange Symbol, if using SecurityID/SecurityIDSource fields, set 55 Symbol STRING C Symbol to N/A

48 SecurityID STRING C Security identifier of the form specified SecurityIDSource<22>

Identifies source of the SecurityID<48> value.

22 SecurityIDSource STRING N M = Equos Instrument ID 8 = Equos Exchange Symbol S = Financial Instrument Global Identifier

Side of order:

54 Side CHAR N 1 = Buy 2 = Sell

Timestamp when the business transaction represented by the message 60 TransactTime UTCTIMESTAMP Y occurred. https://developer.equos.io/#revision-history 106/113 2021/3/1 Revision History – API Reference

Tag Field Name Data Type Req Description

Standard Trailer Y

OrderCancel/ReplaceRequest< G >

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.).

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

Note that while it is necessary for the ClOrdID <11> to change and be unique, a new OrderID <37> field will be assigned by the Exchange if the Cancel/Replace request succeeded.

If rejected, the ClOrdID <11> of the cancel request will be sent in the Order Cancel Reject <9> message.

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

Tag Field Name Data Type Req Description

Standard Header Y MsgType = F

UUID selected by client to identify the order Unique identifier for Order as assigned by the client. Uniqueness must be 11 ClOrdID STRING Y 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 the EQUOS matching engine.

Specify valid account id for on behalf of order submission. Submitting 1 Account STRING N session user should have required privilege.

Equos exchange Symbol, if using SecurityID/SecurityIDSource fields, set 55 Symbol STRING C Symbol to N/A

48 SecurityID STRING C Security identifier of the form specified SecurityIDSource<22>

Identifies source of the SecurityID<48> value.

22 SecurityIDSource STRING C M = Equos Instrument ID 8 = Equos Exchange Symbol S = Financial Instrument Global Identifier

Side of order:

54 Side CHAR Y 1 = Buy 2 = Sell https://developer.equos.io/#revision-history 107/113 2021/3/1 Revision History – API Reference

Tag Field Name Data Type Req Description

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

The following order types can be replaced:

1 = Market Order 40 OrdType CHAR Y 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order

The price at which the stop is triggered. Required for OrdType<40> = 3 99 StopPx PRICE C (Stop Order) or = 4 (Stop Limit Order)

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) 59 TimeInForce CHAR N 3 = Immediate or Cancel (IOC) 4 = Fill or Kill (FOK) 5 = Good Till Crossing (GTX) 6 = Good Till Date (GTD)

Timestamp when the business transaction represented by the message 60 TransactTime UTCTIMESTAMP Y 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 ClOrdID <11> of the cancel/amend request will be sent in the Order Cancel Reject <9> message.

Tag Field Name Data Type Req Description

Standard Header Y MsgType = 9

Specify valid account id for on behalf of order submission. Submitting 1 Account STRING Y session user should have required privilege.

37 OrderID STRING Y Unique order identifier assigned by the EQUOS matching engine.

https://developer.equos.io/#revision-history 108/113 2021/3/1 Revision History – API Reference

Tag Field Name Data Type Req Description

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).

Identifies status of order.

0 = New 1 = Partially filled 39 OrdStatus CHAR Y 2 = Filled 4 = Cancelled 8 = Rejected C = Expired

Identifies the type of request that a Cancel Reject is in response to.

434 CxlRejResponseTo CHAR Y 1 = Order cancel request 2 = Order cancel/replace request.

Code to identify reason for cancel rejection.

0 = Too late to cancel 1 = Unknown order 102 CxlRejReason CHAR N 2 = Broker/Exchange Option 6 = Duplicate ClOrdID (11) received 8 = Price exceeds current price band 100 = Order not currently accessible for cancellation or modification

Descriptive text message elaborating on the reason of the Cancel Reject if 58 Text STRING Y required

Timestamp when the business transaction represented by the message 60 TransactTime UTCTIMESTAMP Y occurred.

Standard Trailer Y

OrderMassStatusRequest < AF >

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 https://developer.equos.io/#revision-history 109/113 2021/3/1 Revision History – API Reference

Tag Field Name Data Type Req Description

Mass Status Request Type

1 = Status for orders for a Security 585 MassStatusReqType STRING Y 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

Equos exchange Symbol, if using SecurityID/SecurityIDSource fields, set 55 Symbol STRING C Symbol to N/A

48 SecurityID STRING C Security identifier of the form specified SecurityIDSource<22>

Identifies source of the SecurityID<48> value.

22 SecurityIDSource STRING C M = Equos Instrument ID 8 = Equos Exchange Symbol S = Financial Instrument Global Identifier

Timestamp when the business transaction represented by the message 60 TransactTime UTCTIMESTAMP Y 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:

support for many cryptocurrency exchanges fully implemented public and private APIs optional normalized data for cross-exchange analytics and arbitrage an out of the box unified API that is extremely easy to integrate works in Node 7.6+, Python 3, PHP 5.4+, and web browsers

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

Python: https://github.com/ccxt/ccxt/tree/master/python Javascript: https://github.com/ccxt/ccxt/tree/master/js https://developer.equos.io/#revision-history 110/113 2021/3/1 Revision History – API Reference PHP: https://github.com/ccxt/ccxt/tree/master/php

Revision History

Date Ver API End Point Type Description

REST https://equos.io/api/sendWithdrawRequest https://equos.io/api/getTransferHistory Updates for crypto New Features 2021/02/03 5.0 REST withdrawal endpoint and https://equos.io/api/getUserHistory and updates order endpoints https://equos.io/api/cancelOrder https://equos.io/api/userTrades https://equos.io/api/cancelAll

REST https://equos.io/api/getRisk

REST & Updated mandatory fields 2021/01/12 4.13 WSS Updates WSS for Institutional User wss://equos.io/ws/userrisk wss://equos.io/ws/userorders wss://equos.io/ws/userposition

REST updated REST api/getRisk https://equos.io/api/getRisk wss/userrisk wss://equos.io/ws/userrisk api/getOrderStatus( REST & 2021/01/11 4.12 https://equos.io/api/getOrderStatus Updates removed old endpoint FIX /getOrder) FIX MarketDataRequest < V > FIX updated MDEntryType<269>

https://equos.io/api/userTrades https://equos.io/api/getInstrumentPairs https://equos.io/api/getRisk wss://equos.io/ws/userrisk updates to api/userTrades REST & https://equos.io/api/getOrder and updates to 2021/01/08 4.11 Updates WSS https://equos.io/api/getInstruments getInstrumentPairs with https://equos.io/api/getInstrumentPairs example for Perpetuals https://equos.io/api/getOrderBook https://equos.io/api/getTradeHistory https://equos.io/api/getChart

New API health check https://equos.io/api/health New Feature endpoint and 2020/12/24 4.10 REST https://equos.io/api/getOrderStatus and updates api/getOrderStatus endpoint

https://developer.equos.io/#revision-history 111/113 2021/3/1 Revision History – API Reference

Date Ver API End Point Type Description

wss://equos.io/ws/ticker wss://equos.io/w Public Websocket endpoints with Unsubscribe s/orderbook wss://equos.io/ws/tradehistor 2020/11/24 4.9 WSS New Feature and updates on description y wss://equos.io/ws/chart https://equos.i of the FIX and REST o/api/userTrades endpoints and examples.

2020/09/20 4.8 WSS wss://equos.io/ws/ticker New Feature Ticker Endpoint

GET https://equos.io/api/getFundingRateHis Perpetual Funding Rate 2020/09/05 4.7 REST New Feature tory History

User History Reports 2020/09/05 4.7 REST POST https://equos.io/api/getUserHistory New Feature supporting Order, Trade, Funding History, Position

Expanded reference data GET https://equos.io/api/getInstrumentPai 2020/08/25 4.6 REST Enhancement fields to support Perpetuals, rs Futures & Options

Expanded fields for 2020/08/25 4.6 WSS wss://equos.io/ws/orderbook Enhancement perpetual contract data

Wait for orderId from 2020/08/25 4.6 REST POST https://equos.io/api/order Enhancement matching engine control flag added

Python Sample Codes Python Sample Codes for REST / WS and Up to date added for REST / WS APIs 2020/08/06 4.5 REST/WS Enhancement REST / WS / FIX API documents and Updated REST/WS/FIX APIs documentation

GET https://equos.io/api/userTrades Average execution price 2020/07/28 4.4 REST/WS Enhancement wss://equos.io/ws//userTrades added

GET https://equos.io/api/getTradeHistory AggressorSide added to 2020/07/21 4.2.7 REST/WS Enhancement wss://equos.io/ws/tradehistory tradeHistory endpoint

Commission fields added to 2020/06/17 4.2 FIX ExecutionReport<8> Enhancement ExecutionReport

USD/USDC Book 2020/05/15 3.10 All All New Feature consolidation

System USD Instruments removed 2020/05/15 3.10 All All Change from the trading list

New https://equos.io/api/ System 2020/05/15 3.10 REST Endpoint URL change Legacy https://trade.equos.io/api/ 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

https://developer.equos.io/#revision-history 112/113 2021/3/1 Revision History – API Reference

Date Ver API End Point Type Description

POST https://trade.equos.io/api/logon POST https://trade.equos.io/api/order POST https://trade.equos.io/api/cancelOrd er POST https://trade.equos.io/api/cancelRepl Institutional/multiple 2020/04/06 2.20 REST aceOrder Update account support in REST POST https://trade.equos.io/api/getOrders POST https://trade.equos.io/api/getOrder POST https://trade.equos.io/api/getPositi ons POST https://trade.equos.io/api/getRisk

2020/03/27 2.00 All EQUOS developer documentation site Initial Document Release

https://developer.equos.io/#revision-history 113/113