SecurityIDSource (FIX tag 22)

StringFIX 4.4FIX 4.2

SecurityIDSource (tag 22) is a String field defined in FIX 4.4 and FIX 4.2. It appears in 59 message types, always optionally. It is an enumerated field with 19 defined values. FIX 4.2 calls this field IDSource; the tag number is unchanged, so the two are the same field on the wire.

Also known as IDSource
FIX 4.2 calls tag 22 IDSource. It is the same field on the wire — only the name changed — so a message encoded by either side interoperates.

At a glance

Tag
22
Name
SecurityIDSource
Datatype
String
Dialects
FIX 4.4 and FIX 4.2
Messages
59
Valid values
19

What the specification says

FIX 4.4

Identifies class or source of the SecurityID (48) value. Required if SecurityID is specified.

FIX 4.2

Identifies class of alternative SecurityID

Descriptions are quoted from the FIX Orchestra sources under the Apache 2.0 licence.

A real message using tag 22

NewOrderSingle · FIX 4.4
TagFieldWire valueMeaning
8BeginStringFIX.4.4
9BodyLength116
35MsgTypeDOrder – Single
49SenderCompIDBOARTEAM
56TargetCompIDCOUNTERPARTY
34MsgSeqNum2
52SendingTime20240101-12:00:00.000
11ClOrdIDORD-10042
22SecurityIDSource1CUSIP
54Side1Buy
60TransactTime20240101-12:00:00.000
40OrdType1Market
10CheckSum200
Edit and decode it yourself

Shown with | separators for readability. On the wire FIX uses SOH (0x01), an invisible control byte — and because BodyLength and CheckSum are computed over the actual bytes, the two forms have different checksums. Both are valid and both decode here.

Open in the full decoder →

Generated from the FIX 4.4 dictionary and verified at build time: it parses and validates with no issues. Open the decoder to try your own message.

Valid values

A value outside this list is not a parse error — the message still decodes — but validate() reports it as validate/value-not-in-enum.

ValueMeaningSymbolic nameDialects
1CUSIPCUSIPFIX 4.4, FIX 4.2
2SEDOLSEDOLFIX 4.4, FIX 4.2
3QUIKQUIKFIX 4.4, FIX 4.2
4ISIN numberISIN_NUMBER / ISINNumberFIX 4.4, FIX 4.2
5RIC codeRIC_CODE / RICCodeFIX 4.4, FIX 4.2
6ISO Currency CodeISO_CURRENCY_CODE / ISOCurrencyCodeFIX 4.4, FIX 4.2
7ISO Country CodeISO_COUNTRY_CODE / ISOCountryCodeFIX 4.4, FIX 4.2
8Exchange SymbolEXCHANGE_SYMBOL / ExchangeSymbolFIX 4.4, FIX 4.2
9Consolidated Tape Association (CTA) Symbol (SIAC CTS/CQS line format)CONSOLIDATED_TAPE_ASSOCIATION / ConsolidatedTapeAssociationFIX 4.4, FIX 4.2
ABloomberg SymbolBLOOMBERG_SYMBOLFIX 4.4
BWertpapierWERTPAPIERFIX 4.4
CDutchDUTCHFIX 4.4
DValorenVALORENFIX 4.4
ESicovamSICOVAMFIX 4.4
FBelgianBELGIANFIX 4.4
G"Common" (Clearstream and Euroclear)COMMONFIX 4.4
HClearing House / Clearing OrganizationCLEARING_HOUSEFIX 4.4
IISDA/FpML Product SpecificationISDA_FPML_PRODUCT_SPECIFICATIONFIX 4.4
JOptions Price Reporting AuthorityOPTIONS_PRICE_REPORTING_AUTHORITYFIX 4.4

Where tag 22 appears

Requiredness is a property of the message, not of the field: the same tag can be optional in one message and conditionally required in another.

MessageMsgTypeFIX 4.4FIX 4.2Where in the message
Advertisement7ConditionalOptionalinside the Instrument component
AllocationInstructionJConditionalOptionalinside the Instrument component
AllocationReportASConditionalinside the Instrument component
AssignmentReportAWConditionalinside the Instrument component
CollateralAssignmentAYConditionalinside the Instrument component
CollateralInquiryBBConditionalinside the Instrument component
CollateralInquiryAckBGConditionalinside the Instrument component
CollateralReportBAConditionalinside the Instrument component
CollateralRequestAXConditionalinside the Instrument component
CollateralResponseAZConditionalinside the Instrument component
ConfirmationAKConditionalinside the Instrument component
CrossOrderCancelReplaceRequesttConditionalinside the Instrument component
CrossOrderCancelRequestuConditionalinside the Instrument component
DerivativeSecurityListAAConditionalinside RelSymDerivSecGrp › Instrument
DontKnowTradeQConditionalOptionalinside the Instrument component
EmailCConditionalOptionalinside InstrmtGrp › Instrument
ExecutionReport8ConditionalOptionalinside the Instrument component
IOI6ConditionalOptionalinside the Instrument component
ListStrikePricemConditionalOptionalinside InstrmtStrkPxGrp › Instrument
MarketDataIncrementalRefreshXConditionalOptionalinside MDIncGrp › Instrument
MarketDataRequestVConditionalOptionalinside InstrmtMDReqGrp › Instrument
MarketDataSnapshotFullRefreshWConditionalOptionalinside the Instrument component
MassQuoteiConditionalOptionalinside QuotSetGrp › QuotEntryGrp › Instrument
MassQuoteAcknowledgementbConditionalOptionalinside QuotSetAckGrp › QuotEntryAckGrp › Instrument
MultilegOrderCancelReplaceACConditionalinside the Instrument component
NewOrderCrosssConditionalinside the Instrument component
NewOrderListEConditionalOptionalinside ListOrdGrp › Instrument
NewOrderMultilegABConditionalinside the Instrument component
NewOrderSingleDConditionalOptionalinside the Instrument component
NewsBConditionalOptionalinside InstrmtGrp › Instrument
OrderCancelReplaceRequestGConditionalOptionalinside the Instrument component
OrderCancelRequestFConditionalOptionalinside the Instrument component
OrderMassCancelReportrConditionalinside the Instrument component
OrderMassCancelRequestqConditionalinside the Instrument component
OrderMassStatusRequestAFConditionalinside the Instrument component
OrderStatusRequestHConditionalOptionalinside the Instrument component
PositionMaintenanceReportAMConditionalinside the Instrument component
PositionMaintenanceRequestALConditionalinside the Instrument component
PositionReportAPConditionalinside the Instrument component
QuoteSConditionalOptionalinside the Instrument component
QuoteCancelZConditionalOptionalinside QuotCxlEntriesGrp › Instrument
QuoteRequestRConditionalOptionalinside QuotReqGrp › Instrument
QuoteRequestRejectAGConditionalinside QuotReqRjctGrp › Instrument
QuoteResponseAJConditionalinside the Instrument component
QuoteStatusReportAIConditionalinside the Instrument component
QuoteStatusRequestaConditionalOptionalinside the Instrument component
RFQRequestAHConditionalinside RFQReqGrp › Instrument
RequestForPositionsANConditionalinside the Instrument component
RequestForPositionsAckAOConditionalinside the Instrument component
SecurityDefinitiondConditionalOptionalinside the Instrument component
SecurityDefinitionRequestcConditionalOptionalinside the Instrument component
SecurityListyConditionalinside SecListGrp › Instrument
SecurityListRequestxConditionalinside the Instrument component
SecurityStatusfConditionalOptionalinside the Instrument component
SecurityStatusRequesteConditionalOptionalinside the Instrument component
TradeCaptureReportAEConditionalinside the Instrument component
TradeCaptureReportAckARConditionalinside the Instrument component
TradeCaptureReportRequestADConditionalinside the Instrument component
TradeCaptureReportRequestAckAQConditionalinside the Instrument component

Wire format

Free-form text. Any byte except the SOH separator is legal, so values are not trimmed or case-folded on the wire. @boarteam/fix keeps the value as a string; format rules are checked by validate(), which reports validate/invalid-value rather than throwing.

Read tag 22 in TypeScript

decode.tsts
import { createFixEngine } from "@boarteam/fix";import { dictionary } from "@boarteam/fix-dict-fix44";const fix = createFixEngine(dictionary);const { message, issues } = fix.parse(raw);const securityIDSource = message.fields[22]?.raw;// e.g. "1" — CUSIP// The dictionary also carries the labels:const label = fix.dictionary  .fieldByTag(22)  ?.enumValues?.find((e) => e.value === securityIDSource)  ?.description;

Other String fields

Decode this in your own code

The same engine that produced the decoded example above is an Apache-2.0 npm package with zero runtime dependencies. It runs in Node and in the browser, and parse() returns problems as data instead of throwing.

npm i @boarteam/fix @boarteam/fix-dict-fix44