NAV Navbar

FIX Order Entry

Overview

This document is designed to provide clients and vendors with the technical specifications required to connect to Seed CX Ltd. using the FIX protocol. The Seed CX FIX API supports order submission for crypto pairs trading both spot and derivative contracts.

Scope

The scope of this document is to define the FIX messages and values supported by the Seed CX FIX API. The document also describes the message flows and the requirements to integrate with the API. Seed CX supports FIX 4.4 standard specifications incorporating fields from later versions of FIX (FIX 5.0 and the latest Extension Packs) where needed. There are a few additional requirements specified in the document that are beyond the standard specifications.

It is assumed that the implementer is familiar with the standard FIX 4.4 specification, including standard requirements and data types used by the protocol.

Supported Message Types

Administrative Messages

The following Administrative message types will be supported under MsgType (35):

Application Messages

The following Applications message types will be supported under MsgType (35):

Inbound Messages (Client → Seed CX)

Outbound Messages (Seed CX → Client)

Sequence Diagrams

The following diagrams summarize the FIX Interface dialogs used in the Seed CX’s FIX Interface.

Connectivity and Logon

The API client must establish a FIX session by sending a Logon (A) message. Seed CX will act as an acceptor for all FIX sessions.

For all inbound messages, SenderCompID (49) is required. For all Application messages, both SenderCompID (49) and SenderSubID (50) fields are required. The values of these fields are bilaterally agreed between Seed CX and the client during the onboarding process.

Seed CX FIX Logon Message Flow

Order Submission and Acknowledgment

Clients can electronically submit their orders to trade spots, options, and forwards through the NewOrderSingle (35=D) message. The message must contain a unique client order identifier in field ClOrdID (11).

An invalid message will be rejected either through an ExecutionReport (35=8) message with OrdStatus (39) having a value of 8 (Rejected), a BusinessMessageReject (35=j) message or a SessionReject (35=3) message.

Upon acceptance of the order, the client will receive an ExecutionReport (35=8) message with a Seed CX assigned order identifier in field OrderID (37) and OrdStatus (39) has a value of 0 (New).

Seed CX NewOrderSingle FIX Message Flow

Order Amendment

The OrderCancelReplaceRequest (35=G) is used to request modification of existing orders. Amendment of quantity, price, TimeInForce, and OrderType (Limit to Market) amendment is supported by Seed CX.

An invalid request will be rejected by an OrderCancelReject (35=9) message.

Upon the acceptance of the amendment request, the client will receive an ExecutionReport (35=8) message with ExecType (150) having a value of 5 (Replaced) and current order status in OrdStatus (39). Please note that the ClOrdID (11) of the order will now refer to the ClOrdID (11) specified in the amendment request.

Seed CX FIX OrderCancelReplaceRequest Message Flow

Order Cancellation

8=FIX.4.4|9=239|35=F|49=YIZUG0TPF6|56=SEEDCX|34=30|50=FKIDMMZZ7YAV|142=US,IL|57=SCXM|52=20181001-15:18:18.339|369=29|41=Order48988|37=319500000000000016|11=Cancel48989|1=FKIDMMZZ7|55=COSP:BTC/USD|54=1|60=20181001-15:18:18|528=A|582=1|1028=N|10=123|
              BeginString    8  =  FIX.4.4
               BodyLength    9  =  239
                  MsgType   35  =  F (ORDER_CANCEL_REQUEST)
             SenderCompID   49  =  YIZUG0TPF6
             TargetCompID   56  =  SEEDCX
                MsgSeqNum   34  =  30
              SenderSubID   50  =  FKIDMMZZ7YAV
         SenderLocationID  142  =  US,IL
              TargetSubID   57  =  SCXM (SCXM)
              SendingTime   52  =  20181001-15:18:18.339
   LastMsgSeqNumProcessed  369  =  29
              OrigClOrdID   41  =  Order48988
                  OrderID   37  =  319500000000000016
                  ClOrdID   11  =  Cancel48989
                  Account    1  =  FKIDMMZZ7
                   Symbol   55  =  COSP:BTC/USD
                     Side   54  =  1 (BUY)
             TransactTime   60  =  20181001-15:18:18
            OrderCapacity  528  =  A (AGENCY)
        CustOrderCapacity  582  =  1 (MEMBER_OWN_ACCOUNT)
     ManualOrderIndicator 1028  =  N
                 CheckSum   10  =  123

The OrderCancelRequest (35=F) message is used to cancel existing orders. An invalid request will be rejected by OrderCancelReject (35=9) message.

Upon the acceptance of the cancellation request, client will receive an ExecutionReport (35=8) message with ExecType (150) having a value of 4 (Canceled) and OrdStatus (39) a value of 4 (Canceled). LeavesQty (151) equaling to 0 will signify that the order doesn’t have any open quantity left in the market and the order has been successfully canceled.

Seed CX FIX OrderCancelRequest Message Flow

Header and Trailer

Seed CX supports the FIX 4.4 specification.

Standard Header

The FIX Header is included on every FIX message sent.

In FIX 4.4 the value in BeginString (8) for the classic session layer is FIX.4.4.

Tag Field Name Data Type Req’d Description
8 BeginString String Y FIX.4.4 for FIX 4.4 protocol version. Must be the first field in the message.
9 BodyLength Length Y Message length, in bytes. Must be the second field in the message.
35 MsgType String Y Inbound message types as defined above. Must be the third field in the message.
49 SenderCompID String Y Company identifier as allocated by Seed CX.
56 TargetCompID String Y Receiver FIX session identifier. Always SEEDCX.
115 OnBehalfOfCompID String N Identifies firm originating message if entered by a third-party. Required for broker participants entering on behalf of a customer.
Not validated by Seed CX.
128 DeliverToCompID String N Identifies targeted firm to receive the message if the message is delivered by a third party.
Value from OnBehalfOfCompID (115) on the inbound message is echoed back.
Not validated by Seed CX.
34 MsgSeqNum SeqNum Y Message sequence number.
50 SenderSubID String N The trading account ID which represents the unique combination of user and CTI code, produced and can be found in SeedPortal.
Conditionally required for Application messages.
The value must be appropriately assigned to the SenderCompID (49).
142 SenderLocationID String N ISO identifier of message originator's location.
Conditionally required for Application messages.
57 TargetSubID String N Identifies specific trading unit. Conditionally required for Application messages.
Supported values:
SCXM = Seed Digital Commodities Market
SCXS = Seed SEF
116 OnBehalfOfSubID String N Identifies operator from the firm originating message, if entered by a third-party.
Required for broker participants entering on behalf of a customer.
Not validated by Seed CX.
144 OnBehalfOfLocationID String N Identifies location of the firm originating message, if entered by a third-party.
Required for broker participants entering on behalf of a customer.
Not validated by Seed CX.
129 DeliverToSubID String N Identifies targeted firm’s operator to receive the message if the message is delivered by a third party. Value from DeliverToCompID (128) on the inbound message is echoed back.
Not validated by Seed CX.
43 PossDupFlag Boolean N Indicates possible retransmission of message with this sequence number. Always Y for re-transmitted messages in response to a Resend Request from Seed CX.
Supported values:
N = Original transmission
Y = Possible duplicate
97 PossResend Boolean N Indicates that message could contain data that has already been transmitted to Seed CX (currently ignored by Seed CX)
Supported values:
N = Original transmission
Y = Possible duplicate
52 SendingTime UTCTimestamp Y Time of message transmission.
122 OrigSendingTime UTCTimestamp N Required for resent messages only, contains the original SendingTime (52).
369 LastMsgSeqNumProcessed SeqNum N The last MsgSeqNum (34) value received and processed. Used to detect a backlog.

Standard Trailer

The FIX Trailer is included on every FIX message sent. Only the CheckSum (10) field is required and the value is handled by the FIX engine.

Tag Field Name Data Type Req’d Description
10 Checksum String Y Checksum of message and end of message delimiter.

Administrative Messages

Logon (35=A)

8=FIX.4.4|9=83|35=A|49=YIZUG0TPF6|56=SEEDCX|34=1|52=20181001-15:14:22.487|369=0|98=0|108=30|141=Y|10=225|
              BeginString    8  =  FIX.4.4
               BodyLength    9  =  83
                  MsgType   35  =  A (LOGON)
             SenderCompID   49  =  YIZUG0TPF6
             TargetCompID   56  =  SEEDCX
                MsgSeqNum   34  =  1
              SendingTime   52  =  20181001-15:14:22.487
   LastMsgSeqNumProcessed  369  =  0
            EncryptMethod   98  =  0 (UNENCRYPTED)
               HeartBtInt  108  =  30
          ResetSeqNumFlag  141  =  Y
                 CheckSum   10  =  225

The Logon (35=A) message is used by a market participant to establish a FIX session with Seed CX. The Logon (35=A) message must be the first message sent by the client requesting to initiate a FIX session. It must be received within 5 seconds from establishing the connection, otherwise the connection will be closed.

A successful logon will result in a Logon (35=A) acknowledgement sent by Seed CX.

Tag Field Name Data Type Req’d Description
Component <StandardHeader>
98 EncryptMethod Int Y Method of encryption.
Not validated by Seed CX.
Supported values:
0 = None
108 HeartBtInt Int Y Heartbeat interval as assigned by the client.
Note: Same value used by both sides.
141 ResetSeqNumFlag Char N Indicates that both sides of the FIX session should reset sequence numbers.
Supported values:
N = No
Y = Yes, reset sequence numbers
Component <StandardTrailer>

Heartbeat (35=0)

The Heartbeat (35=0) message is used by both the initiator and Seed CX during periods of inactivity. The duration of the inactive period is determined by the field HeartBtInt (108) in Logon (35=A) message.

Tag Field Name Data Type Req’d Description
Component <StandardHeader>
112 TestReqID String N Conditionally required if the heartbeat message is generated in response to a TestRequest (35=1) message.
Component <StandardTrailer>

TestRequest (35=1)

Heartbeat (35=0) and TestRequest (35=1) messages are used by Seed CX to monitor the live status of a FIX Session.

In the event of no response within the agreed upon heartbeat interval, HeartBtInt (108), in Logon (35=A) message, a TestRequest (35=1) message will be sent. The client must respond immediately to the TestRequest (35=1) message.

If Seed CX does not receive a response to the TestRequest (35=1) message within the heartbeat interval, it will terminate the FIX session to the counterparty.

Tag Field Name Data Type Req’d Description
Component <StandardHeader>
112 TestReqID String Y TestRequest (35=1) identifier.
Component <StandardTrailer>

ResendRequest (35=2)

ResendRequest (35=2) message is used as per FIX specification.

Tag Field Name Data Type Req’d Description
Component <StandardHeader>
7 BeginSeqNo SeqNum Y Message sequence number of first message in range to be resent. Valid sequence number for session.
16 EndSeqNo SeqNum Y Message sequence number of last message in range to be resent. Specify 0 for all the messages subsequent to a particular message.
Component <StandardTrailer>

Reject (35=3)

8=FIX.4.4|9=173|35=3|49=SEEDCX|56=YIZUG0TPF6|34=5|50=SCXM|142=US,IL|57=FKIDMMZZ7YAV|52=20181001-15:14:52.766813855|369=5|45=5|371=55|373=1|58=The message is missing required fields.|1028=N|10=015|
              BeginString    8  =  FIX.4.4
               BodyLength    9  =  173
                  MsgType   35  =  3 (SESSION_REJECT)
             SenderCompID   49  =  SEEDCX
             TargetCompID   56  =  YIZUG0TPF6
                MsgSeqNum   34  =  5
              SenderSubID   50  =  SCXM
         SenderLocationID  142  =  US,IL
              TargetSubID   57  =  FKIDMMZZ7YAV
              SendingTime   52  =  20181001-15:14:52.766813855
   LastMsgSeqNumProcessed  369  =  5
                RefSeqNum   45  =  5
                 RefTagID  371  =  55
      SessionRejectReason  373  =  1 (REQUIRED_TAG_MISSING)
                     Text   58  =  The message is missing required fields.
     ManualOrderIndicator 1028  =  N
                 CheckSum   10  =  015

The Reject (35=3) message will be sent by Seed CX when a message is received but cannot be properly processed due to session-level rule violation.

Tag Field Name Data Type Req’d Description
Component <StandardHeader>
45 RefSeqNum SeqNum Y MsgSeqNum (34) of the rejected message.
371 RefTagID String N The tag number of the FIX field being referenced.
372 RefMsgType String N The MsgType (35) of the FIX message being referenced.
373 SessionRejectReason Int N Code to identify reason for a session-level Reject (35=3) message.
Supported values:
1 = Required tag missing
5 = Value is incorrect (out of range) for this tag
9 = CompID problem
58 Text String N Provides the reason the message was rejected.
Component <StandardTrailer>

SequenceReset (35=4)

SequenceReset (35=4) message can be used for both Gap Fill or to reset sequence numbers.

Tag Field Name Data Type Req’d Description
Component <StandardHeader>
36 NewSeqNo SeqNum Y New sequence number. The number cannot be lower than the expected sequence number of either side of the connection.
123 GapFillFlag Boolean N Indicates the sequence reset message is replacing messages which will not be resent.
Supported values:
Y = Gap Fill message, MsgSeqNum (34) is valid
N = Sequence Reset, ignore MsgSeqNum (34)
Component <StandardTrailer>

Logout (35=5)

Logout (35=5) message initiates or confirms the termination of a FIX session.

Tag Field Name Data Type Req’d Description
Component <StandardHeader>
58 Text String N Reason for logout.
789 NextExpectedMsgSeqNum SeqNum Y Next expected MsgSeqNum (34) value to be received.
Component <StandardTrailer>

Application Messages

NewOrderSingle (35=D)

# Limit Day Order (40=2, 59=0)

8=FIX.4.4|9=227|35=D|49=YIZUG0TPF6|56=SEEDCX|34=26|50=FKIDMMZZ7YAV|142=US,IL|57=SCXM|52=20181001-15:18:10.913|369=33|11=Order48984|1=FKIDMMZZ7|55=COSP:BTC/USD|54=2|60=20181001-15:18:10.913|38=1|40=2|44=6435|59=0|528=A|582=1|1028=N|10=078|
# Limit Day Order (40=2, 59=0)

              BeginString    8  =  FIX.4.4
               BodyLength    9  =  227
                  MsgType   35  =  D (NEW_ORDER_SINGLE)
             SenderCompID   49  =  YIZUG0TPF6
             TargetCompID   56  =  SEEDCX
                MsgSeqNum   34  =  26
              SenderSubID   50  =  FKIDMMZZ7YAV
         SenderLocationID  142  =  US,IL
              TargetSubID   57  =  SCXM (SCXM)
              SendingTime   52  =  20181001-15:18:10.913
   LastMsgSeqNumProcessed  369  =  33
                  ClOrdID   11  =  Order48984
                  Account    1  =  FKIDMMZZ7
                   Symbol   55  =  COSP:BTC/USD
                     Side   54  =  2 (SELL)
             TransactTime   60  =  20181001-15:18:10.913
                 OrderQty   38  =  1
                  OrdType   40  =  2 (LIMIT)
                    Price   44  =  6435
              TimeInForce   59  =  0 (DAY)
            OrderCapacity  528  =  A (AGENCY)
        CustOrderCapacity  582  =  1 (MEMBER_OWN_ACCOUNT)
     ManualOrderIndicator 1028  =  N
                 CheckSum   10  =  078
# Market FOK Order (40=1, 59=4)

8=FIX.4.4|9=219|35=D|49=YIZUG0TPF6|56=SEEDCX|34=31|50=FKIDMMZZ7YAV|142=US,IL|57=SCXM|52=20181001-15:18:24.751|369=40|11=Order48991|1=FKIDMMZZ7|55=COSP:BTC/USD|54=1|60=20181001-15:18:24.751|38=2|40=1|59=4|528=A|582=1|1028=N|10=220|
# Market FOK Order (40=1, 59=4)

              BeginString    8  =  FIX.4.4
               BodyLength    9  =  219
                  MsgType   35  =  D (NEW_ORDER_SINGLE)
             SenderCompID   49  =  YIZUG0TPF6
             TargetCompID   56  =  SEEDCX
                MsgSeqNum   34  =  31
              SenderSubID   50  =  FKIDMMZZ7YAV
         SenderLocationID  142  =  US,IL
              TargetSubID   57  =  SCXM (SCXM)
              SendingTime   52  =  20181001-15:18:24.751
   LastMsgSeqNumProcessed  369  =  40
                  ClOrdID   11  =  Order48991
                  Account    1  =  FKIDMMZZ7
                   Symbol   55  =  COSP:BTC/USD
                     Side   54  =  1 (BUY)
             TransactTime   60  =  20181001-15:18:24.751
                 OrderQty   38  =  2
                  OrdType   40  =  1 (MARKET)
              TimeInForce   59  =  4 (FILL_OR_KILL)
            OrderCapacity  528  =  A (AGENCY)
        CustOrderCapacity  582  =  1 (MEMBER_OWN_ACCOUNT)
     ManualOrderIndicator 1028  =  N
                 CheckSum   10  =  220

Seed CX supports Limit, Market, and Market with Left Over as Limit orders. All orders are canceled at the end of the day. Please note:

Supported Values for NewOrderSingle (D):

OrdType (40) TimeInForce (59) MinQty (110) ExecInst (18)
1 = Market 3 = IOC (default)
4 = FOK
Supported when IOC, i.e. 59=3
2 = Limit 0 = Day (default)
4 = FOK
6 = Participate don't initiate
Supported when Day, i.e. 59=0
K = Market-to-Limit 0 = Day (default)
3 = IOC
Supported when IOC, i.e. 59=3
Tag Field Name Data Type Req'd Description
Component <StandardHeader>
11 ClOrdID String Y Client assigned unique identifier of an order. Uniqueness must be guaranteed within a single trading day. Should not exceed 30 characters.
1 Account String Y The desk account ID, which is found in SeedPortal. The SenderCompID (49) must be appropriately assigned to the desk identified in Account (1).
18 ExecInst Char N Instructions for order handling.
Supported values:
6 = Participate don't initiate
110 MinQty Qty N Minimum quantity of an order to be executed.
Valid for IOC orders only.
Note: MinQty is not supported on Limit orders on pro-rata or credit-matrix matching order books.
Component <Instrument>
55 Symbol String Y Instrument identifier.
54 Side Char Y Side of an order.
Supported values:
1 = Buy
2 = Sell
60 TransactTime UTCTimestamp Y Timestamp of event submitting the order.
Component <OrderQtyData>
38 OrderQty Qty Y Quantity ordered. This value will be a whole number of units where the unit value will be the standard market size for this instrument.
40 OrderType Char Y Order type.
Supported values:
1 = Market
2 = Limit
K = MTL (market order then unexecuted quantity becomes limit order at last price)
44 Price Price N Required for limit orders.
59 TimeInForce Char N Specifies how long the order remains in effect.
Supported values:
0 = Day (default for Limit Orders if not specified)
3 = IOC (default for Market Orders if not specified)
4 = FOK
528 OrderCapacity Char Y Capacity of the firm placing the order.
Supported values:
A = Agency
G = Proprietary
I = Individual
P = Principal
R = Riskless Principal
W = Agent for other member
582 CustOrderCapacity Int Y Capacity of the customer placing the order.
Supported values:
1 = Member trading from their own account
2 = Member firm trading for its proprietary account
3 = Member trading for another member
4 = All other
1028 ManualOrderIndicator Boolean Y Indicates if order was sent manually or generated by automated logic.
Supported values:
Y = manual
N = automated
1031 CustOrderHandlingInst Char N Defines original source of order.
Supported values:
A = Phone simple
B = Phone complex
C = FCM-provided screen
D = Other-provided screen
E = Client-provided platform controlled by FCM
F = Client-provided platform direct to exchange
G = FCM API or FIX
H = Algo Engine
J = Price at Execution (price added at initial order entry, trading, middle office or time of give-up)
W = Desk, Electronic
Y = Client, Electronic
Component <StandardTrailer>

ExecutionReport (35=8)

# Execution Report (35=8): Acknowledgment (39=0)

8=FIX.4.4|9=307|35=8|49=SEEDCX|56=YIZUG0TPF6|34=34|50=SCXM|142=US,IL|57=FKIDMMZZ7YAV|52=20181001-15:18:10.224643207|369=26|1=FKIDMMZZ7|37=319500000000000013|11=Order48984|17=319500000000000037|150=0|39=0|55=COSP:BTC/USD|54=2|60=20181001-15:18:10.223000000|38=1.0|151=1.0|14=0.0|6=0.0|40=2|44=6435.0|59=0|528=A|582=1|1028=N|10=052|
# Execution Report (35=8): Acknowledgment (39=0)

              BeginString    8  =  FIX.4.4
               BodyLength    9  =  307
                  MsgType   35  =  8 (EXECUTION_REPORT)
             SenderCompID   49  =  SEEDCX
             TargetCompID   56  =  YIZUG0TPF6
                MsgSeqNum   34  =  34
              SenderSubID   50  =  SCXM
         SenderLocationID  142  =  US,IL
              TargetSubID   57  =  FKIDMMZZ7YAV
              SendingTime   52  =  20181001-15:18:10.224643207
   LastMsgSeqNumProcessed  369  =  26
                  Account    1  =  FKIDMMZZ7
                  OrderID   37  =  319500000000000013
                  ClOrdID   11  =  Order48984
                   ExecID   17  =  319500000000000037
                 ExecType  150  =  0 (NEW)
                OrdStatus   39  =  0 (NEW)
                   Symbol   55  =  COSP:BTC/USD
                     Side   54  =  2 (SELL)
             TransactTime   60  =  20181001-15:18:10.223000000
                 OrderQty   38  =  1.0
                LeavesQty  151  =  1.0
                   CumQty   14  =  0.0
                    AvgPx    6  =  0.0
                  OrdType   40  =  2 (LIMIT)
                    Price   44  =  6435.0
              TimeInForce   59  =  0 (DAY)
            OrderCapacity  528  =  A (AGENCY)
        CustOrderCapacity  582  =  1 (MEMBER_OWN_ACCOUNT)
     ManualOrderIndicator 1028  =  N
                 CheckSum   10  =  052
# Execution Report (35=8): Partially-Filled (39=1)

8=FIX.4.4|9=349|35=8|49=SEEDCX|56=YIZUG0TPF6|34=35|50=SCXM|142=US,IL|57=FKIDMMZZ7YAV|52=20181001-15:18:10.224736437|369=26|1=FKIDMMZZ7|37=319500000000000004|11=Order48957|17=319500000000000038|150=F|39=1|55=COSP:BTC/USD|54=1|60=20181001-15:18:10.223000000|38=900000000.0|151=899999997.0|14=3.0|31=6435.0|32=1.0|6=6435.0|40=2|44=6435.0|59=0|528=A|582=1|1028=N|851=1|10=101|
# Execution Report (35=8): Partially-Filled (39=1)

              BeginString    8  =  FIX.4.4
               BodyLength    9  =  349
                  MsgType   35  =  8 (EXECUTION_REPORT)
             SenderCompID   49  =  SEEDCX
             TargetCompID   56  =  YIZUG0TPF6
                MsgSeqNum   34  =  35
              SenderSubID   50  =  SCXM
         SenderLocationID  142  =  US,IL
              TargetSubID   57  =  FKIDMMZZ7YAV
              SendingTime   52  =  20181001-15:18:10.224736437
   LastMsgSeqNumProcessed  369  =  26
                  Account    1  =  FKIDMMZZ7
                  OrderID   37  =  319500000000000004
                  ClOrdID   11  =  Order48957
                   ExecID   17  =  319500000000000038
                 ExecType  150  =  F (TRADE)
                OrdStatus   39  =  1 (PARTIALLY_FILLED)
                   Symbol   55  =  COSP:BTC/USD
                     Side   54  =  1 (BUY)
             TransactTime   60  =  20181001-15:18:10.223000000
                 OrderQty   38  =  900000000.0
                LeavesQty  151  =  899999997.0
                   CumQty   14  =  3.0
                   LastPx   31  =  6435.0
                  LastQty   32  =  1.0
                    AvgPx    6  =  6435.0
                  OrdType   40  =  2 (LIMIT)
                    Price   44  =  6435.0
              TimeInForce   59  =  0 (DAY)
            OrderCapacity  528  =  A (AGENCY)
        CustOrderCapacity  582  =  1 (MEMBER_OWN_ACCOUNT)
     ManualOrderIndicator 1028  =  N
         LastLiquidityInd  851  =  1 (MAKER)
                 CheckSum   10  =  101
# Execution Report (35=8): Fully-Filled (39=2)

8=FIX.4.4|9=333|35=8|49=SEEDCX|56=YIZUG0TPF6|34=36|50=SCXM|142=US,IL|57=FKIDMMZZ7YAV|52=20181001-15:18:10.224835254|369=26|1=FKIDMMZZ7|37=319500000000000013|11=Order48984|17=319500000000000039|150=F|39=2|55=COSP:BTC/USD|54=2|60=20181001-15:18:10.223000000|38=1.0|151=0.0|14=1.0|31=6435.0|32=1.0|6=6435.0|40=2|44=6435.0|59=0|528=A|582=1|1028=N|851=2|10=008|
# Execution Report (35=8): Fully-Filled (39=2)

              BeginString    8  =  FIX.4.4
               BodyLength    9  =  333
                  MsgType   35  =  8 (EXECUTION_REPORT)
             SenderCompID   49  =  SEEDCX
             TargetCompID   56  =  YIZUG0TPF6
                MsgSeqNum   34  =  36
              SenderSubID   50  =  SCXM
         SenderLocationID  142  =  US,IL
              TargetSubID   57  =  FKIDMMZZ7YAV
              SendingTime   52  =  20181001-15:18:10.224835254
   LastMsgSeqNumProcessed  369  =  26
                  Account    1  =  FKIDMMZZ7
                  OrderID   37  =  319500000000000013
                  ClOrdID   11  =  Order48984
                   ExecID   17  =  319500000000000039
                 ExecType  150  =  F (TRADE)
                OrdStatus   39  =  2 (FILLED)
                   Symbol   55  =  COSP:BTC/USD
                     Side   54  =  2 (SELL)
             TransactTime   60  =  20181001-15:18:10.223000000
                 OrderQty   38  =  1.0
                LeavesQty  151  =  0.0
                   CumQty   14  =  1.0
                   LastPx   31  =  6435.0
                  LastQty   32  =  1.0
                    AvgPx    6  =  6435.0
                  OrdType   40  =  2 (LIMIT)
                    Price   44  =  6435.0
              TimeInForce   59  =  0 (DAY)
            OrderCapacity  528  =  A (AGENCY)
        CustOrderCapacity  582  =  1 (MEMBER_OWN_ACCOUNT)
     ManualOrderIndicator 1028  =  N
         LastLiquidityInd  851  =  2 (TAKER)
                 CheckSum   10  =  008
# Execution Report (35=8): Cancel confirmed (39=4)

8=FIX.4.4|9=324|35=8|49=SEEDCX|56=YIZUG0TPF6|34=40|50=SCXM|142=US,IL|57=FKIDMMZZ7YAV|52=20181001-15:18:17.658362511|369=30|1=FKIDMMZZ7|37=319500000000000016|11=Cancel48989|41=Order48988|17=319500000000000043|150=4|39=4|55=COSP:BTC/USD|54=1|60=20181001-15:18:17.656000000|38=1.0|151=0.0|14=0.0|6=0.0|40=2|44=6445.0|59=0|528=A|582=1|1028=N|10=020|
# Execution Report (35=8): Cancel confirmed (39=4)

              BeginString    8  =  FIX.4.4
               BodyLength    9  =  324
                  MsgType   35  =  8 (EXECUTION_REPORT)
             SenderCompID   49  =  SEEDCX
             TargetCompID   56  =  YIZUG0TPF6
                MsgSeqNum   34  =  40
              SenderSubID   50  =  SCXM
         SenderLocationID  142  =  US,IL
              TargetSubID   57  =  FKIDMMZZ7YAV
              SendingTime   52  =  20181001-15:18:17.658362511
   LastMsgSeqNumProcessed  369  =  30
                  Account    1  =  FKIDMMZZ7
                  OrderID   37  =  319500000000000016
                  ClOrdID   11  =  Cancel48989
              OrigClOrdID   41  =  Order48988
                   ExecID   17  =  319500000000000043
                 ExecType  150  =  4 (CANCELED)
                OrdStatus   39  =  4 (CANCELED)
                   Symbol   55  =  COSP:BTC/USD
                     Side   54  =  1 (BUY)
             TransactTime   60  =  20181001-15:18:17.656000000
                 OrderQty   38  =  1.0
                LeavesQty  151  =  0.0
                   CumQty   14  =  0.0
                    AvgPx    6  =  0.0
                  OrdType   40  =  2 (LIMIT)
                    Price   44  =  6445.0
              TimeInForce   59  =  0 (DAY)
            OrderCapacity  528  =  A (AGENCY)
        CustOrderCapacity  582  =  1 (MEMBER_OWN_ACCOUNT)
     ManualOrderIndicator 1028  =  N
                 CheckSum   10  =  020
# Execution Report (35=8): Replace confirmed (39=0, 150=5)

8=FIX.4.4|9=325|35=8|49=SEEDCX|56=YIZUG0TPF6|34=39|50=SCXM|142=US,IL|57=FKIDMMZZ7YAV|52=20181001-15:18:16.436666102|369=29|1=FKIDMMZZ7|37=319500000000000016|11=Replace48988|41=Replace48988|17=319500000000000042|150=5|39=0|55=COSP:BTC/USD|54=1|60=20181001-15:18:16.435000000|38=1.0|151=1.0|14=0.0|6=0.0|40=2|44=6445.0|59=0|528=A|582=1|1028=N|10=141|
# Execution Report (35=8): Replace confirmed (39=0, 150=5)

              BeginString    8  =  FIX.4.4
               BodyLength    9  =  325
                  MsgType   35  =  8 (EXECUTION_REPORT)
             SenderCompID   49  =  SEEDCX
             TargetCompID   56  =  YIZUG0TPF6
                MsgSeqNum   34  =  39
              SenderSubID   50  =  SCXM
         SenderLocationID  142  =  US,IL
              TargetSubID   57  =  FKIDMMZZ7YAV
              SendingTime   52  =  20181001-15:18:16.436666102
   LastMsgSeqNumProcessed  369  =  29
                  Account    1  =  FKIDMMZZ7
                  OrderID   37  =  319500000000000016
                  ClOrdID   11  =  Replace48988
              OrigClOrdID   41  =  Replace48988
                   ExecID   17  =  319500000000000042
                 ExecType  150  =  5 (REPLACED)
                OrdStatus   39  =  0 (NEW)
                   Symbol   55  =  COSP:BTC/USD
                     Side   54  =  1 (BUY)
             TransactTime   60  =  20181001-15:18:16.435000000
                 OrderQty   38  =  1.0
                LeavesQty  151  =  1.0
                   CumQty   14  =  0.0
                    AvgPx    6  =  0.0
                  OrdType   40  =  2 (LIMIT)
                    Price   44  =  6445.0
              TimeInForce   59  =  0 (DAY)
            OrderCapacity  528  =  A (AGENCY)
        CustOrderCapacity  582  =  1 (MEMBER_OWN_ACCOUNT)
     ManualOrderIndicator 1028  =  N
                 CheckSum   10  =  141

The ExecutionReport (35=8) message is used to acknowledge/reject orders, cancel and amend requests. The message will also be used to relay trade information and end of day cancellations.

Tag Field Name Data Type Req'd Description
Component <StandardHeader>
37 OrderID String Y Unique identifier of the order as assigned by Seed CX.
11 ClOrdID String Y Client assigned unique identifier of an order. Uniqueness must be guaranteed within a single trading day. Should not exceed 30 characters.
41 OrigClOrdID String N ClOrdID (11) of the previous order. Conditionally required for response to a cancel or cancel/replace request.
17 ExecID String Y Unique identifier of execution message as assigned by Seed CX.
150 ExecType char Y Describes the purpose of the execution report.
Supported values:
0 = New
4 = Canceled
5 = Replaced
8 = Rejected
F = Trade
39 OrdStatus char Y Current status of the order.
Supported values:
0 = New
1 = Partially Filled
2 = Filled
4 = Canceled
8 = Rejected
C = Expired
103 OrdRejReason Int N Code to identify reason for order rejection.
Supported values:
6 = Duplicate Order (ID)
98 = RESTING_ONLY order would hit and become taker
99 = Other
378 ExecRestatementReason Int N Identifies origin of the order elimination.
1 Account String Y The desk account ID, which is found in SeedPortal. The SenderCompID (49) must be appropriately assigned to the desk identified in Account (1).
Component <Instrument>
55 Symbol String Y Instrument identifier.
54 Side Char Y Side of an order.
Supported values:
1 = Buy
2 = Sell
Component <OrderQtyData>
38 OrderQty Qty Y Quantity ordered.
This value will be a whole number of units where the unit value will be the standard market size for this instrument.
40 OrderType Char Y Order type.
Supported values:
1 = Market
2 = Limit
K = MTL (market order then unexecuted quantity becomes limit order at last price)
44 Price Price N Required for limit orders.
59 TimeInForce Char N Specifies how long the order remains in effect.
Supported values:
0 = Day (default for Limit Orders if not specified)
3 = IOC (default for Market Orders if not specified)
4 = FOK
528 OrderCapacity Char Y Capacity of the firm placing the order.
Supported values:
A = Agency
G = Proprietary
I = Individual
P = Principal
R = Riskless Principal
W = Agent for other member
582 CustOrderCapacity Int Y Capacity of the customer placing the order.
Supported values:
1 = Member trading from their own account
2 = Member firm trading for its proprietary account
3 = Member trading for another member
4 = All other
32 LastQty Qty N Quantity bought or sold on this fill.
31 LastPx Price N Price of this fill.
151 LeavesQty Qty Y Quantity open for further execution.
14 CumQty Qty Y Currently executed quantity for orders.
6 AvgPx Price Y Calculated average price of all the fills.
60 TransactTime UTCTimestamp Y Timestamp of event submitting the order.
110 MinQty Qty N Minimum quantity of an order to be executed. Valid for IOC orders only. Note: MinQty is not supported on Limit orders on pro-rata or credit-matrix matching order books.
58 Text String N Free format text string.
851 LastLiquidityInd Int N Indicates whether this fill was a result of a liquidity provider providing or liquidity taker taking the liquidity.
Supported values:
1 = Added Liquidity
2 = Removed Liquidity
1028 ManualOrderIndicator Boolean N Indicates if order was sent manually or generated by automated logic.
Supported values:
Y = manual
N = automated
1031 CustOrderHandlingInst Char N Defines original source of order.
Supported values:
A = Phone simple
B = Phone complex
C = FCM-provided screen
D = Other-provided screen
E = Client-provided platform controlled by FCM
F = Client-provided platform direct to exchange
G = FCM API or FIX
H = Algo Engine
J = Price at Execution (price added at initial order entry, trading, middle office or time of give-up)
W = Desk, Electronic
Y = Client, Electronic
Component <StandardTrailer>

OrderCancelRequest (35=F)

8=FIX.4.4|9=239|35=F|49=YIZUG0TPF6|56=SEEDCX|34=30|50=FKIDMMZZ7YAV|142=US,IL|57=SCXM|52=20181001-15:18:18.339|369=29|41=Order48988|37=319500000000000016|11=Cancel48989|1=FKIDMMZZ7|55=COSP:BTC/USD|54=1|60=20181001-15:18:18|528=A|582=1|1028=N|10=123|
              BeginString    8  =  FIX.4.4
               BodyLength    9  =  239
                  MsgType   35  =  F (ORDER_CANCEL_REQUEST)
             SenderCompID   49  =  YIZUG0TPF6
             TargetCompID   56  =  SEEDCX
                MsgSeqNum   34  =  30
              SenderSubID   50  =  FKIDMMZZ7YAV
         SenderLocationID  142  =  US,IL
              TargetSubID   57  =  SCXM (SCXM)
              SendingTime   52  =  20181001-15:18:18.339
   LastMsgSeqNumProcessed  369  =  29
              OrigClOrdID   41  =  Order48988
                  OrderID   37  =  319500000000000016
                  ClOrdID   11  =  Cancel48989
                  Account    1  =  FKIDMMZZ7
                   Symbol   55  =  COSP:BTC/USD
                     Side   54  =  1 (BUY)
             TransactTime   60  =  20181001-15:18:18
            OrderCapacity  528  =  A (AGENCY)
        CustOrderCapacity  582  =  1 (MEMBER_OWN_ACCOUNT)
     ManualOrderIndicator 1028  =  N
                 CheckSum   10  =  123

The OrderCancelRequest (35=F) message is used to request cancellation of all the remaining quantity of an existing order.

Tag Field Name Data Type Req'd Description
Component <StandardHeader>
41 OrigClOrdID String N ClOrdID (11) of the previous non-rejected order.
37 OrderID String Y Unique identifier of the order as assigned by Seed CX.
11 ClOrdID String Y Client assigned unique identifier of cancel request. Uniqueness must be guaranteed within a single trading day. Should not exceed 30 characters.
1 Account String Y The desk account ID, which is found in SeedPortal. The SenderCompID (49) must be appropriately assigned to the desk identified in Account (1).
Component <Instrument>
55 Symbol String Y Instrument identifier.
54 Side Char Y Side of an order.
Supported values:
1 = Buy
2 = Sell
60 TransactTime UTCTimestamp Y Timestamp of event submitting the order.
Component <OrderQtyData>
38 OrderQty Qty Y Quantity ordered. This value will be a whole number of units where the unit value will be the standard market size for this instrument.
1028 ManualOrderIndicator Boolean Y Indicates if order was sent manually or generated by automated logic.
Supported values:
Y = manual
N = automated
Component <StandardTrailer>

OrderCancelReplaceRequest (35=G)

8=FIX.4.4|9=263|35=G|49=YIZUG0TPF6|56=SEEDCX|34=29|50=FKIDMMZZ7YAV|142=US,IL|57=SCXM|52=20181001-15:18:17.124|369=28|37=319500000000000015|41=Replace48987|11=Replace48988|1=FKIDMMZZ7|55=COSP:BTC/USD|54=1|60=20181001-15:18:17|38=1|40=2|44=6445|59=0|528=A|582=1|1028=N|10=236|
              BeginString    8  =  FIX.4.4
               BodyLength    9  =  263
                  MsgType   35  =  G (ORDER_CANCEL_REPLACE_REQUEST)
             SenderCompID   49  =  YIZUG0TPF6
             TargetCompID   56  =  SEEDCX
                MsgSeqNum   34  =  29
              SenderSubID   50  =  FKIDMMZZ7YAV
         SenderLocationID  142  =  US,IL
              TargetSubID   57  =  SCXM (SCXM)
              SendingTime   52  =  20181001-15:18:17.124
   LastMsgSeqNumProcessed  369  =  28
                  OrderID   37  =  319500000000000015
              OrigClOrdID   41  =  Replace48987
                  ClOrdID   11  =  Replace48988
                  Account    1  =  FKIDMMZZ7
                   Symbol   55  =  COSP:BTC/USD
                     Side   54  =  1 (BUY)
             TransactTime   60  =  20181001-15:18:17
                 OrderQty   38  =  1
                  OrdType   40  =  2 (LIMIT)
                    Price   44  =  6445
              TimeInForce   59  =  0 (DAY)
            OrderCapacity  528  =  A (AGENCY)
        CustOrderCapacity  582  =  1 (MEMBER_OWN_ACCOUNT)
     ManualOrderIndicator 1028  =  N
                 CheckSum   10  =  236

Seed CX supports modifications to Price (44), Quantity (38), TimeInForce (59), ExecInst (18) and OrdType (40) fields. OrdType (40) amends are currently restricted to Limit to Market OrdType (40). Modifications to any other order parameters will be rejected through OrderCancelReplaceReject (35=9) message.

All of the Application fields in the original order should be retransmitted with the original values in the OrderCancelReplaceRequest (35=G) along with the field(s) that are being modified.Original order parameters that are not re-iterated in the amendment request may get reverted to default values.

Supported Values for OrderCancelReplaceRequest (35=G):

Original Replace
OrdType (40) TimeInForce (59) OrdType (40) TimeInForce (59) ExecInst (18)
2 = Limit 0 = Day 1 = Market 3 = IOC
2 = Limit 0 = Day 1 = Market 4 = FOK
2 = Limit 0 = Day 2 = Limit 0 = Day 6 = Participate don’t initiate
Tag Field Name Data Type Req'd Description
Component <StandardHeader>
37 OrderID String Y Unique identifier of the order as assigned by Seed CX.
41 OrigClOrdID String N ClOrdID (11) of the previous non-rejected order.
11 ClOrdID String Y Client assigned unique identifier of an order. Uniqueness must be guaranteed within a single trading day. Should not exceed 30 characters.
1 Account String Y The desk account ID, which is found in SeedPortal. The SenderCompID (49) must be appropriately assigned to the desk identified in Account (1).
18 ExecInst Char N Instructions for order handling.
Supported values:
6 = Participate don't initiate
Component <Instrument>
55 Symbol String Y Instrument identifier.
54 Side Char Y Side of an order, should match the original order's side.
Supported values:
1 = Buy
2 = Sell
60 TransactTime UTCTimestamp Y Timestamp of event submitting the order.
Component <OrderQtyData>
38 OrderQty Qty Y If amending quantity, the value should be the total intended quantity (including the amount already executed for this order).
40 OrderType Char Y Order type. For amendment, only Limit to Market order is supported.
Supported values:
1 = Market
2 = Limit
K = MTL (market order then unexecuted quantity becomes limit order at last price)
44 Price Price N Required for limit orders.
59 TimeInForce Char N Specifies how long the order remains in effect.
Supported values:
0 = Day (default for Limit Orders if not specified)
3 = IOC (default for Market Orders if not specified)
4 = FOK
528 OrderCapacity Char Y Capacity of the firm placing the order.
Supported values:
A = Agency
G = Proprietary
I = Individual
P = Principal
R = Riskless Principal
W = Agent for other member
582 CustOrderCapacity Int Y Capacity of the customer placing the order.
Supported values:
1 = Member trading from their own account
2 = Member firm trading for its proprietary account
3 = Member trading for another member
4 = All other
1028 ManualOrderIndicator Boolean Y Indicates if order was sent manually or generated by automated logic.
Supported values:
Y = manual
N = automated
1031 CustOrderHandlingInst Char N Defines original source of order.
Supported values:
A = Phone simple
B = Phone complex
C = FCM-provided screen
D = Other-provided screen
E = Client-provided platform controlled by FCM
F = Client-provided platform direct to exchange
G = FCM API or FIX
H = Algo Engine
J = Price at Execution (price added at initial order entry, trading, middle office or time of give-up)
W = Desk, Electronic
Y = Client, Electronic
Component <StandardTrailer>

OrderCancelReject (35=9)

8=FIX.4.4|9=0246|35=9|49=SEEDCX|56=QL4ADZEUNZ|34=4|50=SCXM|142=US,IL|57=2F8QNWXP2N9E|52=20190225-21:03:05.430739678|369=3|37=334200000000005455|11=Cancel96333|41=Order96332|39=2|1=2F8QNWXP2|58=Too late to cancel.|60=20190225-21:03:05.430730267|434=1|102=0|1028=N|10=155
              BeginString    8  =  FIX.4.4
               BodyLength    9  =  0246
                  MsgType   35  =  9 (ORDER_CANCEL_REJECT)
             SenderCompID   49  =  SEEDCX
             TargetCompID   56  =  QL4ADZEUNZ
                MsgSeqNum   34  =  4
              SenderSubID   50  =  SCXM
         SenderLocationID  142  =  US,IL
              TargetSubID   57  =  2F8QNWXP2N9E
              SendingTime   52  =  20190225-21:03:05.430739678
   LastMsgSeqNumProcessed  369  =  3
                  OrderID   37  =  334200000000005455
                  ClOrdID   11  =  Cancel96333
              OrigClOrdID   41  =  Order96332
                OrdStatus   39  =  2 (FILLED)
                  Account    1  =  2F8QNWXP2
                     Text   58  =  Too late to cancel.
             TransactTime   60  =  20190225-21:03:05.430730267
         CxlRejResponseTo  434  =  1 (ORDER_CANCEL_REQUEST)
             CxlRejReason  102  =  0 (TOO_LATE_TO_CANCEL)
     ManualOrderIndicator 1028  =  N
                 CheckSum   10  =  155

The OrderCancelReject (35=9) message is used to reject invalid cancel or cancel/replace requests.

Tag Field Name Data Type Req'd Description
Component <StandardHeader>
37 OrderID String Y Unique identifier of the order as assigned by Seed CX.
11 ClOrdID String Y Client assigned unique identifier for the cancel or the cancel/replace request. Uniqueness must be guaranteed within a single trading day. Should not exceed 30 characters.
41 OrigClOrdID String N ClOrdID (11) of the previous order that could not be canceled or replaced.
39 OrdStatus char Y Current status of the order.
Supported values:
0 = New
1 = Partially Filled
2 = Filled
4 = Canceled
8 = Rejected
C = Expired
1 Account String Y Echoed back from the cancel or the modification request.
The desk account ID, which is found in SeedPortal. The SenderCompID (49) must be appropriately assigned to the desk identified in Account (1).
58 Text String N Provides the reason the message was rejected.
434 CxlRejResponseTo Char Y Identifies the type of request that this Cancel Reject is in response to:
Supported values:
1 = Order Cancel Request
2 = Order Cancel/Replace request
102 CxlRejReason Int N Code to identify reason for cancel rejection.
Supported values:
0 = Too late to cancel
1 = Unknown order
3 = Order already in Pending Cancel status
6 = Duplicate ClOrdID (11) received
99 = Other
Component <StandardTrailer>

BusinessMessageReject (35=j)

8=FIX.4.4|9=182|35=j|49=SEEDCX|56=YIZUG0TPF6|34=3|50=SCXM|142=US,IL|57=FKIDMMZZ7YAV|52=20181001-15:14:38.090095505|369=3|45=3|372=D|379=Order48946|380=0|58=Not authorized for this instrument|1028=N|10=190|
              BeginString    8  =  FIX.4.4
               BodyLength    9  =  182
                  MsgType   35  =  j (BUSINESS_REJECT)
             SenderCompID   49  =  SEEDCX
             TargetCompID   56  =  YIZUG0TPF6
                MsgSeqNum   34  =  3
              SenderSubID   50  =  SCXM
         SenderLocationID  142  =  US,IL
              TargetSubID   57  =  FKIDMMZZ7YAV
              SendingTime   52  =  20181001-15:14:38.090095505
   LastMsgSeqNumProcessed  369  =  3
                RefSeqNum   45  =  3
               RefMsgType  372  =  D
      BusinessRejectRefID  379  =  Order48946
     BusinessRejectReason  380  =  0
                     Text   58  =  Not authorized for this instrument
     ManualOrderIndicator 1028  =  N
                 CheckSum   10  =  190

The BusinessMessageReject (35=j) message will be used to reject invalid inbound messages.

Tag Field Name Data Type Req'd Description
Component <StandardHeader>
45 RefSeqNum SeqNum Y MsgSeqNum(34) of the rejected message
372 RefMsgType String Y The MsgType(35) of the FIX message being referenced.
379 BusinessRejectRefID String N Identifier of the rejected message
380 BusinessRejectReason Int Y Error code of violation
Supported values:
0 = Other
2 = Unknown security
4 = Application not available.
58 Text String N Provides the reason the message was rejected.
1028 ManualOrderIndicator Boolean N Echoed back if the rejected message contains the field.
Supported values:
Y = manual
N = automated
1031 CustOrderHandlingInst Char N Echoed back if the rejected message contains the field.
Supported values:
A = Phone simple
B = Phone complex
C = FCM-provided screen
D = Other-provided screen
E = Client-provided platform controlled by FCM
F = Client-provided platform direct to exchange
G = FCM API or FIX
H = Algo Engine
J = Price at Execution (price added at initial order entry, trading, middle office or time of give-up)
W = Desk, Electronic
Y = Client, Electronic
Component <StandardTrailer>