NDB LLC. reserves the right to change the specification of the FIX interface.

Introduction

Overview

BBO operates FIX Market Data Gateways which allow users to receive Market Data using standard FIX 4.4 messages.

Messages sizes

Inbound message size limit

The BBO FIX Trading Gateways have a maximum inbound message limit of 32768 bytes. If a message is received which exceeds this size, the client will be logged off.

Outbound message size

The BBO FIX Trading Gateway will never publish messages greater than 16384 bytes.

Session Resetting

In case of quotes connection, FIX Session sequence numbers are reset with each client's login/logout.

Messages

Supported Messages

BBO supports the following FIX message types.

TypeNameDescription
0HeartbeatMessage sent during quite intervals on the connection to ensure that connection is still alive.
1TestRequestMessage used to request a HeartBeat from the counterparty to allow round trip testing of the connection.
2ResendRequestMessage used to request a replay of messages from the counter party.
3RejectSent in response to a message which is structurally invalid (i.e. invalid or missing tag or ill-formed tag-value).
4SequenceResetSequenceReset.
5LogoutMessage used to terminate a FIX connection. Can be sent by the client or the BBO FIX Gateway.
ALogonMessage used to establish a connection between a client and the BBO FIX Gateway.
VMarketDataRequestMessage sent by the client to request market data.
WMarketDataSnapshotFullRefreshMessage sent by BBO containing changes in market data

Standard Message Components

StandardHeader

TagTag NameDescriptionRequiredData Type
8BeginStringThe FIX version number identifier. Always 'FIX.4.4'YString
9BodyLengthLength of the FIX Message.YLength
35MsgTypeThe type of the message.YString
49SenderCompIDIdentifier for the sender of the message.YString
56TargetCompIDIdentifier for the receiver of the message.YString
34MsgSeqNumThe unique sequence number for the message within current FIX session.YSeqNum
43PossDupFlagAlways required for retransmitted messages, whether prompted by the sending system or as the result of a resend request. Set to 'Y' if this is a resent message. N Boolean
52SendingTimeTime message was sent. YUTCTimestamp
122OrigSendingTimeTimestamp when message was originally sent. Required for message resent as a result of a ResendRequest. N UTCTimestamp

StandardTrailer

TagTag NameDescriptionRequiredData Type
10CheckSumChecksum for message contents.YString

Instrument

TagTag NameDescriptionRequiredData Type
48SecurityIDMust contain the BBO orderbook id.YString
22SecurityIDSourceMust contain the value '8' (Exchange Symbol)YString

InstrmtMDReqGrp

TagTag NameDescriptionRequiredData Type
146NoRelatedSymSpecifies the number of repeating symbols specified. YNumInGroup
InstrumentY

MDReqGrp

TagTag NameDescriptionRequiredData Type
267NoMDEntryTypesNumber of MDEntryType (269) fields requested. YNumInGroup
269MDEntryTypeType Market Data entry. BBO supported values: 0 = Bid 1 = Offer BBO only allows subscription to both bid and ask at the same time. If only 0 or 1 is specified individually for a Market Data Request, then the request will be rejected. Ychar

MDFullGrp

TagTag NameDescriptionRequiredData Type
268NoMDEntriesNumber of entries in Market Data message. YNumInGroup
269MDEntryTypeType Market Data entry. BBO supported values: 0 = Bid 1 = Offer Ychar
270MDEntryPxPrice of the Market Data Entry. N Price
271MDEntrySizeQuantity or volume represented by the Market Data Entry. N Qty
272MDEntryDateDate of Market Data Entry. This tag will only be present on the first entry in the repeating group N UTCDateOnly
273MDEntryTimeTime of Market Data Entry. This tag will only be present on the first entry in the repeating group N UTCTimeOnly
282MDEntryOriginatorOriginator of a Market Data Entry. N String

Message Descriptions

Heartbeat

Message sent during quite intervals on the connection to ensure that connection is still alive.

TagTag NameDescriptionRequiredData Type
StandardHeaderY MsgType= 0
112TestReqIDRequired when the heartbeat is the result of a Test Request message. N String
StandardTrailerY

TestRequest

Message used to request a HeartBeat from the counterparty to allow round testing trip of the connection.

TagTag NameDescriptionRequiredData Type
StandardHeaderY MsgType= 1
112TestReqIDIdentifier included in Test Request message to be returned in resulting Heartbeat YString
StandardTrailerY

ResendRequest

Message used to request a replay of messages from the counter party.

TagTag NameDescriptionRequiredData Type
StandardHeaderY MsgType= 2
7BeginSeqNoMessage sequence number of first message in range to be resentYSeqNum
16EndSeqNoMessage sequence number of last message in range to be resent. If request is for a single message BeginSeqNo (7) = EndSeqNo. If request is for all messages subsequent to a particular message, EndSeqNo = “0” (representing infinity).YSeqNum
StandardTrailerY

Reject

Sent in response to a message which is structurally invalid (i.e. invalid or missing tag or ill-formed tag-value).

TagTag NameDescriptionRequiredData Type
StandardHeaderY MsgType= 3
45RefSeqNumMsgSeqNum of rejected message YSeqNum
373SessionRejectReasonCode to identify reason for a session-level Reject message. N int
58TextWhere possible, message to explain reason for rejection N String
StandardTrailerY

SequenceReset

SequenceReset

TagTag NameDescriptionRequiredData Type
StandardHeaderY MsgType= 4
123GapFillFlagIndicates that the Sequence Reset message is replacing administrative or application messages which will not be resent. Valid values: Y = Gap Fill message, MsgSeqNum field valid N = Sequence Reset, ignore MsgSeqNum N Boolean
36NewSeqNoNew sequence number YSeqNum
StandardTrailerY

Logout

Message used to terminate a FIX connection. Can be sent by the client or the BBO FIX Gateway.

TagTag NameDescriptionRequiredData Type
StandardHeaderY MsgType= 5
58TextIf BBO logs out a client this may contain a text description for the reason for the logout. N String
StandardTrailerY

Logon

The Logon message must be the first message Client sends after establishing a TCP connection on the port agreed upon with BBO. Client must wait for a Logon from BBO before sending other messages and beginning gap fill operations.

TagTag NameDescriptionRequiredData Type
StandardHeaderY MsgType= A
98EncryptMethodAlways '0' - None Yint
108HeartBtIntAlways '30' - 30 seconds. Yint
141ResetSeqNumFlagIndicates both sides of a FIX session should reset sequence numbers. This is default for quote connection. N Boolean
553UsernameBBO username. This is required on the login message sent by the client! Y String
554PasswordBBO Password or passphrase. This is REQUIRED on the login message sent by the client Y String
StandardTrailerY

MarketDataRequest

Message sent by the client to request market data. Currently top of book bid and ask prices and volumes are available.

TagTag NameDescriptionRequiredData Type
StandardHeaderY MsgType= V
262MDReqIDID of Market Data Request. YString
263SubscriptionRequestTypeSubcriptionRequestType indicates to the other party what type of response is expected. BBO supported values: 1 - Snapshot + Updates (Subscribe) Ychar
264MarketDepthDepth of market for Book Snapshot BBO supported values: 0 = Full Depth (BBO supports a maximum of 20 levels of depth) 1 = Top of Book 2-20 = Report best N price tiers of data, up to 20 levels. Yint
265MDUpdateTypeRequired if SubscriptionRequestType = Snapshot + Updates (1). BBO supported values 0 - Full Refresh. N int
MDReqGrpY
InstrmtMDReqGrpY
StandardTrailerY

MarketDataSnapshotFullRefresh

TagTag NameDescriptionRequiredData Type
StandardHeaderY MsgType= W
InstrumentY
MDFullGrpY
StandardTrailerY

Tags

TagTag NameTypeDescription
1AccountStringAccount mnemonic as agreed between buy and sell sides, e.g. broker and institution or investor/intermediary and fund manager.
6AvgPxPriceNot supported by BBO - always 0
7BeginSeqNoSeqNumMessage sequence number of first message in range to be resent
8BeginStringStringIdentifies beginning of new message and protocol version. ALWAYS FIRST FIELD IN MESSAGE. (Always unencrypted). Valid values: * FIX.4.4
9BodyLengthLengthMessage length, in bytes, forward to the CheckSum field. ALWAYS SECOND FIELD IN MESSAGE. (Always unencrypted)
10CheckSumStringThree byte, simple checksum (see Volume 2: “Checksum Calculation” for description). ALWAYS LAST FIELD IN MESSAGE; i.e. serves, with the trailing <SOH>, as the end-of-message delimiter. Always defined as three characters. (Always unencrypted)
16EndSeqNoSeqNumMessage sequence number of last message in range to be resent. If request is for a single message BeginSeqNo (7) = EndSeqNo. If request is for all messages subsequent to a particular message, EndSeqNo = “0” (representing infinity).
22SecurityIDSourceStringIdentifies class or source of the SecurityID (48) value. Required if SecurityID is specified. BBO Supported values are: 8 = Exchange Symbol
34MsgSeqNumSeqNumInteger message sequence number.
35MsgTypeStringDefines message type ALWAYS THIRD FIELD IN MESSAGE. (Always unencrypted) Valid values: *** Note the use of lower case letters *** 0 = Heartbeat 1 = Test Request 2 = Resend Request 3 = Reject 4 = Sequence Reset 5 = Logout A = Logon V = Market Data Request W = Market Data-Snapshot/Full Refresh Y = Market Data Request Reject
36NewSeqNoSeqNumNew sequence number
43PossDupFlagBooleanIndicates possible retransmission of message with this sequence number Valid values: Y = Possible duplicate N = Original transmission
45RefSeqNumSeqNumReference message sequence number
48SecurityIDStringBBO Security identifier. Requires SecurityIDSource=8. This is usualy the symbol name as you can see it in BBO GUI.
49SenderCompIDStringAssigned value used to identify firm sending message.
52SendingTimeUTCTimestampTime of message transmission (always expressed in UTC (Universal Time Coordinated, also known as “GMT”)
56TargetCompIDStringAssigned value used to identify receiving firm.
58TextStringFree format text string (Note: this field does not have a specified maximum length)
89SignaturedataElectronic signature
93SignatureLengthLengthNumber of bytes in signature field.
95RawDataLengthLengthNumber of bytes in raw data field.
96RawDatadataUnformatted raw data, can include bitmaps, word processor documents, etc.
97PossResendBooleanIndicates that message may contain information that has been sent under another sequence number. Valid Values: Y=Possible resend N=Original transmission BBO will never populate this tag with any value other than 'N' on messages sent by BBO. BBO will ignore this tag on any messages received by BBO and the treat the message as having been sent with PossResend='N'.
98EncryptMethodintMethod of encryption. Valid values: 0 = None / other BBO does not support encryption at the FIX layer. All messages are sent over an SSL encrypted connection. Supported values:
108HeartBtIntintHeartbeat interval (seconds)
112TestReqIDStringIdentifier included in Test Request message to be returned in resulting Heartbeat
122OrigSendingTimeUTCTimestampOriginal time of message transmission (always expressed in UTC (Universal Time Coordinated, also known as “GMT”) when transmitting orders as the result of a resend request.
123GapFillFlagBooleanIndicates that the Sequence Reset message is replacing administrative or application messages which will not be resent. Valid values: Y = Gap Fill message, MsgSeqNum field valid N = Sequence Reset, ignore MsgSeqNum
141ResetSeqNumFlagBooleanIndicates that the both sides of the FIX session should reset sequence numbers. Valid values: Y = Yes, reset sequence numbers N = No
146NoRelatedSymNumInGroupSpecifies the number of repeating symbols specified.
262MDReqIDStringUnique identifier for Market Data Request. MDReqId is restricted to a maximum of 16 lowercase hexadecimal characters [0123456789abcdef] with no leading 0 characters (this is a positive 64bit number represented in hexadecimal excluding 0). Must be unique for all current Market Data Requests. If a new Market Data Request (excluding unsubscribtion requests) is received with the same MDReqId as a current Market Data Request then the new request will be rejected as a duplicate.
263SubscriptionRequestTypecharSubscription Request Type Valid values: 0 = Snapshot; 1 = Snapshot + Updates (Subscribe); 2 = Disable previous Snapshot + Update Request (Unsubscribe);
264MarketDepthintDepth of market for Book Snapshot BBO supported values: 0 = Full Depth (BBO supports a maximum of 20 levels of depth) 1 = Top of Book 2-20 = Report best N price tiers of data, up to 20 levels.
265MDUpdateTypeintSpecifies the type of Market Data update. BBO supported values: 0 = Full Refresh
267NoMDEntryTypesNumInGroupNumber of MDEntryType (269) fields requested.
268NoMDEntriesNumInGroupNumber of entries in Market Data message.
269MDEntryTypecharType Market Data entry. BBO supported values: 0 = Bid 1 = Offer
270MDEntryPxPricePrice of the Market Data Entry.
271MDEntrySizeQtyQuantity or volume represented by the Market Data Entry.
272MDEntryDateUTCDateOnlyDate of Market Data Entry.
273MDEntryTimeUTCTimeOnlyTime of Market Data Entry.
281MDReqRejReasoncharReason for the rejection of a Market Data request. Valid values: 0 = Unknown symbol 1 = Duplicate MDReqID 2 = Insufficient Bandwidth 3 = Insufficient Permissions 4 = Unsupported SubscriptionRequestType 5 = Unsupported MarketDepth 6 = Unsupported MDUpdateType 7 = Unsupported AggregatedBook 8 = Unsupported MDEntryType 9 = Unsupported TradingSessionID A = Unsupported Scope B = Unsupported OpenCloseSettleFlag C = Unsupported MDImplicitDelete
354EncodedTextLenLengthUnused by BBO. Byte length of encoded (non-ASCII characters) EncodedText (355) field.
355EncodedTextdataUnused by BBO. Encoded (non-ASCII characters) representation of the Text (58) field in the encoded format specified via the MessageEncoding (347) field. If used, the ASCII (English) representation should also be specified in the Text field.
371RefTagIDintThe tag number of the FIX field being referenced.
372RefMsgTypeStringThe MsgType (35) of the FIX message being referenced.
373SessionRejectReasonintCode to identify reason for a session-level Reject message. Valid values: 0 = Invalid tag number 1 = Required tag missing 2 = Tag not defined for this message type 3 = Undefined Tag 4 = Tag specified without a value 5 = Value is incorrect (out of range) for this tag 6 = Incorrect data format for value 7 = Decryption problem 8 = Signature problem 9 = CompID problem 10 = SendingTime accuracy problem 11 = Invalid MsgType 12 = XML Validation error 13 = Tag appears more than once 14 = Tag specified out of required order 15 = Repeating group fields out of order 16 = Incorrect NumInGroup count for repeating group 17 = Non “data” value includes field delimiter (SOH character) 99 = Other
383MaxMessageSizeLengthMaximum number of bytes supported for a single message.
384NoMsgTypesNumInGroupNumber of MsgTypes (35) in repeating group.
385MsgDirectioncharSpecifies the direction of the messsage. Valid values: S = Send R = Receive
464TestMessageIndicatorBooleanNot supported by BBO.
553UsernameStringBBO username. This is required on the login message sent by the client
554PasswordStringBBO Password or passphrase. This is required on the login message sent by the client
789NextExpectedMsgSeqNumSeqNumNot supported by BBO.

Data Types

Data TypeDescription
Booleanchar field containing one of two values: 'Y' = True/Yes 'N' = False/No
charChar value, can include any alphanumeric character or punctuation except the delimiter. All char fields are case sensitive (i.e. l != L).
dataBinary (non-ASCII) data.
intSequence of digits without commas or decimals and optional sign character (ASCII characters - and 0 - 9). The sign character utilizes one byte (i.e. positive int is 99999 while negative int is -99999). Note that int values may contain leading zeros (e.g. 00023 = 23).
LengthRepresenting the length in bytes. Value must be positive.
NumInGroupValue that represents the number of repeating values in a group.
PriceValue representing a price. Note the number of decimal places may vary.
QtyValue capable of storing either a whole number (no decimal places) of shares (securities denominated in whole units) or a decimal value containing decimal places for non-share quantity asset classes (securities denominated in fractional units).
SeqNumRepresenting a message sequence number. Value must be positive.
StringAlpha-numeric free format strings; can include any character or punctuation except the delimiter. All char fields are case sensitive (i.e. lmax != BBO).
UTCDateOnly
UTCTimeOnly
UTCTimestampRepresenting Time/date combination represented in UTC (Universal Time Coordinated, also known as GMT ) only accepted in this format : YYYYMMDD-HH:MM:SS (whole seconds). For example 20120321-17:15:03.