NAV Navbar

Introduction

Overview

The information in the FIX API specification describes the adaptation of the standard FIX 5.0 for market participants to interact with the Zero Hash CLOB. FIX tags, as described in detail on the Financial Information Exchange Protocol Committee website, www.fixprotocol.org as well as custom tags are used extensively in this document and the reader should familiarize themselves with the latest updates to this release. If an application message in Financial Information Exchange Protocol version 5.0, or previous FIX versions, is not included in this document, the message is ignored.

The FIX API specification is separated into three categories:

Our FAQ page contains helpful information relating to FIX API - FIX API Help Centre

Version: 1.4.0

Rate Limits

The Zero Hash API is rate limited to prevent abuse that would degrade our ability to maintain consistent API performance for all users.

The default FIX Order Entry API rate limit is 50 requests per session per second. There are no rate limits applied on the FIX Market Data API. The rate limits can be adjusted as needed upon request.

Changelog

Recent changes and additions to Zero Hash CLOB API.

2024-02-05

2023-05-29

2023-05-10

2023-03-07

2022-09-01

Connectivity

To connect to the Zero Hash CLOB via FIX API, clients must have their source IP address whitelisted and establish a secure SSL connection to the FIX gateway. If your FIX implementation does not support establishing a SSL connection natively, you will need to setup a local proxy such as stunnel to establish a secure connection to the FIX gateway. To request these details and whitelist your source IP addresses, clients can contact [email protected].

Production Environment

The Zero Hash FIX sessions start on Mondays at 16:30 EST.
FIX message sequence numbers reset on Mondays at 16:00 EST.

Certification Environment

The Zero Hash FIX sessions start on Mondays at 14:30 EST.
FIX message sequence numbers reset on Mondays at 14:00 EST.

Sessions are created with Cancel on Disconnect enabled by default. Further Cancel On Disconnect options are available and explained in our FAQ - FIX API Help Centre. If a platform requires to change their default setting, they should raise the request to [email protected].

For testing in our Certification environment, Zero Hash will share the following details;

For access to Market Data over FIX use;

For access to Drop Copy Data over FIX use;

If whitelisting a DNS record for outbound traffic is not possible by a member, Zero Hash can support creating FIX sessions with a static IP address instead of a DNS record.


Session Level Messages

Standard Header

Fields that go at the beginning of every message.

Tag Field Name Required Note
8 BeginString Yes Must be set to FIXT.1.1 as this field represents the session version in FIX version 5.0. The application version gets specified in Logon message's DefaultApplVerID (1137) tag
9 BodyLength Yes Message length in bytes up to the checksum field, must be the second field in message
35 MsgType Yes The type of message proceeding the header, must be the third field in the message
49 SenderCompID Yes Provided by Zero Hash
56 TargetCompID Yes Static value for all sessions. ZERO
34 MsgSeqNum Yes Monotonically increasing sequence number
52 SendingTime Yes UTC time that the order was sent down to nanosecond resolution in the format e.g. 20230528-07:49:11.843265786. Zero Hash supports receiving in milisecond and nanosecond


Standard Trailer

Fields that go at the end of every message

Tag Field Name Required Note
10 CheckSum Yes Three byte checksum calculated by summing every byte in the message up to and not including the checksum field itself


Logon (A)

Example Message

Client
8    =  FIXT.1.1
9    =  80
35   =  A
34   =  1
49   =  YOURSENDERCOMP
52   =  20220911-00:01:47.190
56   =  ZERO
98   =  0
108  =  60
141  =  Y
1137 =  9
10   =  118

Gateway
8    =  FIXT.1.1
9    =  86
35   =  A
34   =  1
49   =  ZERO
52   =  20220911-00:01:47.237480372
56   =  YOURSENDERCOMP
98   =  0
108  =  60
141  =  Y
1137 =  9
10   =  182

First message that is required immediately upon connection to authenticate the connection.

Tag Field Name Required Note
Standard Header MsgType = A
98 EncryptMethod Yes Must be 0
108 HeartBtInt Yes Usually set to 30 seconds. If not heartbeat sent with the interval sepcified in this message, Zero Hash will initiate a Test Request. If the client does not respond with a heartbeat after the Test Request the session will be terminated.
141 ResetSeqNumFlag - Clients can request to reset their Sequence Number at any time
1137 DefaultApplVerID Yes Contains the version of the FIX protocol the exchange uses. Only FIX50SP2 is supported. Supported values: 9 = FIX50SP2
Standard Trailer


Logout (5)

Example Message

Client
8  =  FIXT.1.1
9  =  53
35 =  5
34 =  6
49 =  YOURSENDERCOMP
52 =  20230307-13:24:29.863406207
56 =  ZERO
10 =  156

Gateway
8  =  FIXT.1.1
9  =  61
35 =  5
34 =  7
49 =  ZERO
52 =  20230528-07:57:52.522836006
56 =  YOURSENDERCOMP
10 =  160

The Logout message initiates or confirms the termination of a FIX session.

The FIX gateway will receive and generate logout messages as required by the FIX Protocol. The gateway follows the prescribed sequence of messages for the proper termination of the session.

Upon receipt of a Logout message:
1. A confirming logout message will be sent by the gateway to the client; then,
2. The session will be disconnected. The FIX gateway will not initiate a logoff except when performing system maintenance or a severe error has occurred.

Tag Field Name Required Note
Standard Header MsgType = 5
58 Text - Free format text string
Standard Trailer


Heartbeat (0)

Example Message

Client
8  =  FIXT.1.1
9  =  57
35 =  0
34 =  841
49 =  YOURSENDERCOMP
52 =  20230307-13:24:29.863406207
56 =  ZERO
10 =  087

Gateway
8  =  FIXT.1.1
9  =  63
35 =  0
34 =  849
49 =  ZERO
52 =  20220911-14:09:48.786045303
56 =  YOURSENDERCOMP
10 =  150

This section indicates the message intended to monitor the status of the communications link during periods of inactivity.

The FIX market data accepts and generates Heartbeat messages as per the FIX specification.

• Inbound: Handled as specified
• Outbound: In response to a test request or timeout.
• Response: None

The heartbeat message should be sent if agreed upon Heartbeatinterval has elapsed since the last message sent.

Tag Field Name Required Note
Standard Header MsgType = 0
Standard Trailer


Reject (3)

Example Message

Gateway
8   =  FIXT.1.1
9   =  145
35  =  3
34  =  43
49  =  ZERO
52  =  20230528-08:39:28.984789276
56  =  YOUSENDERCOMP
45  =  42
58  =  Value is incorrect (out of range) for this tag
371 =  40
372 =  D
373 =  5
10  =  130

A session level reject message sent when the FIX session can't process a message.

Tag Field Name Required Note
Standard Header MsgType = 0
45 RefSeqNum Yes The MsgSeqNum of the referenced message that was rejected
371 RefTagID Yes The tag number of the FIX field referenced in the reject
372 RegMsgTyp Yes The MsgType of the FIX message referenced in the reject
373 SessionRejectReason Yes A code to quickly identify common reasons for a reject
58 Text Yes A message explaining why the message was rejected
Standard Trailer



FIX Order Entry Messages

The Zero Hash CLOB will respond to any new order messages with execution reports. Example order messages and execution report responses are available below.

This section outlines the FIX messages, how they are supported, and to what extent the business data is translated within the FIX Gateway.

New Order - Single (D)

Example Messages

Client - BTC/USD Buy Limit GTC Order for OrderQty 0.01 at Price of 19000.50

8   =   FIXT.1.1
9   =   254
35  =   D
34  =   426
49  =   YOURSENDERCOMP
50  =   [ParticipantId]
52  =   20230307-13:24:29.863406207
56  =   ZERO
1   =   [Account]
11  =   3637983906161824000
18  =   R
21  =   1
22  =   8
38  =   0.01
40  =   2
44  =   19000.50
48  =   BTC/USD
54  =   1
55  =   BTC/USD
58  =   ZH Testing Trades
59  =   1
60  =   20230307-13:24:29.863406207
167 =   CS
10  =   007


Gateway - Execution Reports

ER NEW
8   =  FIXT.1.1
9   =  394
35  =  8
34  =  11
49  =  ZERO
52  =  20220913-06:09:10.076887737
56  =  YOURSENDERCOMP
57  =  [ParticipantId]
1   =  [Account]
6   =  0.000000000
11  =  3637983906161824000
14  =  0.00000000
17  =  1569568851483602944
22  =  8
31  =  0.00
32  =  0.00000000
37  =  1569568851307696128
38  =  0.01000000
39  =  0
40  =  2
44  =  19000.00
48  =  BTC/USD
54  =  1
55  =  BTC/USD
59  =  0
60  =  20220913-06:09:10.029186377
99  =  0.00
150 =  0
151 =  0.01000000
581 =  14
582 =  4
10  =  130

ER FILL
8   =   FIXT.1.1
9   =   408
35  =   8
34  =   13
49  =   ZERO
52  =   20220913-06:09:10.079060678
56  =   YOURSENDERCOMP
57  =   [ParticipantId]
1   =   [Account]
6   =   22671.612500000
11  =   3637983906161824000
14  =   0.01000000
17  =   1569568851483602949
22  =   8
31  =   18740.25
32  =   0.01000000
37  =   1569568851307696128
38  =   0.01000000
39  =   2
40  =   2
44  =   19000.00
48  =   BTC/USD
54  =   1
55  =   BTC/USD
59  =   0
60  =   20220913-06:09:10.029186377
99  =   0.00
150 =   F
151 =   0.00000000
381 =   19000.00
581 =   14
582 =   4
828 =   0
1057 =  Y
10  =   103

This message is used to submit an order to the CLOB. The FIX Gateway will respond with an Execution Report or Business Message Reject.

Tag Field Name Required Note
Standard Header MsgType = D
50 SenderSubID Yes Participant ID created at Zero Hash with specific relationships on the CLOB
1 Account Yes Trading Account on the CLOB. This information wil be shared during onboarding
11 ClOrdId Yes Unique identifier of the order. Must be unique for each session
18 ExecInst - 6 = Post Only (Participate Don't Initiate)
c = Ignore Price Validity Checks (To liquidate account)
21 HandlInst Yes 1 = Automated execution order, private, no Broker intervention
2 = Automated execution order, public Broker intervention OK
3 = Manual order, best execution
22 SecurityIDSource Yes 8 = Exchange Symbol
38 OrderQty Yes The amount of the base asset to be transacted e.g. 10.5146. Not Required if field 152 used on Market with left over as Limit order instead
40 OrdType Yes The type of order for the request which can be:
2 = Limit
3 = Stop
4 = Stop Limit
K = Market with left over as Limit
44 Price - The limit price for limit orders of the quote asset e.g. 19000.50 The decimal precision must fall within the requirements for each instrument
48 SecurityID Yes Symbol of the instrument being traded e.g. BTC/USD, ETH/USD, etc
54 Side Yes Side of the order e.g.
1 = Buy
2 = Sell
55 Symbol - Symbol of the instrument being traded e.g. BTC/USD, ETH/USD, etc
59 TimeInForce - Specifies how long the order remains in effect. The following values are supported:
0 = Day
1 = Good Till Cancel
3 = Immediate Or Cancel
6 = Good Till Time
60 TransactTime Yes Time of execution/order creation. UTC time in datetime to milisecond or nanosecond format
99 StopPx - Specifies the quote price at which the order activates for Stop order types
126 ExpireTime - Required if TimeInForce = 6. UTC time in datetime to milisecond or nanosecond format
152 CashOrderQty - Can be used to specify dollar value to buy or sell on Market with left over as Limit orders instead of OrdQty(38)
528 OrderCapacity Conditionally OrderCapacity identifies the person submitting the trade. Values supported are :
A = Agency
G = Proprietary
I = Individual
P = Principle
R = Riskless Principle
W = Agent for Other Member
582 CustOrderCapacity Conditionally CustOrderCapacity identifies the customer/beneficiary of the trade
1 = Member trading for their own account
2 = Clearing Firm trading for its proprietary account
3 = Member trading for another member
4 = All other
5 = Retail Customer
6127 ConditionTriggerMethod - Specifies the trigger reference price for Stop Order
2 = Last Trade Price (Default)
5 = Settlement Price
8000 SelfMatchPreventionInstruction - The following values specify what to do when two orders submitted by the same portfolio attempt to match:
N = Cancel Aggressing Order
O = Cancel Resting Order
Standard Trailer -


Order Cancel/Replace Request (G)

Example messages

Client
8    = FIXT.1.1
9    = 256
35   = G
34   = 219
49   = YOURSENDERCOMP
50   = [ParticipantId]
52   = 20230307-17:01:04.493
56   = ZERO
1    = [Account]
11   = 15638138052644930000
21   = 1
22   = 8
38   = 0.002
40   = 2
41   = 1124638138050559054000
44   = 22100
48   = BTC/USD
54   = 1
55   = BTC/USD
59   = 1
60   = 20230307-17:01:04.493123
167  = CS
10   = 245

Gateway
8    = FIXT.1.1
9    = 394
35   = 8
34   = 220
49   = ZERO
52   = 20230307-17:01:04.575041837
56   = YOURSENDERCOMP
57   = [ParticipantId]
1    = [Account]
6    = 0.000000000
11   = 15638138052644930000
12   = 221.00
13   = 1
14   = 0.00000000
17   = 1633150786224631808
22   = 8
31   = 0.00
32   = 0.00000000
37   = 1633149946840895488
38   = 0.00200000
39   = 0
40   = 2
41   = 1124638138050559054000
44   = 22100.00
48   = BTC/USD
54   = 1
55   = BTC/USD
59   = 1
60   = 20230307-17:01:04.567199067
99   = 0.00
150  = 5
151  = 0.00200000
582  = 4
10   = 032

Used to modify a parameter of an existing order that is still live on exchange. Only the price and quantity can be modified.

Tag Field Name Required Note
Standard Header MsgType = G
50 SenderSubID Yes Part of the Header. Participant ID created at Zero Hash with specific relationships on the CLOB Must match field 50 on the message that the OrigClOrdID references
1 Account Yes Trading Account on the CLOB. This information wil be shared during onboarding. Must match field 1 on the message that the OrigClOrdID references
11 ClOrdId Yes Unique identifier of the order. Must be unique for each session
21 HandlInst Yes 1 = Automated execution order, private, no Broker intervention
2 = Automated execution order, public, Broker intervention OK
3 = Manual order, best execution
22 SecurityIDSource Yes 8 = Exchange Symbol
38 OrderQty Yes The amount of the base asset to be transacted e.g. 10.5146
40 OrdType Yes Must match OrdType on the message that the OrigClOrdID references
41 OrigClOrdId Yes An identifier matching the ClOrdID from the OrderSingle or OrderCancelReplaceRequest that this request applies to
44 Price - Required for limit OrdTypes
48 SecurityID Yes Must match the symbol on the message that the OrigClOrdID references
54 Side Yes Must match the side on the message that the OrigClOrdID references e.g.
1 = Buy
2 = Sell
55 Symbol - Must match the symbol on the message that the OrigClOrdID references
60 TransactTime Yes Time of execution/order creation. UTC time in datetime to milisecond or nanosecond format
99 StopPx - Specifies the quote price at which the order activates for Stop order types
126 ExpireTime - Required if TimeInForce = GTT (UTC time in datetime format - 17:18:02.544)
Standard Trailer


Order Cancel Request (F)

Example Message

Client
8    =    FIXT.1.1
9    =    238
35   =    F
34   =    76
49   =    YOURSENDERCOMP
50   =    [ParticipantId]
52   =    20230307-13:24:29.863406207
56   =    ZERO
1128 =    9
1    =    [Account]
11   =    16329117-3bf0-4684-b74a-54f44adbbe84
38   =    0.02
41   =    e31e8ba5-2759-4255-8f08-91c1d18b9ebb
54   =    1
55   =    BTC/USD
60   =    20220817-13:02:41
10   =    171

Used to cancel an order that is still live on the exchange.

Tag Field Name Required Note
Standard Header MsgType = F
50 SenderSubID Yes Part of the Header. Participant ID created at Zero Hash with specific relationships on the CLOB. Must match field 50 on the message that the OrigClOrdID references
1 Account Yes Trading Account on the CLOB. This information wil be shared during onboarding. Must match field 1 on the message that the OrigClOrdID references
11 ClOrdId Yes Unique identifier of the order. Must be unique for each session
21 HandlInst Yes 1 = Automated execution order, private, no Broker intervention
2 = Automated execution order, public, Broker intervention OK
3 = Manual order, best execution
22 SecurityIDSource Yes 8 = Exchange Symbol
38 OrderQty Yes The amount of the base asset to be transacted e.g. 10.5146
40 OrdType Yes Must match OrdType on the message that the OrigClOrdID references
41 OrigClOrdId Yes An identifier matching the ClOrdID from the OrderSingle or OrderCancelReplaceRequest that this request applies to
48 SecurityID Yes Must match the symbol on the message that the OrigClOrdID references
54 Side Yes Must match the side on the message that the OrigClOrdID references e.g.
1 = Buy
2 = Sell
55 Symbol - Must match the symbol on the message that the OrigClOrdID references
60 TransactTime Yes Time of execution/order creation. UTC time in datetime to milisecond or nanosecond format
Standard Trailer


Execution Report (8)

Example Messages

Gateway
8    = FIXT.1.1
9    = 417
35   = 8
34   = 187
49   = ZERO
52   = 20230528-11:00:32.132756617
56   = YOURSENDERCOMP
57   = [ParticipantId]
1    = [Account]
6    = 1864.410000000
11   = 1648638208684166132000
12   = 0.02
13   = 3
14   = 0.00100000
17   = 1661660653950776772
22   = 8
31   = 1864.41
32   = 0.00100000
37   = 1661694483444862995
38   = 0.00100000
39   = 2
40   = K
44   = 1864.41
48   = ETH/USD
54   = 1
55   = ETH/USD
59   = 1 
60   = 20230528-11:00:32.062042969
99   = 0.00
150  = F
151  = 0.00000000
381  = 1.86
582  = 4
828  = 0
880  = 1661660653950776771
1057 = Y
10   = 138

Sent by the exchange to provide an update on a submitted order.

Tag Field Name Required Note
Standard Header MsgType = 8
57 TargetSubID - Part of the Header. Participant ID created at Zero Hash with specific relationships on the CLOB
1 Account - Trading Account on the CLOB. This information wil be shared during onboarding
6 AvgPx - Calculated average price of all fills on the order
11 ClOrdId - Unique identifier of the order copied from customer's request
12 Commission - The total amount of commissions associated with the order, rounded to two decimal places using banker's rounding
13 CommType - 1 = Per Unit
2 = Percent
3 = Absolute
4 = Percentage Waved Cash Discount
5 = Percentage Waved Enhanced Units
6 = Points Per Bond Or Contract
14 CumQty - Current executed quantity for chain of orders
17 ExecID - Platform assigned execution ID
19 ExecRefID - Reference identifier used with Trade Cancel and Trade Correct execution types
22 IDSource - Identifies class or source of the SecurityID (48) value. Required if SecurityID is specified
31 LastPx - Identifies the price of this (last) fill
32 LastQty - Quantity bought/sold on this (last) fill
37 OrderID - Unique identifier for Order
38 OrderQty - Size of the order. E.G. 10
39 OrdStatus - 0 = New
1 = PartiallyFilled
2 = Filled
4 = Canceled
5 = Replaced
6 = PendingCancel
8 = Rejected
A = PendingNew
C = Expired
E = PendingReplace
40 OrdType - 2 = Limit
3 = Stop
4 = Stop Limit
K = Market with left over as Limit
44 Price - Price per unit of quantity (e.g. per BTC, ETH, etc.)
48 SecurityID Yes Symbol of the instrument being traded e.g. BTC/USD, ETH/USD, etc
54 Side Yes Side of the order e.g.
1 = Buy
2 = Sell
55 Symbol No Symbol of the instrument being traded e.g. BTC/USD, ETH/USD, etc
59 TimeInForce - Specifies how long the order remains in effect. Absence of this field is interpreted as DAY.
60 TransactTime - Time of execution/order creation (UTC Time in datetime format)
99 StopPx - Stop Price
150 ExecType - Describes the specific Execution Report (i.e. Pending Cancel) while OrdStatus (39) will always identify the current order status
151 LeavesQty - Quantity open for further execution
378 ExecRestatementReason - The reason an order has been restated.
381 GrossTradeAmt - Total amount traded (e.g. CumQty (14) * AvgPx (6) ) expressed in units of currency
582 CustOrderCapacity - Capacity of customer placing the order
1 = Member trading for their own account
2 = Clearing Firm trading for its proprietary account
3 = Member trading for another member
4 = All other
828 TrdType - 0 = Regular
880 TrdMatchID - Unique identifier assigned by the CLOB
1057 AggressorIndicator - 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
Standard Trailer


Order Cancel Reject (9)

This message is send when a Order Cancel Request or Order Cancel/Replace Request is rejected

Tag Field Name Required Note
Standard Header MsgType = 9
41 OrigClOrdId - ClOrdID of the previous order.
37 OrdId - Unique Identifier of order assigned by the platform.
11 ClOrdId - Unique identifier of the order. Must be unique for each session.
39 OrdStatus - OrdStatus value after this cancel reject is applied.
102 CxlRejReason - Code to identify reason for cancel rejection.
58 Text - Optional explanation message.
434 CxlRejResponseTo - Unique identifier of the Canceled order.
Standard Trailer


Business Message Reject (j)


Example Messages

Gateway
8    = FIXT.1.1
9    = 110
35   = j
34   = 141 
49   = ZERO 
52   = 20221005-14:53:37.947531192 
56   = YOURSENDERCOMP 
57   = [ParticipantId] 
45   = 140 
58   = User Not Found 
372  = D 
380  = 6 
10   = 051

An application level reject message sent when the FIX session can't process a message.

Tag Field Name Required Note
Standard Header MsgType = j
45 RefSeqNum - Reference Sequence Number
58 Text - A message explaining why the message was rejected.
372 RefMsgType - Reference Message type
380 BusinessRejectReason - 0 = OTHER
1 = UNKNOWN_ID
18 = INVALID_PRICE_INCREMENT
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
379 BusinessRejectRefID - Rejection ID
Standard Trailer


FIX Market Data Messages

The Zero Hash Central Limit Order Book uses Market By Order (MBO) data schema for the FIX market data feed. For more information on MBO market data feed, read our FIX Integration FAQ's.

Security List Request (x)

Example FIX Message

The FIX message would appear as

8   =   FIXT.1.1
9   =   68
35  =   x
34  =   2
49  =   YOURSENDERCOMP-2
52  =   20220914-10:02:28.627
56  =   ZERO
320 =   YOUREQUESTID
559 =   4
10  =   128

Submits a request to get a list of the symbols available to trade on the exchange.

Tag Field Name Required Note
Standard Header MsgType = x
48 SecurityID - Symbol of the instrument being traded e.g. BTC/USD, ETH/USD, etc
55 Symbol - Symbol of the instrument being traded e.g. BTC/USD, ETH/USD, etc
559 SecurityListRequestType - 0 = Symbol
4 = All Symbols
320 SecurityReqID - Request ID
58 Text - Text
Standard Trailer


Security List (y)

Example FIX Message

The FIX message would appear as

8    = FIXT.1.1
9    = 68
35   = y
34   = 2
49   = ZERO
52   = 20220914-10:02:28.627
56   = YOUSENDERCOMP
320  = TEST3
322  = 1663137395821002753
560  = 0
146  = 8
55   = BTC/USD
48   = BTC/USD
22   = 8
167  = FXSPOT
231  = 1
864  = 1
865  = 5
866  = 19700101
868  = StartDate
969  = 0.01
1151 = BTC
15   = USD
1306 = 2
1148 = 60.0
1149 = 30.0
1150 = 27811.39
562  = 0.00000001
55   = ETH/USD
48   = ETH/USD
22   = 8
167  = FXSPOT
231  = 1
864  = 1
865  = 5
866  = 19700101
868  = StartDate
969  = 0.01
1151 = ETH
15   = USD
1306 = 2
1148 = 60.0
1149 = 30.0
1150 = 1903.01
562  = 0.00000001
10   = 240

# Example FIX Message
8=FIXT.1.1|9=1254|35=y|34=11|49=ZERO|52=20230530-07:31:25.338696963|56=YOURSENDERCOMP|320=TEST3|322=1663137395821002753|560=0|146=8|55=BTC/USD|48=BTC/USD|22=8|167=FXSPOT|231=1|864=1|865=5|866=19700101|868=StartDate|969=0.01|1151=BTC|15=USD|1306=2|1148=60.0|1149=30.0|1150=27811.39|562=0.00000001|55=ETH/USD|48=ETH/USD|22=8|167=FXSPOT|231=1|864=1|865=5|866=19700101|868=StartDate|969=0.01|1151=ETH|15=USD|1306=2|1148=60.0|1149=30.0|1150=1903.01|562=0.00000001|55=BCH/USD|48=BCH/USD|22=8|167=FXSPOT|231=1|864=1|865=5|866=19700101|868=StartDate|969=0.01|1151=BCH|15=USD|1306=2|1148=60.0|1149=30.0|1150=114.99|562=0.00000001|55=LTC/USD|48=LTC/USD|22=8|167=FXSPOT|231=1|864=1|865=5|866=19700101|868=StartDate|969=0.01|1151=LTC|15=USD|1306=2|1148=60.0|1149=30.0|1150=91.46|562=0.00000001|55=WBTC/USD|48=WBTC/USD|22=8|167=FXSPOT|231=1|864=1|865=5|866=19700101|868=StartDate|969=0.01|1151=WBTC|15=USD|562=0.00000001|55=BTC/AUD|48=BTC/AUD|22=8|167=FXSPOT|231=1|864=1|865=5|866=19700101|868=StartDate|969=0.01|1151=BTC|15=AUD|562=0.00000001|55=ETH/AUD|48=ETH/AUD|22=8|167=FXSPOT|231=1|864=1|865=5|866=19700101|868=StartDate|969=0.01|1151=ETH|15=AUD|562=0.00000001|55=WBTC/AUD|48=WBTC/AUD|22=8|167=FXSPOT|231=1|864=1|865=5|866=19700101|868=StartDate|969=0.01|1151=WBTC|15=AUD|562=0.00000001|10=240


A response to a SecurityListRequest that includes information about the requested symbols.

Tag Field Name Required Note
Standard Header MsgType = y
320 SecurityReqID - Request ID
322 SecurityResponseID -
560 SecurityRequestResult -
146 NoRelatedSym -
55 Symbol - Symbol of the instrument being traded e.g. BTC/USD, ETH/USD, etc
48 SecurityId - Symbol of the instrument being traded e.g. BTC/USD, ETH/USD, etc
22 SecurityId -
167 SecurityType -
231 ContractMultiplier -
864 NoEvents -
865 EventType -
866 EventDate -
868 EventText -
969 MinPriceIncrement -
1151 SecurityGroup -
15 Currency -
1306 PriceLimitType -
1148 LowLimitPrice -
1149 HighLimitPrice -
1150 TradingReferencePrice -
562 MinTradeVol -
58 Text - Text
Standard Trailer


Market Data Request (V)

# Market Data Request (V)
8   =   FIXT.1.1
9   =   133
35  =   V
34  =   306
49  =   YOURSENDERCOMP
52  =   20220915-09:58:59.011
56  =   ZERO
146 =   1
55  =   BTC/USD
48  =   BTC/USD
22  =   8
262 =   ZERO
263 =   1
264 =   2
267 =   3
269 =   0
269 =   1
269 =   2
10  =   093

# Example FIX Message
8=FIXT.1.1|9=138|35=V|34=627|49=C-SENDER-4|52=20230418-10:31:53.613|56=ZERO 262=KF-TEST-1|263=1|264=0|146=1|55=BTC/USD|48=BTC/USD|22=8|267=3|269=0|269=1|269=2|10=053

Sent by the client to subscribe or unsubscribe to market data for a given symbol.

Tag Field Name Required Note
Standard Header Yes MsgType = V
55 Symbol - Symbol of the instrument being traded e.g. BTC/USD, ETH/USD, etc
48 SecurityId - Symbol of the instrument being traded e.g. BTC/USD, ETH/USD, etc
22 SecurityIDSource Yes 8 = Exchange Symbol
146 NoRelatedSym Yes The number of symbols in the repeating group defined below. If unspecified or set to 0 the request applies to all symbols
262 MDReqID Yes The MDReqID of the MarketDataRequest message.
263 SubscriptionRequestType Yes 0 = Snapshot
1 = Subscribe (Snapshot + Updates)
2 = Unsubscribe
264 MarketDepth Yes How many price levels from BBO inclusive to include for the market data snapshot and updates.Valid values:
0 = Full Book depth
1 = Top of Book (Default)
2 and above = book depth (number of levels)
267 NoMDEntryTypes Yes Number of MDEntryType fields requested.
269 MDEntryType - Type of market data entry. Valid values:
0 = Bid
1 = Offer
2 = Trade
10 Standard Trailer Yes


Market Data Snapshot (W)

# Market Data Response
8    =  FIXT.1.1
9    =  1187
35   =  W
34   =  8819
49   =  ZERO
52   =  20220915-09:58:59.131087940
56   =  YOURSENDERCOMP
22   =  8
48   =  BTC/USD
55   =  BTC/USD
167  =  NONE
262  =  ZERO
268  =  11
269  =  0
270  =  20000.00
271  =  0.01000000
272  =  20220915
273  =  09:58:58.701896604
59   =  1
37   =  1570062592651415552
278  =  1570062592651415552
40   =  2
269  =  0
270  =  19931.67
271  =  0.00775000
272  =  20220915
273  =  09:58:58.701896604
59   =  1
37   =  1570351436330594304
278  =  1570351436330594304
40   =  2
269  =  0
270  =  19873.28
271  =  0.01550000
272  =  20220915
273  =  09:58:58.701896604
59   =  1
37   =  1570351460967936000
278  =  1570351460967936000
40   =  2
269  =  1
270  =  20335.34
271  =  0.00625000
272  =  20220915
273  =  09:58:58.701896604
59   =  1
37   =  1570351423974174720
278  =  1570351423974174720
40   =  2
269  =  1
270  =  20393.72
271  =  0.01250000
272  =  20220915
273  =  09:58:58.701896604
59   =  1
37   =  1570351448670236672
278  =  1570351448670236672
40   =  2
269  =  2
270  =  44000.00
271  =  0.02500000
272  =  20220914
273  =  18:12:59.695310898
336  =  OPEN
269  =  4
270  =  20523.20
272  =  20220914
273  =  12:44:19.851431213
336  =  OPEN 0    
1070 =  1
269  =  6
270  =  20318.00
272  =  20220914
273  =  12:44:03.897119444
336  =  OPEN
269  =  7
270  =  44000.00
272  =  20220914
273  =  18:12:59.695310898
336  =  OPEN
269  =  8
270  =  20333.32
272  =  20220914
273  =  14:31:11.180821686
336  =  OPEN
269  =  B
270  =  53138.0442000000
271  =  2.43500000
272  =  20220914
273  =  18:12:59.695310898
336  =  OPEN 1     
1151 =  BTC
10   =  238

# Example FIX Message
8=FIXT.1.1|9=2592|35=W|34=633|49=ZERO|52=20230418-10:31:53.671694278|56=C-SENDER-4|22=8|48=BTC/USD|55=BTC/USD|167=FXSPOT|262=KF-TEST-1|1151=BTC|268=22|269=0|270=29642.54|271=1.03125000|272=20230418|273=10:31:53.346704811|59=1|37=1648272887529566208|278=1648272887529566208|40=2|269=0|270=29633.55|271=2.06250000|272=20230418|273=10:31:53.346704811|59=1|37=1648272892308545536|278=1648272892308545536|40=2|269=0|270=29624.57|271=3.09375000|272=20230418|273=10:31:53.346704811|59=1|37=1648272897052987392|278=1648272897052987392|40=2|269=0|270=29615.59|271=4.12500000|272=20230418|273=10:31:53.346704811|59=1|37=1648272901902667776|278=1648272901902667776|40=2|269=0|270=29609.60|271=5.15625000|272=20230418|273=10:31:53.346704811|59=1|37=1648272906566733824|278=1648272906566733824|40=2|269=0|270=29600.62|271=6.18750000|272=20230418|273=10:31:53.346704811|59=1|37=1648272911380045824|278=1648272911380045824|40=2|269=0|270=29591.63|271=7.21875000|272=20230418|273=10:31:53.346704811|59=1|37=1648272916195790848|278=1648272916195790848|40=2|269=0|270=24000.00|271=0.00100000|272=20230418|273=10:31:53.346704811|59=1|37=1635303518873812992|278=1635303518873812992|40=2|269=0|270=20000.00|271=0.34000000|272=20230418|273=10:31:53.346704811|59=1|37=1647962390451802112|278=1647962390451802112|40=2|269=1|270=30241.37|271=1.03125000|272=20230418|273=10:31:53.346704811|59=1|37=1648272885002067968|278=1648272885002067968|40=2|269=1|270=30250.36|271=2.06250000|272=20230418|273=10:31:53.346704811|59=1|37=1648272889964613632|278=1648272889964613632|40=2|269=1|270=30259.34|271=3.09375000|272=20230418|273=10:31:53.346704811|59=1|37=1648272894651494400|278=1648272894651494400|40=2|269=1|270=30268.32|271=4.12500000|272=20230418|273=10:31:53.346704811|59=1|37=1648272899482554368|278=1648272899482554368|40=2|269=1|270=30274.31|271=5.15625000|272=20230418|273=10:31:53.346704811|59=1|37=1648272904255672320|278=1648272904255672320|40=2|269=1|270=30283.29|271=6.18750000|272=20230418|273=10:31:53.346704811|59=1|37=1648272909024595968|278=1648272909024595968|40=2|269=1|270=30292.28|271=7.21875000|272=20230418|273=10:31:53.346704811|59=1|37=1648272913795964928|278=1648272913795964928|40=2|269=2|270=29845.29|271=0.03000000|272=20230417|273=19:09:53.681343752|336=OPEN|269=4|270=23740.21|272=20230301|273=07:27:14.192944939|336=OPEN|1070=1|269=6|270=29871.01|272=20230418|273=10:30:02.088848545|336=OPEN|269=7|270=30601.80|272=20230412|273=10:57:30.721240790|336=OPEN|269=8|270=19894.69|272=20230310|273=14:48:33.657546283|336=OPEN|269=B|270=248417.7740584679|271=10.45056778|272=20230417|273=19:09:53.681343752|336=OPEN|10=225

Sent in response to a MarketDataRequest. This message can contain a 2 sided list of quotes for a single security. It is used to initialize or reset the entire state of the book.

Tag Field Name Required Note
Standard Header - MsgType = W
22 IDSource - Identifies class or source of the SecurityID (48) value. Required if SecurityID is specified
48 SecurityID - Symbol of the instrument being traded e.g. BTC/USD, ETH/USD, etc
55 Symbol - Symbol of the instrument being traded e.g. BTC/USD, ETH/USD, etc
167 SecurityType - Indicates type of security.
262 MDReqID - Unique identifier for Market Data Request
1151 SecurityGroup - An exchange specific name assigned to a group of related securities.
268 NoMDEntries - Number of entries in Market Data message.
269 MDEntryType - Type of market data entry. Valid values:
0 = Bid
1 = Offer
2 = Trade
270 MDEntryPx - Price of the Market Data Entry.
271 MDEntrySize - Qty represented by the Market Data Entry.
272 MDEntryDate - Date of Market Data Entry.
273 MDEntryTime - Time of Market Data Entry.
59 TimeInForce - Specifies how long the order remains in effect. Absence of this field is interpreted as DAY.
37 OrderID - Unique identifier for Order
278 MDEntryID - Unique Market Data Entry identifier.
40 OrdType - Order type. Valid values:
2 = Limit
3 = Stop
4 = Stop Limit
K = Market with left over as Limit
336 TradingSessionID - Identifier for Trading Session.
1070 MDQuoteType - Identifies market data quote type.
10 Standard Trailer -


Market Data Incremental Refresh (X)

# Market Data Response (X)
8    =    FIXT.1.1
9    =    256
35   =    X
34   =    12781
49   =    ZERO
52   =    20220915-12:55:24.957686955
56   =    YOURSENDERCOMP
262  =    ZERO
268  =    1
279  =    0
269  =    0
278  =    1570395862859935744
55   =    BTC/USD
48   =    BTC/USD
22   =    8
167  =    NONE
1151 =    BTC
270  =    19609.77
271  =    0.05425000
272  =    20220915
273  =    12:55:24.937078681
59   =    1
37   =    1570395862859935744
40   =    2
10   =    049

# Example FIX Message
8=FIXT.1.1 | 9=800 | 35=X | 34=20833 | 49=ZERO | 52=20230908-15:38:59.455059283 | 56=YOURSENDERCOMP | 262=2631724e-4e57-11ee-84c4-5fc020c07bf9 | 268=4 | 279=0 | 269=0 | 278=1F4TNV0V3ZM05 | 55=BTC/USD | 48=BTC/USD | 22=8 | 167=FXSPOT | 1151=BTC | 270=25881.91 | 271=0.00019318 | 272=20230908 | 273=15:14:06.329687828 | 59=3 | 37=1F4TNV0V3ZM05 | 40=K | 279=2 | 269=0 | 278=1F4TNV0V3ZM05 | 55=BTC/USD | 48=BTC/USD | 22=8 | 167=FXSPOT | 1151=BTC | 270=25881.91 | 271=0.00000000 | 272=20230908 | 273=15:14:06.329687828 | 59=3 | 37=1F4TNV0V3ZM05 | 40=K | 279=1 | 269=1 | 278=1F4TNSNQK63KB | 55=BTC/USD | 48=BTC/USD | 22=8 | 167=FXSPOT | 1151=BTC | 270=25881.91 | 271=1.49980682 | 272=20230908 | 273=15:14:06.329687828 | 59=0 | 37=1F4TNSNQK63KB | 40=2 | 279=0 | 269=2 | 278=1F52GW8731G00 | 55=BTC/USD | 48=BTC/USD | 22=8 | 167=FXSPOT | 1151=BTC | 270=25881.91 | 271=0.00019318 | 272=20230908 | 273=15:14:06.329687828 | 59=0 | 40=2 | 828=0 | 1003=1F52GW8731G00 | 2446=1 | 10=223 |

Sent in response to a MarketDataRequest. This message provides incremental updates for quote changes in a single security.

Tag Field Name Required Note
Standard Header - MsgType = X
262 MDReqID - Unique identifier for Market Data Request
268 NoMDEntries - Number of entries in Market Data message.
279 MDUpdateAction - Type of Market Data update action.
0 = NEW
1 = CHANGE
2 = DELETE
269 MDEntryType - Type of market data entry. Valid values:
0 = Bid
1 = Offer
2 = Trade
278 MDEntryID - Unique Market Data Entry identifier.
55 Symbol - Symbol of the instrument being traded e.g. BTC/USD, ETH/USD, etc
48 SecurityID - Symbol of the instrument being traded e.g. BTC/USD, ETH/USD, etc
22 IDSource - Identifies class or source of the SecurityID (48) value. Required if SecurityID is specified.
167 SecurityType - Indicates type of security.
1151 SecurityGroup - An exchange specific name assigned to a group of related securities.
272 MDEntryDate - Date of Market Data Entry.
273 MDEntryTime - Time of Market Data Entry.
59 TimeInForce - Specifies how long the order remains in effect. Absence of this field is interpreted as DAY.
37 OrderID - Unique identifier for Order
40 OrdType - Order type. Valid values:
1 = Market
2 = Limit
3 = Stop
4 = Stop Limit
1003 TradeID - Populated on messages with MDEntryType as Trade, 269=2
2446 AggressorSide - Indicates the side ofhe trade the aggressor was on.
1 = BUY
2 = SELL
10 Standard Trailer -

MDFullGrp

Tag Field Name Data Type Accepted Enums
268 NoMDEntries
2446 AggressorSide STRING 1 = BUY
2 = SELL
15 Currency CURRENCY
18 ExecInst MULTICHAR J = SINGLE_EXECUTION_REQUESTED_FOR_BLOCK_TRADE
G = ALL_OR_NONE
6 = PARTICIPATE_DONT_INITIATE
b = STRICT_LIMIT
R = BEST_LIMIT
T = IMMEDIATELY_EXECUTABLE_LIMIT
126 ExpireTime UTCTIMESTAMP
332 HighPx PRICE
31 LastPx PRICE
283 LocationID STRING
333 LowPx PRICE
272 MDEntryDate UTCDATEONLY
278 MDEntryID STRING
270 MDEntryPx PRICE
271 MDEntrySize QTY
273 MDEntryTime UTCTIMEONLY
269 MDEntryType CHAR 0 = BID
1 = OFFER
2 = TRADE
1070 MDQuoteType INT 0 = INDICATIVE
1 = TRADEABLE
2 = RESTRICTED_TRADEABLE
3 = COUNTER
4 = INDICATIVE_AND_TRADEABLE
279 MDUpdateAction CHAR 0 = NEW
1 = CHANGE
2 = DELETE
110 MinQty QTY
286 OpenCloseSettlFlag MULTICHAR 0 = DAILY_OPEN
1 = SESSION_OPEN
2 = DELIVERY_SETTLEMENT_ENTRY
3 = EXPECTED_ENTRY
4 = ENTRY_FROM_PREVIOUS_BUSINESS_DAY
5 = THEORETICAL_PRICE_VALUE
40 OrdType CHAR 2 = LIMIT
3 = STOP
4 = STOP_LIMIT
K = MARKET_WITH_LEFT_OVER_AS_LIMIT
37 OrderID STRING
Parties Component
762 SecuritySubType STRING
58 Text STRING
59 TimeInForce CHAR 0 = DAY
1 = GOOD_TILL_CANCEL
3 = IMMEDIATE_OR_CANCEL
6 = GOOD_TILL_DATE
1003 TradeID STRING
336 TradingSessionID STRING
828 TrdType INT 0 = REGULAR_TRADE (Default)


Drop Copy Messages

Execution Report (8)

Example Messages

Gateway
8    = FIXT.1.1
9    = 417
35   = 8
34   = 187
49   = ZERO
52   = 20230528-11:00:32.132756617
56   = YOUR-DROPCOPY-SENDERCOMP
57   = [ParticipantId]
1    = [Account]
6    = 1864.410000000
11   = 1648638208684166132000
12   = 0.02
13   = 3
14   = 0.00100000
17   = 1661660653950776772
22   = 8
31   = 1864.41
32   = 0.00100000
37   = 1661694483444862995
38   = 0.00100000
39   = 2
40   = K
44   = 1864.41
48   = ETH/USD
54   = 1
55   = ETH/USD
59   = 1 
60   = 20230528-11:00:32.062042969
99   = 0.00
150  = F
151  = 0.00000000
381  = 1.86
582  = 4
828  = 0
880  = 1661660653950776771
1057 = Y
10   = 138

Sent by the exchange to provide an update on a submitted order. Your Drop Copy session will return Execution Report (8) messages only for all order statuses.

Tag Field Name Required Note
Standard Header -
57 TargetSubID -
1 Account -
6 AvgPx -
11 ClOrdId - Unique identifier of the order copied from customer's request
12 Commission - The total amount of commissions associated with the order, rounded to two decimal places using banker's rounding
13 CommType - 1 = Per Unit
2 = Percent
3 = Absolute
4 = Percentage Waved Cash Discount
5 = Percentage Waved Enhanced Units
6 = Points Per Bond Or Contract
14 CumQty - Current executed quantity for chain of orders
17 ExecID - Platform assigned execution ID
19 ExecRefID - Reference identifier used with Trade Cancel and Trade Correct execution types
22 IDSource - Identifies class or source of the SecurityID (48) value. Required if SecurityID is specified.
31 LastPx - Identifies the price of this (last) fill.
32 LastQty - Quantity bought/sold on this (last) fill.
37 OrderID - Unique identifier for Order
38 OrderQty - Size of the order. E.G. 10
39 OrdStatus - 0 = New
1 = PartiallyFilled
2 = Filled
4 = Canceled
5 = Replaced
6 = PendingCancel
8 = Rejected
A = PendingNew
C = Expired
E = PendingReplace
40 OrdType - 2 = Limit
3 = Stop
4 = Stop Limit
K = Market with left over as Limit
44 Price -
48 SecurityID - Symbol of the instrument being traded e.g. BTC/USD, ETH/USD, etc
54 Side - Side of the order e.g.
1 = Buy
2 = Sell
55 Symbol - Symbol of the instrument being traded e.g. BTC/USD, ETH/USD, etc
59 TimeInForce - Specifies how long the order remains in effect. Absence of this field is interpreted as DAY.
60 TransactTime - Time of execution/order creation (UTC Time in datetime format)
99 StopPx - Stop Price
150 ExecType - Describes the specific Execution Report (i.e. Pending Cancel) while OrdStatus (39) will always identify the current order status
151 LeavesQty - Quantity open for further execution.
378 ExecRestatementReason - The reason an order has been restated.
381 GrossTradeAmt - Total amount traded (e.g. CumQty (14) * AvgPx (6) ) expressed in units of currency.
582 CustOrderCapacity - Capacity of customer placing the order
1 = Member trading for their own account
2 = Clearing Firm trading for its proprietary account
3 = Member trading for another member
4 = All other
828 TrdType - 0 = Regular
880 TrdMatchID - Unique identifier assigned by the CLOB
1057 AggressorIndicator 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
Standard Trailer -


Appendix

Below is the appendix for needed components included in Order Executions & Market Data requests:

Instrument

Tag Field Name Required Data Type Accepted Enums
48 SecurityID Yes STRING
22 SecurityIDSource Yes STRING 8 = Exchange Symbol. Currently this is only used for Crypto
167 SecurityType - STRING CS = Common Stock. Currently this is only used for Crypto
55 Symbol - STRING

OrderQtyData

Tag Field Name Required Data Type Accepted Enums
152 CashOrderQty - QTY
38 OrderQty - QTY

Parties

Tag Field Name Required Data Type Accepted Enums
NoPartyIDs -
>448 PartyID - STRING
>447 PartyIDSource - CHAR
1 = KOREAN_INVESTOR_ID
2 = TAIWANESE_QUALIFIED_FOREIGN_INVESTOR_ID_QFII_FID
3 = TAIWANESE_TRADING_ACCT
4 = MALAYSIAN_CENTRAL_DEPOSITORY
5 = CHINESE_INVESTOR_ID
6 = UK_NATIONAL_INSURANCE_OR_PENSION_NUMBER
7 = US_SOCIAL_SECURITY_NUMBER
8 = US_EMPLOYER_OR_TAX_ID_NUMBER
9 = AUSTRALIAN_BUSINESS_NUMBER
A = AUSTRALIAN_TAX_FILE_NUMBER
B = BIC
C = GENERALLY_ACCEPTED_MARKET_PARTICIPANT_IDENTIFIER
D = PROPRIETARY
E = ISO_COUNTRY_CODE
F = SETTLEMENT_ENTITY_LOCATION
G = MIC
H = CSD_PARTICIPANT_MEMBER_CODE
I = DIRECTED_BROKER_THREE_CHARACTER_ACRONYM_AS_DEFINED_IN_ISITC_ETC_BEST_PRACTICE_GUIDELINES_DOCUMENT
N = LEGAL_ENTITY_IDENTIFIER
>452 PartyRole - INT 24 = Customer Account

CommissionData

Tag Field Name Required Data Type Accepted Enums
13 CommType - CHAR 1 = Per Unit
2 = Percent
3 = Absolute
4 = Percentage Waved Cash Discount
5 = Percentage Waved Enhanced Units
6 = Points Per Bond or Contract
12 Commission - FLOAT