Revision History
Date | Ver | API | End Point | Type | Description |
---|---|---|---|---|---|
2021/02/03 | 5.0 | REST | REST https://equos.io/api/sendWithdrawRequest https://equos.io/api/getTransferHistory https://equos.io/api/getUserHistory https://equos.io/api/cancelOrder https://equos.io/api/userTrades https://equos.io/api/cancelAll |
New Features and updates | Updates for crypto withdrawal endpoint and order endpoints |
2021/01/12 | 4.13 | REST & WSS | REST https://equos.io/api/getRisk WSS wss://equos.io/ws/userrisk wss://equos.io/ws/userorders wss://equos.io/ws/userposition |
Updates | Updated mandatory fields for Institutional User |
2021/01/11 | 4.12 | REST & FIX | REST https://equos.io/api/getRisk wss://equos.io/ws/userrisk https://equos.io/api/getOrderStatus FIX MarketDataRequest < V > |
Updates | REST updated api/getRisk wss/userrisk api/getOrderStatus( removed old endpoint /getOrder) FIX updated MDEntryType<269> |
2021/01/08 | 4.11 | REST & WSS | https://equos.io/api/userTrades https://equos.io/api/getInstrumentPairs https://equos.io/api/getRisk wss://equos.io/ws/userrisk https://equos.io/api/getOrder https://equos.io/api/getInstruments https://equos.io/api/getInstrumentPairs https://equos.io/api/getOrderBook https://equos.io/api/getTradeHistory https://equos.io/api/getChart |
Updates | updates to api/userTrades and updates to getInstrumentPairs with example for Perpetuals |
2020/12/24 | 4.10 | REST | https://equos.io/api/health https://equos.io/api/getOrderStatus |
New Feature and updates | New API health check endpoint and api/getOrderStatus endpoint |
2020/11/24 | 4.9 | WSS | wss://equos.io/ws/ticker wss://equos.io/ws/orderbook wss://equos.io/ws/tradehistory wss://equos.io/ws/chart https://equos.io/api/userTrades |
New Feature | Public Websocket endpoints with Unsubscribe and updates on description of the FIX and REST endpoints and examples. |
2020/09/20 | 4.8 | WSS | wss://equos.io/ws/ticker |
New Feature | Ticker Endpoint |
2020/09/05 | 4.7 | REST | GET https://equos.io/api/getFundingRateHistory |
New Feature | Perpetual Funding Rate History |
2020/09/05 | 4.7 | REST | POST https://equos.io/api/getUserHistory |
New Feature | User History Reports supporting Order, Trade, Funding History, Position |
2020/08/25 | 4.6 | REST | GET https://equos.io/api/getInstrumentPairs |
Enhancement | Expanded reference data fields to support Perpetuals, Futures & Options |
2020/08/25 | 4.6 | WSS | wss://equos.io/ws/orderbook |
Enhancement | Expanded fields for perpetual contract data |
2020/08/25 | 4.6 | REST | POST https://equos.io/api/order |
Enhancement | Wait for orderId from matching engine control flag added |
2020/08/06 | 4.5 | REST/WS | Python Sample Codes for REST / WS and Up to date REST / WS / FIX API documents | Enhancement | Python Sample Codes added for REST / WS APIs and Updated REST/WS/FIX APIs documentation |
2020/07/28 | 4.4 | REST/WS | GET https://equos.io/api/userTrades wss://equos.io/ws//userTrades |
Enhancement | Average execution price added |
2020/07/21 | 4.2.7 | REST/WS | GET https://equos.io/api/getTradeHistory wss://equos.io/ws/tradehistory |
Enhancement | AggressorSide added to tradeHistory endpoint |
2020/06/17 | 4.2 | FIX | ExecutionReport<8> |
Enhancement | Commission fields added to ExecutionReport |
2020/05/15 | 3.10 | All | All | New Feature | USD/USDC Book consolidation |
2020/05/15 | 3.10 | All | All | System Change | USD Instruments removed from the trading list |
2020/05/15 | 3.10 | REST | New https://equos.io/api/ Legacy https://trade.equos.io/api/ |
System Change | Endpoint URL change |
2020/05/06 | 3.02 | FIX | Logon<1> |
New Feature | Cancel on Disconnect |
2020/04/28 | 3.00 | ccxt | github developer resources | New Feature | ccxt API support released |
2020/04/06 | 2.20 | REST | POST https://trade.equos.io/api/logon POST https://trade.equos.io/api/order POST https://trade.equos.io/api/cancelOrder POST https://trade.equos.io/api/cancelReplaceOrder POST https://trade.equos.io/api/getOrders POST https://trade.equos.io/api/getOrder POST https://trade.equos.io/api/getPositions POST https://trade.equos.io/api/getRisk |
Update | Institutional/multiple account support in REST |
2020/03/27 | 2.00 | All | EQUOS developer documentation site | Initial | Document Release |
Introduction
Welcome to the EQUOS Exchange developer site
What is an API?
API is the acronym for Application Programming Interface. An API provides a means for one application to interact with another according to a rules of engagement. The EQUOS developer documentation, describes the rules by which your application can interact with the EQUOS exchange.
EQUOS supports a variety of popular Application Programming Interfaces:
- 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 integration@equos.io
- API support, errors or omissions in this document api.support@equos.io
Terms of Service
By accessing or using any EQUOS public or private API endpoint you have agreed to be bound by the EQUOS API Terms of Service. Usage of, or interaction with any product or service offered by EQUOS, whether by API or any other method of access is bound by the EQUOS Terms and Conditions and Business Rules of EQUOS. References in this API to “EQUOS”, “we”, “our”, or “us”, are to Diginex Capital Pte. Ltd. (company number 079903) and the Diginex Group depending on the services being discussed.
API Keys
All API keys are used at your own risk and expense. EQUOS will not be held responsible for any error, malfunction, negligence, compromised security, cyber attack, or other force majeure affecting this platform. Users of the API will indemnify and hold harmless, the Diginex Group EQUOS, its Affiliates, and affiliated and other group companies from all damages losses and claims associate with the usage of this API and trading system.
Authentication
A registered user should have API access to Equos via FIX, REST, and WebSocket. Please refer to this help article on how to obtain your credentials for API access:
- 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.
By accessing the Equos Market Data API, you agree to be bound by the Terms of Service.
Get Instruments
Get a list of available currency for trading.
HTTPS Request
// Request
GET /getInstruments
# Request
GET /getInstruments
Environment | URL |
---|---|
Testnet | GET https://testnet.equos.io/api/getInstruments |
Production | GET https://equos.io/api/getInstruments |
Request Parameters
None
Response
// Response
{
"instruments": [
[2,"ETH",2,6,1,0,"ETH",true],
[3,"BTC",2,6,1,0,"BTC",true],
[1,"USDC",2,6,1,0,"USDC",true]
]
}
# 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 | |
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
// 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,
"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 |
Instrument Pair Section (Comma Delimited)
Field | Spot | Perp | Future | Option | Type | Example | Description |
---|---|---|---|---|---|---|---|
instrumentId | ✓ | ✓ | ✓ | ✓ | int | 135 | EQUOS Instrument ID |
symbol | ✓ | ✓ | ✓ | ✓ | string | BTC/USD[P]Now14_6000 | EQUOS Exchange Symbol |
quoteId | ✓ | ✓ | ✓ | ✓ | int | 1 | EQUOS Instrument ID for Quote Currency |
baseId | ✓ | ✓ | ✓ | ✓ | int | 3 | EQUOS Instrument ID for Base Currency |
price_scale | ✓ | ✓ | ✓ | ✓ | int | 2 | int to decimal conversion factor for Price |
quantity_scale | ✓ | ✓ | ✓ | ✓ | int | 6 | int to decimal conversion factor for quantity |
securityStatus | ✓ | ✓ | ✓ | ✓ | int | 1 | Trading Status of the instrument |
securityDesc | ✓ | ✓ | ✓ | ✓ | string | BTC/USD[P]Now10_6000 | Full description of the instrument |
assetType | ✓ | ✓ | ✓ | ✓ | string | OPTION_PUT | Asset Type |
currency | ✓ | ✓ | ✓ | ✓ | string | BTC | Base (left hand) currency symbol |
contAmtCurr | ✓ | ✓ | ✓ | ✓ | string | USDC | Quote or Contract (right hand) currency symbol |
settleCurrency | ✓ | ✓ | ✓ | ✓ | string | USDC | Settlement currency symbol |
commCurrency | ✓ | ✓ | ✓ | ✓ | string | USDC | Commission Currency |
cfiCode | ✓ | ✓ | ✓ | ✓ | string | XXXXXX | CFI Code (ISO Classification of Financial Instruments) |
micCode | ✓ | ✓ | ✓ | ✓ | string | XXXX | MIC Code (ISO Market Identification Code) |
instrumentPricePrecision | ✓ | ✓ | ✓ | ✓ | int | 2 | Specifies the number of decimal places for instrument prices. |
minPriceIncrement | ✓ | ✓ | ✓ | ✓ | number | 1.0 | Minimum price increase for a given exchange-traded Instrument |
minPriceIncrementAmount | ✓ | ✓ | ✓ | ✓ | number | 1.0 | Minimum price increment amount associated with the MinPriceIncrement. For listed derivatives, the value can be calculated by multiplying MinPriceIncrement by contractMultiplier. |
roundLot | ✓ | ✓ | ✓ | ✓ | int | 1 | The trading lot size of a instrument |
minTradeVol | ✓ | ✓ | ✓ | ✓ | number | 1000 | Minium trade volume |
maxTradeVol | ✓ | ✓ | ✓ | ✓ | number | 0 | Maximum trade volume |
qtyType | ✓ | ✓ | ✓ | ✓ | int | 0 | Type of quantity specified in a quantity field 0 = Currency or notional value 1 = Contracts |
contractMultiplier | ✓ | ✓ | ✓ | ✓ | number | 1.0 | Specifies the ratio or multiply factor to convert from contracts to shares (e.g. 1.0, 100, 1000, etc). |
underlyingSymbol | ✗ | ✓ | ✓ | ✓ | string | BTC/USDC | Underlying Instrument for Futures and Options |
underlyingSecurityID | ✗ | ✓ | ✓ | ✓ | int | 52 | EQUOS Instrument ID |
UnderlyingSecurityIDSource | ✗ | ✓ | ✓ | ✓ | string | M | EQUOS Instrument ID Source type = M |
underlyingSecurityExchange | ✗ | ✓ | ✓ | ✓ | string | XXXX | MIC Code of the underlying instrument |
issueDate | ✗ | ✓ | ✓ | ✓ | int | 1598608087000 | Date/time on which the 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}
# Request
GET /getOrderBook?pairId={int}
Environment | URL |
---|---|
Testnet | GET https://testnet.equos.io/api/getOrderBook |
Production | GET https://equos.io/api/getOrderBook |
Request Parameters
Field | Required | Type | Description |
---|---|---|---|
pairId | true | int |
Response
// Response
{
"bids": [
[
1131294,
265000,
1596508725841
],
[
1130841,
6366000,
1596508725841
],
...
]
"asks": [
[
1132010,
2400000,
1596508725841
],
[
1132426,
264000,
1596508725841
],
...
]
"usdMark": 11323.74,
"marketStatus": 0,
"estFundingRate": 0.0,
"fundingRateTime": 0,
"auctionPrice": 0.0,
"auctionVolume": 0.0
}
# Response
{
"bids": [
[
1131294,
265000,
1596508725841
],
[
1130841,
6366000,
1596508725841
],
...
]
"asks": [
[
1132010,
2400000,
1596508725841
],
[
1132426,
264000,
1596508725841
],
...
]
"usdMark": 11323.74,
"marketStatus": 0,
"estFundingRate": 0.0,
"fundingRateTime": 0,
"auctionPrice": 0.0,
"auctionVolume": 0.0
}
Main Section
Field | Type | Description |
---|---|---|
bids | [] | See Bids / Asks Section for details |
asks | [] | See Bids / Asks Section for details |
Bids / Asks Section (Comma Delimited)
Field | Type | Description |
---|---|---|
price | int | 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}
# Request
GET /getTradeHistory?pairId={int}
Environment | URL |
---|---|
Testnet | GET https://testnet.equos.io/api/getTradeHistory |
Production | GET https://equos.io/api/getTradeHistory |
Request Parameters
Field | Required | Type | Description |
---|---|---|---|
pairId | true | int |
Response
// Response
{
"trades": [
[
1132030,
264000,
"20200804-02:39:44.495",
23998,
1
],
[
1135330,
264000,
"20200804-02:12:03.607",
23997,
2
],
...
]
}
# Response
{
"trades": [
[
1132030,
264000,
"20200804-02:39:44.495",
23998,
1
],
[
1135330,
264000,
"20200804-02:12:03.607",
23997,
2
],
...
]
}
Main Section
Field | Type | Description |
---|---|---|
trades | [] | See Trade section for details |
Trade Section (Comma Delimited)
Field | Type | Description |
---|---|---|
price | int | 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 |
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 |
---|---|---|---|
instrumentId | false | int | Returns funding payments for the specified EQUOS Instrument ID, else all instruments are returned |
symbol | false | string | Returns funding payments for the specified EQUOS Symbol, else all instruments are returned |
limit | false | int | Specifies the number of records to be returned. If used, startTime and endTime filtering will be ignored |
startTime | false | string | The beginning (earlier) date and time from which the records will be returned. |
endTime | false | string | The ending (nearer) data and time to which the records will be return. Absence of the endTime 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 |
symbol | string | EQUOS Exchange Symbol |
fundingRate | float | Basis Funding Rate, an amount in the Settlement Currency, paid or received during periodic 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}
# Request
GET /getChart?pairId={int}×pan={int}
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 |
SIX_HOUR | 5 |
ONE_DAY | 6 |
ONE_WEEK | 7 |
Response
// Response
{
"pairId": 52,
"t": 1,
"s": "BTC/USDC",
"lastPx": 1132030,
"lastQty": 264000,
"o": 11190.900000000001,
"h": 11427.110000000002,
"l": 11128.420000000002,
"c": 11320.300000000003,
"v": 841713.4744600004,
"q": 74.72000000000003,
"chart": [
[
1596508740000,
1132030,
1132030,
1132030,
1132030,
0,
351
],
[
1596508680000,
1132030,
1132030,
1132030,
1132030,
0,
350
],
...
]
}
# Response
{
"pairId": 52,
"t": 1,
"s": "BTC/USDC",
"lastPx": 1132030,
"lastQty": 264000,
"o": 11190.900000000001,
"h": 11427.110000000002,
"l": 11128.420000000002,
"c": 11320.300000000003,
"v": 841713.4744600004,
"q": 74.72000000000003,
"chart": [
[
1596508740000,
1132030,
1132030,
1132030,
1132030,
0,
351
],
[
1596508680000,
1132030,
1132030,
1132030,
1132030,
0,
350
],
...
]
}
Main Section
Field | Type | Description |
---|---|---|
chart | [] | See Chart section for details |
Chart Section (Comma Delimited)
Field | Type | Description |
---|---|---|
timestamp | int | Unix Timestamp |
open | int | |
high | int | |
low | int | |
close | int | |
volume | int | |
seqNumber | int |
Open, high, low, close, volume are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs
REST Private Endpoints
Private endpoints are available for order management, and account management. Every private request must be signed using the described authentication scheme.
Roles
Equos supports Role Based Access Control. When creating API Keys account administrators may restrict or delegate user access to the private endpoints. Please refer to documentation below to see what API key permissions are required for a specific route.
Trade
Allows a key to enter orders, as well as retrieve trade data. This includes POST /orders and several GET endpoints.
View
Allows a key read permissions. This includes all GET endpoints.
Logon
Logon
HTTPS Request
POST /logon
Environment | URL |
---|---|
Testnet | POST https://testnet.equos.io/api/logon |
Production | POST https://equos.io/api/logon |
API Permissions
This endpoint requires either the “view” or “trade” permission.
Retail Logon
Request Body (JSON)
Field | Required | Type | Description |
---|---|---|---|
login | true | string | |
password | true | string | |
userId | false | int | |
code | true | string | 2FA Code |
Response
Field | Type | Description |
---|---|---|
id | int | User ID |
requestToken | string | User's Request Token |
requestSecret | string | User's Request Secret |
uiThemeId | int | Theme ID |
Institutional Logon
Institutional users has 1 or more Exchange Account. The institutional logon flow helps institutional users to log into their multiple Exchange Accounts.
Assume an institutional user with the following information:
- 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 |
---|---|---|---|
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 |
Signing REST API Calls
function sign(requestSecret, requestBodyJSON) {
return CryptoJS.HmacSHA384(JSON.stringify(requestBodyJSON), requestSecret);
}
// Valid Example of requestBodyJSON (no formatting)
{"userId":1045725,"instrumentId":5,"side":1,"ordType":2,"symbol":"SPY/USD","quantity":125,"quantity_scale":2,"price":245,"price_scale":2}
// Invalid Example of requestBodyJSON (due to formatting)
{
"userId": 1045725,
"instrumentId": 5,
"side": 1,
"ordType": 2,
"symbol": "SPY/USD",
"quantity": 125,
"quantity_scale": 2,
"price": 245,
"price_scale": 2
}
import hashlib
import hmac
import json
import requests
UID = uid # integer
API_KEY = "key" # string
SECRET_KEY = "secret" # string
def sign_api_request(api_secret, requestbody):
signature_hash = hmac.new(api_secret.encode(), requestbody.encode(), hashlib.sha384).hexdigest()
return signature_hash
# Request body
params = {"key":value} # dict
requestbody = json.dumps(params, separators=(',', ':'))
# Request header
sig = sign_api_request(SECRET_KEY, requestbody)
requestheader = {"requestToken": API_KEY, "signature": sig}
# http post request
r = requests.post(BASE_URL, data=requestbody, headers=requestheader)
All private REST requests should be signed based on the requestSecret obtained from a successful /logon. The requests should have the following structure using HTTP POST:
HTTP Header
Field | Required | Type | Description |
---|---|---|---|
requestToken | true | string | A successful /logon returns a pair of requestToken and requestSecret |
signature | true | string | sign(requestSecret, requestBodyJSON) |
Content-Type | false | string | application/json |
Request Body (JSON)
All request bodies should have content type application/json and be valid JSON without formatting. See example for details.
Place a New Order
Place a new order.
Data fields use enums defined in the FIX 4.4 standard.
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.
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,"price":245,"price_scale":2}
These parameters are common to all order types. Depending on the order type, additional parameters will be required (see below). Open orders do not expire and will remain open until they are either filled or canceled.
Field | Required | Type | Description |
---|---|---|---|
id | false | int | |
userId | true | int | User ID: aka Submitter for Institutional User. Please use its corresponding { requestToken, requestSecret } for signing the request |
account | 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 | true | int | Side of order: 1 = Buy 2 = Sell |
ordType | true | int | The following order types can be placed: 1 = Market Order 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 | |
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 | |
blockWaitAck | false | int | 1 = wait for order acknowledgement. When set, response will include the matching engine "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 | |
price | int | Price per unit of quantity. Required for “Limit Order”” and “Stop Limit Order” ordType. |
quantity | int | |
ordType | int | The order type being submitted: 1 = Market Order 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"
}
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 |
userId | true | int | User ID: aka Submitter for Institutional User. Please use its corresponding { requestToken, 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 |
Cancel Replace
With best effort, cancel a previously placed order and replace it.
Data fields use enums defined in the FIX 4.4 standard You can place two types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your account funds will be put on hold for the duration of the order. How much and which funds are put on hold depends on the order type and parameters specified. See the Holds details below.
HTTPS Request
Environment | URL |
---|---|
Testnet | POST https://testnet.equos.io/api/cancelReplaceOrder |
Production | POST https://equos.io/api/cancelReplaceOrder |
API Key Permissions
This endpoint requires the “trade” permission.
Request Body (JSON)
{"id":2705,"origOrderId":3262670236,"userId":2751,"symbol":"ETH/BTC","instrumentId":15,"side":2,"ordType":2,"price":10000000,"price_scale":6,"quantity":1000000,"quantity_scale":6}
These parameters are common to all order types. Depending on the order type, additional parameters will be required (see below). Open orders do not expire and will remain open until they are either filled or canceled.
Field | Required | Type | Description |
---|---|---|---|
id | false | int | |
origOrderId | true | String | |
userId | false | int | User ID: aka Submitter for Institutional User. Please use its corresponding { requestToken, requestSecret } for signing the request |
account | false | int | |
symbol | false | String | |
instrumentId | false | int | |
side | false | int | Side of order: 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 | |
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 | |
ordType | int | The order type being submitted or reported: 1 = Market Order 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.
Get Orders List
Return a list of orders, ordered by id descending
Data fields use enums defined in the FIX 4.4 standard
All types or orders are returned with their statuses
HTTPS Request
Environment | URL |
---|---|
Testnet | POST https://testnet.equos.io/api/getOrders |
Production | POST https://equos.io/api/getOrders |
API Key Permissions
This endpoint requires the “trade” permission.
Request Body (JSON)
// Request body
{"userId":var,"limit":var} // Request body: your uid as integer, limit as integer
POST /getOrders
# Request body
{"userId":int,"limit":int} # Request body: your uid as integer, limit as integer
POST /getOrders
These parameters are common to all order types.
Field | Required | Type | Description |
---|---|---|---|
userId | true | int | For institutional user, set this = account id |
account | false | int | For institutional user, set this = account id |
symbol | false | String | Cannot be used with symbol |
instrumentId | false | int | Cannot be used with instrumentId |
limit | false | int | |
execType | false | string | The execution report’s type: 0 = New 4 = Canceled 5 = Replace 8 = Rejected C = Expired F = Fill Status I = Order Status |
ordStatus | false | string | Identifies status of order 0 = New 1 = Partially filled 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
}
]
}
# Response
{
"orders":[
{
"orderId":your uid,
"orderUpdateSeq":1,
"clOrdId":"1585663508742001815",
"symbol":"ETH/BTC",
"instrumentId":15,
"side":"1",
"userId":2751,
"account":2751,
"execType":"F",
"ordType":"1",
"ordStatus":"0",
"timeInForce":"1",
"timeStamp":"20200331-14:05:08.788",
"execId":14363339,
"fee":0,
"feeTotal":0,
"fee_scale":6,
"feeInstrumentId":3,
"price":0,
"price_scale":6,
"quantity":2468,
"quantity_scale":6,
"leavesQty":0,
"leavesQty_scale":6,
"cumQty":2468,
"cumQty_scale":6,
"lastPx":205,
"lastPx_scale":6,
"lastQty":2468,
"lastQty_scale":6
}
]
}
Main Section
Field | Type | Description |
---|---|---|
orders | [] | See Order section for details |
Order Section
Field | Type | Description |
---|---|---|
orderId | int | Unique order identifier assigned by the EQUOS matching engine. |
orderUpdateSeq | int | |
clOrdId | string | |
symbol | string | |
instrumentId | int | |
side | string | Side of order: 1 = Buy 2 = Sell |
userId | int | |
account | int | |
execType | string | The execution report’s type: 0 = New 4 = Canceled 5 = Replace 8 = Rejected C = Expired F = Fill Status I = Order Status |
ordType | string | The order type being submitted or reported: 1 = Market Order 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order |
ordStatus | string | Identifies status of order. 0 = New 1 = Partially filled 2 = Filled 4 = Cancelled 8 = Rejected C = Expired |
timeInForce | string | |
timeStamp | string | |
execId | int | |
targetStrategy | int | |
isHidden | bool | |
isReduceOnly | bool | |
isLiquidation | bool | |
fee | int | |
feeTotal | int | |
fee_scale | int | |
feeInstrumentId | int | |
price | int | Price 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
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,
"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 | |
execType | string | The execution report’s type: 0 = New 4 = Canceled 5 = Replace 8 = Rejected C = Expired F = Fill Status I = Order Status |
ordType | string | The order type being submitted or reported: 1 = Market Order 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order |
ordStatus | string | Identifies status of order 0 = New 1 = Partially filled 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 |
Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs
Get Order History
Return a list of orders history for a given orderid
Data fields use enums defined in the FIX 4.4 standard
All types or orders are returned with their statuses
HTTPS Request
Environment | URL |
---|---|
Testnet | POST https://testnet.equos.io/api/getOrderHistory |
Production | POST https://equos.io/api/getOrderHistory |
API Key Permissions
This endpoint requires the “trade” permission.
Request Body (JSON)
{"userId":"357","orderId":"5263446159"}
These parameters are common to all order types.
Field | Required | Type | Description |
---|---|---|---|
userId | true | int | For institutional user, set this = account id |
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":52,"side":"1","userId":357,"account":357,"execType":"0","ordType":"2","ordStatus":"0","timeInForce":"1","timeStamp":"20200604-07:19:01.633","execId":0,"fee":0,"feeTotal":0,"fee_scale":0,"feeInstrumentId":0,"price":1,"price_scale":2,"quantity":10000,"quantity_scale":6,"leavesQty":10000,"leavesQty_scale":6,"cumQty":0,"cumQty_scale":0,"lastPx":0,"lastPx_scale":2,"lastQty":0,"lastQty_scale":6},
{"orderId":5263446159,"orderUpdateSeq":1,"clOrdId":"1591255141636981057","symbol":"BTC/USDC","instrumentId":52,"side":"1","userId":357,"account":357,"execType":"4","ordType":"2","ordStatus":"4","timeInForce":"1","timeStamp":"20200604-08:12:05.890","execId":0,"fee":0,"feeTotal":0,"fee_scale":0,"feeInstrumentId":0,"price":1,"price_scale":2,"quantity":10000,"quantity_scale":6,"leavesQty":10000,"leavesQty_scale":6,"cumQty":0,"cumQty_scale":6,"lastPx":0,"lastPx_scale":2,"lastQty":0,"lastQty_scale":6}
]}
Main Section
Field | Type | Description |
---|---|---|
orders | [] | See Order section for details |
Order Section
Field | Type | Description |
---|---|---|
orderId | int | Unique order identifier assigned by the EQUOS matching engine. |
orderUpdateSeq | int | |
clOrdId | string | |
symbol | string | |
instrumentId | int | |
side | string | Side of order: 1 = Buy 2 = Sell |
userId | int | |
execType | string | The execution report’s type: 0 = New 4 = Canceled 5 = Replace 8 = Rejected C = Expired F = Fill Status I = Order Status |
ordType | string | The order type being submitted or reported: 1 = Market Order 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 |
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"
}
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 |
instrumentId | false | int | If specified, all trades transacted for this instrument will be returned. If instrumentId id wrong, it will return all instrument / instrument pairs' trades |
startTime | false | long | If specified, all trades transacted at or after the timestamp in msec (GMT) will be shown. Used with endTime to filter to a specific period. |
endTime | false | long | If specified, all trades transacted at or before the timestamp in msec (GMT) will be shown. Used with startTime to filter to a specific period. |
timestamp | false | long | If specified, all trades transacted at or after the timestamp in msec (GMT) will be shown. Used 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"
}
]
}
//...
]
}
// Response
{"trades":[
{
"accountId":your uid,
"buyer":true,
"commission":"0.0",
"commissionAsset":"USDC",
"id":15744657,
"ordType":"2",
"ordStatus":"2",
"execType":"F",
"maker":true,
"orderId":3458710212,
"price":"225.00",
"qty":"2.700000",
"lastPx":"225.00",
"avgPx":"225.00",
"cumQty":"10.000000",
"quoteQty":"10.000000",
"realizedPnl":0.0,
"side":"BUY",
"symbol":"ETH/USDC",
"time":1595342367044}
}
//...
]
}
Main Section
Field | Type | Description |
---|---|---|
trades | [] | See Trade section for details |
Order Section
Field | Type | Description |
---|---|---|
account | int | Trading Account |
commission | decimal | Commission |
commCurrency | string | Commission Currency |
execId | int | Execution ID |
ordType | string | The order type being submitted or reported: 1 = Market Order 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order |
ordStatus | string | Identifies status of order. 0 = New 1 = Partially filled 2 = Filled 3 = Done for Day 4 = Cancelled 8 = Rejected C = Expired |
execType | string | The execution report’s type: 0 = New 4 = Canceled 5 = Replace 8 = Rejected C = Expired F = Fill Status I = Order Status |
aggressorIndicator | bool | Used to identify whether the order initiator is an aggressor or not in the trade. Y = Order initiator is aggressor N = Order initiator is passive |
orderId | string | Unique order identifier assigned by the EQUOS matching engine. |
price | decimal | Price per unit of quantity. Required for “Limit Order”” and “Stop Limit Order” ordType. |
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 | string | Side of order: 1 = Buy 2 = Sell |
symbol | string | Equos exchange Symbol |
clOrdId | string | |
submitterId | int | ID of the entering User |
targetStrategy | string | |
time | long |
Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs
List Position
Return list of all positions / balances
Data fields use enums defined in the FIX 4.4 standard
All types or orders are returned with their statuses
HTTPS Request
Environment | URL |
---|---|
Testnet | POST https://testnet.equos.io/api/getPositions |
Production | POST https://equos.io/api/getPositions |
API Key Permissions
This endpoint requires the “trade” permission.
Request Body (JSON)
{"userId":your uid}
#Request
{"userId":your uid} # Request body: your uid as integer
POST /getOrders
These parameters are common to all order types.
Field | Required | Type | Description |
---|---|---|---|
userId | true | int | For institutional user, set this = account id |
account | false | int | For institutional user, set this = account id |
Response
// Response
{
"positions": [
{
"instrumentId": 2,
"userId": "your uid",
"quantity": 1567000,
"availableQuantity": 1566900,
"quantity_scale": 6,
"symbol": "ETH",
"assetType": "ASSET",
"usdCostBasis": 0,
"usdAvgCostBasis": 0,
"usdValue": 207,
"usdUnrealized": 0,
"usdRealized": 0,
"baseUsdMark": 132.1,
"settleCoinUsdMark": 0,
"settleCoinUnrealized": 0,
"settleCoinRealized": 0
},
{
"instrumentId": 3,
"userId": "your uid",
"quantity": 0,
"availableQuantity": 0,
"quantity_scale": 6,
"symbol": "BTC",
"assetType": "ASSET",
"usdCostBasis": 0,
"usdAvgCostBasis": 0,
"usdValue": 0,
"usdUnrealized": 0,
"usdRealized": 0,
"baseUsdMark": 0,
"settleCoinUsdMark": 0,
"settleCoinUnrealized": 0,
"settleCoinRealized": 0
}
// ...
]
}
# Response
{
"positions": [
{
"instrumentId": 2,
"userId": "your uid",
"quantity": 1567000,
"availableQuantity": 1566900,
"quantity_scale": 6,
"symbol": "ETH",
"assetType": "ASSET",
"usdCostBasis": 0,
"usdAvgCostBasis": 0,
"usdValue": 207,
"usdUnrealized": 0,
"usdRealized": 0,
"baseUsdMark": 132.1,
"settleCoinUsdMark": 0,
"settleCoinUnrealized": 0,
"settleCoinRealized": 0
},
{
"instrumentId": 3,
"userId": "your uid",
"quantity": 0,
"availableQuantity": 0,
"quantity_scale": 6,
"symbol": "BTC",
"assetType": "ASSET",
"usdCostBasis": 0,
"usdAvgCostBasis": 0,
"usdValue": 0,
"usdUnrealized": 0,
"usdRealized": 0,
"baseUsdMark": 0,
"settleCoinUsdMark": 0,
"settleCoinUnrealized": 0,
"settleCoinRealized": 0
}
#...
}
Main Section
Field | Type | Description |
---|---|---|
positions | [] | See Position section for details |
Position Section
Field | Type | Description |
---|---|---|
instrumentId | int | |
userId | int | |
quantity | int | |
availableQuantity | int | |
quantity_scale | int | |
symbol | string | |
assetType | string | |
usdCostBasis | int | |
usdAvgCostBasis | int | |
usdValue | double | |
usdUnrealized | double | |
usdRealized | double | |
baseUsdMark | int | |
settleCoinUsdMark | int | |
settleCoinUnrealized | int | |
settleCoinRealized | int |
Quantity, availableQuantity are integer numbers. To convert them to double, use their respective scale defined in the response message.
Cancel All Orders
Cancel all open orders.
HTTPS Request
Environment | URL |
---|---|
Testnet | POST https://testnet.equos.io/api/cancelAll |
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 |
---|---|---|---|
userId | true | int | User ID: aka Submitter for Institutional User. Please use its corresponding { requestToken, 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 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 |
limit | false | int | Specifies the number of records to be returned. If used, startTime and endTime filtering will be 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"
}
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,
"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
{
"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 |
account | int | 6285 |
clOrdId | string | 1598317184238899164 |
symbol | string | ETH/USD[F] |
side | Side of order: 1 = Buy 2 = Sell |
|
ordType | string | The order type being submitted or reported: 1 = Market Order 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order |
execType | string | The execution report’s type: 0 = New 4 = Canceled 5 = Replace 8 = Rejected C = Expired F = Fill Status I = Order Status |
ordStatus | Identifies status of order. 0 = New 1 = Partially filled 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. | |
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 |
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 | |
ordType | string | The order type being submitted or reported: 1 = Market Order 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order |
ordStatus | Identifies status of order. 0 = New 1 = Partially filled 2 = Filled 4 = Cancelled 8 = Rejected C = Expired |
|
execType | string | The execution report’s type: 0 = New 4 = Canceled 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 | |
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 | |
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": [
{
"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 |
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 |
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) |
usdMarginReserve | double | Reserved Margin for open orders, expressed as the maximum of usdMarginReservedBuys and usdMarginReservedSells |
usdMarginInitial | double | The Initial Margin required for open position(s) and open orders |
usdMarginTrigger | double | Minimum Total Account Margin required to prevent liquidation |
usdMarginAccountTotal | double | Sum of equivalent USDC notional of all assets available for margin including unrealized P&L, less 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 |
instrumentId | false | int |
Response
{
"addresses": [
{
"instrumentId": 3,
"userId": 4245,
"symbol": "BTC",
"address": "AAAAAAAAAABBBBBBBCCCCCCCDDDDDDDEEEEEE",
"status": 1
}
]
}
Main Section
Field | Type | Description |
---|---|---|
addresses | [] | See Address section for details |
Address Section
Field | Type | Description |
---|---|---|
instrumentId | int | |
userId | int | |
symbol | string | |
address | string | |
status | int |
List Withdraw Requests
List the Withdaw Requests
HTTPS Request
Environment | URL |
---|---|
Testnet | POST https://testnet.equos.io/api/getWithdrawRequests |
Production | POST https://equos.io/api/getWithdrawRequests |
API Key Permissions
This endpoint requires the “trade” permission.
Request Body (JSON)
{"userId":6214,"account":"4245"}
Field | Required | Type | Description |
---|---|---|---|
userId | true | int | |
account | false | int | Required for institutional user |
Response
{
"addresses":[
{
"id":3841,
"instrumentId":3,
"userId":4245,
"symbol":"BTC",
"address":"XXXXXYYYYYZZZZZ",
"timestamp":"20200806-11:04:35.053",
"status":0,
"balance":1,
"balance_scale":3,
"confirms":0,
"transactionId":"null"
}
]
}
Main Section
Field | Type | Description |
---|---|---|
addresses | [] | See Address section for details |
Address Section
Field | Type | Description |
---|---|---|
instrumentId | int | |
userId | int | |
symbol | string | |
address | string | |
timestamp | string | |
status | int | |
balance | int | |
balance_scale | int | |
confirms | int | |
transactionId | string |
Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs
Send Withdraw Request
Request to send coins to an external address
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 |
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 |
instrumentId | true | int | Refer to getInstruments 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
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",
"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 | |
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 | |
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.
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}
# Subscribe Message
{"pairId":int}
Field | Required | Type | Description |
---|---|---|---|
pairId | true | int |
Unsubscribe Message
// Unsubscribe
{"pairId": var, "unsubscribe": 1}
# Unsubscribe
{"pairId": int, "unsubscribe": 1}
Field | Required | Type | Description |
---|---|---|---|
pairId | true | int | |
unsubscribe | true | int | Provide 1 for Unsubscribe |
Response
// Response
{
"bids": [
[
1131294,
265000,
1596508725841
],
[
1130841,
6366000,
1596508725841
],
...
]
"asks": [
[
1132010,
2400000,
1596508725841
],
[
1132426,
264000,
1596508725841
],
...
]
"usdMark": 11323.74,
"marketStatus": 0,
"estFundingRate": 0.0,
"fundingRateTime": 0,
"auctionPrice": 0.0,
"auctionVolume": 0.0
}
# Response
{
"bids": [
[
1131294,
265000,
1596508725841
],
[
1130841,
6366000,
1596508725841
],
...
]
"asks": [
[
1132010,
2400000,
1596508725841
],
[
1132426,
264000,
1596508725841
],
...
]
"usdMark": 11323.74,
"marketStatus": 0,
"estFundingRate": 0.0,
"fundingRateTime": 0,
"auctionPrice": 0.0,
"auctionVolume": 0.0
}
Main Section
Field | Type | Description |
---|---|---|
type | int | 1 = Order Book Snapshot |
pairId | int | |
bids | [] | See Bids / Asks Section for details |
asks | [] | See Bids / Asks Section for details |
Bids / Asks Section (Comma Delimited)
Field | Type | Description |
---|---|---|
price | int | |
quantity | int | |
timestamp | int |
Price and quantity are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs
Trade History Channel
Get realtime trade history
Websocket Channel
Environment | URL |
---|---|
Test Net | wss://testnet.equos.io/ws/tradehistory |
Production | wss://equos.io/ws/tradehistory |
Subscribe Message
// Subscribe Message
{"pairId":var}
# Subscribe Message
{"pairId":int}
Field | Required | Type | Description |
---|---|---|---|
pairId | true | int |
Unsubscribe Message
// Unsubscribe
{"pairId": var, "unsubscribe": 1}
# Unsubscribe
{"pairId": int, "unsubscribe": 1}
Field | Required | Type | Description |
---|---|---|---|
pairId | true | int | |
unsubscribe | true | int | Provide 1 for Unsubscribe |
Response
// Response
{
"trades": [
[
1132030,
264000,
"20200804-02:39:44.495",
23998,
1
],
[
1135330,
264000,
"20200804-02:12:03.607",
23997,
2
],
...
]
}
# Response
{
"trades": [
[
1132030,
264000,
"20200804-02:39:44.495",
23998,
1
],
[
1135330,
264000,
"20200804-02:12:03.607",
23997,
2
],
...
]
}
Main Section
Field | Type | Description |
---|---|---|
type | int | 3 = Trade History |
pairId | int | |
trades | [] | See Trade section for details |
Trade Section (Comma Delimited)
Field | Type | Description |
---|---|---|
price | int | Price |
quantity | int | |
timestamp | string | |
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 |
---|---|
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}
# Subscribe Message
{"pairId":int,"timespan":int}
# 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}
# Unsubscribe
{"pairId": int, "unsubscribe": 1}
Field | Required | Type | Description |
---|---|---|---|
pairId | true | int | |
unsubscribe | true | int | Provide 1 for Unsubscribe |
Response
// Response
{
"pairId": 52,
"t": 1,
"s": "BTC/USDC",
"lastPx": 1132030,
"lastQty": 264000,
"o": 11190.900000000001,
"h": 11427.110000000002,
"l": 11128.420000000002,
"c": 11320.300000000003,
"v": 841713.4744600004,
"q": 74.72000000000003,
"chart": [
[
1596508740000,
1132030,
1132030,
1132030,
1132030,
0,
351
],
[
1596508680000,
1132030,
1132030,
1132030,
1132030,
0,
350
],
...
]
}
# Response
{
"pairId": 52,
"t": 1,
"s": "BTC/USDC",
"lastPx": 1132030,
"lastQty": 264000,
"o": 11190.900000000001,
"h": 11427.110000000002,
"l": 11128.420000000002,
"c": 11320.300000000003,
"v": 841713.4744600004,
"q": 74.72000000000003,
"chart": [
[
1596508740000,
1132030,
1132030,
1132030,
1132030,
0,
351
],
[
1596508680000,
1132030,
1132030,
1132030,
1132030,
0,
350
],
...
]
}
Main Section
Field | Type | Description |
---|---|---|
chart | [] | See Chart section for details |
Chart Section (Comma Delimited)
Field | Type | Description |
---|---|---|
timestamp | int | Unix Timestamp |
open | int | |
high | int | |
low | int | |
close | int | |
volume | int | |
seqNumber | int |
Open, high, low, close, volume are integer numbers. To convert them to double, use the price_scale and quantity_scale defined in getInstrumentPairs
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}
# Subscribe Message
{"connect": true}
Unsubscribe Message
// Unsubscribe
{"unsubscribe": 1}
# Unsubscribe
{"unsubscribe": 1}
Field | Required | Type | Description |
---|---|---|---|
unsubscribe | true | int | Provide 1 for Unsubscribe |
Response
// Response
# Response
{
[
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
}
# Response
{
[
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 |
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}
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 | string | Side of order: 1 = Buy 2 = Sell |
userId | int | |
account | int | for Institutional User |
execType | string | The execution report’s type: 0 = New 4 = Canceled 5 = Replace 8 = Rejected C = Expired F = Fill Status I = Order Status |
ordType | string | The order type being submitted or reported: 1 = Market Order 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order |
ordStatus | string | Identifies status of order. 0 = New 1 = Partially filled 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.
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 | |
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.
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 |
usdMarginReserve | double | Reserved Margin for open orders, expressed as the maximum of usdMarginReservedBuys and 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 integration@equos.io for access to the dictionary
Non FIX44 Tags
The following FIX tags, may need to be added to your FIX44 dictionary.
Tag | Name | Introduced | Message |
---|---|---|---|
1057 | AggressorIndicator | FIX.4.4 EP21 | ExecutionReport TradeCaptureReport |
1079 | MaturityTime | FIX.4.4 EP21 | SecurityList |
1140 | MaxTradeVol | FIX.5.0 EP42 | SecurityList |
1146 | MinPriceIncrementAmount | FIX.5.0 EP42 | SecurityList |
2576 | InstrumentPricePrecision | FIX.5.0SP2 EP195 | SecurityList |
6867 | CancelOnDisconnect | User Defined Fields | Logon |
Testnet Environment
Equos operates a test network which is a replication of our production environment. API users are strongly recommended to create a testnet account, to test and validate API workflows prior to connection to the production environment.
Setup a Testnet Account
You can create a Testnet account at https://testnet.equos.io
Equos FIX Gateways
Note: Drop Copy Gateway is not yet deployed for testing
Environment | FIX Gateway | Server Address | Port Number | TargetCompID |
---|---|---|---|---|
Integration Testing | Market Data | fix.testnet.equos.io | 4801 | testnet.fix-md.equos |
Integration Testing | Order Management | fix.testnet.equos.io | 4802 | testnet.fix-om.equos |
Integration Testing | Drop Copy | fix.testnet.equos.io | 4803 | testnet.fix-dc.equos |
Production | Market Data | fix.equos.io | 5801 | prod.fix-md.equos |
Production | Order Management | fix.equos.io | 5802 | prod.fix-om.equos |
Production | Drop Copy | fix.equos.io | 5803 | prod.fix-dc.equos |
SSL Proxy
Equos FIX endpoints only accept TCP connections secured by SSL/TLS. If your FIX client library cannot establish an SSL/TLS connection natively, you will need to run a local proxy that will establish a secure connection and allow unencrypted local connections.
Stunnel Configuration
[DEMO.EQUOS.MD]
client=yes
accept=4801
connect=fix.demo.equos.io:4801
verify=4
CAfile=/home/user1/pem/DEMO.EQUOS.MD.pem
[DEMO.EQUOS.OM]
client=yes
accept=4802
connect=fix.demo.equos.io:4802
verify=4
CAfile=/home/user1/pem/DEMO.EQUOS.OM.pem
[DEMO.EQUOS.DC]
client=yes
accept=4803
connect=fix.demo.equos.io:4803
verify=4
CAfile=/home/user1/pem/DEMO.EQUOS.DC.pem
[PROD.EQUOS.MD]
client=yes
accept=5801
connect=fix.equos.io:5801
verify=4
CAfile=/home/user1/pem/PROD.EQUOS.MD.pem
[PROD.EQUOS.OM]
client=yes
accept=5802
connect=fix.equos.io:5802
verify=4
CAfile=/home/user1/pem/PROD.EQUOS.OM.pem
[PROD.EQUOS.DC]
client=yes
accept=5803
connect=fix.equos.io:5803
verify=4
CAfile=/home/user1/pem/PROD.EQUOS.DC.pem
This is an example configuration file for stunnel to listen on a port locally and proxy unencrypted TCP connections to the encrypted SSL connection. The service name (EQUOS) and the accept port may be changed to any suitable values.
PEM Certificate Download
# Testnet
> openssl s_client -showcerts -connect fix.demo.equos.io:4801 < /dev/null | openssl x509 -outform PEM > /home/user1/pem/DEMO.EQUOS.MD.pem
> openssl s_client -showcerts -connect fix.demo.equos.io:4802 < /dev/null | openssl x509 -outform PEM > /home/user1/pem/DEMO.EQUOS.OM.pem
> openssl s_client -showcerts -connect fix.demo.equos.io:4803 < /dev/null | openssl x509 -outform PEM > /home/user1/pem/DEMO.EQUOS.DC.pem
# PROD
> openssl s_client -showcerts -connect fix.equos.io:5801 < /dev/null | openssl x509 -outform PEM > /home/user1/pem/PROD.EQUOS.MD.pem
> openssl s_client -showcerts -connect fix.equos.io:5802 < /dev/null | openssl x509 -outform PEM > /home/user1/pem/PROD.EQUOS.OM.pem
> openssl s_client -showcerts -connect fix.equos.io:5803 < /dev/null | openssl x509 -outform PEM > /home/user1/pem/PROD.EQUOS.DC.pem
If your system has OpenSSL installed, you can run this command to download the certificate:
Third Party Platform and Network Support
Under development
Instruments and Trading Pairs Symbols
tbc
Instruments
The following instruments are designated Settlement Currencies or Funding Currencies with the
Instrument | Settlement Currency | Funding Currency | Account Precision |
---|---|---|---|
USD | ✓ | ✓ | 0.01 USD (1e-2) |
USDC | ✓ | ✓ | 0.000001 USDC (1e-6) |
BTC | ✓ | ✓ | 0.000001 BTC (1e-6) |
ETH | ✓ | ✓ | 0.000001 ETH (1e-6) |
Currency Fields in FIX Protocol
The following FIX tags describe the currency and settlement profile for financial products listed on the Equos Exchange, each of these values is published as part of the SecurityList < x > message send in response to a SecurityListRequest < y > message.
FIX Field | Description |
---|---|
Currency<15> | Quantity CCY Base or left hand currency code in the trading pair. |
ContAmtCurr<521> | Price CCY Quote or right hand currency code in the trading pair, or contract denomination for derivatives. |
SettlCurrency<120> | Specifies the currency code of Settlement Account which will settle the trade P&L. |
CommCurrency<479> | Specifies the currency code used for the Funding Account which will settle the commission charge. |
Trading Pairs
The following Trading Pairs are valid values for the Symbol<55> field.
Symbols are formatted as CCY1/CCY2 where prices are in CCY2 Price CCY and quantities are in CCY1 Quantity CCY and "/" is the delimiter.
Symbol | Price CCY | Quantity CCY | Min Order Size | Minimum order increment | Minimum price increment |
---|---|---|---|---|---|
BTC/USDC | USDC | BTC | 0.001 BTC (1e-3) | 0.000001 BTC (1e-6) | 0.01 USDC (1e-2) |
ETH/BTC | BTC | ETH | 0.01 ETH (1e-2) | 0.000001 ETH (1e-6) | 0.01 BTC (1e-2) |
ETH/USDC | USDC | ETH | 0.01 ETH (1e-2) | 0.000001 ETH (1e-6) | 0.000001 USDC (1e-6) |
Message Identifiers
Client Supplied Identifiers
Equos recommends clients use UUID
UUID selected by client to identify the order
Unique identifier for Order as assigned by the client. Uniqueness must be guaranteed within a single trading session by the sender for clients who do not submit long dated orders (GTC/GTD). Clients who submit long dated orders must guarantee uniqueness across trading sessions.
Indentifier | Message |
---|---|
ClOrdID | NewOrderSingle ExecutionReport |
OrigClOrdID | ExecutionReport |
SecurityReqID | |
SecurityStatusReqID | |
MDReqID | MarketDataRequest |
Equos Supplied Identifiers
A sentence about how we make the STRING up
Indentifier | Message |
---|---|
SecurityResponseID | SecurityList |
OrderID | NewOrderSingle ExecutionReport |
ExecID |
Data Types
tbc
Standard Header
Each administrative or application message is preceded by a Standard Header. The header identifies the message type, length, destination, sequence number, origination point and timeTwo fields help with resending messages.
The PossDupFlag<43> is set to Y when resending a message as the result of a session level event (i.e. the retransmission of a message reusing a sequence number). The PossResend<97> is set to Y when reissuing a message with a new sequence number (e.g. resending an order). The receiving application should process these messages as follows:
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 initiator is a trading bot, Equos recommends using a separate static identifier for each bot with the prefix "bot" | |
Field maybe used at the discretion of the user. |
Third-party Message Delivery
Under development: Message routing via third-parties or FIX order routing networks. Please email api.support@equos.io with any business requirements you might have for this feature.
FIX Identifier | Usage |
---|---|
Assigned value used to identify firm originating message if the message was delivered by a third party i.e. the third party firm identifier would be delivered in the SenderCompID <49> field and the firm originating the message in this field. | |
Assigned value used to identify the firm targeted to receive the message if the message is delivered by a third party i.e. the third party firm identifier would be delivered in the TargetCompID <56> field and the ultimate receiver firm ID in this field. |
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
8 | BeginString | DATATYPE | Y | Identifies the beginning of new message and protocol version. Always the first tag in the message. Valid Value: FIX4.4 |
9 | BodyLength | DATATYPE | Y | Message length, in bytes, forward to the CheckSum <10> field. Always the second tag in the message. |
35 | MsgType | DATATYPE | Y | Defines message type. Always the third tag in the message. |
34 | MesSeqNum | SEQNUM | Y | Message sequence number. |
49 | SenderCompID | STRING | Y | Equos Assigned value used to identify firm sending message. SenderCompID = 1000000000+ UserID (which is visible at your user profile page [link?]). |
50 | STRING | N | User specified, to identifier initiator of the order (Equos UserID, trader, bot, etc.) | |
142 | STRING | N | User specified identifier | |
56 | TargetCompID | STRING | Y | Equos Assigned value used to identify receiving FIX gateway. Please note TargetCompID name varies by environment and gateways vary by port number, please see Conencting for specific details. |
115 | STRING | N | Assigned value used to identify firm originating message if the message was delivered by a third party i.e. the third party firm identifier would be delivered in the SenderCompID <49> field and the firm originating the message in this field. | |
128 | STRING | N | Assigned value used to identify the firm targeted to receive the message if the message is delivered by a third party i.e. the third party firm identifier would be delivered in the TargetCompID <56> field and the ultimate receiver firm ID in this field. | |
43 | PossDupFlag | BOOLEAN | C | Indicates possible retransmission of message with this sequence number Y = Possible duplicate |
97 | PossResend | BOOLEAN | C | The Equos FIX gateway will set PosResend=Y for selected set of messages after a gateway restart (if the gateway is not sure whether particular message was sent earlier or not).. N = Original Transmission Y = Possible Resend |
52 | SendingTime | UTCTIMESTAMP | C | The GMT timestamp on the message. |
122 | OrigSendingTime | UTCTIMESTAMP | C | Required for messages sent as a result of a ResendRequest. Original time of message transmission in UTC. |
Standard Trailer
Each message, administrative or application, is terminated by a Standard Trailer. The trailer is used to segregate messages and contains the three digit character representation of the CheckSum<10> value.
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
10 | CheckSum | STRING | Y | Three bytes, simple checksum. Always last field in message. |
FIX Session Management
EQUOS Exchange does not mandate a fixed FIX Session commencement or ending time, nor specify or limited the length of time a client maintains a FIX session.
Commencing a Session
EQUOS runs the server side of the FIX connection ("acceptor"). Equos never resets sequence numbers on the server side during the logon workflow unless the client explicitly requests it.
The client ("initiator") can reset sequence numbers during Logon < A > by setting ResetSeqNumFlag <141> to Y.
Equos recommends that client consider configuring the FIX initiator to automatically reset sequence numbers under the following conditions:
- 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.
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.
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
Standard Header | Y | MsgType = A | ||
98 | EncryptMethod | INT | Y | Always the first tag in the message. Valid Values: 0 = not encrypted is the only accepted value. |
108 | HeartBtInt | INT | Y | Heartbeat interval in seconds. |
141 | ResetSeqNumFlag | BOOLEAN | C | Required to establish logon. Indicates both sides of a FIX session should reset sequence numbers. Y = Yes, reset sequence numbers Note MsgSeqNum(34) should be set to 1. |
789 | SEQNUM | Y | Next expected MsgSeqNum value to be received. Required when connecting to the secondary (standby) FIX Drop Copy server. Please see the FIX Trading Community FIX Session Protocol description on the use of this tag for recovery. | |
553 | Username | STRING | Y | |
554 | Password | STRING | Y | Password for the given FIX user identified in SenderCompID. Only specified in the initial client Logon Message |
6867 | CancelOnDisconnect | BOOLEAN | N | When enabled, at Logon, the trading system will cancel all user orders associated with the SenderCompID upon disconnection. Y = enable cancel on disconnect. N = disable cancel on disconnect. |
58 | Text | STRING | N | |
Standard Trailer | Standard Trailer | Y |
Logout < 5 >
The Logout<5> message initiates or confirms the termination of a FIX session. Disconnection without the exchange of Logout<5> messages should be interpreted as an abnormal condition.
Before actually closing the session, the logout initiator should wait for the opposite side to respond with a confirming Logout<5> message. This gives the remote end a chance to perform any Gap Fill operations that may be necessary. The session may be terminated if the remote side does not respond in an appropriate timeframe.
After sending the Logout<5> message, the logout initiator should not send any messages unless requested to do so by the logout acceptor via a ResendRequest<2>.
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
Standard Header | Y | MsgType = 5 | ||
58 | Text | STRING | N | A unique ID assigned by the client to the market data request |
1409 | INT | N | Status of the FIX session. Not sent for scheduled server initiated log outs 3 = New session password does not comply with policy 4 = Session logout complete 5 = Invalid username or password 6 = Account locked 7 = Logons are not allowed at this time 8 = Password expired 9 = Received MsgSeqNum (34) is too low 10 = Received NextExpectedMsgSeqNum (789) is too high 101 = Requested MsgSeqNum unknown (a request has been made for a sequence number that has not been sent by the server). |
|
Standard Trailer | Y |
Heartbeat <0>
The Heartbeat (0) monitors the status of the communication link and identifies when the last of a string of messages was not received.
When either end of a FIX connection has not sent any data for [ HeartBtInt (108) ] seconds, it will transmit a Heartbeat (0) message. When either end of the connection has not received any data for ( HeartBtInt (108) + "some reasonable transmission time") seconds, it will transmit a Test Request (1) message. If there is still no Heartbeat (0) message received after ( HeartBtInt (108) + "some reasonable transmission time") seconds then the connection should be considered lost and corrective action be initiated. If HeartBtInt (108) is set to zero then no regular heartbeat messages will be generated. Note that a test request message can still be sent independent of the value of the HeartBtInt (108) , which will force a Heartbeat (0) message.
Heartbeats issued as the result of Test Request (1) must contain the TestReqID<112> transmitted in the Test Request (1) message. This is useful to verify that the Heartbeat (0) is the result of the Test Request (1) and not as the result of a regular timeout.
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
Standard Header | Y | MsgType = 0 | ||
112 | TestReqID | STRING | N | Identifier included in Test Request (1) message to be returned in resulting Heartbeat (0) |
Standard Trailer | Y |
TestRequest <1>
The TestRequest<1> message forces a heartbeat from the opposing application. The TestRequest<1> message checks sequence numbers or verifies communication line status. The opposite application responds to the TestRequest<1> with a HeartBeat<0> containing the TestReqID<112>.
The TestReqID<112> verifies that the opposite application is generating the heartbeat as the result of TestRequest<1> and not a normal timeout. The opposite application includes the TestReqID<112> in the resulting TestRequest<1>. Any string can be used as the TestReqID<112> (one suggestion is to use a timestamp string).
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
Standard Header | Y | MsgType = 1 | ||
112 | TestReqID | STRING | Y | Identifier included in Test Request (1) message to be returned in resulting Heartbeat (0) |
Standard Trailer | Y |
ResendRequest <2>
The resend request is sent by the receiving application to initiate the retransmission of messages. This function is utilized if a sequence number gap is detected, if the receiving application lost a message, or as a function of the initialization process.
The resend request can be used to request a single message, a range of messages or all messages subsequent to a particular message.
Note: the sending application may wish to consider the message type when resending messages; e.g. if a new order is in the resend series and a significant time period has elapsed since its original inception, the sender may not wish to retransmit the order given the potential for changed market conditions. (The SequenceReset<4> Gap Fill message is used to skip messages that a sender does not wish to resend.)
Note: it is imperative that the receiving application process messages in sequence order, e.g. if message number 7 is missed and 8-9 received, the application should ignore 8 and 9 and ask for a resend of 7-9, or, preferably, 7-0 (0 represents infinity). This latter approach is strongly recommended to recover from out of sequence conditions as it allows for faster recovery in the presence of certain race conditions when both sides are simultaneously attempting to recover a gap.
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
To request all messages subsequent to a particular message: BeginSeqNo<7> = first message of range, = 0 (represents infinity) .
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
Standard Header | Y | MsgType = 2 | ||
7 | BeginSeqNo | STRING | Y | First sequence number in the range to be resent. |
16 | EndSeqNo | STRING | Y | Last sequence number in the range to be resent. For single message resend requests, set BeginSeqNo = EndSeqNo. If request is for all messages subsequent to a particular message, EndSeqNo = 0. |
Standard Trailer | Y |
Reject < 3 >
Session Level Message Rejection
Equos sends a Reject<3> message in response to a message which is received but cannot be properly processed due to a session-level rule violation. An example of when a reject may be appropriate would be the receipt of a message with invalid basic data (e.g. MsgType=&) which successfully passes de-encryption, CheckSum (10) and BodyLength (9) checks.
As a rule, messages should be forwarded to the trading application for business level rejections whenever possible.
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
Standard Header | Y | MsgType = 3 | ||
45 | RefSeqNum | SEQNUM | Y | Message Sequence Number of rejected message |
371 | RefTagID | STRING | Y | The tag number of the FIX field being referenced. |
372 | RefMsgType | STRING | Y | The MsgType(35) of the FIX message being rejected. |
373 | SessionRejectReason | INT | Y | Code to identify reason for a session-level Reject message. 1 = Required tag missing 5 = Value is incorrect (out of range) for this tag 6 = Incorrect data format for value 11 = Invalid MsgType (35) |
58 | Text | STRING | N | Text message elaboriting Reject Reason, where required |
Standard Trailer | Y |
SequenceReset < 4 >
The Sequence Reset <4> message is used in response to a Resend Request <2> message when one or more messages must be skipped over for the following reasons:
During normal resend processing, the sending application may choose not to send a message (e.g. an aged order). During normal resend processing, a number of administrative messages are skipped and not resent (such as Heartbeat <0> and Test Request <1>).
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
Standard Header | Y | MsgType = W | ||
123 | GapFillFlag | BOOLEAN | N | Indicates that the Sequence Reset message is replacing administrative or application messages which will not be resent. Y = Gap Fill Message, Msg Seq Num Field Valid N = Sequence Reset, Ignore Msg Seq Num |
36 | NewSeqNo | SEQNUM | Y | New sequence number |
Standard Trailer | Y |
BusinessMessageReject < j >
The BusinessMessageReject
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
Standard Header | Y | MsgType = j | ||
45 | RefSeqNum | SEQNUM | N | Message Sequence Number of rejected message |
372 | RefMsgType | STRING | Y | The Message Type of the FIX message being rejected |
371 | RefTagID | INT | N | The tag number of the FIX field being referenced. Only sent when ‘Business Reject Message’ message is generated by the FIX engine. |
379 | BusinessRejectRefID | STRING | N | The value of the business-level "ID" field on the message being referenced. |
380 | BusinessRejectReason | INT | Y | Code to identify reason for this reject message: 1 = Unknown ID 2 = Unknown Security 3 = Unsupported Message Type 5 = Conditionally Required field missing 6 = Not authorized 0 = Other |
58 | Text | STRING | N | Additional description of the error, when required |
Standard Trailer | Y |
FIX Market Data
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
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
Standard Header | Y | MsgType = x | ||
320 | SecurityReqID | STRING | Y | Unique security request ID set by client |
559 | SecurityListRequestType | INT | Y | Identifies the type/criteria of Security List Request 0 = Symbol 1 = CFICode 4 = All Securities 5 = MarketID |
263 | SubscriptionRequestType | INT | N | Subscription Request Type 0 = Snapshot 1 = Snapshot + Updates (Subscribe) 2 = Disable previous Snapshot + Update Request (Unsubscribe) |
55 | Symbol | STRING | C | Equos echange Symbol |
48 | SecurityID | STRING | C | Equos Instrument ID |
22 | SecurityIDSource | STRING | C | Identifies source of the SecurityID(48) value. M = Equos Exchange Instrument ID |
461 | STRING | C | Indicates the type of security using ISO 10962 standard, Classification of Financial Instruments (CFI code) values. | |
1301 | MarketID | STRING | C | ISO 10383 Market Identifier Code (MIC). |
Standard Trailer | Y |
SecurityList < y >
The Security List message is used to return a list of securities (instruments) that match the criteria specified in a Security List Request.
SecurityAltID
Equos supports 3 alternative Security Identifier Sources:
- 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 | ✓ | ✓ | ✓ | ✓ |
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
Standard Header | Y | MsgType = y | ||
320 | SecurityReqID | STRING | N | Unique security request ID set by client |
322 | SecurityResponseID | STRING | N | Equos Identifier for the Security List message |
893 | LastFragment | BOOLEAN | N | Indicates whether this message is the last in a sequence of messages for those messages that support fragmentation, such as Security List. N = Not last message Y = Last message. |
393 | TotNoRelatedSym | INT | N | Used to indicate the total number of securities being returned for this request. Used in the event that message fragmentation is required. |
560 | SecurityRequestResult | INT | N | Result of the Security Request identified by the SecurityReqID. 0 = Valid request 1 = Invalid or unsupported request 2 = No instruments found that match selection criteria. |
146 | NoRelatedSym | NUMINGROUP | Y | Specifies the number of repeating symbols (instruments) specified |
→ 55 | Symbol | STRING | C | Equos exchange Symbol |
→ 48 | SecurityID | STRING | C | Equos Instrument ID |
→ 22 | SecurityIDSource | STRING | C | Identifies source of the SecurityID(48) value. M = Equos Exchange Instrument ID |
→ 454 | NoSecurityAltID | NUMINGROUP | ? | Number of SecurityAltID (455) entries. |
→ → 455 | SecurityAltID | STRING | C | Financial Instrument Global Identifier see OpenFIGI |
→ → 456 | SecurityAltIDSource | STRING | C | Identifies source of the SecurityID(48) value. S = Financial Instrument Global Identifier |
→ → 455 | SecurityAltID | STRING | C | Financial Instrument Global Identifier see OpenFIGI |
→ → 456 | SecurityAltIDSource | STRING | C | Identifies source of the SecurityID(48) value. S = Financial Instrument Global Identifier |
→ 461 | CFICode | STRING | C | Indicates the type of security using ISO 10962 standard, Classification of Financial Instruments (CFI code) values. |
→ 1301 | MarketID | STRING | C | ISO 10383 Market Identifier Code (MIC). |
→ 107 | SecurityDesc | STRING | C | Textual description for the instrument. |
→ 965 | SecurityStatus | INT | Y | Denotes the current state of the Instrument 1 = Active 2 = Inactive 3 = Active, closing orders only 4 = Expired (Contract) 5 = Delisted 9 = Suspended 10 = Published |
→ 15 | Currency | CURRENCY | N | Base or left hand currency code in the trading pair. |
→ 521 | ContAmtCurr | CURRENCY | N | Quote or right hand currency code in the trading pair. |
→ 120 | SettlCurrency | CURRENCY | N | Currency code of settlement denomination. |
→ 479 | CommCurrency | CURRENCY | N | Specifies currency code used for commission. |
→ 311 | UnderlyingSymbol | STRING | N | Underlying security's Symbol, for derivatives contracts. |
→ 309 | UnderlyingSecurityID | STRING | N | Underlying security’s SecurityID. See SecurityID (48) field for description. |
→ 305 | UnderlyingSecurityIDSource | STRING | N | Underlying security’s SecurityIDSource. Valid values: see SecurityIDSource (22) field. |
→ 308 | UnderlyingSecurityExchange | STRING | N | Underlying security's SecurityExchange. Can be used to identify the underlying security. |
→ 255 | IssueDate | UTCTIMESTAMP | C | Date the instrument issued, becomes active for trading. |
→ 200 | MaturityMonthYear | MONTHYEAR | C | Can be used with standardized derivatives vs. the MaturityDate (541) field. Month and Year of the maturity (used for standardized futures and options). Format: YYYYMM (i.e. 99903) YYYYMMDD (20030323) YYYYMMwN (200303w) for week A specific date or can be appended to the MaturityMonthYear. For instance, if multiple standard products exist that mature in the same Year and Month, but actually mature at a different time, a value can be appended, such as "w" or "w2" to indicate week as opposed to week 2 expiration. Likewise, the date (0-3) can be appended to indicate a specific expiration (maturity date). |
→ 541 | MaturityDate | UTCTIMESTAMP | C | Date of a derivatives contract maturity. |
→ 1079 | MaturityTime | UTCTIMESTAMP | C | Time of a derivatives contract maturity. |
→ 854 | QtyType | INT | C | Type of quantity specified in a quantity field: 0 = Units (shares, par, currency) 1 = Contracts (if used - must specify ContractMultiplier (tag 231)) |
→ 231 | ContractMultiplier | FLOAT | C | For a futures instrument: The quantity of underlying units per 1 futures contract |
→ 201 | PutOrCall | BOOLEAN | C | Indicates whether an option contract is a put or call: 0 = Put 1 = Call |
→ 202 | StrikePrice | PRICE | C | Strike Price for an Option. |
→ 947 | StrikeCurrency | CURRENCY | C | Currency in which the StrikePrice is denominated. |
→ 2576 | InstrumentPricePrecision | INT | C | Specifies the number of decimal places for instrument prices. |
→ 969 | MinPriceIncrement | INT | C | Minimum price change for a given symbol. |
→ 1146 | MinPriceIncrementAmount | AMOUNT | C | Minimum price increment amount associated with the MinPriceIncrement(969). For listed derivatives, the value can be calculated by multiplying MinPriceIncrement by ContractValueFactor(231). |
→ 562 | MinTradeVol | QTY | N | The minimum order quantity that can be submitted for an order. |
→ 1140 | MaxTradeVol | QTY | N | The maximum order quantity that can be submitted for a security. |
Standard Trailer | Y |
MarketDataRequest < V >
A Market Data Request
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
Standard Header | Y | MsgType = V | ||
262 | MDReqID | STRING | N | A unique ID assigned by the client to the market data request |
263 | SubscriptionRequestType | CHAR | Y | Subscription Request Type: 1 = Snapshot + Updates (Subscribe) 2 = Disable previous Snapshot + Update Request (Unsubscribe) |
264 | MarketDepth | INT | Y | Depth of Market for Snapshot: 0 = Full Book 1 = Top of Book |
265 | MDUpdateType | INT | N | Specifies the type of Market Data update. Required if SubscriptionRequestType = 1 Snapshot + Updates (Subscribe) 0 = Full refresh 1 = Incremental refresh |
266 | AggregatedBook | BOOLEAN | Y | Specifies whether or not book entries should be aggregated. Y = book entries to be aggregated N = book entries should not be aggregated |
Repeating Group | < NoMDEntryTypes > (No of Market Data Entry Types) | |||
267 | NoMDEntryTypes | NUMINGROUP | Y | Number of Market Data types being requested in MDEntryType |
→ 269 | MDEntryType | CHAR | Type of Market Data entry 0 = Bid 1 = Offer |
|
end group | < NoMDEntryTypes > | |||
group | < NoRelatedSym > | |||
146 | NoRelatedSym | NUMINGROUP | Y | Number of Symbols in the request. |
→ 55 | Symbol | STRING | C | Equos Exchange Symbol, if using Se |
→ 48 | SecurityID | STRING | C | The Security Indentifier (type) as specified/requested in SecurityIDSource(22) |
→ 22 | SecurityIDSource | STRING | C | Identifies class or source of the SecurityID(48) value. |
end group | < NoRelatedSym > | |||
Standard Trailer | Standard Trailer | Y |
MarketDataRequestReject < Y >
The Market Data Request Reject < Y > is used when Equos cannot honor the Market Data Request, due to business or technical reasons. Clients may choose to limit various parameters, such as the size of requests, whether just the top of book or the entire book may be displayed, and whether Full or Incremental updates must be used.
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
Standard Header | Y | MsgType = Y | ||
262 | MDReqID | STRING | Y | A unique ID assigned by the client to the market data request, which is being rejected |
281 | MDReqRejReason | CHAR | N | Reason for the rejection of a Market Data request: 0 = Unknown symbol 1 = Duplicate MDReqID 2 = Insufficient Bandwidth 3 = Insufficient Permissions 4 = Unsupported SubscriptionRequestType 5 = Unsupported MarketDepth 6 = Unsupported MDUpdateType |
58 | Text | STRING | N | Free format text string describing the reason for the rejection. |
Standard Trailer | Standard Trailer | Y |
MarketDataSnapshotFullRefresh < W >
The Market Data messages are used as the response to a Market Data Request message. In all cases, one Market Data message refers only to one Market Data Request. It can be used to transmit a 2-sided book of orders or list of quotes, a list of trades, index values, opening, closing, settlement, high, low, or VWAP prices, the trade volume or open interest for a security, or any combination of these.
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
Standard Header | Y | MsgType = W | ||
262 | MDReqID | STRING | N | A unique ID assigned by the client when responding to a MarketDataRequest < V > |
55 | Symbol | STRING | C | Equos Exchange Symbol |
48 | SecurityID | STRING | C | The Security Identifier (type) as specified/requested in SecurityIDSource(22) |
22 | SecurityIDSource | STRING | C | Identifies class or source of the SecurityID(48) value. |
461 | CFICode | STRING | N | Indicates the type of security using ISO 10962 standard, Classification of Financial Instruments (CFI code) values. |
1301 | MarketID | STRING | N | ISO 10383 standard: Market Identifier Code (MIC) |
group | < NoMDEntries > | |||
268 | NoMDEntries | NUMINGROUP | Y | Number of entries following. |
→ 269 | MDEntryType | CHAR | Y | Must be the first field in this repeating group. 0 = Bid 1 = Offer 2 = Trade (Trade-By-Level if Request contains AggregatedBook (266=Y)) 3 = Index Value 4 = Opening Price 5 = Closing Price 6 = Settlement Price 7 = Trading session high price 8 = Trading session low price A = Imbalance B = Total Traded Volume / Volume (VOI) when paired with 269=C C = Open Interest D = Composite Underlying Price J = Empty book M = Prior Settle Price Q = Auction Clearing Price (Equilibrium Price). u = Anomalous Order Threshold Reference Price v = Anomalous Order Threshold Upper Range w = Anomalous Order Threshold Lower Range x = Extreme Trade Range Reference Price y = Extreme Trade Range Upper Range z = Extreme Trade Range Lower Range |
→ 270 | MDEntryPx | PRICE | Price of the Market Data Entry. | |
→ 271 | MDEntrySize | QTY | Size of the Market Data Entry. | |
→ 272 | MDEntryDate | UTCDateOnly | C | Date of Market Data Entry (Trades only). |
→ 273 | MDEntryTime | UTCTimeOnly | C | Time of Market Data Entry (Trades only). |
→ 274 | TickDirection | CHAR | C | Direction of the "tick" 0 = Plus Tick 1 = Zero-Plus Tick 2 = Minus Tick 3 = Zero-Minus Tick |
end group | < NoMDEntries > | |||
Standard Trailer | Y |
MarketDataIncrementalRefresh < X >
The second Market Data message format is used for incremental updates. Market Data Entries may have an MDEntryID <278> unique among all currently active Market Data Entries so they can be referenced for the purposes of deleting and changing them later. When changing a Market Data Entry, it may keep the same MDEntryID <278>, in which case only MDEntryID <278> would be populated, or the MDEntryID <278> may change, in which case MDEntryID <278> will contain the new ID, and MDEntryRefID <280> will contain the ID of the Market Data Entry being changed. An MDEntryID <278> can be reused within a day only if it has first been deleted.
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
Standard Header | Y | MsgType = X | ||
262 | MDReqID | STRING | Y | A unique ID assigned by the client to the market data request |
group | < NoMDEntries > Number of Market Data entries | |||
268 | NoMDEntries | NUMINGROUP | Y | Number of Market Data entries following. |
→ 279 | MDUpdateAction | CHAR | Y | Must be the first tag in each repeating group. Valid values: 0 = New 1 = Change 2 = Delete. |
→ 285 | DeleteReason | CHAR | Y | Reason for deletion. Valid values: 0 = Cancellation / Trade Bust 1 = Error |
→ 55 | Symbol | STRING | N | Equos Exchange Symbol |
→ 48 | SecurityID | STRING | N | The Security Identifier (type) as specified/requested in SecurityIDSource(22) |
→ 22 | SecurityIDSource | STRING | N | Identifies class or source of the SecurityID(48) value. |
→ 461 | CFICode | STRING | N | Indicates the type of security using ISO 10962 standard, Classification of Financial Instruments (CFI code) values. |
→ 1301 | MarketID | STRING | N | ISO 10383 standard: Market Identifier Code (MIC) |
→ 269 | MDEntryType | CHAR | Y | Must be the first field in this repeating group. 0 = Bid 1 = Offer 2 = Trade (Trade-By-Level if Request contains AggregatedBook (266=Y)) 3 = Index Value 4 = Opening Price 5 = Closing Price 6 = Settlement Price 7 = Trading session high price 8 = Trading session low price A = Imbalance B = Total Traded Volume / Volume (VOI) when paired with 269=C C = Open Interest D = Composite Underlying Price J = Empty book M = Prior Settle Price Q = Auction Clearing Price (Equilibrium Price). u = Anomalous Order Threshold Reference Price v = Anomalous Order Threshold Upper Range w = Anomalous Order Threshold Lower Range x = Extreme Trade Range Reference Price y = Extreme Trade Range Upper Range z = Extreme Trade Range Lower Range |
→ 270 | MDEntryPx | PRICE | Price of the Market Data Entry. | |
→ 271 | MDEntrySize | QTY | Size of the Market Data Entry. | |
→ 272 | MDEntryDate | UTCDateOnly | C | Date of Market Data Entry (Trades only). |
→ 273 | MDEntryTime | UTCTimeOnly | C | Time of Market Data Entry (Trades only). |
→ 274 | TickDirection | CHAR | C | Direction of the "tick" 0 = Plus Tick 1 = Zero-Plus Tick 2 = Minus Tick 3 = Zero-Minus Tick |
end group | < NoMDEntries > | |||
Standard Trailer | Y |
FIX Order Management
NewOrderSingle< D >
The NewOrderSingle< D> message is used to submit an order to Equos Exchange for execution. If accepted or rejected Equos will respond with an ExecutionReport<8> message.
If SecurityID is used the ID and SecurityIDSource will be echoed in ExecutionReport<8>
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
Standard Header | Y | MsgType = D | ||
1 | Account | STRING | N | Specify valid account id for on behalf of order submission. Submitting session user should have required privilege. |
11 | ClOrdID | STRING | Y | UUID selected by client to identify the order Unique identifier for Order as assigned by the client. Uniqueness must be guaranteed within a single trading session by the sender for clients who do not submit long dated orders (GTC/GTD). Clients who submit long dated orders must guarantee uniqueness across trading sessions. |
55 | Symbol | STRING | C | Equos exchange Symbol, if using SecurityID/SecurityIDSource fields, set Symbol to N/A |
48 | SecurityID | STRING | C | Security identifier of the form specified SecurityIDSource<22> |
22 | SecurityIDSource | STRING | C | Identifies source of the SecurityID<48> value. M = Equos Instrument ID 8 = Equos Exchange Symbol S = Financial Instrument Global Identifier |
54 | Side | CHAR | Y | Side of order: 1 = Buy 2 = Sell |
38 | OrderQty | QTY | Y | Order quantity specified in the base Currency<15> or Contracts |
40 | OrdType | CHAR | Y | The following order types can be placed: 1 = Market Order 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order |
18 | ExecInst | MultipleValueString | N | Instructions for handling the order. If more than one instruction is applicable to an order, this field can contain multiple instructions separated by space. 6 = Participate don't initiate (Post Only) E = Do not increase - DNI (under development) |
44 | Price | PRICE | N | Order limit price. |
99 | StopPx | PRICE | C | The price at which the stop is triggered. Required for OrdType<40> = 3 (Stop Order) or = 4 (Stop Limit Order) |
59 | TimeInForce | CHAR | N | Specifies how long the order remains in effect. Absence of this field is interpreted as "Good Till Cancel". Valid values: 1 = Good Till Cancel (GTC) 3 = Immediate or Cancel (IOC) 4 = Fill or Kill (FOK) 5 = Good Till Crossing (GTX) 6 = Good Till Date (GTD) |
110 | MinQty | QTY | N | The minimum quantity for which the order can be executed for TimeInForce<110> = 3 (Immediate or Cancel). |
432 | ExpireDate | LOCALMKTDATE | C | Conditionally required if TimeInForce<59> = GTD and ExpireTime<126> is not specified. |
126 | ExpireTime | UTCTIMESTAMP | C | Conditionally required if TimeInForce<59> = GTD and ExpireDate<432> is not specified.. |
775 | BookingType | INT | N | Method for booking out this order. Used when notifying Equos that an order to be settled as an OTC derivative (e.g. CFD or similar) 0 = Regular Spot booking 1 = CFD (Contract for difference) 2 = Total Return Swap |
20003 | UserOrderLabel | STRING | N | User specified order label, will be echoed on all ExecutionReport<8> with this ClOrdID<11> Maximum of 60 characters |
60 | TransactTime | UTCTIMESTAMP | Y | Timestamp when the business transaction represented by the message occurred. |
Standard Trailer | Y |
ExecutionReport<8>
The Execution Report (8) message is used to:
* Confirm the receipt of an order
* Confirm changes to an existing order
* Confirm or convey an order cancellation or expiration
* Convey fill information on working orders
* Reject orders
* Convey information about re-stated long orders carried from one trading session to the next.
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
Standard Header | Y | MsgType = 8 | ||
37 | OrderID | STRING | Y | Unique order identifier assigned by the EQUOS matching engine. |
198 | SecondaryOrderID | STRING | N | |
11 | ClOrdID | STRING | Y | UUID selected by client to identify the order Unique identifier for Order as assigned by the client. Uniqueness must be guaranteed within a single trading session by the sender for clients who do not submit long dated orders (GTC/GTD). Clients who submit long dated orders must guarantee uniqueness across trading sessions. |
41 | OrigClOrdID | STRING | N | ClOrdID of the order to cancel (originally assigned by the client). |
453 | NoPartyIDs | NUMINGROUP | N | |
→ 448 | PartyID | STRING | N | Used to identify source of PartyID <448>. Required if PartyIDSource <447> is specified. Required if NoPartyIDs <453> > 0. |
→ 447 | PartyIDSource | CHAR | N | Identifies class or source of the PartyID <448> value. Required if PartyID <448> is specified. Note: applicable values depend upon PartyRole <452> specified. |
→ 452 | PartyRole | INT | N | Identifies the type of PartyID <448> (e.g. Executing Broker). Required if NoPartyIDs <453> > 0. |
17 | ExecID | STRING | N | identifier of the execution report (not an actual execution). |
150 | ExecType | CHAR | Y | The execution report’s type: 0 = New 4 = Canceled 5 = Replace 8 = Rejected C = Expired F = Fill Status I = Order Status |
39 | OrdStatus | CHAR | Y | Identifies status of order. 0 = New 1 = Partially filled 2 = Filled 3 = Done for Day 4 = Cancelled 8 = Rejected C = Expired. |
1 | Account | STRING | Y | Specify valid account id for on behalf of order submission. Submitting session user should have required privilege. |
434 | CxlRejResponseTo | CHAR | Y | Identifies the type of request that a Cancel Reject is in response to. 1 = Order cancel request 2 = Order cancel/replace request. |
102 | CxlRejReason | CHAR | N | Code to identify reason for cancel rejection. 0 = Too late to cancel 1 = Unknown order 2 = Broker/Exchange Option 6 = Duplicate ClOrdID (11) received 8 = Price exceeds current price band 100 = Order not currently accessible for cancellation or modification |
55 | Symbol | STRING | C | Equos exchange Symbol, still returned even if using SecurityID/SecurityIDSource fields used in in the initiating order, and set Symbol<55> set to N/A |
48 | SecurityID | STRING | C | Security identifier of the form specified SecurityIDSource<22> of the type used on the initiating order |
22 | SecurityIDSource | STRING | C | Identifies source of the SecurityID<48> value. M = Equos Instrument ID 8 = Equos Exchange Symbol S = Financial Instrument Global Identifier of the type used on the initiating order |
54 | Side | CHAR | Y | Side of order: 1 = Buy 2 = Sell |
38 | OrderQty | QTY | Y | Order quantity specified in the base Currency<15> or Contracts |
40 | OrdType | CHAR | Y | The following order types can be replaced: 1 = Market Order 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order |
18 | ExecInst | MultipleValueString | N | Instructions for handling the order. If more than one instruction is applicable to an order, this field can contain multiple instructions separated by space. 6 = Participate don't initiate (Post Only) G = All or none - AON R = Primary peg (primary market - buy at bid/sell at offer) |
44 | Price | PRICE | N | Order limit price. |
99 | StopPx | PRICE | C | The price at which the stop is triggered. Required for OrdType<40> = 3 (Stop Order) or = 4 (Stop Limit Order) |
59 | TimeInForce | CHAR | N | Specifies how long the order remains in effect. Absence of this field is interpreted as "Good Till Cancel". Valid values: 1 = Good Till Cancel (GTC) 3 = Immediate or Cancel (IOC) 4 = Fill or Kill (FOK) 5 = Good Till Crossing (GTX) 6 = Good Till Date (GTD) |
32 | LastQty | QTY | C | Quantity bought/sold on this (last) fill. |
31 | LastPx | PRICE | C | Price of this (last) fill. |
6 | AvgPx | PRICE | C | Average execution price or 0.0 if not executed yet or rejected. |
151 | LeavesQty | QTY | C | Amount of order open for further execution. If the OrdStatus 39 = 4, C, the order is no longer active and LeavesQty can = 0. Otherwise, LeavesQty = OrderQty - CumQty |
14 | CumQty | QTY | C | The cumulative quantity of an order, currently executed in a chain of partial fills. |
84 | CxlQty | QTY | C | Average execution price or 0.0 if not executed yet or rejected. |
60 | TransactTime | UTCTIMESTAMP | Y | Timestamp when the business transaction represented by the message occurred. |
12 | Commission | AMT | N | Commission amount paid (positive value) or received (negative value) for each partial fill quantity in LastQty(32). |
13 | CommType | CHAR | N | Commission Type 3 = Absolute (Total monetary amount) |
479 | CommCurrency | UTCTIMESTAMP | Y | Currency of the commission |
1003 | TradeID | STRING | N | The unique ID assigned to the trade entity once it is received or matched by the exchange or central counterparty. |
1057 | AggressorIndicator | CHAR | N | Used to identify whether the order initiator is an aggressor Y = Order initiator is aggressor N = Order initiator is passive |
Standard Trailer | Standard Trailer | Y |
OrderCancelRequest < F >
The Order Cancel Request
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 | ||
1 | Account | STRING | N | Specify valid account id for on behalf of order submission. Submitting session user should have required privilege. |
11 | ClOrdID | STRING | Y | UUID selected by client to identify the order Unique identifier for Order as assigned by the client. Uniqueness must be guaranteed within a single trading session by the sender for clients who do not submit long dated orders (GTC/GTD). Clients who submit long dated orders must guarantee uniqueness across trading sessions. |
41 | OrigClOrdID | STRING | N | ClOrdID of the order to cancel (originally assigned by the client). |
37 | OrderID | STRING | Y | Unique order identifier assigned by the EQUOS matching engine. |
55 | Symbol | STRING | C | Equos exchange Symbol, if using SecurityID/SecurityIDSource fields, set Symbol to N/A |
48 | SecurityID | STRING | C | Security identifier of the form specified SecurityIDSource<22> |
22 | SecurityIDSource | STRING | N | Identifies source of the SecurityID<48> value. M = Equos Instrument ID 8 = Equos Exchange Symbol S = Financial Instrument Global Identifier |
54 | Side | CHAR | N | Side of order: 1 = Buy 2 = Sell |
60 | TransactTime | UTCTIMESTAMP | Y | Timestamp when the business transaction represented by the message occurred. |
Standard Trailer | Y |
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
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
Tag | Field Name | Data Type | Req | Description |
---|---|---|---|---|
Standard Header | Y | MsgType = F | ||
11 | ClOrdID | STRING | Y | UUID selected by client to identify the order Unique identifier for Order as assigned by the client. Uniqueness must be guaranteed within a single trading session by the sender for clients who do not submit long dated orders (GTC/GTD). Clients who submit long dated orders must guarantee uniqueness across trading sessions. |
41 | OrigClOrdID | STRING | Y | ClOrdID of the order to cancel (originally assigned by the client). |
37 | OrderID | STRING | Y | Unique order identifier assigned by the EQUOS matching engine. |
1 | Account | STRING | N | Specify valid account id for on behalf of order submission. Submitting session user should have required privilege. |
55 | Symbol | STRING | C | Equos exchange Symbol, if using SecurityID/SecurityIDSource fields, set Symbol to N/A |
48 | SecurityID | STRING | C | Security identifier of the form specified SecurityIDSource<22> |
22 | SecurityIDSource | STRING | C | Identifies source of the SecurityID<48> value. M = Equos Instrument ID 8 = Equos Exchange Symbol S = Financial Instrument Global Identifier |
54 | Side | CHAR | Y | Side of order: 1 = Buy 2 = Sell |
44 | Price | PRICE | N | Original order price. |
640 | Price2 | PRICE | N | New price of the order. |
38 | OrderQty | QTY | Y | Orignial order quantity specified in the base Currency<15> or Contracts |
192 | OrderQty2 | QTY | Y | New order quantity specified in the base Currency<15> or Contracts |
40 | OrdType | CHAR | Y | The following order types can be replaced: 1 = Market Order 2 = Limit Order 3 = Stop Order 4 = Stop Limit Order |
99 | StopPx | PRICE | C | The price at which the stop is triggered. Required for OrdType<40> = 3 (Stop Order) or = 4 (Stop Limit Order) |
59 | TimeInForce | CHAR | N | Specifies how long the order remains in effect. Absence of this field is interpreted as "Good Till Cancel". Valid values: 1 = Good Till Cancel (GTC) 3 = Immediate or Cancel (IOC) 4 = Fill or Kill (FOK) 5 = Good Till Crossing (GTX) 6 = Good Till Date (GTD) |
60 | TransactTime | UTCTIMESTAMP | Y | Timestamp when the business transaction represented by the message occurred. |
Standard Trailer | Y |
OrderCancelReject<9>
The order cancel reject message is issued by the broker upon receipt of a cancel request or cancel/replace request message which cannot be honored. Requests to change price or decrease quantity are executed only when an outstanding quantity exists. Filled orders cannot be changed (i.e quantity reduced or price change. However, the broker/sellside may support increasing the order quantity on a currently filled order).
When rejecting a Cancel/Replace Request (or Cancel Request), the 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 | ||
1 | Account | STRING | Y | Specify valid account id for on behalf of order submission. Submitting session user should have required privilege. |
37 | OrderID | STRING | Y | Unique order identifier assigned by the EQUOS matching engine. |
11 | ClOrdID | STRING | Y | Unique identifier for Order as assigned by the client. |
41 | OrigClOrdID | STRING | Y | ClOrdID of the order to cancel (originally assigned by the client). |
39 | OrdStatus | CHAR | Y | Identifies status of order. 0 = New 1 = Partially filled 2 = Filled 4 = Cancelled 8 = Rejected C = Expired |
434 | CxlRejResponseTo | CHAR | Y | Identifies the type of request that a Cancel Reject is in response to. 1 = Order cancel request 2 = Order cancel/replace request. |
102 | CxlRejReason | CHAR | N | Code to identify reason for cancel rejection. 0 = Too late to cancel 1 = Unknown order 2 = Broker/Exchange Option 6 = Duplicate ClOrdID (11) received 8 = Price exceeds current price band 100 = Order not currently accessible for cancellation or modification |
58 | Text | STRING | Y | Descriptive text message elaborating on the reason of the Cancel Reject if required |
60 | TransactTime | UTCTIMESTAMP | Y | Timestamp when the business transaction represented by the message occurred. |
Standard Trailer | Y |
OrderMassStatusRequest < 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 |
585 | MassStatusReqType | STRING | Y | Mass Status Request Type 1 = Status for orders for a Security 2 = Status for orders for an Underlying Security 4 = Status for orders for a CFICode 6 = Status for orders for a trading session 7 = Status for all orders |
55 | Symbol | STRING | C | Equos exchange Symbol, if using SecurityID/SecurityIDSource fields, set Symbol to N/A |
48 | SecurityID | STRING | C | Security identifier of the form specified SecurityIDSource<22> |
22 | SecurityIDSource | STRING | C | Identifies source of the SecurityID<48> value. M = Equos Instrument ID 8 = Equos Exchange Symbol S = Financial Instrument Global Identifier |
60 | TransactTime | UTCTIMESTAMP | Y | Timestamp when the business transaction represented by the message occurred. |
Standard Trailer | Y |
FIX Drop Copy
tbd
ccxt
ccxt is an open source library, that provides a normalised interface to trade on more than 100 cryptocurrency exchanges.
This provides quick access to market data for storage, analysis, visualization, indicator development, algorithmic trading, strategy backtesting, bot programming, and related software engineering. It is intended to be used by coders, developers, technically-skilled traders, data-scientists and financial analysts for building trading algorithms.
Current feature list:
- 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
- PHP: https://github.com/ccxt/ccxt/tree/master/php
Revision History
Date | Ver | API | End Point | Type | Description |
---|---|---|---|---|---|
2021/02/03 | 5.0 | REST | REST https://equos.io/api/sendWithdrawRequest https://equos.io/api/getTransferHistory https://equos.io/api/getUserHistory https://equos.io/api/cancelOrder https://equos.io/api/userTrades https://equos.io/api/cancelAll |
New Features and updates | Updates for crypto withdrawal endpoint and order endpoints |
2021/01/12 | 4.13 | REST & WSS | REST https://equos.io/api/getRisk WSS wss://equos.io/ws/userrisk wss://equos.io/ws/userorders wss://equos.io/ws/userposition |
Updates | Updated mandatory fields for Institutional User |
2021/01/11 | 4.12 | REST & FIX | REST https://equos.io/api/getRisk wss://equos.io/ws/userrisk https://equos.io/api/getOrderStatus FIX MarketDataRequest < V > |
Updates | REST updated api/getRisk wss/userrisk api/getOrderStatus( removed old endpoint /getOrder) FIX updated MDEntryType<269> |
2021/01/08 | 4.11 | REST & WSS | https://equos.io/api/userTrades https://equos.io/api/getInstrumentPairs https://equos.io/api/getRisk wss://equos.io/ws/userrisk https://equos.io/api/getOrder https://equos.io/api/getInstruments https://equos.io/api/getInstrumentPairs https://equos.io/api/getOrderBook https://equos.io/api/getTradeHistory https://equos.io/api/getChart |
Updates | updates to api/userTrades and updates to getInstrumentPairs with example for Perpetuals |
2020/12/24 | 4.10 | REST | https://equos.io/api/health https://equos.io/api/getOrderStatus |
New Feature and updates | New API health check endpoint and api/getOrderStatus endpoint |
2020/11/24 | 4.9 | WSS | wss://equos.io/ws/ticker wss://equos.io/ws/orderbook wss://equos.io/ws/tradehistory wss://equos.io/ws/chart https://equos.io/api/userTrades |
New Feature | Public Websocket endpoints with Unsubscribe and updates on description of the FIX and REST endpoints and examples. |
2020/09/20 | 4.8 | WSS | wss://equos.io/ws/ticker |
New Feature | Ticker Endpoint |
2020/09/05 | 4.7 | REST | GET https://equos.io/api/getFundingRateHistory |
New Feature | Perpetual Funding Rate History |
2020/09/05 | 4.7 | REST | POST https://equos.io/api/getUserHistory |
New Feature | User History Reports supporting Order, Trade, Funding History, Position |
2020/08/25 | 4.6 | REST | GET https://equos.io/api/getInstrumentPairs |
Enhancement | Expanded reference data fields to support Perpetuals, Futures & Options |
2020/08/25 | 4.6 | WSS | wss://equos.io/ws/orderbook |
Enhancement | Expanded fields for perpetual contract data |
2020/08/25 | 4.6 | REST | POST https://equos.io/api/order |
Enhancement | Wait for orderId from matching engine control flag added |
2020/08/06 | 4.5 | REST/WS | Python Sample Codes for REST / WS and Up to date REST / WS / FIX API documents | Enhancement | Python Sample Codes added for REST / WS APIs and Updated REST/WS/FIX APIs documentation |
2020/07/28 | 4.4 | REST/WS | GET https://equos.io/api/userTrades wss://equos.io/ws//userTrades |
Enhancement | Average execution price added |
2020/07/21 | 4.2.7 | REST/WS | GET https://equos.io/api/getTradeHistory wss://equos.io/ws/tradehistory |
Enhancement | AggressorSide added to tradeHistory endpoint |
2020/06/17 | 4.2 | FIX | ExecutionReport<8> |
Enhancement | Commission fields added to ExecutionReport |
2020/05/15 | 3.10 | All | All | New Feature | USD/USDC Book consolidation |
2020/05/15 | 3.10 | All | All | System Change | USD Instruments removed from the trading list |
2020/05/15 | 3.10 | REST | New https://equos.io/api/ Legacy https://trade.equos.io/api/ |
System Change | Endpoint URL change |
2020/05/06 | 3.02 | FIX | Logon<1> |
New Feature | Cancel on Disconnect |
2020/04/28 | 3.00 | ccxt | github developer resources | New Feature | ccxt API support released |
2020/04/06 | 2.20 | REST | POST https://trade.equos.io/api/logon POST https://trade.equos.io/api/order POST https://trade.equos.io/api/cancelOrder POST https://trade.equos.io/api/cancelReplaceOrder POST https://trade.equos.io/api/getOrders POST https://trade.equos.io/api/getOrder POST https://trade.equos.io/api/getPositions POST https://trade.equos.io/api/getRisk |
Update | Institutional/multiple account support in REST |
2020/03/27 | 2.00 | All | EQUOS developer documentation site | Initial | Document Release |