CME STP FIX Core
This topic describes the common and core rules of engagement for CME STP Financial Information Exchange (CME STP FIX) protocol, which is applicable to all markets and venues of CME Group.
Use this search bar to search topics within CME STP FIX Core:
Contents:
- 1 Connectivity
- 2 Session Layer Management
- 2.1 Standard FIX Header and Trailer
- 2.2 Establishing a FIX Session
- 2.2.1 Logon Request
- 2.2.1.1 Example Logon request
- 2.2.2 Logon Response
- 2.2.2.1 Example Logon response
- 2.2.3 Logout
- 2.2.3.1 Example Logout Request
- 2.2.3.2 Example Logout Response
- 2.2.4 HeartBeat
- 2.2.1 Logon Request
- 3 Trade Snapshot and Subscriptions
- 3.1 Data Retrieval
- 3.2 Snapshot
- 3.3 Subscription
- 3.3.1.1 Example Subscription Request
- 3.3.1.2 Example Subscription Accepted
- 3.3.2 Restarting a Subscription
- 3.4 Duplicate message detection
- 4 Error Handling
- 4.1 Logon - Unsuccessful
- 4.2 Client Sequence Number Less Than Expected
- 4.3 Trade Snapshot Request: Failed Request – Missing Start Time or Invalid Combination of Filters
- 4.4 Subscription with Multiple FirmIDs: Failed Request – at Least One FirmID is Invalid
- 4.5 Subscription with Multiple FirmIDs: Failed Request – Specified FirmIDs have Different Party Roles
- 4.6 Duplicate Subscription Request
- 4.7 Service Availability - Internal Errors
Related Content |
---|
Connectivity
Customers can connect to the CME STP FIX API New Release or Production environment via the following options:
New Release Environment
Connectivity Type | Products | IP Address | URL | Port |
---|---|---|---|---|
Internet (only) This URL uses certificates signed by an official trusted Certificate Authority (CA). Additional certificates are not required. | All | n/a | fixstpnr.cmegroup.com | 443 |
Production Environment - Internet or Dedicated Connection
Connectivity Type | Products | IP Address | URL | Port |
---|---|---|---|---|
Internet This URL uses certificates signed by an official trusted Certificate Authority (CA). Additional certificates are not required. | All | n/a | stpfixapi.cmegroup.com | 443 |
Dedicated - CME Globex Connectivity | Futures and Options | 167.204.41.90 | stpfixapi.cmegroup.com | 443 |
Dedicated - CME Globex Connectivity, Leased Lines | Fixed Income (BrokerTec) | 167.204.72.90 | ||
Dedicated - CME Globex Connectivity, Leased Lines, Rnet | FX (EBS) | 167.204.72.190 | ||
Dedicated CME Globex Connectivity includes standard options: CME GLink, CME EConnect, LNet and CME Globex Hub. Leased lines are connectivity solutions available for some legacy EBS and BrokerTec clients. See also - Network Connectivity Customers using dedicated connections must create a Domain Name Service (DNS) record to associate the DNS name (stpfixapi.cmegroup.com) to the relevant IP or a certificate error may occur. |
Disaster Recovery Considerations
During a Disaster Recovery (DR) event client systems will automatically be directed to the DR instance of CME STP FIX. Customers do not need to make any connectivity changes.
In the event of a DR, client systems should ensure that they can restart their Subscriptions and/or Query for missing trades.
Session Layer Management
Client systems are required to use TCP/IP over Transport Layer Security (TLS) 1.2 to initiate a socket connection to CME STP FIX Server.
Standard FIX Header and Trailer
All CME STP FIX messages to and from client systems must have FIX Standard Header and Trailer components.
Header from Client System to CME STP FIX
All applicable FIX Header tags are documented in Client Systems to CME STP FIX.
Below are the key FIX Header tags
Header Tag | Required | Usage |
---|---|---|
tag 49-SenderCompID | Y | Indicates the sender of the message. Client assigned value. Could be a firm level identifier such as Trading firm name or Globex Firm ID (GFID) |
tag 56-TargetCompID | Y | Assigned value used to identify the receiving firm. Format: ‘CMESTPFIX#’ The value will be incremented for each new session at the Firm, e.g., CMESTPFIX1, CMESTPFIX2, CMESTPFIX3, etc. up to CMESTPFIX50 |
Note that the combined SenderCompID + TargetCompID must be unique per FIX session.
Header from CME STP to Client system
All applicable FIX Header tags are documented in CME STP FIX to Client Systems.
Messages outbound from CME STP FIX will swap values between tag 49-SenderCompID and tag 56-TargetCompID from the values populated in the inbound messages.
Establishing a FIX Session
To initiate a FIX session, the client system sends a FIX Logon message (tag 35-MsgType=A) as the first message after establishing the TCP/IP connection.
Client systems can create multiple FIX Session's using the same API ID on a single TCP/IP connection using a unique combination of SenderCompID and TargetCompID in the FIX Header of Logon message.
Logon Request
Logon request fields and their usage is described below.
Logon Tag | Expected value |
---|---|
tag 98-EncryptionMethod | must be 0 (zero) |
tag 108-HeartBInt | A negotiated Heartbeat interval between the client system and CME STP FIX. Should be a value between 30 to 60 seconds |
tag 141-ResetSeqNumFlag | As a FIX session initiator, client systems are required to set this tag value to "Y" on Logon, to reset both inbound and outbound sequence numbers. Inbound FIX header tag 34-MsgSeqNum should be set to 1 in the Logon request. |
tag 553-Username | The CME STP FIX entitled API ID. |
tag 554-Password | The password associated with the API ID |
Example Logon request
8=FIX.4.4|9=110|35=A|34=1|49=TEST_FIRM_1|52=20211021-18:08:46.041|56=CMESTPFIX1|57=STP|98=0|108=30|141=Y|553=API_ID|554=***|10=152|
Logon Response
CME STP FIX will respond with a FIX Logon message (tag 35-MsgType=A) when the inbound Logon request is validated.
Example Logon response
8=FIX.4.4|9=88|35=A|34=1|49=CMESTPFIX1|50=STP|52=20211021-18:08:51.575|56=TEST_FIRM_1|98=0|108=30|141=Y|10=164|
Logout
Client systems are required to use the Logout (tag 35-MsgType=5) message to gracefully terminate a FIX Session with CME STP.
Client system sends Logout (tag 35-MsgType = 5) message to CME STP FIX to close the FIX session.
CME STP FIX sends Logout (tag 35-MsgType = 5) message to FIX Client and closes the FIX session.
Example Logout Request
8=FIX.4.4|9=70|35=5|34=4|49=TEST_FIRM_1|52=20211021-18:10:16.188|56=CMESTPFIX1|57=STP|10=077|
Example Logout Response
HeartBeat
To keep a FIX Session alive
Client systems are expected to send a FIX Heartbeat message (tag 35-MsgType = 0) at the negotiated time interval on the Logon request.
CME STP FIX will send a FIX Heartbeat message (tag 35-MsgType = 0) to the client session, at the negotiated time interval if there are no Business level messages.
Trade Snapshot and Subscriptions
The following section outlines the trade snapshot and subscription functionality of CME STP FIX.
Data Retrieval
CME STP FIX supports trade data retrieval using FIX Trade Capture Report Request (tag 35-MsgType = AD) :
Snapshot: Client systems can request a snapshot of trades with tag 569-TradeRequestType = 1 (Initial request) and tag 263-SubscriptionRequestType = 0 (Snapshot) limited by tag 9593-StartTime and optional tag 9594-EndTime.
Subscriptions: Client systems can request a snapshot and initiate a continued subscription for trades with tag 569-TradeRequestType = 1 (Initial request) and tag 263-SubscriptionRequestType = 1 (Snapshot + Updates) with the optional tag 779-LastUpdateTime. If LastUpdateTime is not provided then the subscription will start from the time the FIX Trade Capture Report Request (tag 35-MsgType = AD) is received by the CME STP FIX server.
For both Snapshot and Subscriptions client systems must supply a unique identifier in tag 568-TradeRequestID of the FIX Trade Capture Report Request (tag 35-MsgType = AD), which the CME STP FIX will echo back in FIX Trade Capture Report Request Acknowledgment (tag 35-MsgType = AQ), FIX Trade Capture Report (tag 35-MsgType = AE) and FIX Collateral Report (tag 35-MsgType = BA). This enables client systems to match the messages from CME STP FIX to their specific request for a FIX Session.
Snapshot and Subscription Parameters
The following are key parameters to be used in Trade Capture Report Request (tag 35-MsgType = AD) for snapshot and / or subscriptions.
Filter tag | Request type | Comments | |
---|---|---|---|
Subscription | Snapshot | ||
tag 779-LastUpdateTime | Y | N | Timestamp from which the trades are requested by the clients system from CME STP FIX. It is recommended that client systems specify a value in request, one or more minutes prior to the timestamp value from the last FIX Trade Capture Report (tag 35-MsgType = AE) that they received to avoid missing trades between Subscriptions. |
tag 9593-StartTime tag 9594-EndTime | N | Y | Client systems can request a snapshot of trades within a time frame. tag 9593-StartTime is required. tag 9594-EndTime is optional and defaults to the current time of the request. |
Party Details.
| Y | Y | Party details are required. Multiple valid PartyID's can be in the request as long as they belong to the same PartyRole. Requests with different PartyRole's will be rejected. |
Snapshot
Client systems can request a snapshot of trades within the past 30 calendar days, using Trade Capture Report Request (tag 35-MsgType = AD).
Key request tags are noted below.
tag 569-TradeRequestType = 1 (Matching trades)
tag 263-SubscriptionRequestType = 0 (Snapshot)
tag 453-NoPartyIDs ≥ 1 and tag 448-PartyID = Firm ID and tag 452-PartyRole = Firm Role
Note: All PartyRoles must be identical roles within a single request.
tag 9593-StartTime is specified and is within timeframe supported by CME STP FIX
for optional use: snapshot specific filters and/or tag 9594-EndTime are specified
For a valid Snapshot request CME STP FIX will respond with
Trade Capture Report Request Ack (tag 35-MsgType = AQ) with tag 749-TradeRequestResult = 0 (Successful) and tag 750-TradeRequestStatus = 0 (Accepted) to the client system.
List of trades matching the criteria in the Snapshot request.
Trade Capture Report Request Ack (tag 35-MsgType = AQ) with tag 749-TradeRequestResult = 0 (Successful) and tag 750-TradeRequestStatus = 1 (Completed) indicating completion of trade Snapshot to client system.
Example Snapshot Request
Example Snapshot Accepted
Example Snapshot Completed
Subscription
Client systems can request a snapshot of trades along with a continued subscription of realtime trades using Trade Capture Report Request (tag 35-MsgType = AD).
Key request tags are noted below.
tag 569-TradeRequestType = 1 (Matching trades)
tag 263-SubscriptionRequestType = 1 (Snapshot + Subscription)
tag 453-NoPartyIDs ≥ 1 and tag 448-PartyID = Firm ID and tag 452-PartyRole = Firm Role
Note: All PartyRoles must be identical roles within a single request.
tag 779-LastUpdateTime can be optionally specified and is within timeframe supported by CME STP FIX
For a valid Subscription request CME STP FIX will respond with
Trade Capture Report Request Ack (tag 35-MsgType = AQ) with tag 749-TradeRequestResult = 0 (Successful) and tag 750-TradeRequestStatus = 0 (Accepted) to the client system.
If tag 779-LastUpdateTime value is specified, a list of past trades will be delivered before realtime trades.
If tag 779-LastUpdateTime isn't provided in the request, only realtime trades are delivered to the client system.
After a successful subscription CME STP FIX will continue to send realtime trade data, as well as FIX Heartbeat messages (tag 35-MsgType = 0) at negotiated intervals in cases of no trade data.
Client systems must send FIX Heartbeat messages (tag 35-MsgType = 0) at negotiated intervals to keep the FIX Session alive.
Example Subscription Request
Example Subscription Accepted
Restarting a Subscription
CME STP FIX does not support the Unsubscribe feature (FIX: tag 263-SubscriptionRequestType = 2(Unsubscribe)) using the Trade Capture Report Request (tag 35-MsgType = AD).
When client systems detect a lost connection or session that is established with CME STP FIX, they are expected to re-login to re-establish the session and restart a new subscription.
Client systems should follow the Logon and Subscription sections described above while reestablish their FIX Session to CME STP FIX.
It is recommended that client systems specify a value in tag 779-LastUpdateTime of the Trade Capture Report Request (tag 35-MsgType = AD) with one or more minutes prior to the value of tag 779-LastUpdateTime from the last trade they received, to cover any missing trades.
Duplicate message detection
To detect duplicate trades, client systems can use tag 571-TradeReportID which is a unique message ID for the trade being reported.
Legs of spreads can share the same message ID. However, tag 1040-SecondaryTradeID and tag 571-TradeReportID together will form a unique key.
Error Handling
Client systems should note that Error conditions or failures could occur while establishing a new FIX session and/or during an on-going session.
Logon - Unsuccessful
The FIX Client sends a Logon (tag 35-MsgType = A) message to CME STP FIX in order to establish a FIX session.
CME STP FIX rejects login attempts with a Logout (tag 35-MsgType = 5) message, with tag 58-Text populated with the reason for Reject.
The FIX sessions between the FIX Client and CME STP FIX is not established and the TCP/IP connection is terminated.
Clients will fix issues on their end and re-login to establish the FIX Session.
Client Sequence Number Less Than Expected
The FIX Client will be disconnected if it sends a sequence number less than what is expected by CME STP FIX.
Clients will fix issues on their end and re-login to establish the FIX Session.
Trade Snapshot Request: Failed Request – Missing Start Time or Invalid Combination of Filters
FIX Client sends Trade Capture Report Request (tag 35-MsgType = AD) with the following tags:
tag 569-TradeRequestType = 1 (All trades)
tag 263-SubscriptionRequestType = 0 (Snapshot)
tag 453-NoPartyIDs ≥ 1 and tag 448-PartyID = Firm ID and tag 452-PartyRole = Firm Role
Note: All PartyRoles must be identical within a single request.
tag 9593-StartTime is absent or invalid combination of snapshot specific filters is specified.
CME STP FIX sends Trade Capture Report Request Ack (tag 35-MsgType = AQ) with tag 749-TradeRequestResult = 0 (Successful) and tag 750-TradeRequestStatus = 0 (Accepted) to FIX Client.
CME STP FIX rejects subscription with Trade Capture Report Request Ack (tag 35-MsgType =AQ) with tag 750-TradeRequestStatus = 2 (Rejected), tag 749-TradeRequestResult = 9 (Unauthorized for Trade Capture Report Request) and tag 58-Text containing the reject reason.
Subscription with Multiple FirmIDs: Failed Request – at Least One FirmID is Invalid
Preconditions: Customer has successfully logged in to CME STP FIX interface using Logon (tag 35-MsgType=A) message.
FIX Client sends Trade Capture Report Request (tag 35-MsgType = AD) with the following tags:
tag 569-TradeRequestType = 1 (All trades)
tag 263-SubscriptionRequestType = 0 (Snapshot) or 1 (Subscription)
tag 453-NoPartyIDs = 2
tag 448-PartyID = Firm ID_A and tag 452-PartyRole = Firm Role (the same for all entries)
tag 448-PatryID = Firm ID_B and tag 452-PartyRole = Firm Role (the same for all entries)
CME STP FIX sends Trade Capture Report Request Ack (tag 35-MsgType = AQ) with tag 750-TradeRequestStatus = 2 (Rejected), tag 749-TradeRequestResult = 9 (Unauthorized for Trade Capture Report Request) and tag 58-Text = 'Authorization FAILED: Authenticated User <<Logged in API ID>> can NOT query on behalf of [FirmID_A] as [Firm Role value]' to FIX Client.
Subscription with Multiple FirmIDs: Failed Request – Specified FirmIDs have Different Party Roles
Preconditions: Customer has successfully logged in to CME STP FIX interface using Logon (tag 35-MsgType=A) message.
FIX Client sends Trade Capture Report Request (tag 35-MsgType = AD) with the following tags:
tag 569-TradeRequestType = 1 (All trades)
tag 263-SubscriptionRequestType = 0 (Snapshot) or 1 (Subscription)
tag 453-NoPartyIDs = 2
tag 448-PartyID = Firm ID_A and tag 452-PartyRole = Firm Role (different from the second entry)
tag 448-PartyID = Firm ID_B and tag 452-PartyRole = Firm Role (different from the first entry)
CME STP FIX sends Trade Capture Report Request Ack (tag 35-MsgType = AQ) with tag 750-TradeRequestStatus = 2 (Rejected), tag 749-TradeRequestResult = 9 (Unauthorized for Trade Capture Report Request) and tag 58-Text = 'Invalid PtyR. Only one role may be queried for at a time' to FIX Client.
Duplicate Subscription Request
Preconditions: FIX session between FIX Client and CME STP FIX is established; FIX Client is successfully subscribed for CME STP data
FIX Client sends duplicate Trade Capture Report Request (tag 35-MsgType=AD) to CME STP FIX.
CME STP FIX rejects subscription with Trade Capture Report Request Ack (tag 35-MsgType =AQ) having tag 750-TradeRequestStatus = 2 (Rejected), tag 749-TradeRequestResult = 9 (Unauthorized for Trade Capture Report Request) and tag 58-Text = Illegal subscription request.
CME STP FIX does not interrupt existing FIX Client's subscription to CME Group trades.
Service Availability - Internal Errors
On rare occasions, the CME STP FIX gateway may be available to clients but upstream CME Group systems are unavailable. In these scenarios, CME STP FIX clients would experience the following messaging flows.
Internal Error – Client Logon
If CME STP FIX does not have access to upstream CME Group systems:
Logon requests will be rejected by CME STP FIX with a Logout message.
Clients should continue to retry Logons no more frequently than one message every 30 seconds.
Internal Error – Before First TradeCaptureReportRequest (AD)
If CME STP FIX losses access to upstream CME Group systems after a successful Logon:
CME STP FIX will send a TradeCaptureReportRequestAck with error in tag 58-Text, on loss of access to upstream CME Group systems.
Clients should retry a TradeCaptureReportRequest no more frequently than one message every 30 seconds.
Internal Error – After First TradeCaptureReportRequest (AD)
If CME STP FIX losses access to upstream CME Group systems after a successful TradeCaptureReportRequest:
CME STP FIX will send an unsolicited TradeCaptureReportRequestAck with error in tag 58-Text.
Clients should resend Trade Capture Report Requests no more frequently than one message every 30 seconds.
Scenario | Triggering Client Message | Identifying CME STP FIX Message | Client Response |
---|---|---|---|
Internal Error at Client Login | Logon (35=A) | Logon Reject with Logout (35=5) | Resend Logon (35=A) every 30 seconds until successful |
Internal Error Before Trade Capture Report Request | Trade Capture Report Request (35=AD) | Trade Capture Report Request Acknowledgment (35=AQ) where tag 749-TradeRequestResult = 99 (Other) tag 750 TradeRequestStatus = 1 (Completed) tag 58-Text = Transport Error: Connection to CME was lost | Resend Trade Capture Report Request (35=AD) every 30 seconds until successful |
Internal Error After a Successful Trade Capture Report Request | Unsolicited | Trade Capture Report Request Acknowledgment (35=AQ) where tag 749-TradeRequestResult = 99 (Other) tag 750 TradeRequestStatus = 1 (Completed) tag 58-Text = Transport Error: Connection to CME was lost | Resend Trade Capture Report Request (35=AD) every 30 seconds until successful |
How was your Client Systems Wiki Experience? Submit Feedback
Copyright © 2024 CME Group Inc. All rights reserved.