FIXT.1.1 and ApplVerID Explained
From FIX 5.0 the session layer is its own protocol, FIXT.1.1, and the application version is stated separately. One FIXT.1.1 session can carry FIX 5.0 SP2 messages, or a mix of application versions, without changing the session rules.
What FIXT.1.1 changes
- BeginString (8) is FIXT.1.1 for every FIX 5.0, 5.0 SP1 and 5.0 SP2 session. It names the session protocol only.
- The session messages (Logon, Heartbeat, TestRequest, ResendRequest, Reject, SequenceReset, Logout) and their rules stay as in FIX 4.4.
- The application version is given by DefaultApplVerID (1137) on the Logon and, per message, by ApplVerID (1128).
ApplVerID codes
| Code | Application version |
|---|---|
| 2 | FIX 4.0 |
| 3 | FIX 4.1 |
| 4 | FIX 4.2 |
| 5 | FIX 4.3 |
| 6 | FIX 4.4 |
| 7 | FIX 5.0 |
| 8 | FIX 5.0 SP1 |
| 9 | FIX 5.0 SP2 |
| 10 | FIX Latest |
Both DefaultApplVerID (1137) and ApplVerID (1128) take these codes. Sending the name, such as FIX50SP2, is a common mistake.
The FIXT.1.1 Logon
The Logon must carry DefaultApplVerID (1137). It can also list, for each message type, the application version a side supports, through the NoMsgTypes (384) group with RefMsgType (372), MsgDirection (385) and RefApplVerID (1130).
Both sides agree FIX 5.0 SP2 as the default application version.
1. Initiator: Logon with 1137=9
8=FIXT.1.1|9=77|35=A|49=BUYSIDE|56=SELLSIDE|34=1|52=20261020-07:00:00.000|98=0|108=30|1137=9|10=227|
2. Acceptor: Logon response
8=FIXT.1.1|9=77|35=A|49=SELLSIDE|56=BUYSIDE|34=1|52=20261020-07:00:00.005|98=0|108=30|1137=9|10=232|
SOH (0x01) is shown as |. BodyLength (9) and CheckSum (10) are calculated as if every | were SOH.
Open this example in the parserApplVerID on a message
A message without ApplVerID (1128) uses the default from the Logon. Put ApplVerID in the header only when a message uses another version. CstmApplVerID (1129) names a custom application version, and ApplExtID (1156) an extension pack.
A New Order Single on the default version, then one sent explicitly as FIX 5.0 SP2.
1. Uses the session default (no 1128)
8=FIXT.1.1|9=130|35=D|49=BUYSIDE|56=SELLSIDE|34=2|52=20261020-07:00:05.000|11=ORD-3001|55=MSFT|54=1|60=20261020-07:00:05.000|38=100|40=2|44=187.50|10=137|
2. States its version in the header (1128=9)
8=FIXT.1.1|9=137|35=D|1128=9|49=BUYSIDE|56=SELLSIDE|34=3|52=20261020-07:00:06.000|11=ORD-3002|55=MSFT|54=1|60=20261020-07:00:06.000|38=100|40=2|44=187.50|10=215|
SOH (0x01) is shown as |. BodyLength (9) and CheckSum (10) are calculated as if every | were SOH.
Open this example in the parserEngine configuration
- A FIXT.1.1 session needs two dictionaries: the transport dictionary (FIXT 1.1) for the header, trailer and session messages, and an application dictionary (for example FIX 5.0 SP2) for everything else. In QuickFIX these are the TransportDataDictionary and AppDataDictionary settings.
- The initiator also needs the default application version configured; QuickFIX calls the setting DefaultApplVerID.
Questions
- What is the BeginString for FIX 5.0 SP2?
- FIXT.1.1. The application version is carried by DefaultApplVerID (1137) on the Logon and, when needed, ApplVerID (1128) on a message.
- Do I need ApplVerID on every message?
- No. Messages without it use the DefaultApplVerID agreed at logon. Add it only to messages that use another version.