NAV Navbar
Crypto.com Exchange FIX API

javascript python c# java

Introduction

Welcome to the Crypto.com Exchange FIX API - FIX API reference documentation.

Change Logs

Generating the API Key

Before sending any requests, you'll need to generate a new API key.

This can be done in the Exchange website under User Center - API.

After generating the key, there are two things you need to carefully note down:

API Key and Secret are randomly generated by the system and can not be modified. Default settings will be set to "Can Read" only, and you have the option of adding or removing certain permissions for your API Key via Web UI.

You can optionally specify a whitelist of IP addresses when generating the API Key.

If specified, the API can only be used from the whitelisted IP addresses.

Rate Limits

FIX

FIX Endpoint Limit
User API 500 requests per second
Market Data 20 requests per second
Important Note

We recommend adding a 1-second sleep after establishing the websocket connection, and before requests are sent.

This will avoid occurrences of rate-limit (`TOO_MANY_REQUESTS`) errors, as the websocket rate limits are pro-rated based on the calendar-second that the websocket connection was opened.

FIX API Overview

What is FIX API

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

Users who are less familiar with FIX can also consider using the REST API or Web Socket API.

FIX Dictionary

Our FIX API implementation is based on the FIX Protocol 4.4 specifications, and on top of it we also includes some tags from other versions of the FIX Specification, as well as some User Defined Fields.

We provide a custom dictionary in the QuickFIX XML format, which is also compatible with various FIX engine implementations.

Download FIX Dictionary for Order Management / Market data

FIX Endpoints

The FIX API is available across 3 servers: the user data server (order management), user data server (drop copy), and the market data server.

UAT Sandbox

FIX API (Spot/Deriv)

FIX Gateway FIX Endpoint Sender Comp ID Target Comp ID
User Data (Order Management) tcp://uat1-fix-ud-f18a.crypto.local:31301 UAT1.CLIENT_NAME.UD.00 UAT1.CDC.UD
User Data (Drop Copy) tcp://uat1-fix-uc-f18a.crypto.local:30300 UAT1.CLIENT_NAME.UC.00 UAT1.CDC.DC
Market Data (BTC related) tcp://uat1-fix-md-f18a.crypto.local:34402 UAT1.CLIENT_NAME_BTC.MD.00 UAT1.CDC.MD
Market Data (ETH related) tcp://uat1-fix-md-f18a.crypto.local:34403 UAT1.CLIENT_NAME_ETH.MD.00 UAT1.CDC.MD
Market Data (OTHERS related) tcp://uat1-fix-md-f18a.crypto.local:3440[5-7] UAT1.CLIENT_NAME_OTHERS.MD.00 UAT1.CDC.MD

Production

FIX API (Spot/Deriv)

FIX Gateway FIX Endpoint Sender Comp ID Target Comp ID
User Data (Order Management) tcp://prd3-fix-ud-f18b.crypto.local:31301 PRD3.CLIENT_NAME.UD.00 PRD3.CDC.UD
User Data (Drop Copy) tcp://prd3-fix-uc-f18b.crypto.local:30300 PRD3.CLIENT_NAME.UC.00 PRD3.CDC.UC
Market Data (BTC related) tcp://prd3-fix-md-f18b.crypto.local:34402 PRD3.CLIENT_NAME_BTC.MD.00 PRD3.CDC.MD
Market Data (ETH related) tcp://prd3-fix-md-f18b.crypto.local:34403 PRD3.CLIENT_NAME_ETH.MD.00 PRD3.CDC.MD
Market Data (OTHERS related) tcp://prd3-fix-md-f18b.crypto.local:3440[5-7] PRD3.CLIENT_NAME_OTHERS.MD.00 PRD3.CDC.MD

Remarks for market data flow:

BTC related pair
port: 34402
note: ETH/BTC is NOT included on this instance


ETH related pair
port: 34403
note: ETH/BTC is included on this instance


Others [start with character]
port: 34405 [0-9A-D]
port: 34406 [E-M]
port; 34407 [N-Z]

FIX Connectivity

FIX Session Management

Starting a Session

FIX API runs the server side of the FIX connection ("acceptor"). Sequence numbers start at 1 and must be incremented with every message. Messages with duplicate or out-of-order sequence numbers will be rejected. We never reset sequence numbers on the server side during the logon workflow.

Standard Session Recovery

Standard ResendRequest can be used to recover a session.

  1. Send 35=2 with the need sequence number range.
  2. Receive replay message with PossDupFlag=Y. Apply the changes based on standard FIX protocol. If a message with this sequence number has been previously received, ignore message, if not, process normally.
  3. Continue trading.

Ending a Session

The client may send the server an optional Logout (35=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 (35=5) message where the Text (58) field contains the reason.

FIX Messages

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

Standard Header

The header identifies the message type, length, destination, sequence number, origination point and time

Tag Name Type Required Description
8 BeginString string Y Must be "FIX.4.4"
9 BodyLength number Y Length of the message body in bytes
35 MsgType string Y Message Type
34 MsgSeqNum number Y Integer message sequence number
43 PossDupFlag boolean N Indicates possible retransmission of message with this sequence number
49 SenderCompID string Y See FIX Endpoints for details
56 TargetCompID string Y See FIX Endpoints for details
52 SendingTime UTCTimestamp Y
97 PossResend boolean N Indicates that message may contain information that has been sent under another sequence number.

Two fields help with resending messages.
The PossDupFlag 43=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=Y when reissuing a message with a new sequence number (e.g. resending an order).

The receiving application should process these messages as follows:

Standard Trailer

Each FIX message is terminated by a Standard Trailer as a message delimiter as well as containing the checksum value.

Tag Name type Required Description
10 CheckSum string Y Three bytes, simple checksum. Always last field in message

Logon (35=A)

Tag Name type Required Description
95 RawDataLength number Y Length of RawData field
96 RawData string Y Please refer FIX Digital Singature for details
98 EncryptMethod number Y Must be 98=0
108 HeartBtInt number Y Heartbeat interval in seconds.
141 ResetSeqNumFlag boolean N Indicates that both sides of the FIX session should reset sequence numbers.
553 Username string Y API Key
554 Digital Signature string Y Please refer FIX Digital Singature for details
6867 CancelOnDisconnect (Scope) string N Y: Enabled for the open order placed by this session/connection.
35002 CancelOnDisconnect (Type) number N '0' : Disable
'3' : Enable

FIX Digital Signature

For FIX API, the Logon (35=A) message has to be invoked ONCE per session, with the Digital Signature as Password (554) and API key as UserName (553) to be part of the message. Once authenticated, you will gain access to a FIX session, and no longer need to use the pass in the Digital Signature and API key anymore for the duration of the session.

The authentication is based on the pairing of the API Key, along with the HMAC-SHA256 hash of the request parameters using the API Secret as the cryptographic key.

The algorithm for generating the HMAC-SHA256 signature is as follows:

  1. (Case i. Order Management Flow) Concatenate the following: "public/auth" + MsgSeqNum (34) + api_key + "system_labelONEEX" + RawData (96)
    (Case ii. Market Data Flow) Concatenate the following: "public/auth" + MsgSeqNum (34) + api_key + RawData (96)
    (Case iii. Drop Copy Flow) Concatenate the following: "public/auth" + MsgSeqNum (34) + api_key + "system_labelONEEX" + RawData (96)
  2. Use HMAC-SHA256 to hash the above using the API Secret as the cryptographic key
  3. Encode the output as a hex string -- this is your Digital Signature

The above method is similar to sign a Digital Signature for REST / WS, with the following equivalent field mappings:

FIX Tag Equivalent WS / REST Field for Signing Digital Signature
MsgType (35) method
MsgSeqNum (34) id
UserName (553) api_key
RawData (96) nonce in milliseconds
Password (554) sig

Please refer to the repsective section to sign a Digital Signature for REST / WS for sample code.

Remarks

We recommend adding 50 ms wait interval after receiving 35=A on both side, before sending first request.

The FIX gateway maintainance (Order Management flow only) will be carried out on second Thursday 07:05-07:15 (UTC) monthly.
Please disconnect on 07:04 (UTC) and reconnect on 07:15 (UTC) with sequence number 1/1.


Other options for client preferences:

option 1:
Sequence number resets require by clients to LOGOFF and then LOGIN again using the Logon [A] message with the ResetSeqNumFlag (141) set to 'Y'. This resets the sequence numbers on both sides. Clients are free to perform this action whenever is convenient for their own schedule and set-up.

Option 2:
Crypto.com FIX connections shall establish a cap to prevent sequence number counter overflow; Our FIX engine shall trigger disconnection and reset the sequence number to 1/1, either the inbound or outbound sequence number reach 2,147,480,000

Logout (35=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
58 Text string N
1409 number N Status of the FIX session. Not sent for scheduled server initiated log outs
0 = session active
4 = Session logout complete
5 = Invalid username or password
6 = Account locked
7 = Logons are not allowed at this time

Heartbeat (35=0)

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

Tag Name Type Required Description
112 TestReqID string N Identifier included in Test Request (1) message to be returned in resulting Heartbeat (0)

TestRequest (35=1)

The Test Request (1) message forces a heartbeat from the opposing application. The Test Request (1) message checks sequence numbers or verifies communication line status. The opposite application responds to the Test Request (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 Test Request (1) and not a normal timeout. The opposite application includes the TestReqID (112) in the resulting Heartbeat (0). Any string can be used as the TestReqID (112) (one suggestion is to use a timestamp string).

Tag         Name Type Required Description
112 TestReqID string Y Identifier included in Test Request (1) message to be returned in resulting Heartbeat (0)

ResendRequest (35=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 Sequence Reset-GapFill <4> message is used to skip messages that a sender does not wish to resend.)

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

Tag         Name Type Required Description
7 BeginSeqNo number Y First sequence number in the range to be resent.
Please refer [FIX Sequence Number Resent scenario] for more details
16 EndSeqNo number 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.

[FIX Sequence Number Resent scenario]
(Assume client is the initiator, CDC is the acceptor. The following is the synchronization after successful logon)
------------------------------Case 1 :------------------------------
After logon request 35=A, CDC found that there are missing sequence number and requires retransmission of messages from client.
ResendRequest(35=2) sent by CDC.
------------------------------Case 2:------------------------------
After logon request 35=A, client found that there are missing sequence number and requires retransmission of messages from CDC.
ResendRequest(35=2) sent by client.
------------------------------Case 3:------------------------------
ResendRequest(35=2) sent by client and CDC after Logon(35=A) acknowledgement.

SequenceReset (35=4)

The Sequence Reset message has two modes: Gap Fill mode and Reset mode.

Gap Fill mode

Gap Fill mode is used in response to a Resend Request <2> when one or more messages must be skipped over for the following reasons:

Gap Fill mode is indicated by GapFillFlag <123> field = "Y".

If the GapFillFlag <123> field is present (and equal to "Y"), the MsgSeqNum <34> should conform to standard message sequencing rules (i.e. the MsgSeqNum <34> of the Sequence Reset <4> GapFill mode message should represent the beginning MsgSeqNum <34> in the GapFill range because the remote side is expecting that next message sequence number).

Reset mode

Reset mode involves specifying an arbitrarily higher new sequence number to be expected by the receiver of the Sequence Reset <4>-Reset mode message, and is used to reestablish a FIX session after an unrecoverable application failure.

Reset mode is indicated by the GapFillFlag <123> field = "N" or if the field is omitted.

If the GapFillFlag <123> field is not present (or set to N), it can be assumed that the purpose of the Sequence Reset <4> message is to recover from an out-of-sequence condition. In Sequence Reset <4> - Reset mode, the MsgSeqNum <34> in the header should be ignored (i.e. the receipt of a Sequence Reset <4> - Reset mode message with an out of sequence MsgSeqNum <34> should not generate resend requests). Sequence Reset <4> - Reset should NOT be used as a normal response to a Resend Request <2> (use Sequence Reset <4> - Gap Fill mode). The Sequence Reset <4> - Reset should ONLY be used to recover from a disaster situation which cannot be recovered via the use of Sequence Reset <4> - Gap Fill. Note that the use of Sequence Reset <4> - Reset may result in the possibility of lost messages.

Rules for processing all Sequence Reset messages:

Tag         Name Type Required Description
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 number Y New sequence number

NewOrderSingle (35=D)

Creates a new BUY or SELL order on the Exchange.

This call is asynchronous, so the response with Pending New is simply an acceptance of the request, but not necessarily mean it is confirmed into order book.

The drop copy subscription can be used to check when the order is successfully created.

See FIX Spot Order Life Cycle and ExecutionReport for details.

Tag Name Type Required Description
11 ClOrdID string Y Unique identifier for Order as assigned by the buy-side. Uniqueness must be guaranteed across trading sessions.
15 Currency string N (Depends) Required for OTC Order. Indicates whether OrderQty is for Base Currency or Quote Currency
18 ExecInst MultipleCharValue N. (Limit Orders Only)
Options are:
- 6: POST_ONLY
- 8: SMART_POST_ONLY
- Or leave empty
38 OrderQty qty Depends For LIMIT Orders, MARKET, STOP_LOSS, TAKE_PROFIT orders only:
Order Quantity
40 OrdType string Y 1: MARKET, 2: LIMIT, 3: STOP_LOSS, 4: STOP_LIMIT, J: TAKE_PROFIT, W: TAKE_PROFIT_LIMIT, D: PREVIOUSLY_QUOTED

Must of D for OTC RFQ Order
Must of 1 or 2 for OTC RFS Order
44 Price price Depends For LIMIT and STOP_LIMIT orders only:
Unit price
54 Side string Y 1: BUY, 2: SELL
55 Symbol string Y e.g., ETH_CRO, BTC_USDT
59 TimeInForce char N (Limit Orders Only)
Options are:
- 1: GOOD_TILL_CANCEL (Default if unspecified)
- 3: IMMEDIATE_OR_CANCEL
- 4: FILL_OR_KILL.

Must of 4 for OTC Order
60 TransactTime string Y Time this order request was initiated/released by the trader or trading system.
i.e. 20190525-08:26:38.989 (in GMT)
117 QuoteID string Depends Required for OTC Order. Must be RFS for OTC RFS Order
152 CashOrderQty price Depends For MARKET (BUY), STOP_LOSS (BUY), TAKE_PROFIT (BUY) orders only:
Notional amount to spend
544 CashMargin char N 1: SPOT places order without margin (default for Spot)
2: SPOT places order with margin
1102 TriggerPrice price Depends Used with STOP_LOSS, STOP_LIMIT, TAKE_PROFIT, and TAKE_PROFIT_LIMIT orders.
Dictates when order will be triggered
1107 TriggerPriceType char N which price to use for ref_price: 2: LAST_PRICE (default for Spot)
I: INDEX_PRICE
M: MARK_PRICE
12362 SelfMatchPreventionScope string N Optional Field

Possible Values
- M: Matches Master or Sub a/c
- S: Matches Sub a/c only

Note: orderbook-specific settings takes higher precedence.
2964 SelfMatchPreventionInstruction string N* Mandatory if SelfMatchPreventionScope is set.

Possible Values
- 1: Cancel Taker
- 2: Cancel Maker
- 3: Cancel Both Maker and Taker
2362 SelfMatchPreventionID string of number N* Optional Field

Possible Value: 0 to 32767

Default Value
- If SelfMatchPreventionScope & SelfMatchPreventionInstruction are not specified, REJECT
- If SelfMatchPreventionScope is specified, default value = 0.

Note: orderbook-specific settings takes higher precedence.
2643 CommissionCurrency string N Fee currency for trade. Only present if this message was the result of a fill.

Valid Values:
[SPOT] Buy - Base/Quote token/USD/USDT/EUR
[SPOT] Sell - Quote token/USD/USDT/EUR
[DERIV] Buy/Sell - USD/USDT/EUR

Example:
If a client would like to BUY CRO/BTC, the default fee token is CRO, valid tokens are CRO/BTC/USD/USDT/EUR.
If a client would like to SELL CRO/BTC, the default fee token is BTC, valid tokens are BTC/USD/USDT/EUR.
If a client would like to BUY/SELL BTCUSD-PERP, the default fee token is USD, valid tokens are USD/USDT/EUR.

If a client has an insufficient balance in their preferred fee token, the system will switch to the default fee token.
7933 BrokerId string N Optional Field, Brokder ID of the client.


Here are the mandatory parameters based on OrdType:

OrdType Side Additional Mandatory Parameters
1: MARKET 1: BUY CashOrderQty or OrderQty, mutually exclusive
1: MARKET 2: SELL OrderQty
2: LIMIT 1: BUY OrderQty, Price
2: LIMIT 2: SELL OrderQty, Price
3: STOP_LOSS 1: BUY CashOrderQty, TriggerPrice
3: STOP_LOSS 2: SELL OrderQty, TriggerPrice
4: STOP_LIMIT 1: BUY Price, OrderQty, TriggerPrice
4: STOP_LIMIT 2: SELL Price, OrderQty, TriggerPrice
J: TAKE_PROFIT 1: BUY CashOrderQty, TriggerPrice
J: TAKE_PROFIT 2: SELL OrderQty, TriggerPrice
W: TAKE_PROFIT_LIMIT 1: BUY Price, OrderQty, TriggerPrice
W: TAKE_PROFIT_LIMIT 2: SELL Price, OrderQty, TriggerPrice


Helpful information:


To create trigger orders against market price:

Response Attributes

Tag Name Type Required Description
35 MsgType string Y Must be 35=8
37 OrderID string Y Newly created order ID
39 OrdStatus string Y 39=A for an order being accepted, but not yet confirmed.
11 ClOrdID string Y Unique identifier for Order as assigned by the buy-side. Uniqueness must be guaranteed across trading sessions.
150 ExecType string Y 150=A for an order being accepted, but not yet confirmed.
150=I will also be sent when a trigger order is confirmed but not yet triggered.

See FIX Spot Order Life Cycle and ExecutionReport for details.

OrderCancelReplaceRequest (35=G)

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

Requests which cannot be processed will be rejected using the Cancel Reject <9> message. The Cancel Reject <9> message should provide the ClOrdID <11> and OrigClOrdID <41> values which were specified on the Cancel/Replace Request message for identification.

Tag Name Type Required Description
11 ClOrdID string Y Unique identifier for Order as assigned by the buy-side. Uniqueness must be guaranteed across trading sessions.
41 OrigClOrdID string Y* ClOrdID <11> of the previous non-rejected order.
* Either OrigClOrdID/OrderID has to be provided
(If both OrderID and OrigClOrdID exist together, OrderID has higher precedence)
37 OrderID string Y* Order ID assigned by the Exchange.
* Either OrigClOrdID/OrderID has to be provided
(If both OrderID and OrigClOrdID exist together, OrderID has higher precedence)
38 OrderQty qty Y For LIMIT Orders, MARKET, STOP_LOSS, TAKE_PROFIT orders only:
Order Quantity
44 Price price Y For LIMIT and STOP_LIMIT orders only:
Unit price
60 TransactTime string Y Time this order request was initiated/released by the trader or trading system.
i.e. 20190525-08:26:38.989 (in GMT)
2964 SelfMatchPreventionInstruction string N Mandatory if SelfMatchPreventionScope is set.

Possible Values
- 1: Cancel Taker
- 2: Cancel Maker
- 3: Cancel Both Maker and Taker

Remark: SelfMatchPreventionScope and SelfMatchPreventionID are not supported by this message type

Response Attributes

Tag Name Type Required Description
35 MsgType string Y Must be 35=8
37 OrderID string Y Newly created order ID
39 OrdStatus string Y 39=A for an order being accepted, but not yet confirmed.
11 ClOrdID string Y Unique identifier for Order as assigned by the buy-side. Uniqueness must be guaranteed across trading sessions.
150 ExecType string Y 150=A for an order being accepted, but not yet confirmed.
150=I will also be sent when a trigger order is confirmed but not yet triggered.

See FIX Spot Order Life Cycle and ExecutionReport for details.

OrderCancelRequest (35=F)

Cancels an existing order on the Exchange (asynchronous)

This call is asynchronous, so the response as ExecutionReport with Pending New is simply an acceptance of the request, but not necessarily mean it is confirmed into order book.

The drop copy subscription can be used to check when the order is successfully cancelled.

See FIX Spot Order Life Cycle and ExecutionReport for details.

Tag Name Type Required Description
55 Symbol string Y e.g., ETH_CRO, BTC_USDT
37 OrderID string N Order ID assigned by the Exchange.
11 ClOrdID string Y Unique ID of cancel request as assigned by the buy-side.
41 OrigClOrdID string N ClOrdID <11> of the previous non-rejected order (NOT the initial order of the day) when canceling or replacing an order. Uniqueness must be guaranteed across trading sessions.

Response Attributes

An ExecutionReport (8) with ExecType=6 (Pending Cancel) for acceptance of the cancel request, pending for confirmation. Besides, OrderCancelReject (9) can be returned if cancel reject happens.

Tag Name Type Required Description
35 MsgType string N Must be 35=8 for pending cancel or 35=9 for cancel reject
37 OrderID string Y Newly created order ID
39 OrdStatus string Y 39=6 for an order cancel request being accepted, but not yet confirmed.
11 ClOrdID string Y Unique identifier for Order as assigned by the buy-side. Uniqueness must be guaranteed across trading sessions.
41 OrigClOrdID string Y Original Unique identifier for Order as assigned by the buy-side. Uniqueness must be guaranteed across trading sessions.
150 ExecType string N 35=8 and 150=6 for an order cancel request being accepted, but not yet confirmed.

See FIX Spot Order Life Cycle, ExecutionReport and OrderCancelReject for details.

OrderCancelReject (35=9)

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

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

Tag Name Type Required Description
35 MsgType string Y Must be 35=9 for cancel reject
37 OrderID string Y Newly created order ID
11 ClOrdID string N Unique identifier for Order as assigned by the buy-side. Uniqueness must be guaranteed across trading sessions.
41 OrigClOrdID string N Original Unique identifier for Order as assigned by the buy-side. Uniqueness must be guaranteed across trading sessions.
39 OrdStatus string Y OrdStatus value after this cancel reject is applied.
434 CxlRejResponseTo string Y 1 = Order Cancel Request
2 = Order Cancel/Replace Request
102 CxlRejReason Number N Cancel reject reason
58 Text string N
19 ExecRefID string N For CDC internal reference only.

OrderMassCancelRequest (35=q)

Cancels all orders for a particular instrument/pair (asynchronous)

This call is asynchronous, so the response as OrderMassCancelReport is simply an acceptance of the request, but not necessarily mean it is confirmed into order book.

The drop copy subscription can be used to check when the order is successfully cancelled with ExecutionReport or rejected with OrderCancelReject message.

From the drop copy, for each respective order, Execution Report (8) with ExecType=6 (Pending Cancel) and/or ExecType=4 (Cancelled) for acceptance and confirmation of the cancel request respectively. Besides, OrderCancelReject (9) can be returned if cancel reject happens.

Tag Name Type Required Description
11 ClOrdID string Y Unique ID of Order Mass Cancel Request (q) as assigned by the client.
530 MassCancelRequestType number Y Specifies the type of cancellation requested.
Supported values:
1: Cancel by Symbol
55 Symbol string Depends The symbol for which to cancel all orders. Required when MassCancelRequestType=1

Response Attributes

See OrderMassCancelReport for details

OrderMassCancelReport (35=r)

The Order Mass Cancel Report is used to acknowledge an Order Mass Cancel Request . Note that each affected order that is canceled is acknowledged with a separate Execution Report <8> or Order Cancel Reject <9> message.

Tag Name Type Required Description
11 ClOrdID string Y Echoed back from the OrderMassCancelRequest
19 ExecRefID string N For CDC internal reference only
530 MassCancelRequestType number Y Echoed back from the OrderMassCancelRequest
531 MassCancelResponse number N If successful, echoes the MassCancelRequestType.
532 MassCancelRejectReason number N Reason why cancel request has failed.

1: Unknown Symbol
5: Unknown SecurityType

MassOrder (35=DJ)

The MassOrder message, which we adopted from FIX 5.0 SP2, can be used to add or cancel multiple unrelated orders with a single message. Only the key order attributes for high performance trading are available.

The behaviour of individual orders within a MassOrder (35=DJ) may vary depending upon its attributes, e.g. OrdType (40) and TimeInForce (59). Individual orders may be cancelled with single order messages such as OrderCancelRequest. Each of the orders in the MassOrder (35=DJ) are to be treated as stand-alone individual orders.

Tag Name Type Required Description
2423 MassOrderRequestID string Y Reqeust ID. Will be echoed back in the respective Pending New or Pending Cancel messages.
2427 OrderResponseLevel number Y Must be 2: Ack each order
2432 TotNoOrderEntries number Y 1 to 10
2643 CommissionCurrency string N Fee currency for trade. Only present if this message was the result of a fill.

Valid Values:
[SPOT] Buy - Base/Quote token/USD/USDT/EUR
[SPOT] Sell - Quote token/USD/USDT/EUR
[DERIV] Buy/Sell - USD/USDT/EUR

Example:
If a client would like to BUY CRO/BTC, the default fee token is CRO, valid tokens are CRO/BTC/USD/USDT/EUR.
If a client would like to SELL CRO/BTC, the default fee token is BTC, valid tokens are BTC/USD/USDT/EUR.
If a client would like to BUY/SELL BTCUSD-PERP, the default fee token is USD, valid tokens are USD/USDT/EUR.

If a client has an insufficient balance in their preferred fee token, the system will switch to the default fee token.
893 LastFragment boolean Y Must be Y
2428 NoOrderEntries number Y 1 to 10. Must be the same as Tag 2432.
=> 2429 OrderEntryAction number Y 1: Add
3: Cancel
=> Y When Tag 2429 = 1, fields as in NewOrderSingle are allowed.
When Tag 2429 = 3, fields as in OrderCancelRequest are allowed.

Response Attributes

MassOrder sends 35=D or 35=F in batch respectively. Each order will follow their respective execution report. See ExecutionReport for details.

ExecutionReport (35=8)

Tag Name Value Required Description
35 MsgType 8 Y
11 ClOrdID order123 Y Client-selected order ID.
18 ExecInst 6 N Instructions for order handling on exchange. If more than one instruction is applicable to an order, this field can contain multiple instructions separated by space.
19 ExecRefID 1 N For CDC internal reference only
37 OrderID 123456 (Numeric) Y Server-assigned order ID
17 ExecID 123456 (Numeric) Y unique execution ID. Equal to Fill ID if this message was the result of a fill
55 Symbol BTC_USDT Y Symbol name
54 Side 1 Y "1": buy; "2": sell
38 OrderQty 1.2 Y Original order quantity
44 Price 8000 N Original order price
150 ExecType 1 Y Reason for this message (see below)
39 OrdStatus 0 Y Order status (Please refer to standard FIX spec)
14 CumQty 0.4 Y Quantity of order that has already been filled
151 LeavesQty 0.8 Y Quantity of order that is still open
636 WorkingIndicator Y or N N Indicates if the order is currently being worked.
60 TransactTime 20241001-09:31:49.200226907 N Time of the order update. Only present on order updates
6616 OrderCreateTime 20241001-09:31:49.200226907 N TransactTime when order is created with 39=0|150=0
31 LastPx 7999.25 Y Fill price. Only present if this message was the result of a fill
32 LastQty 0.4 Y Fill quantity. Only present if this message was the result of a fill
851 LastLiquidityInd 1, 2, 3 N "2": taker fill; "1": maker fill. Only present if this message was the result of a fill
6 AvgPx 7999.25 Y Average fill price for all fills in order. Only present if this message was the result of a fill
12 Commission 0.0067307233000000 N Fee for trade. Only present if this message was the result of a fill
2643 CommissionCurrency CRO N Fee currency for trade. Only present if this message was the result of a fill
13 CommType 3 Y Always 3 (absolute)
103 OrdRejReason 3 N Reason the order was rejected (see below). Only present on rejected NewOrderSingle (D) requests.

i.e.
1 = Unkown symbol
5 = Unknown Order
99 = Other
58 Text 58 N Description of the reason the order was rejected (e.g., Too many requests). Only present on rejected NewOrderSingle (D) requests
544 CashMargin 1, 2 N `1`: messages corresponds to an spot order.
`2`: messages corresponds to an margin order.
880 TrdMatchID string of number N Trade match ID
10060 TradeTransactTime 20250203-11:02:30.133953794 N TransactTime when order is getting partial filled or fullly filled
20101 MatchCount number N Number of orders matched for this trade execution
If it is Maker's Order, value is always 1
If it is Taker's Order, it is the number of orders matched for this trade execution
20102 MatchIndex number N Only appears if it is Maker's order.
It represents which order entry of corresponding price level was matched
This value is 0 base. If the matched order is on the top of the queue, it is shown 0.

ExecType values

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

ExecType Description
0 New order
4 Order cancelled
A Response to a successful NewOrderSingle (D) request
8 Response to a rejected NewOrderSingle (D) request
6 Response to a successful OrderCancelRequest (F) request
I Response to a OrderStatusRequest (H)
F Trade

OrderStatusRequest (35=H)

Get details on a particular OPEN Orders only.

Tag Name Type Required Description
55 Symbol string Y
11 ClOrdID string N Unique identifier for Order as assigned by the buy-side.
37 OrderID number Y OrderID of the order to request.

Response Attributes

An ExecutionReport (8) with ExecType=I (Order Status) will be returned.

Tag Name Type Required Description
35 MsgType string Y Must be 35=8.
150 ExecType string Y Must be 150=I.
911 TotNumReports number N Must be 0 to indicate there is no match, otherwise this tag will not be populated.
912 LastRptRequested number N Must be Y.


* Order status request rejected for unknown order

Tag Name Type Required Description
35 MsgType string Y Must be 35=8.
150 ExecType string Y Must be 150=I.
39 OrdStatus String Y Must be 39=8 Rejected.
14 CumQty number Y Must be 14=0.
151 LeavesQty number Y Must be 151=0.
58 Comment String N Rejected Reason / code
103 OrdRejReason number N 5 = Unknown Order
8 = Stale Order
13 = Incorrect quantity
99 = Other
911 TotNumReports number N Must be 0 to indicate there is no match, otherwise this tag will not be populated.
912 LastRptRequested number N Must be Y.

See ExecutionReport for details.

MarketDataRequest (35=V)

Subscribes to Market Data: Order Book, Trades.

Tag Name Type Required Description
262 MDReqID string Y Market Data channel. Possible values:
book.{Symbol}.{MarketDepth}, e.g. book.BTC_USDT.50
trade.{Symbol}, e.g. trade.ETH_CRO
263 SubscriptionRequestType string Y Possible values:
1: Subscribe
2: Unsubscribe
264 MarketDepth number Y Can be either 1 or 150 when 262 = book.{Symbol}.{MarketDepth}.
Must be 0 when 262 = trade.{Symbol}
265 MDUpdateType number Y Must be 1: Incremental Refresh.
266 AggregatedBook boolean Y Must be Y when 262 = book.{Symbol}.{MarketDepth}
Must be N when 262 = trade.{Symbol}
547 MDImplicitDelete boolean Y Must be N.
267 NoMDEntryTypes number Y Must be 2 when 262 = book.{Symbol}.{MarketDepth}
Must be 1 when 262 = trade.{Symbol}
=> 269 MDEntryType string Y Possible values: 0: Bid, 1: Offer, 2: Trade.

When 262 = book.{Symbol}.{MarketDepth}, both 0 and 1 must be in the repeating group.
When 262 = trade.{Symbol}, 2 must be in the repeating group.
146 NoRelatedSym number Y Must be 1
=> 55 Symbol string Y Must be equal to {Symbol} as in 262.

Response Attributes

See MarketDataIncrementalRefresh and MarketDataRequestReject for details.

MarketDataIncrementalRefresh (35=X)

Response for Market Data Request.

Tag Name Type Required Description
262 MDReqID string Y Market Data channel. Possible values:
book.{Symbol}.{MarketDepth}, e.g. book.BTC_USDT.50
trade.{Symbol}, e.g. trade.ETH_CRO
278 MDEntryID string N i. Trade ID when 269 = 2.
ii. sequence id in order book
280 MDEntryRefID string N Referring to previous sequence id (MDEntryID) in order book
55 Symbol string Y
10273 MDEntryTimeMs number Y Same meaning as 272 and 273, with representation as epoch in milliseconds
268 NoMDEntries number Y Number of market data entries.
=> 279 MDUpdateAction string Y Possible values: 0: New, 1: Update, 2: Delete.
=> 269 MDEntryType string Y Possible values: 0: Bid, 1: Offer, J: Empty Book, 2: Trade.

When 269 = J, please clean the entire order book.
=> 270 MDEntryPx number Y
=> 271 MDEntrySize number Y
=> 346 NumberOfOrders number N
=> 10851 TakerSide string N Similar meaning to 851 to indiate the liquidity taker side.

1: Buyer is the taker
2: Seller is the taker.
=> 880 TrdMatchID string N Trade match ID

MarketDataRequestReject (35=Y)

The Market Data Request Reject is used when the broker cannot honor the Market Data Request , due to business or technical reasons. Brokers 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 Name type Required Description
262 MDReqID Number Y Must refer to the MDReqID <262> of the request.
281 MDReqRejReason String N Reject reason
816 NoAltMDSource Number N Number of market data source
=>817 AltMDSourceID Number N
58 Text String N
354 EncodedTextLen Number N Must be set if EncodedText <355> field is specified and must immediately precede it.
355 EncodedText String N Encoded (non-ASCII characters) representation of the Text <58> field in the encoded format specified via the MessageEncoding <347> field.

SecurityDefinitionRequest (35=c)

The FIX Client could request the details of a tradable instrument by sending a Security Definition Request (35=c) message to the gateway. The Symbol (55) is used as the unique identifier of an instrument.

Tag Name type Req. Description
320 SecurityReqID String Y The unique identifier of this request
321 SecurityRequestType String Y Required for snapshot and/or subscribe.
Valid values:
0 = Request Security identity and specifications
( ie. Symbol tag55 is required )
55 Symbol String Y Required for snapshot and/or subscribe.
263 SubscriptionRequestType String Y Valid values:
0 = Snapshot
1 = Snapshot and subscribe this security definition changes
2 = Unsubscribe

Response Attributes

See SecurityDefinition for details.

SecurityDefinition (35=d)

After received 35=c, gateway will acknowledge and send a Security Definition (35=d) message to the client. The subscribed clients will be sent a Security Definition (35=d) message for each new instrument. Client will receive multiple Security Definition (35=d) when receiving (35=c,321=3)

Tag Name type Req. Description
320 SecurityReqID String Y The unique identifier of this request from 35=d
322 SecurityResponseID String Y Identifier for the Security Definition <d> message
323 SecurityResponseType String Y 1 = Accept security proposal as is
55 Symbol String Y The fully qualified product symbol
870 NoInstrAttrib Number N Number of repeating InstrAttrib group entries.
=>871 InstrAttribType Number N Type of instrument attribute
Valid values:

1000=Display name
1001=Base currency
1002=Quote currency
1003=Quantity Decimal
1004=Quote Decimal
1005=Price ticksize
1006=Quantity ticksize
1007=Max leverage
1008=Tradable
1009=Expiry timestamp ms
1010=Beta Product
1011=Margin Buy Enabled
1012=Margin Sell Enabled
=>872 InstrAttribValue String N Value of instrument attribute, if applicable

Snapshot/Full Refresh (35=W)

The Market Data messages are used as the response to a Market Data Request 'V' message. In all cases, one Market Data message refers only to one Market Data Request 'V'. 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 Name Type Required Description
262 MDReqID string Y Market Data channel. Possible values:
book.{Symbol}.{MarketDepth}, e.g. book.BTC_USDT.50
trade.{Symbol}, e.g. trade.ETH_CRO
278 MDEntryID string N i. Trade ID when 269 = 2.
ii. sequence id in order book
55 Symbol string Y
10273 MDEntryTimeMs number Y Same meaning as 272 and 273, with representation as epoch in milliseconds
268 NoMDEntries number Y Number of market data entries.
=> 279 MDUpdateAction string Y Possible values: 0: New, 1: Update, 2: Delete.
=> 269 MDEntryType string Y Possible values: 0: Bid, 1: Offer, J: Empty Book, 2: Trade.

When 269 = J, please clean the entire order book.
=> 270 MDEntryPx number Y
=> 271 MDEntrySize number Y
=> 346 NumberOfOrders number N

SecurityListRequest (35=x)

Security List is an aggregation of instrument definitions. It is useful when the FIX Client want get all instrument definitions, or expect to get numerous instrument definitions in one go. The FIX Client should send a Security List Request (35=x) message to the gateway.

Tag Name type Req. Description
320 SecurityReqID String Y The unique identifier of this request
559 SecurityListRequestType String Y Required for snapshot and/or subscribe. Valid
values:
0 = Symbol (tag55)
263 SubscriptionRequestType Number Y Valid values:
0 = Snapshot
1 = Snapshot and subscribe the security list changes
2 = Unsubscribe

Response Attributes

See SecurityList for details.

SecurityList (35=y)

After receiving 35=x, the Gateway will acknowledge this message by sending one or more Security List (35=y) message, because the gateway divides the list of instruments into chunks, and each chunk will construct a Security List (35=y) message so as to avoid an excessively large Security List (35=y) message. The subscribed clients will be sent a Security Definition (35=d) message for each new instrument. ie. One instrument with one 35=y only.

Tag Name type Req. Description
320 SecurityReqID String Y The unique identifier of Security List
i.e. From (35=x) request message
322 SecurityResponseID String Y Identifier for the Security List response message
560 SecurityRequestResult Number Y Valid values:
0 = Valid
2 = Not found
3 = Not authorised
4 = Unavailable
893 LastFragment String Y Y = Last message in a sequence of messages
N = Not last message in a sequence of messages
146 NoRelatedSym Number Y Specifies the number of repeating symbols (instruments) specified
=> 55 Symbol String Y The fully qualified product symbol
=> 870 NoInstrAttrib Number N Number of repeating InstrAttrib group entries.
=> => 871 InstrAttribType Number N Type of instrument attribute
Valid values:

1000=Display name
1001=Base currency
1002=Quote currency
1003=Quantity Decimal
1004=Quote Decimal
1005=Price ticksize
1006=Quantity ticksize
1007=Max leverage
1008=Tradable
1009=Expiry timestamp ms
1010=Beta Product
1011=Margin Buy Enabled
1012=Margin Sell Enabled
=> => 872 InstrAttribValue String N Value of instrument attribute, if applicable

BusinessMessageReject (35=j)

The Business Message Reject message can reject an application-level message which fulfills session-level rules and cannot be rejected via any other means.

Tag Name Type Required Description
35 MsgType string Y Must be 35=j for Business Message Reject
45 RefSeqNum string Y MsgSeqNum <34> of rejected message
372 RefMsgType string Y The MsgType <35> of the FIX message being referenced.
379 BusinessRejectRefID string N The value of the business-level 'ID' field on the message being referenced.
380 BusinessRejectReason string Y Code to identify reason for a Business Message Reject message.

0 = Other
1 = Unkown ID
2 = Unknown Security
3 = Unsupported Message Type
4 = Application not available
5 = Conditionally Required Field Missing
6 = Not authorized
7 = DeliverTo firm not available at this time
58 Text string N Business Message Reject reason
19 ExecRefID string N For CDC internal reference only