FIX version mismatches
FIXT.1.1 and ApplVerID errors (DefaultApplVerID 1137, 373=18)
FIX 5.0 and later run over the FIXT.1.1 session layer. BeginString is FIXT.1.1, the Logon must name the default application version in DefaultApplVerID (1137), and individual messages can override it with ApplVerID (1128). Getting any of these wrong breaks the session or the message.
What it means
In FIX 4.x the BeginString names the whole protocol version. With FIXT.1.1 it names only the session layer, and the application version travels separately: DefaultApplVerID (1137) on the Logon sets the default, ApplVerID (1128) in a message header overrides it for that message.
Both fields carry codes, not names: 7 means FIX 5.0, 8 FIX 5.0 SP1 and 9 FIX 5.0 SP2.
From FIX 5.0 SP1, a receiver that does not support the application version in a message can reject it with 373=18 (Invalid or unsupported application version).
Common causes
- BeginString set to FIX.5.0SP2, which is not a BeginString. Use FIXT.1.1.
- Logon without DefaultApplVerID (1137): the FIXT 1.1 Logon requires it.
- Names instead of codes, such as 1137=FIX50SP2 instead of 1137=9.
- An engine configured with only one dictionary: FIXT sessions need the transport dictionary (FIXT 1.1) and the application dictionary (FIX 5.0 SP2).
- An ApplVerID in a message that the counterparty does not support.
How to fix it
On the initiator
- Send 8=FIXT.1.1 and 1137 on the Logon with the code agreed with the counterparty.
- Only send ApplVerID (1128) on a message when it differs from the default.
- In QuickFIX, configure TransportDataDictionary and AppDataDictionary for FIXT sessions.
On the acceptor
- Name the unsupported version in Text (58) when rejecting with 373=18.
- State the supported ApplVerID codes in your rules of engagement.
Example
A FIXT.1.1 Logon with DefaultApplVerID 9 (FIX 5.0 SP2), then a message using an unsupported ApplVerID and its Reject.
1. Buy side: FIXT.1.1 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. Buy side: New Order Single with 1128=7 (FIX 5.0)
8=FIXT.1.1|9=143|35=D|49=BUYSIDE|56=SELLSIDE|34=2|52=20261020-07:00:05.000|1128=7|11=ORD-1001|55=MSFT|54=1|60=20261020-09:30:00.000|38=1000|40=2|44=187.50|59=0|10=216|
3. Sell side: Reject with 373=18
8=FIXT.1.1|9=122|35=3|49=SELLSIDE|56=BUYSIDE|34=2|52=20261020-07:00:05.002|45=2|371=1128|372=D|373=18|58=Unsupported application version 7|10=013|
SOH (0x01) is shown as |. BodyLength (9) and CheckSum (10) are calculated as if every | were SOH.
Open this example in the parserQuestions
- What BeginString does FIX 5.0 SP2 use?
- FIXT.1.1. The application version is given by DefaultApplVerID (1137) on the Logon and, when needed, ApplVerID (1128) on individual messages.
- What is the ApplVerID code for FIX 5.0 SP2?
- 9. FIX 5.0 is 7 and FIX 5.0 SP1 is 8.