Introduction
Overview
EDX Markets FIX specifications are based on the FIX 5.0 SP2 specification.
Rate Limits
Rate limits are applied per FIX ID (username) and are administered by EDXM Market Operations (Subject to change based on needs and review):
- Order Entry: 1000 messages per 5 seconds.
- Market Data: 250 messages per 5 seconds.
- Drop Copy: 100 messages per 5 seconds.
- In the event you exceed rate limits, you will receive the message RATE_LIMIT_EXCEEDED and be disconnected.
- There is no message throttling mechanism.
- After a disconnect due to rate limit breach, you can reconnect immediately.
Supported Messages
The following convention is used in this document to indicate message direction:
- IN: a message type received by EDX.
- OUT: a message type originating from EDX.
- IN/OUT: a message type that can be sent to or from EDX.
The values under the “Required” column indicate one of the following:
- ‘Y’ – field is mandatory and must be sent or received as a part of the message.
- ‘N’ – field is not required and should be omitted unless otherwise directed by EDX.
- ‘N/A’ – Field is not used in the context of the message.
Header and Footer
Standard Header (IN)
| Tag | Name | Required | Comments |
|---|---|---|---|
| 8 | BeginString | Y | ‘FIXT.1.1‘. Message start. Must be the first field in the message. |
| 9 | BodyLength | Y | Length of the FIX message. Must be the second field in the message. |
| 35 | MsgType | Y | Type of FIX message. Must be the third field in the message. |
| 34 | MsgSeqNum | Y | Message sequence number. |
| 52 | SendingTime | Y | UTC timestamp. Time of message. |
| 49 | SenderCompID | Y | Message sender’s ID. Assigned at onboarding (same as Username). |
| 56 | TargetCompID | Y | ‘EDXM’. |
| 43 | PossDupFlag | N | Required for retransmitted messages, whether prompted by the sending system or as the result of a resend request. |
| 97 | PossResend | N | Required when message may be duplicate of another message sent under a different sequence number. |
| 122 | OrigSendingTime | N | Required for message resent as a result of a resend request. If data is unavailable, set to same value as SendingTime. |
Standard Header (OUT)
| Tag | Name | Required | Comments |
|---|---|---|---|
| 8 | BeginString | Y | ‘FIXT.1.1‘. Message start. Must be the first field in the message. |
| 9 | BodyLength | Y | Length of the FIX message. Must be the second field in the message. |
| 35 | MsgType | Y | Type of FIX message. Must be the third field in the message. |
| 49 | SenderCompID | Y | ‘EDXM’. |
| 56 | TargetCompID | Y | Message sender’s ID. Assigned at onboarding (same as Username). |
| 57 | TargetSubID | N | Assigned value used to identify specific individual or unit intended to receive message. |
| 34 | MsgSeqNum | Y | Message sequence number. |
| 52 | SendingTime | Y | UTC timestamp. Time of message. |
| 43 | PossDupFlag | N | Required for retransmitted messages, whether prompted by the sending system or as the result of a resend request. |
| 97 | PossResend | N | Required when message may be duplicate of another message sent under a different sequence number. |
| 122 | OrigSendingTime | N | Required for message resent as a result of a resend request. If data is unavailable, set to same value as SendingTime. |
Standard Footer
| Tag | Name | Required | Comments |
|---|---|---|---|
| 10 | CheckSum | Y | A value calculated by the FIX engine from the message data and transferred with the data. If the data received does not match the CheckSum value, the data was corrupted in transit. |
Logon
Logon (IN)
Fields
| Tag | Name | Required | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType 35=A | |
| 98 | EncryptMethod | Y | NONE [0] |
| 108 | HeartBtInt | Y | Heartbeat interval, in seconds. An interval of 0 indicates there are no heartbeats. The maximum supported interval is 90 seconds. |
| 141 | ResetSeqNumFlag | N | YES [Y] NO [N] |
| 553 | Username | Y | Username/user ID. |
| 554 | Password | Y | Password/passphrase. |
| 1137 | DefaultApplVerID | Y | FIX50SP2 [9] |
| Standard Footer | Y |
Example
[BeginString] 8 = FIXT.1.1
[BodyLength] 9 = 094
[MsgType] 35 = A
[MsgSeqNum] 34 = 1
[SendingTime] 52 = 20240716-22:08:12.000
[SenderCompID] 49 = USERNAME
[TargetCompID] 56 = EDXM
[EncryptMethod] 98 = 0
[HeartBtInt] 108 = 20
[ResetSeqNumFlag] 141 = Y
[Username] 553 = USERNAME
[Password] 554 = PASSWORD
[DefaultApplVerID] 1137 = 9
[CheckSum] 10 = 074
Logon (OUT)
Fields
| Tag | Name | Required | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType 35=A | |
| 98 | EncryptMethod | Y | NONE [0] |
| 108 | HeartBtInt | Y | Heartbeat interval, in seconds. An interval of 0 indicates there are no heartbeats. The maximum supported interval is 90 seconds. |
| 141 | ResetSeqNumFlag | N | YES [Y] NO [N] |
| 1137 | DefaultApplVerID | Y | FIX50SP2 [9] |
| Standard Footer | Y |
Example
[BeginString] 8 = FIXT.1.1
[BodyLength] 9 = 094
[MsgType] 35 = A
[SenderCompID] 49 = EDXM
[TargetCompID] 56 = USERNAME
[MsgseqNum] 34 = 1
[SendingTime] 52 = 20240716-22:08:08.655
[EncryptMethod] 98 = 0
[HeartBtInt] 108 = 20
[ResetSeqNumFlag] 141 = Y
[DefaultApplVerID] 1137 = 9
[CheckSum] 10 = 074
Logout
Logout (IN)
Fields
| Tag | Name | Required | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType 35=5 | |
| 58 | Text | N | Client provided text. |
| Standard Footer | Y |
Example
[BeginString] 8 = FIXT.1.1
[BodyLength] 9 = 55
[MsgType] 35 = 5
[MsgSeqNum] 34 = 3
[SendingTime] 52 = 20240716-22:27:28.000
[SenderCompID] 49 = USERNAME
[TargetCompID] 56 = EDXM
[CheckSum] 10 = 149
Logout (OUT)
Fields
| Tag | Name | Required | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType 35=5 | |
| 58 | Text | N | Describes the reason for logout. |
| Standard Footer | Y |
Example
[BeginString] 8 = FIXT.1.1
[BodyLength] 9 = 55
[MsgType] 35 = 5
[MsgSeqNum] 34 = 4
[SenderCompID] 49 = EDXM
[TargetCompID] 56 = USERNAME
[SendingTime] 52 = 20240716-22:27:23.907
[CheckSum] 10 = 160
Heartbeat / Test Request
If your system fails to heartbeat with us in the interval initially declared in the logon message, EDX will issue a Test Request. When that happens, you must respond to the Test Request within the initially declared heartbeat interval with either a business message or a heartbeat.
Heartbeat (IN)
Fields
| Tag | Name | Required | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType 35=0 | |
| 112 | TestReqID | N | Identifier included in Test Request message to be returned in resulting Heartbeat. |
| Standard Footer | Y |
Example
[BeginString] 8 = FIXT.1.1
[BodyLength] 9 = 63
[MsgType] 35 = 0
[MsgseqNum] 34 = 6
[SendingTime] 52 = 20240727-01:15.22.000
[SenderCompID] 49 = USERNAME
[TargetCompID] 56 = EDXM
[TestReqID] 112 = 23412
[CheckSum] 10 = 251
TestRequest (OUT)
Fields
| Tag | Name | Required | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType 35=1 | |
| 112 | TestReqID | Y | Identifier included in Test Request message to be returned in resulting Heartbeat. |
| Standard Footer | Y |
Example
[BeginString] 8 = FIXT.1.1
[BodyLength] 9 = 63
[MsgType] 35 = 1
[MsgseqNum] 34 = 500
[SenderCompID] 49 = EDXM
[TargetCompID] 56 = USERNAME
[SendingTime] 52 = 20240727-01:15:22.000
[TestReqID] 112 = 23412
[CheckSum] 10 = 243
Sequence Reset
A daily sequence reset occurs at 12:00 PM ET. We follow the FIX protocol convention for resetting sequence numbers back to 1.
SequenceReset (IN)
Fields
| Tag | Name | Required | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType 35=4 | |
| 123 | GapFillFlag | Y | Indicates that the Sequence Reset message is replacing the missing messages, which will not be resent. YES [Y] |
| 36 | NewSeqNo | Y | New sequence number. |
| Standard Footer | Y |
Example
[BeginString] 8 = FIXT.1.1
[BodyLength] 9 = 71
[MsgType] 35 = 4
[MsgseqNum] 34 = 21
[SendingTime] 52 = 20240727-00:05:38.802
[SenderCompID] 49 = USERNAME
[TargetCompID] 56 = EDXM
[GapFillFlag] 123 = Y
[NewSeqNo] 36 = 239
[CheckSum] 10 = 149
Reject
Reject (OUT)
Fields
| Tag | Name | Required | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType 35=3 | |
| 45 | RefSeqNum | Y | Reference message sequence number. |
| 371 | RefTagID | Y | The tag number of the field being referenced in the reject. |
| 372 | RegMsgType | Y | The Message Type of the FIX message being referenced. |
| 373 | SessionRejectReason | Y | Describes the reason for rejection. VALUE_IS_INCORRECT [5] |
| 58 | Text | Y | Describes the rejection reason. |
| Standard Footer | Y |
Example
[BeginString] 8 = FIXT.1.1
[BodyLength] 9 = 129
[MsgType] 35 = 3
[SenderCompID] 49 = EDXM
[TargetCompID] 56 = USERNAME
[MsgseqNum] 34 = 20
[SendingTime] 52 = 20240727-00:06:06.917
[RefSeqNum] 45 = 143
[RefTagID] 371 = 16
[RefMsgType] 372 = 2
[SessionRejectReason] 373 = 5
[Text] 58 = Incorrect value (out of range)
[CheckSum] 10 = 019