Session-level rejects (35=3)
Invalid tag number / Undefined tag (373=0 and 373=3)
The message carries a tag number the receiver does not know at all. The FIX standard has two codes for this: 373=0 Invalid tag number and 373=3 Undefined tag. Which one you get depends on the engine.
What it means
Unlike 373=2, where the tag is known but misplaced, here the receiver's dictionary has no field with that number in any message.
Tags 5000 to 9999 are for user-defined fields registered with the FIX Trading Community, and tags 10000 and above are for a firm's internal use. A firm-specific tag that one counterparty accepts will be unknown to the next one.
Common causes
- A custom tag sent to a counterparty whose dictionary does not include it.
- A typo in the tag number, or a number from a newer FIX version.
- An SOH inside a text value, which splits one field into two so that part of the value is parsed as a tag.
- A message assembled with two delimiters (for example | in one part and SOH in another).
How to fix it
On the side that sent the message
- Remove the tag, or agree it with the counterparty and have them add it to their dictionary.
- Strip or escape SOH from free text before it goes into Text (58) or any STRING field.
On the side that raised the error
- If you want to accept unknown user-defined tags, QuickFIX has the ValidateUserDefinedFields setting; set it to N.
- Report the tag number in RefTagID (371) so the sender can find it quickly.
Example
A New Order Single carrying custom tag 7001, sent to a counterparty that has not defined it.
1. Buy side: New Order Single with tag 7001
8=FIX.4.4|9=154|35=D|49=BUYSIDE|56=SELLSIDE|34=71|52=20261020-09:45:00.000|11=ORD-1001|21=1|55=MSFT|54=1|60=20261020-09:30:00.000|38=1000|40=2|44=187.50|59=0|7001=DESK-A|10=244|
2. Sell side: Reject, RefTagID 7001
8=FIX.4.4|9=109|35=3|49=SELLSIDE|56=BUYSIDE|34=940|52=20261020-09:45:00.002|45=71|371=7001|372=D|373=0|58=Invalid tag number|10=032|
SOH (0x01) is shown as |. BodyLength (9) and CheckSum (10) are calculated as if every | were SOH.
Open this example in the parserQuestions
- What is the difference between 373=0 and 373=3?
- Both say the receiver does not recognise the tag. The FIX standard defines both codes and engines differ in which one they use; treat them the same way.