ZagTrader

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. 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. 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 parser

Questions

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.

Reference

Related errors

All FIX errors · FIX guides