IEX TOPS Specification v1.66
IEX TOPS Specification v1.66
TOPS SPECIFICATION
Version 1.66
Copyright © 2021 Investors’ Exchange LLC. All rights reserved. This document may not be modified, reproduced, or redistributed without the written permission of IEX Group, Inc.
Table of Contents
OVERVIEW ................................................................................................................................................................................... 3
ARCHITECTURE .......................................................................................................................................................................... 3
The quotations received via TOPS provide an aggregated size and do not indicate the number or size of individual
orders at the best bid or ask. Non-displayed orders and non-displayed portions of reserve orders are not represented in
TOPS. TOPS also provides last trade price and size information. Trades resulting from either displayed or non-
displayed orders matching on IEX are reported. Routed executions are not reported.
Complete depth of book market data can be received via the IEX DEEP protocol.
TOPS also provides short sale restriction and regulatory trading status information. For IEX-listed securities, TOPS
provides current price, size, imbalance information, auction collar information, and other relevant information about
upcoming auctions.
TOPS cannot be used to enter orders. For order entry, refer to the IEX FIX Specification.
For ordering information, contact IEX Market Operations at 646.343.2300 or [email protected] or simply
submit completed IEX Data Agreements and Forms.
ARCHITECTURE
TOPS is made up of a series of sequenced messages. Each message is variable in length based on the message type.
IEX reserves the right to add message types and grow the length of any messages without notice. Subscribers should
develop their decoders to deal with unknown message types and messages that grow beyond the expected length.
Messages will only be grown to add additional data to the end of a message or to add additional flag values at the end
of a flags field. The messages that make up the data feed are delivered using a lower level protocol that takes care of
sequencing and delivery guarantees. Note that a Message Length field is provided with every message as part of
framing defined in IEX-TP.
Note that in examples within this specification, each byte is represented by two hexadecimal digits.
Timestamp Relationships
Timestamps establish a total ordering of a happened-before relationship within the IEX Trading System. If Message A
has a lower Timestamp than Message B, then the event causing Message A happened before (i.e., preceded) the event
causing Message B. Messages with the same Timestamp (regardless of Message Type or Symbol) were caused by the
same event and may be interpreted to have happened simultaneously and atomically within the IEX Trading System.
For a given <Message Type, Symbol> pairing, the subsequence of messages matching this <Message Type, Symbol>
pairing on the data feed will have a progression of Timestamps which either remain equal (due to simultaneity) or
increase (due to precedence) — within this subsequence Timestamps will never decrease.
No progression of Timestamps between messages having different Symbols may be expected. No progression of
Timestamps between messages having the same Symbol but different Message Type may be expected, except in the
following circumstance:
• The receipt of a Security Event Message for a given security implies that all preceding Price Level Update
Messages for the same security have been transmitted.
Please note that this is only one of several ways to configure multicast. Additionally, RP IPs are not advertised at this
time.
IEX statically subscribes and floods individual data feed multicast groups to applicable direct data feed subscribers on
cross-connects designated A, B, C, or I.
There will be a single message disseminated per channel for each System Event type within a given trading session.
System Event
• ‘O’ (0x4f): Start of Messages – Outside of heartbeat messages on the lower level protocol, the start of day
message is the first message sent in any trading session.
• ‘S’ (0x53): Start of System Hours – This message indicates that IEX is open and ready to start accepting orders.
• ‘R’ (0x52): Start of Regular Market Hours – This message indicates that DAY and GTX orders, as well as market
orders and pegged orders, are available for execution on IEX.
• ‘M’ (0x4d): End of Regular Market Hours – This message indicates that DAY orders, market orders, and pegged
orders are no longer accepted by IEX.
• ‘E’ (0x45): End of System Hours – This message indicates that IEX is now closed and will not accept any new
orders during this trading session. It is still possible to receive messages after the end of day.
• ‘C’ (0x43): End of Messages – This is always the last message sent in any trading session.
Timestamp
The time of the update event as set by the IEX Trading System logic.
Example
Round Lot Size 18 4 Integer Number of shares that represent a round lot
Timestamp
The time of the update event as set by the IEX Trading System logic.
Symbol
The number of shares that represent a round lot for the security.
The corporate action adjusted previous official closing price for the security (e.g., stock split, dividend, rights offering),
where the decimal portion is zero filled on the right. The decimal point is implied by position and does not explicitly
appear in the field. For example, 123400 = $12.34. When no corporate action has occurred, the Adjusted POC Price will
be populated with the previous official close price. For new issues (e.g., an IPO), this field will be the issue price.
LULD Tier
Symbol 5a 49 45 58 54 20 20 20 // ZIEXT
IEX disseminates a full pre-market spin of Trading Status Messages indicating the trading status of all securities. In the
spin, IEX will send out a Trading Status Message with “T” (Trading) for all securities that are eligible for trading at the
start of the Pre-Market Session. If a security is absent from the dissemination, firms should assume that the security is
being treated as operationally halted in the IEX Trading System.
After the pre-market spin, IEX will use the Trading Status Message to relay changes in trading status for an individual
security. Messages will be sent when a security is:
• Halted
• Paused*
• Released into an Order Acceptance Period*
• Released for trading
* The paused and released into an Order Acceptance Period status will be disseminated for IEX-listed securities only.
Trading pauses on non-IEX-listed securities will be treated simply as a halt.
Trading Status
Trading Status will be set to “H” (Trading Halt) when a non-IEX-listed security is paused by the listing exchange.
Timestamp
The time of the update event as set by the IEX Trading System logic.
Symbol
IEX populates the Reason field for IEX-listed securities when the Trading Status is “H” (Trading Halt) or “O” (Order
Acceptance Period). For non-IEX-listed securities, the Reason field will be set to “NA” (Reason Not Available) when the
Trading Status is “H” (Trading Halt). The Reason will be blank when the Trading Status is “P” (Trading Pause and Order
Acceptance Period) or “T” (Trading).
Example
Symbol 5a 49 45 58 54 20 20 20 // ZIEXT
State Diagram
See Appendix C for a state diagram illustrating the potential Trading Status and Reason transitions.
Total Message Data length is 18 bytes. See Appendix B for the bitwise representation.
Timestamp
The time an event triggered the Retail Liquidity Indicator Message as set by the IEX Trading System logic.
Symbol
Example
Symbol 5a 49 45 58 54 20 20 20 // ZIEXT
IEX disseminates a full pre-market spin of Operational Halt Status Messages indicating the operational halt status of all
securities. In the spin, IEX will send out an Operational Halt Message with “N” (Not operationally halted on IEX) for all
securities that are eligible for trading at the start of the Pre-Market Session. If a security is absent from the
dissemination, firms should assume that the security is being treated as operationally halted in the IEX Trading System
at the start of the Pre-Market Session.
After the pre-market spin, IEX will use the Operational Halt Status Message to relay changes in operational halt status
for an individual security.
Timestamp
The time of the update event as set by the IEX Trading System logic.
Symbol
Example
Symbol 5a 49 45 58 54 20 20 20 // ZIEXT
IEX disseminates a full pre-market spin of Short Sale Price Test Status Messages indicating the Rule 201 status of all
securities. After the pre-market spin, IEX will use the Short Sale Price Test Status Message in the event of an intraday
status change.
The IEX Trading System will process orders based on the latest short sale price test restriction status.
Message Type 0 1 Byte ‘P’ (0x50) – Short Sale Price Test Status
Short Sale Price Test Status 1 1 Byte Reg. SHO short sale price test restriction status
Timestamp 2 8 Timestamp Time stamp of the short sale price test status
Timestamp
The time of the update event as set by the IEX Trading System logic.
Symbol
Detail
IEX populates the Detail field for IEX-listed securities; this field will be set to “N” (Detail Not Available) for non-IEX-listed
securities.
Short Sale Price Test Status 01 // Short Sale Price Test in Effect
Symbol 5a 49 45 58 54 20 20 20 // ZIEXT
State Diagram
See Appendix C for a state diagram illustrating the potential Short Sale Price Test Status and Detail transitions.
Timestamp
The time an event triggered the quote update as set by the IEX Trading System logic.
Symbol
Price
Price of the quote, where the decimal portion is zero filled on the right. The decimal point is implied by position and
does not explicitly appear in the field. For example, 123400 = $12.34.
Size
Symbol 5A 49 45 58 54 20 20 20 // ZIEXT
Timestamp
The time an event triggered the trade (i.e., execution) as set by the IEX Trading System logic.
Symbol
Size
Price
Execution price, where the decimal portion is zero filled on the right. The decimal point is an implied by position (always
4 decimal places) and does not explicitly appear in the field. For example, 123400 = $12.34.
Trade ID
IEX generated trade identifier. A given trade is uniquely identified within a day by its Trade ID.
Symbol 5A 49 45 58 54 20 20 20 // ZIEXT
Price 24 1d 0f 00 00 00 00 00 // $99.05
Trade ID 96 8f 06 00 00 00 00 00 // 429974
Price Type
Timestamp
The time an event triggered the official price calculation (e.g., auction match) as set by the IEX Trading System logic.
Symbol
Official Price
IEX Official Opening or Closing Price of an IEX-listed security, as specified, where the decimal portion is zero filled on
the right. The decimal point is an implied by position (always 4 decimal places) and does not explicitly appear in the
field. For example, 123400 = $12.34.
Example
Symbol 5a 49 45 58 54 20 20 20 // ZIEXT
Timestamp
The time an event triggered the trade break as set by the IEX Trading System logic.
Symbol
Size
Price
Execution price, where the decimal portion is zero filled on the right. The decimal point is an implied by position (always
4 decimal places) and does not explicitly appear in the field. For example, 123400 = $12.34.
Trade ID
IEX generated trade identifier of the broken trade. A given trade is uniquely identified within a day by its Trade ID.
Symbol 5A 49 45 58 54 20 20 20 // ZIEXT
Price 24 1d 0f 00 00 00 00 00 // $99.05
Trade ID 96 8f 06 00 00 00 00 00 // 429974
Indicative Clearing Price 30 8 Price Clearing price using Eligible Auction Orders
Scheduled Auction Time 44 4 Event Time Projected time of the auction match
Auction Book Clearing Price 48 8 Price Clearing price using orders on the Auction Book
Collar Reference Price 56 8 Price Reference priced used for the auction collar, if any
Lower Auction Collar 64 8 Price Lower threshold price of the auction collar, if any
Upper Auction Collar 72 8 Price Upper threshold price of the auction collar, if any
Total Message Data length is 80 bytes. See Appendix B for the bitwise representation.
Auction Type
The time of the update event as set by the IEX Trading System logic.
Symbol
Shares
Price
Reference, clearing, or collar price, where the decimal portion is zero filled on the right. The decimal point is an implied
by position (always 4 decimal places) and does not explicitly appear in the field. For example, 123400 = $12.34. If the
Collar Reference Price, Lower Auction Collar, and Upper Auction Collar are not utilized (e.g., a Halt Auction), the value
will be set to 0.
Imbalance Side
Extension Number
Total number of automatic extensions an IPO, Halt, or Volatility Auction has received.
Projected time of the auction match represented in seconds since POSIX (Epoch) time UTC.
Example
Symbol 5a 49 45 58 54 20 20 20 // ZIEXT
Usage
T W E Mask Meaning
Usage
A P Mask Meaning
X Flags & 0x80 Symbol is halted, paused, or otherwise not available for trading on IEX
Usage
F T I 8 X Mask Meaning
X Flags & 0x40 Trade occurred before or after the Regular Market Session (i.e., Form T)
X Flags & 0x10 Trade is not subject to Trade Through Rule 611 of SEC Reg. NMS*
1.53 July 29, 2016 Added Message Protocol ID and Channel ID to the specification
1.61 June 30, 2017 Minor wording change to Trading Status = ‘O’ (0x4f).
1.63 December 20, 2017 Added message type identifier to the headings of each section.
1.65 October 5, 2021 Added interim Retail Liquidity Indicator message details with highlights.