Skip to main content

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.

Standard Header (IN)​

TagNameRequiredComments
8BeginStringY‘FIXT.1.1‘. Message start. Must be the first field in the message.
9BodyLengthYLength of the FIX message. Must be the second field in the message.
35MsgTypeYType of FIX message. Must be the third field in the message.
34MsgSeqNumYMessage sequence number.
52SendingTimeYUTC timestamp. Time of message.
49SenderCompIDYMessage sender’s ID. Assigned at onboarding (same as Username).
56TargetCompIDY‘EDXM’.
43PossDupFlagNRequired for retransmitted messages, whether prompted by the sending system or as the result of a resend request.
97PossResendNRequired when message may be duplicate of another message sent under a different sequence number.
122OrigSendingTimeNRequired for message resent as a result of a resend request. If data is unavailable, set to same value as SendingTime.

Standard Header (OUT)​

TagNameRequiredComments
8BeginStringY‘FIXT.1.1‘. Message start. Must be the first field in the message.
9BodyLengthYLength of the FIX message. Must be the second field in the message.
35MsgTypeYType of FIX message. Must be the third field in the message.
49SenderCompIDY‘EDXM’.
56TargetCompIDYMessage sender’s ID. Assigned at onboarding (same as Username).
57TargetSubIDNAssigned value used to identify specific individual or unit intended to receive message.
34MsgSeqNumYMessage sequence number.
52SendingTimeYUTC timestamp. Time of message.
43PossDupFlagNRequired for retransmitted messages, whether prompted by the sending system or as the result of a resend request.
97PossResendNRequired when message may be duplicate of another message sent under a different sequence number.
122OrigSendingTimeNRequired for message resent as a result of a resend request. If data is unavailable, set to same value as SendingTime.
TagNameRequiredComments
10CheckSumYA 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​

TagNameRequiredComments
Standard HeaderYMsgType 35=A
98EncryptMethodYNONE [0]
108HeartBtIntYHeartbeat interval, in seconds. An interval of 0 indicates there are no heartbeats. The maximum supported interval is 90 seconds.
141ResetSeqNumFlagNYES [Y]
NO [N]
553UsernameYUsername/user ID.
554PasswordYPassword/passphrase.
1137DefaultApplVerIDYFIX50SP2 [9]
Standard FooterY

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​

TagNameRequiredComments
Standard HeaderYMsgType 35=A
98EncryptMethodYNONE [0]
108HeartBtIntYHeartbeat interval, in seconds. An interval of 0 indicates there are no heartbeats. The maximum supported interval is 90 seconds.
141ResetSeqNumFlagNYES [Y]
NO [N]
1137DefaultApplVerIDYFIX50SP2 [9]
Standard FooterY

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​

TagNameRequiredComments
Standard HeaderYMsgType 35=5
58TextNClient provided text.
Standard FooterY

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​

TagNameRequiredComments
Standard HeaderYMsgType 35=5
58TextNDescribes the reason for logout.
Standard FooterY

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​

TagNameRequiredComments
Standard HeaderYMsgType 35=0
112TestReqIDNIdentifier included in Test Request message to be returned in resulting Heartbeat.
Standard FooterY

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​

TagNameRequiredComments
Standard HeaderYMsgType 35=1
112TestReqIDYIdentifier included in Test Request message to be returned in resulting Heartbeat.
Standard FooterY

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​

TagNameRequiredComments
Standard HeaderYMsgType 35=4
123GapFillFlagYIndicates that the Sequence Reset message is replacing the missing messages, which will not be resent.
YES [Y]
36NewSeqNoYNew sequence number.
Standard FooterY

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​

TagNameRequiredComments
Standard HeaderYMsgType 35=3
45RefSeqNumYReference message sequence number.
371RefTagIDYThe tag number of the field being referenced in the reject.
372RegMsgTypeYThe Message Type of the FIX message being referenced.
373SessionRejectReasonYDescribes the reason for rejection.
VALUE_IS_INCORRECT [5]
58TextYDescribes the rejection reason.
Standard FooterY

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