# Cboe Titanium Cboe Futures Exchange Multicast Depth of Book (PITCH) Specification

Version 1.2.19 · January 5, 2026

## Overview

Note that this specification is the standard Multicast PITCH specification for Cboe US Futures Exchange (CFE) platform. This protocol is essentially the same as the Multicast PITCH protocol used by the Cboe US Equities and Options exchanges, with the addition of CFE specific messages.

CFE participants may use CFE Multicast PITCH to receive real-time depth of book quotations and execution information direct from CFE. The Multicast PITCH protocol is more timely than the Multicast TOP protocol.

PITCH cannot be used to enter orders. For order entry, refer to the appropriate CFE FIX or BOE Specification.

All versions of the Multicast PITCH feed are WAN-shaped (maximum 100 Mb/s) and are available from one or both of CFE's datacenters. Participants may choose to take one or more of the following Multicast PITCH feeds depending on their location and connectivity to CFE.

**Table 1. Multicast PITCH Feed Descriptions**

| Exchange | Shaping | Served From Data Center (Primary/Secondary) | Multicast Feed ID |
|---|---|---|---|
| CFE | WAN | Primary | FC |
| CFE | WAN | Primary | FD |
| CFE | WAN | Secondary | FE |

## Feed Hours and System Restart

The PITCH feed starts on Sunday at approximately 10:30 a.m. CT and shuts down on Friday at approximately 4:05 p.m. CT. A daily restart occurs between 4:05 and 4:45 p.m. CT each day at which time sequences will be reset. The daily restart is typically observed between 4:05 and 4:10 p.m. CT, but could occur later if needed for operational reasons. Feed startup and shutdown times may be adjusted without notice.

Under normal operations, it is expected that the order books are cleared (`Delete Order` messages sent for any open orders, including GTC and GTD orders), prior to the daily restart and reset of sequences. Persisted GTC and GTD orders will be added back into the order book starting at approximately 10 minutes prior to the scheduled queuing time for each futures root.

## Feed Connectivity Requirements

WAN-Shaped feeds are available to participants who meet the minimum bandwidth requirements to CFE via cross-connect, dedicated circuit, or a supported carrier.

Participants with sufficient connectivity may choose to take both the FC and FD feeds from the CFE's primary datacenter and arbitrate the feeds to recover lost data. Alternatively, participants may choose to arbitrate feeds from both datacenters. It should be noted that feeds from the secondary datacenter will have additional latency for those connected with CFE in the primary datacenter due to proximity and business continuity processing.

CFE Multicast PITCH real-time events are delivered using a published range of multicast addresses divided by symbol range units. A TCP/IP connection to one of CFE's Gap Request Proxy (GRP) servers can be used to request dropped messages. Replayed messages are delivered on a separate set of multicast ranges reserved for packet retransmission. Intraday, a spin of all open orders may be requested from a Spin Server. This allows a client to become current without requesting a gap for all messages up to that point in the day.

The following diagram is a logical representation Multicast PITCH feed message flow between CFE and a participant feed handler that is listening to the A and B instances of two units:

_(Figure)_

## Symbol Ranges, Units, and Sequence Numbers

Products are separated into units by a published distribution. Product distribution will not change intra-day. CFE does, however, reserve the right to add multicast addresses or change the product distribution with 48 hours prior notice to participants. Care should be taken to ensure that address changes, address additions, and product distribution changes can be supported easily.

Message sequence numbers are incremented by one for every sequenced message within a particular symbol unit. It is important to understand that one or more units will be delivered on a single multicast address. As with symbol ranges, unit distribution across multicast addresses will not change intra-day, but may change after notice has been given.

Symbol distribution across units as well as unit distribution across multicast addresses are identical for real-time and gap response multicast addresses.

## Futures Specific Symbol Processing

CFE has implemented a symbol mapping mechanism (`Futures Instrument Definition` message) which maps each specific simple futures contract or spread instrument to a six character, ASCII Symbol. For example, the weekly VX11 contract expiring March 14, 2017 might be represented by the Symbol `0ab123`. This symbol mapping significantly reduces the size of the Multicast PITCH feed for futures and allows participants to use the same symbol handling mechanisms for the Cboe operated equity, options, and futures exchanges. This symbol mapping is the same as the Multicast TOP feed.

Mapping occurs on a continuous basis on each unit's multicast feed. `Futures Instrument Definition` messages can be both un-sequenced and sequenced. Un-sequenced messages are sent from pre-market through the end of trading in a continuous loop that will complete approximately once every minute. Once the same contract has been seen twice, the user can be certain the full loop has been observed. The rate is variable and will be adjusted as bandwidth allows.

Spread instruments may be occasionally created intra-day. In these cases, the `Futures Instrument Definition` message will be sent as a sequenced message on the real-time feed and from the Spin Server before any other messages that reference an instrument created intra-day are sent.

In addition to the symbol mapping events available on the Multicast TOP feed, a downloadable file with current mappings is available via the CFE website.

**Table 1. Production and Certification Symbol Files**

| Production symbol files: | Certification symbol files: |
|---|---|
| Simple | Simple |
| Spread | Spread |

## Gap Request Proxy and Message Retransmission

Requesting delivery of missed sequenced data is achieved by establishing a TCP connection to a Multicast PITCH GRP port. This GRP port is specific to Multicast PITCH and is NOT shared with the Multicast TOP GRP port. Participants who do not wish to request missed messages do not need to connect to a GRP port for any reason or listen to the multicast addresses reserved for message retransmission. Participants choosing to request missed data will need to connect to their assigned GRP port, log in, and request gap ranges as necessary. All gap requests will be responded to with a `Gap Response` message. A `Gap Response` message Status code of `A`=Accepted signals that the replayed messages will be delivered via the appropriate gap response multicast address. Any other `Gap Response` message Status code will indicate the reason that the request cannot be serviced.

Gap requests are limited in message count, frequency, and age by the GRP. Gap requests will only be serviced if they are within a defined sequence range of the current multicast sequence number for the requested unit. Participants will receive a total daily allowance of gap requested messages. In addition, each participant is given renewable one second and one minute gap request limits.

If more than one gap request is received for a particular unit/sequence/count combination within a short timeframe, all requests will receive a successful `Gap Response` message from the GRP, but only a single replayed message will be sent on the gap response multicast address.

If overlapping gap requests are received within a short period of time, the gap server will only send the union of the sequence ranges across grouped gap requests. Participants will receive gap responses for their requested unit/sequence/count, but receivers should be prepared for the gap responses to be delivered via multicast in non-contiguous blocks.

Gap acknowledgements or rejects will be delivered to users for every gap request received by the GRP. Users should be prepared to see replayed multicast data before or after the receipt of the gap response acknowledgement from the GRP.

## Spin Servers

A Spin Server is available for each unit. The server allows participants to connect via TCP and receive a spin of the inside book and symbols with limited trading conditions on that unit. By using the spin, a participant can get the current CFE book quickly in the middle of the trading session without worry of gap request limits. The Spin Server for each unit is assigned its own address and/or TCP port.

Upon successful login and periodically thereafter, a `Spin Image Available` message is sent which contains a sequence number indicating the most recent message applied to the book. Using a `Spin Request` message, a participant may request a spin for the orders up to a sequence number noted within one of the last ten `Spin Image Available` messages distributed. If the `Spin Request` message submitted does not present a sequence number that matches one of the last ten `Spin Image Available` messages distributed, the spin will return orders up to the next closest sequence number reported through a `Spin Image Available` message that is greater than the sequence number requested.

In the case a Participant sends a sequence number in a `Spin Request` message that is higher than the sequence number reported by the most recent `Spin Image Available` message, the next spin image to be generated will be returned when it is available. If the requested sequence number is still higher at that time, an `O` (Out of Range) error will be generated.

A spin consists only of `Add Order` (expanded, long and/or short), `End of Day Summary`, `Futures Instrument Definition`, `Futures Variance Symbol Mapping`, `Trading Status`, `Settlement`,`Price Limits``, Time Reference`, and `Time` messages. `Trading Status` messages will be sent in spins for all symbols that are not `S`=Suspended, which results in at least one message for every symbol that has not been Suspended since system startup. `Futures Instrument Definition` messages will be sent for all symbols on the unit, so a spin may be used to get the current list of all instrument definitions. A `Time` message will be sent as the last message in a spin if the last `Time` message sent on a spin is older than the last received time from the internal market data producers.

Spins will not contain any message for an order which is no longer on the book. While receiving the spin, the participant must buffer multicast messages received. If the `Spin Image Available` message sequence number is the participant's reference point, multicast messages with larger sequence numbers should be buffered. If a non- `Spin Image Available` message sequence number is the participant's reference point which they send in their `Spin Request` message, they should buffer from that point on, but note that the spin they will receive sequence numbers beyond that point which they may disregard. When a `Spin Finished` message is received, the buffered messages must be applied to spun copy of the book to bring it current.

Spin Server Usage Example shows an example flow of messages between a participant and CFE's Multicast PITCH feed and Spin Server.

## Protocol

CFE users may use the PITCH protocol over multicast to receive real-time full depth of book quotations and execution information direct from CFE.

All orders and executions are reflected via the PITCH feed. All orders and executions are anonymous, and do not contain any participant identity.

### Message Format

The messages that make up the PITCH protocol are delivered using CFE's `Sequenced Unit Header` message header which handles sequencing and delivery integrity. All messages delivered via multicast as well as to/from the Gap Request Proxy (GRP) or Spin Server will use the `Sequenced Unit Header` message header for handling message integrity.

All UDP delivered events will be self-contained. Developers can assume that UDP delivered data will not cross frame boundaries and a single Ethernet frame will contain only one Sequenced Unit Header with associated data.

TCP/IP delivered events from the GRP may cross frames as the data will be delivered as a stream of data with the TCP/IP stack controlling Ethernet framing.

The PITCH data feed is comprised of a series of dynamic length sequenced messages. Each message begins with Length and Message Type fields. CFE reserves the right to add message types and grow the length of any message without notice. Participants 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.

### Data Types

The following field types are used within the `Sequenced Unit Header` message header, GRP messages, Spin Server messages, and PITCH.

- Alphanumeric fields are left justified ASCII fields and space padded on the right.
- Binary fields are unsigned and sized to `Length` bytes and ordered using Little Endian convention (least significant byte first).
- Signed Binary fields are signed and sized to `Length` bytes and ordered using Little Endian convention (least significant byte first).
- Binary Price fields are signed Little Endian encoded 8 byte binary fields with 4 implied decimal places (denominator = 10,000).
- Binary Short Price fields are signed Little Endian encoded 2 byte binary fields with 2 implied decimal places (denominator = 100).
- Bit Field fields are fixed width fields with each bit representing a Boolean flag (the 0 bit is the lowest significant bit; the 7 bit is the highest significant bit).
- Printable ASCII fields are left justified ASCII fields that are space padded on the right that may include ASCII values in the range of 0x20 - 0x7e.
- Binary Date fields are 4 byte unsigned Little Endian values where the base-10 representation is the YYYYMMDD representation of that date. For example, October 30, 2023 would be represented as 20,231,030 (20231030).
- Time Offset are 4 byte unsigned Little Endian values that represent the number of nanoseconds since the last `Time` message.

#### Trade Date

Throughout this document, the term "Trade Date" is synonymous with the term "Business Date". The term Trade Date is used within this document to match identically named fields in the CFE FIX and BOE specs.

### Message Framing

Depth of book update messages will be combined into single UDP frame where possible to decrease message overhead and total bandwidth. The count of messages in a UDP frame will be communicated using the CFE `Sequenced Unit Header` message header. Framing will be determined by the server for each unit and site. The content of the multicast across feeds (e.g. A/B) will be identical, but framing will not be consistent across feeds. Receiving processes that receive and arbitrate multiple feeds cannot use frame level arbitration to fill gaps.

### CFE Sequenced Unit Header Message Fields

The CFE `Sequenced Unit Header` message header is used for all CFE Multicast PITCH messages as well as messages to and from the Gap Request Proxy (GRP) and Spin Servers.

Sequenced and un-sequenced data may be delivered using the `Sequenced Unit Header` message header. Un-sequenced headers will have a `0` value for the Hdr Sequence field and potentially for the Hdr Unit field. All messages sent to and from the GRP and Spin Server are un-sequenced while multicast may contain both sequenced and un-sequenced messages.

Sequenced messages have implied sequences with the first message having the sequence number contained in the header. Each subsequent message will have an implied sequence one greater than the previous message up to a maximum of count messages. Multiple messages can follow a `Sequenced Unit Header` message header, but a combination of sequenced and un-sequenced messages cannot be sent within one header.

The sequence number for the first message in the next frame can be calculated by adding the Hdr Count field to the Hdr Sequence. This technique will work for sequenced messages and `Heartbeat` messages.

**Table 1. Sequenced Unit Header**

| Field | Offset | Length | Value/Type | Description |
|---|---|---|---|---|
| Hdr Length | 0 | 2 | Binary | Length of entire block of messages. Includes this header and messages following Hdr Count. |
| Hdr Count | 2 | 1 | Binary | Number of messages to follow this header. |
| Hdr Unit | 3 | 1 | Binary | Unit that applies to messages included in this header. |
| Hdr Sequence | 4 | 4 | Binary | Sequence of first message to follow this header. |
| Total Length = 8 bytes |  |  |  |  |

### Heartbeat Messages

The CFE `Sequenced Unit Header` message header with a count field set to `0` will be used for `Heartbeat` messages. During trading hours `Heartbeat` messages will be sent from the GRP, Spin Server, and all multicast addresses if no data has been delivered within 1 second. `Heartbeat` messages never increment the sequence number for a unit, but can be used to detect gaps on the real-time multicast channels during low update rate periods.

`Heartbeat` messages on the real-time multicast addresses during trading hours will have an Hdr Sequence value equal to the sequence of the next sequenced message to be sent for the unit. `Heartbeat` messages on gap multicast addresses will always have the Hdr Sequence field set to `0`. All `Heartbeat` messages sent to and from the GRP and Spin Server are considered un-sequenced and should have sequence and unit fields set to `0`.

Outside of trading hours CFE sends `Heartbeat` messages on all real-time and gap channels with a sequence of `0` to help users validate multicast connectivity. `Heartbeat` messages might not be sent from 4:00 PM CST - 4:45 PM CST or during maintenance windows.

CFE expects `Heartbeat` messages to be sent to the GRP on live connections no less than every 5 seconds. Failure to receive two consecutive heartbeat messages will result in the GRP or Spin Server terminating the client connection. With the exception of `Time` messages, each PITCH message reflects the order addition, order deletion, order modification or execution of an order in the system.

### Time Message Fields

A `Time` message is immediately generated and sent when there is a PITCH event for a given clock second. If there is no PITCH event for a given clock second, then no `Time` message is sent for that second. All subsequent Time Offset fields for the same unit will use the new `Time` message value as the base until another `Time` message is received for the same unit. The Time field is the number of seconds relative to midnight Central Time, which is provided in the `Time Reference` message. The `Time` message also includes the Epoch Time field, which is the current time represented as the number of whole seconds since the Epoch (Midnight January 1, 1970).

**Table 1. Time**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x20 | `Time` message. |
| Time | 2 | 4 | Binary | Number of whole seconds elapsed since the start of the current Central Time calendar day, derived by converting the current Central wall clock time (HH:MM:SS) to seconds. On Daylight Saving Time transition days, Time reflects wall clock seconds and does not adjust for the UTC offset change. On a DST spring-forward day, the maximum value will be 82,799 (23 hours). On a DST fall-back day, values between 3,600 and 7,199 will appear twice. Recipients requiring unambiguous absolute timestamps should use Epoch Time (where available) or Midnight Reference in the `Time Reference` message. |
| Epoch Time | 6 | 4 | Binary | Number of whole seconds since the Epoch (Midnight January 1, 1970 UTC). |
| Total Length = 10 bytes |  |  |  |  |

### Unit Clear Message Fields

The `Unit Clear` message instructs feed recipients to clear all orders for the CFE book in the unit specified in the `Sequenced Unit Header` message header. It would be distributed in rare recovery events such as a data center fail-over. It may also be sent on system startup (after daily restart) when there are no persisted GTCs or GTDs.

**Table 1. Unit Clear**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x97 | `Unit Clear` message. |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Total Length = 6 bytes |  |  |  |  |

### Time Reference Message Fields

The `Time Reference` message is used to provide a midnight reference point for recipients of the feed. It is sent whenever the system starts up and when the system crosses a midnight boundary. All subsequent `Time` messages for the same unit will use the last Midnight Reference until another `Time Reference` message is received for that unit. The `Time Reference` message includes the Trade Date, so most other sequenced messages will not include that information.

`Time Reference` messages will be included in a spin response.

**Table 1. Time Reference**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0xB1 | `Time Reference` message. |
| Midnight Reference | 2 | 4 | Binary | Midnight Central Time reference time for subsequent `Time` messages, expressed as number of whole seconds since the Epoch (Midnight January 1, 1970 UTC). |
| Time | 6 | 4 | Binary | Number of whole seconds elapsed since the start of the current Central Time calendar day, derived by converting the current Central wall clock time (HH:MM:SS) to seconds. On Daylight Saving Time transition days, Time reflects wall clock seconds and does not adjust for the UTC offset change. On a DST spring-forward day, the maximum value will be 82,799 (23 hours). On a DST fall-back day, values between 3,600 and 7,199 will appear twice. Recipients requiring unambiguous absolute timestamps should use Epoch Time (where available) or Midnight Reference in the `Time Reference` message. |
| Time Offset | 10 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Trade Date | 14 | 4 | Binary Date | Current Trade Date |
| Total Length = 18 bytes |  |  |  |  |

### Futures Instrument Definition Message Fields

The `Futures Instrument Definition` message can be sent as a sequenced message or an un-sequenced message. It is sent as a sequenced message when the system starts up at the beginning of a trading session or an the instrument is created or modified during a trading day. A new sequenced message may be sent for a Symbol that does not visibly change any attribute. One un-sequenced `Futures Instrument Definition` message for each Symbol is also sent in a continuous loop, which completes approximately once every minute as part of the Periodic Refresh mechanism.

If the instrument is a spread (Leg Count > 0) then the message contains one or more repeating groups of leg definitions beginning at the field indicated by Leg Offset. There is a limit of 4 leg definitions.

The Leg Offset field is provided to support adding additional fields to this message preceding the Leg definitions.

The Report Symbol field will contain either the weekly (e.g. VX01) or the monthly (e.g. VX) symbol for any simple futures contract. The Report Symbol will always contain the standard futures root symbol (e.g. VX) for all spread instruments.

**Table 1. Futures Instrument Definition Message Fields**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0xBB | `Futures Instrument Definition` message. |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp or Unit Timestamp in this message if it is non-zero. |
| Symbol | 6 | 6 | Printable ASCII | Six character, base 62 symbol. |
| Unit Timestamp | 12 | 4 | Binary | Unit timestamp expressed as number of whole seconds since the Epoch (Midnight, January 1, 1970 UTC). |
| Report Symbol | 16 | 6 | Alphanumeric | Symbol for product or underlying security. |
| Futures Flags | 22 | 1 | Bit Field | Value will always be zero indicating Standard Future. |
| Expiration Date | 23 | 4 | Binary Date | Expiration Date of Instrument. |
| Contract Size | 27 | 2 | Binary | Contract size of Instrument. Contract sizes less than 1 are represented with a 0 value; refer to the product specification for the contract size. |
| Listing State | 29 | 1 | Alphanumeric | `A` = Active `I` = Inactive `T` = Test |
| Price Increment | 30 | 8 | Binary Price | Minimum Price Increment. |
| Leg Count | 38 | 1 | Binary | Values greater than 0 indicate this is a spread instrument. |
| Leg Offset | 39 | 1 | Binary | Leg definitions, if any, begin at this offset from the beginning of the message. Possible values are 0 (no legs present) or 45 (spread instrument). Cboe reserves the right to change these values without prior notice. |
| Reserved | 40 | 1 | Binary | Reserved. Value will always be zero. |
| Contract Date | 41 | 4 | Binary Date | Populated for single leg instruments only. Zero-filled for spread instruments. The date that should be used in describing the future's third party symbol and the measurement period of the contract. Set to same value as Expiration Date for futures that have a Contract Date that does not differ from expire date. |
| The following fields repeat Leg Count times (maximum of 4) for spread instruments. |  |  |  |  |
| Leg Ratio | Leg Offset + (10 * Leg Index) | 4 | Signed Binary | Leg ratio (positive for buy, negative for sell). |
| Leg Symbol | Leg Offset + 4 + (10 * Leg Index) | 6 | Alphanumeric | Symbol of leg. |
| Variable Total Length = 45 + (Leg Count * 10) bytes |  |  |  |  |

### Futures Variance Symbol Mapping Message Fields

The `Futures Variance Symbol Mapping` message is used to disseminate symbol reference data for S&P 500 Variance Futures (VA Futures) symbols. VA Futures symbol reference data are disseminated with both the `Futures Instrument Definition` and `Futures Variance Symbol Mapping` messages. The purpose of the `Futures Variance Symbol` message is to disseminate product-specific supplemental information for VA Futures symbols (i.e., Accrued Day Variance, Num Final Returns, and Num Elapsed Returns).

The `Futures Variance Symbol Mapping` message can be sent as a sequenced message or an un-sequenced message. It is sent as a sequenced message when the system starts up at the beginning of a trading session or if an instrument is created or modified during a trading day. A new sequenced message may be sent for a symbol that does not visibly change any attribute. One un-sequenced `Futures Variance Symbol Mapping` message for each symbol is also sent in a continuous loop, which completes approximately once every minute as part of the Periodic Refresh mechanism.

`Futures Variance Symbol Mapping` messages are included in a spin response.

**Table 1. Futures Variance Symbol Mapping Message Fields**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0xFA | `Futures Variance Symbol Mapping` message. |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp or Unit Timestamp in this message if it is non-zero. |
| Unit Timestamp | 6 | 4 | Binary | Unit timestamp expressed as number of whole seconds since the Epoch (Midnight, January 1, 1970 UTC). |
| Feed Symbol | 10 | 6 | Printable ASCII | Six character, base 62 symbol. |
| Futures Symbol | 16 | 12 | Alphanumeric | Twelve character textual definition of the symbol where the first six characters contain the product symbol, left justified, and padded on the right with spaces, and the right most six characters are the expiration date in YYMMDD format. |
| Accrued Day Variance | 28 | 8 | Signed Binary | Accrued day variance as of the start of the trading day (signed 64-bit decimal with twelve implied decimal places). |
| Num Final Returns | 36 | 2 | Binary | Number of S&P 500 Index returns used in the Final Settlement Value calculation. |
| Num Elapsed Returns | 38 | 2 | Binary | Number of elapsed S&P 500 Index returns including the current day. |
| Total Length = 40 bytes |  |  |  |  |

### Price Limits Message Fields

The `Price Limits` message is sent out at the start of a session for products subject to price limits per the contract specifications. The `Price Limits` message does not signal whether price limits are in effect for that symbol; it simply provides those values for when they are in effect. If multiple `Price Limits` messages are received for the same Symbol, the most recent values will override the previous values.

`Price Limits` messages are included in a spin response.

**Table 1. Price Limits**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0xBE | `Price Limits` message. |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Symbol | 6 | 6 | Printable ASCII | Six character, base 62 symbol. |
| Upper Price Limit | 12 | 8 | Binary Price | Upper price limit. |
| Lower Price Limit | 20 | 8 | Binary Price | Lower price limit. |
| Total Length = 28 bytes |  |  |  |  |

### Add Order Message Fields

An `Add Order` message represents a newly accepted visible order on the CFE book. It includes a day-specific Order Id assigned by CFE to the order.

**Table 1. Add Order (long)**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x21 | `Add Order` message (long). |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Order Id | 6 | 8 | Binary | Day-specific identifier assigned to this order. |
| Side Indicator | 14 | 1 | Alphanumeric | `B` = Buy Order `S` = Sell Order |
| Quantity | 15 | 4 | Binary | Number of contracts being added to the book (may be less than the number entered). |
| Symbol | 19 | 6 | Printable ASCII | Six character, base 62 symbol. |
| Price | 25 | 8 | Binary Price | The limit order price. |
| Total Length = 33 bytes |  |  |  |  |

**Table 2. Add Order (short)**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x22 | `Add Order` message (short). |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Order Id | 6 | 8 | Binary | Day-specific identifier assigned to this order. |
| Side Indicator | 14 | 1 | Alphanumeric | `B` = Buy Order `S` = Sell Order |
| Quantity | 15 | 2 | Binary | Number of contracts being added to the book (may be less than the number entered). |
| Symbol | 17 | 6 | Printable ASCII | Six character, base 62 symbol. |
| Price | 23 | 2 | Binary Short Price | The limit order price. |
| Total Length = 25 bytes |  |  |  |  |

### Order Modification Messages

`Order Modification` messages refer to an Order Id previously sent with an `Add Order` message. Multiple `Order Modification` messages may modify a single order and the effects are cumulative. Modify messages may update the size and/or the price of an order on the book. When the remaining size of an order reaches zero, the order is dead and should be removed from the book.

#### Order Executed Message Fields

`Order Executed` messages are sent when an order on the CFE book is executed in whole or in part. The execution price equals the limit order price found in the original `Add Order` message or the limit order price in the latest `Modify Order` message referencing the Order Id.

**Table 1. Order Executed**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x23 | `Order Executed` message. |
| Time offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Order Id | 6 | 8 | Binary | Order Id of a previously sent `Add Order` message that was executed. |
| Executed Quantity | 14 | 4 | Binary | Number of contracts executed. |
| Execution Id | 18 | 8 | Binary | CFE generated day-unique execution identifier of this execution. Execution Id is also referenced in the `Trade Break` message. |
| Trade Condition | 26 | 1 | Alphanumeric | `(Space)` = Normal trade `O` = Opening trade 1 `S` = Spread trade 1 1 Sent for simple (non-spread) symbols only. |
| Total Length = 27 bytes |  |  |  |  |

#### Reduce Size Message Fields

`Reduce Size` messages are sent when a visible order on the CFE book is partially reduced.

**Table 1. Reduce Size (long)**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x25 | `Reduce Size` message (long). |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Order Id | 6 | 8 | Binary | Order Id of a previously sent `Add Order` message that has been reduced. |
| Canceled Quantity | 14 | 4 | Binary | Number of contracts canceled. |
| Total Length = 18 bytes |  |  |  |  |

**Table 2. Reduce Size (short)**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x26 | `Reduce Size` message (short). |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Order Id | 6 | 8 | Binary | Order Id of a previously sent `Add Order` message that has been reduced. |
| Canceled Quantity | 14 | 2 | Binary | Number of contracts canceled. |
| Total Length = 16 bytes |  |  |  |  |

#### Modify Order Message Fields

The `Modify Order` message is sent whenever an open order is visibly modified. The Order Id refers to the Order Id of the original `Add Order` message.

Note that `Modify Order` messages that appear to be "no ops" (i.e. they do not appear to modify any relevant fields) will still lose priority.

**Table 1. Modify (long)**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x27 | `Modify Order` message (long). |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Order Id | 6 | 8 | Binary | Order Id of a previously sent `Add Order` message that has been modified. |
| Quantity | 14 | 4 | Binary | Number of contracts associated with this order after this modify (may be less than the number entered). |
| Price | 18 | 8 | Binary Price | The limit order price after this modify. |
| Total Length = 26 bytes |  |  |  |  |

**Table 2. Modify (short)**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x28 | `Modify Order` message (short). |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Order Id | 6 | 8 | Binary | Order Id of a previously sent `Add Order` message that has been modified. |
| Quantity | 14 | 2 | Binary | Number of contracts associated with this order after this modify (may be less than the number entered). |
| Price | 16 | 2 | Binary Short Price | The limit order price after this modify. |
| Total Length = 18 bytes |  |  |  |  |

#### Delete Order Message Fields

The `Delete Order` message is sent whenever a booked order is cancelled or leaves the order book. The Order Id refers to the Order Id of the original `Add Order` message. An order that is deleted from the book may return to the book later under certain circumstances. Therefore, a `Delete Order` message does not indicate that a given Order Id will not be sent again on a subsequent `Add Order` message.

**Table 1. Delete**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x29 | `Delete Order` message. |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Order Id | 6 | 8 | Binary | Order Id of a previously sent `Add Order` message that has been removed from order book. |
| Total Length = 14 bytes |  |  |  |  |

### Trade Message Fields

The `Trade` message provides information about executions that occur off of the CFE book (such as ECRP/Block trades). `Trade` messages are necessary to calculate CFE execution data. `Trade` messages do not alter the book and can be ignored if messages are being used solely to build a book. The Order Id sent in a `Trade` message is obfuscated and will not tie back to any real Order Id sent back via a FIX or BOE order entry session.

**Table 1. Trade (long)**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x2A | `Trade` message (long). |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Order Id | 6 | 8 | Binary | Obfuscated Order ID or Order Id of the executed order. |
| Side Indicator | 14 | 1 | Alphanumeric | Always `B`=Buy Order regardless of resting side. |
| Quantity | 15 | 4 | Binary | Incremental number of contracts executed. |
| Symbol | 19 | 6 | Printable ASCII | Six character, base 62 symbol. |
| Price | 25 | 8 | Binary Price | The execution price of the order. |
| Execution Id | 33 | 8 | Binary | CFE generated day-unique execution identifier of this trade. Execution Id is also referenced in the `Trade Break` message. |
| Trade Condition | 41 | 1 | Alphanumeric | `(Space)` = Normal trade `O` = Opening trade 1 `S` = Spread trade 1 `B` = Block trade `E` = ECRP trade `D` = Derived 1 Sent for simple (non-spread) symbols only. |
| Total Length = 42 bytes |  |  |  |  |

**Table 2. Trade (short)**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x2B | `Trade` message (short). |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Order Id | 6 | 8 | Binary | Obfuscated Order ID or Order Id of the executed order. |
| Side Indicator | 14 | 1 | Alphanumeric | Always `B`=Buy Order regardless of resting side. |
| Quantity | 15 | 2 | Binary | Incremental Number of contracts executed. |
| Symbol | 17 | 6 | Printable ASCII | Six character, base 62 symbol. |
| Price | 23 | 2 | Binary Short Price | The execution price of the order. |
| Execution Id | 25 | 8 | Binary | CFE generated day-unique execution identifier of this trade. Execution Id is also referenced in the `Trade Break` message. |
| Trade Condition | 33 | 1 | Alphanumeric | `(Space)` = `Normal trade` `O` = Opening trade 1 `S` = Spread trade 1 `B` = Block trade `D` = Derived 1 Sent for simple (non-spread) symbols only. |
| Total Length = 34 bytes |  |  |  |  |

### Transaction Begin Message Fields

The `Transaction Begin` message indicates any subsequent messages, up to the accompanying `Transaction End` message, are all part of the same transaction block. One example of where this might be used is when a single aggressive order executes against several resting orders. All PITCH messages corresponding to such an event would be included between a `Transaction Begin` and `Transaction End` messages. It is important to note that any PITCH Message Type may be included in a transaction block and there is no guarantee that the messages apply to the same price level or even the same Symbol. `Transaction Begin` messages do not alter the book and can be ignored if messages are being used solely to build a book.

Feed processors can use a transaction block as a trigger to postpone publishing a quote update until the end of the transaction block. In the prior example of a single aggressive order executing against multiple resting orders, a top of book feed would be able to publish a single trade message and quote update resulting from multiple `Order Executed` messages once it finished processing all of the messages within the transaction block.

**Table 1. Transaction Begin**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0xBC | `Transaction Begin` message. |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Total Length = 6 bytes |  |  |  |  |

### Transaction End Message Fields

The `Transaction End` message indicates that a transaction indicated by a previous `Transaction Begin` message has completed. `Transaction End` messages do not alter the book and can be ignored if messages are being used solely to build a book.

**Table 1. Transaction End**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0xBD | `Transaction End` message. |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Total Length = 6 bytes |  |  |  |  |

### Trade Break Message Fields

The `Trade Break` message is sent whenever an execution on CFE is broken. Trade breaks are rare and only affect applications that rely upon CFE execution-based data. A `Trade Break` message followed immediately be a new `Trade` message with the same Execution Id indicates that a trade correction has occurred. Applications that simply build a CFE book can ignore `Trade Break` messages.

**Table 1. Trade Break**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x2C | `Trade Break` message. |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Execution Id | 6 | 8 | Binary | CFE execution identifier of the execution that was broken. Execution Id refers to previously sent `Order Executed` or `Trade` message. |
| Total Length = 14 bytes |  |  |  |  |

### Settlement Message Fields

`Settlement` messages are used to provide information concerning indicative, approved, or corrected daily and final settlement prices for CFE products. An indicative daily settlement price (`Issue`=I) is calculated by the system and sent immediately after an instrument closes trading but before the settlement price is approved. An approved settlement price (`Issue`=S) is sent once the CFE Trade Desk approves a settlement price for an instrument. If there is an error in the approved settlement price, then it may be re-issued (`Issue`=R). For VX and VXM futures products, the system will begin disseminating an intermediate indicative price update (`Issue`=i) at 2:59:05 p.m. CT (following the first interval of the VWAP calculation) that will be sent every five seconds, leading up to the receipt of the indicative daily settlement price (`Issue`=I).

**Table 1. Settlement**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0xB9 | `Settlement` message. |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Symbol | 6 | 6 | Printable ASCII | Six character, base 62 symbol. |
| Trade Date | 12 | 4 | Binary Date | Trade Date for the settlement. |
| Settlement Price | 16 | 8 | Binary Price | Settlement Price. |
| Issue | 24 | 1 | Alphanumeric | `i` = Periodic Indicative Settlement `I` = Indicative Settlement `S` = Initial Settlement `R` = Re-issued Settlement |
| Total Length = 25 bytes |  |  |  |  |

### Open Interest Message Fields

The `Open Interest` message is sent to communicate a symbol's open interest, usually for the prior trading date. This message will be sent when open interest information is made available to CFE and may be sent multiple times if there are changes to the open interest for a symbol. The open interest is also populated in the `End of Day Summary` message.

**Table 1. Open Interest**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0xD3 | `Open Interest` message. |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Symbol | 6 | 6 | Printable ASCII | Six character, base 62 symbol. |
| Trade Date | 12 | 4 | Binary Date | Trade Date for the Open Interest data. |
| Open Interest | 16 | 4 | Binary | Open Interest for this symbol. |
| Total Length = 20 bytes |  |  |  |  |

### End of Day Summary Message Fields

The `End of Day Summary` message is sent immediately after trading ends for a symbol. No more Market Update messages will follow an `End of Day Summary` message for a particular symbol. A value of zero in the Total Volume field means that no volume traded on that symbol for the day. The Total Volume field reflects all contracts traded during the day. Block, ECRP, and Derived trades are included in the Total Volume field, but they are also reported separately to provide more detail.

The Summary Flags field provides additional information on how to interpret the High Price and Low Price fields, especially in instruments that had no volume for the day and/or where `0` is a valid price (e.g. Trade At Settlement products). There are flags that indicate whether or not the High Price and Low Price fields are valid. If they are not valid, then there was no High (and/or Low) Price for the day. There are also flags that indicate whether the High Price was set by the highest bid and the Low Price was set by the lowest offer rather than a trade.

All `End of Day Summary` message values will span the full trading day, including all extended hours trading and all trading segments.

**Table 1. End of Day Summary**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0xBA | `End of Day Summary` message. |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Symbol | 6 | 6 | Printable ASCII | Six character, base 62 symbol. |
| Trade Date | 12 | 4 | Binary Date | Trade Date for the message. |
| Open Interest | 16 | 4 | Binary | Prior Trade Date Open Interest for this symbol. |
| High Price | 20 | 8 | Binary Price | The higher of highest bid price and highest trade price for the day. Block and ECRP trades (`Trade Condition`=Bor E) do not update High Price. |
| Low Price | 28 | 8 | Binary Price | The lower of lowest offer price and lowest trade price for the day. Block and ECRP trades (`Trade Condition`=Bor E) do not update Low Price. |
| Open Price | 36 | 8 | Binary Price | The first trade on the day (in any session) will set the Open Price for the day (valid only if Total Volume > 0). Block and ECRP trades (`Trade Condition`=Bor E) do not update Open Price. |
| Close Price | 44 | 8 | Binary Price | The last trade on the day (in any session) will set the Close Price for the day (valid only if Total Volume > 0). Block and ECRP trades ( `Trade Condition` = B or E ) do not update Close Price . |
| Total Volume | 52 | 4 | Binary | Total number of contracts traded for the day, including block and ECRP trades. |
| Block Volume | 56 | 4 | Binary | Total number of block and derived contracts traded for the day. |
| ECRP Volume | 60 | 4 | Binary | Total number of contracts traded for the day. |
| Summary Flags | 64 | 1 | Bit Field | `Bit 0` = High Price Valid - Set if High Price is a valid value. `Bit 1` = High Price is bid- Set if High Price was set by the highest bid (rather than a trade). `Bit 2` = Low Price Valid - Set if Low Price is a valid value. `Bit 3` = Low Price is offer - Set if Low Price was set by the lowest offer (rather than a trade). `Bit 4` = `Open/Close` Valid - Set if both Open Price and Close Price fields contain valid values. `Bit 5-7` = Reserved |
| Total Length = 65 bytes |  |  |  |  |

### Trading Status Message Fields

The `Trading Status` message is used to indicate the current trading status of a Futures contract. A `Trading Status` message will be sent whenever a security's trading status changes. If a `Trading Status` message has not been received for a symbol, then the Trading Status for the symbol should be assumed to be `S`=Suspended. The following summarizes the Trading Status values in the CFE system:

- `S` = Suspended. A contract is in a suspended state when the associated product is closed and not accepting orders.
- `Q` = Accepting orders for queuing. Queuing state is used during the Pre-Open for all products. It is also used for spread instruments that may not be tradeable due to Threshold Width.
- `T` = Trading. Used for both Extended and Regular Hours trading.
- `H` = Halt state. This state is used for Supervisory Halts initiated by the Trade Desk. Orders are not being accepted in this state.

**Table 1. Trading Status**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x31 | `Trading Status` message. |
| Time Offset | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Symbol | 6 | 6 | Printable ASCII | Six character, base 62 symbol. |
| Reserved1 | 12 | 2 | Alpha | Reserved |
| Trading Status | 14 | 1 | Alpha | `S` = Suspended `Q` = Queuing `T` = Trading `H` = Halted |
| Reserved2 | 15 | 3 | Alphanumeric | Reserved |
| Total Length = 18 bytes |  |  |  |  |

### End of Session Message Fields

The `End of Session` message is sent for each unit when the unit shuts down. No more sequenced messages will be delivered for this unit, but heartbeats from the unit may be received.

**Table 1. End of Session**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x2D | `End of Session` message. |
| Timestamp | 2 | 4 | Binary | Nanosecond offset from last unit timestamp. |
| Total Length = 6 bytes |  |  |  |  |

## Gap Request Proxy Messages

The following messages are used for initializing a TCP/IP connection to the Gap Request Proxy (GRP) and to request message retransmissions. Participants only need to implement the following messages if gap requests will be made. The following messages will not be delivered using multicast.

### Login Message Fields

The `Login` message is the first message sent to the GRP by a user's process after the connection to the GRP is established. Failure to login before sending any other message type will result in the connection being dropped by the GRP.

**Table 1. Login**

| Field | Offset | Length | Value/Type | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x01 | `Login` message. |
| SessionSubId | 2 | 4 | Alphanumeric | SessionSubId supplied by CFE. |
| Username | 6 | 4 | Alphanumeric | Username supplied by CFE. |
| Filler | 10 | 2 | Alphanumeric | (space filled) |
| Password | 12 | 10 | Alphanumeric | Password supplied by CFE. |
| Total Length = 22 bytes |  |  |  |  |

### Login Response Message Fields

The `Login Response` message is sent by the GRP to a user's process in response to a `Login` message. The status field is used to reflect an accepted login or the reason the session was not accepted. If login fails, the connection will be dropped after the `Login Response` message is sent.

**Table 1. Login Response**

| Field | Offset | Length | Value/Type | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x02 | `Login Response` message. |
| Status | 2 | 1 | Alphanumeric | Accepted or reason for reject. |
| Total Length = 3 bytes |  |  |  |  |

**Table 2. Login Response - Status Codes**

| Code | Description |
|---|---|
| ‘A’ | Login Accepted |
| ‘N’ | Not authorized (Invalid Username/Password) |
| ‘B’ | Session in use |
| ‘S’ | Invalid Session |

### Gap Request Message Fields

The `Gap Request` message is used by a user's process to request retransmission of a sequenced message (or messages) by one of CFE's gap servers.

**Table 1. Gap Request**

| Field | Offset | Length | Value/Type | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x03 | `Gap Request` message. |
| Unit | 2 | 1 | Binary | Unit that the gap is requested for. |
| Sequence | 3 | 4 | Binary | Sequence of first message (Lowest sequence in range). |
| Count | 7 | 2 | Binary | Count of messages requested. |
| Total Length = 9 bytes |  |  |  |  |

### Gap Response Message Fields

The `Gap Response` message is sent by the GRP in response to a `Gap Request` message. The Unit and Sequence fields will match the values supplied in the `Gap Request` message. A `Gap Response` message, with a Status of `Accepted` or reason for failure, will be sent for each `Gap Request` message received by the GRP.

**Table 1. Gap Response**

| Field | Offset | Length | Value/Type | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x04 | `Gap Response` message. |
| Unit | 2 | 1 | Binary | Unit the gap was requested for. |
| Sequence | 3 | 4 | Binary | Sequence of first message in request. |
| Count | 7 | 2 | Binary | Count of messages requested. |
| Status | 9 | 1 | Alphanumeric | Accepted or reason for reject*. |
| Total Length = 10 bytes |  |  |  |  |

**Table 2. Gap Response - Status Codes**

| Code | Description |
|---|---|
| 'A' | Accepted |
| 'O' | Out of range (ahead of sequence or too far behind) |
| 'D' | Daily gap request allocation exhausted |
| 'M' | Minute gap request allocation exhausted |
| 'S' | Second gap request allocation exhausted |
| 'C' | Count request limit for one gap request exceeded |
| 'I' | Invalid Unit specified in request |
| 'U' | Unit is currently unavailable |

* All non-’A’ status codes should be interpreted as a reject.

## Spin Messages

### Login

The `Login` message is the first message sent to the Spin Server by a user's process after the connection to the Spin Server is established. Failure to login before sending any other message type will result in the connection being dropped by the Spin Server.

The format of the `Login` message for the Spin Server is identical to that of the GRP described previously in Login Message Fields.

### Login Response

The `Login Response` message is sent by the Spin Server to a user's process in response to a `Login` message. The status field is used to reflect an accepted login or the reason the session was not accepted. If login fails, the connection will be dropped after the `Login Response` message is sent.

The format of the `Login Response` message for the Spin Server is identical to that of the GRP described previously in Login Response Message Fields.

### Spin Image Available Message Fields

The `Spin Image Available` message is sent once per second and indicates through what sequence number a spin is available.

**Table 1. Spin Image Available**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x80 | `Spin Image Available` Message. |
| Sequence | 2 | 4 | Binary | Spin is available which is current through this sequence number. |
| Total Length = 6 bytes |  |  |  |  |

### Spin Request Message Fields

The `Spin Request` message is used by a user's process to request transmission of a spin of the unit's order book. Refer to Gap Request Proxy and Message Retransmission for more complete details regarding Sequence specification as well as buffering requirements.

**Table 1. Spin Request**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x81 | `Spin Request` message. |
| Sequence | 2 | 4 | Binary | Sequence number from a `Spin Image Available` message received by the participant. |
| Total Length = 6 bytes |  |  |  |  |

### Spin Response Message Fields

The `Spin Response` message is sent in response to a user's `Spin Request` message indicating whether a spin will be sent.

**Table 1. Spin Response**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x82 | `Spin Response` message. |
| Sequence | 2 | 4 | Binary | Sequence number from a `Spin Image Available` message received by the participant. |
| Order Count | 6 | 4 | Binary | Number of `Add Order` messages which will be contained in this spin. |
| Status | 10 | 1 | Alphanumeric | Accepted or reason for reject*. |
| `Total Length` = 11 bytes |  |  |  |  |

**Table 2. Spin Response - Status Codes**

| Code | Description |
|---|---|
| 'A' | Accepted |
| 'O' | Out of Range (Sequence requested is greater than Sequence available by the next spin) |
| 'S' | Spin already in progress (only one spin can be running at a time) |

* All non-’A’ status codes should be interpreted as a reject.

### Spin Finished Message Fields

The `Spin Finished` message is sent to indicate that all messages for the spin requested have been sent. A `Spin Finished` message is only sent if a `Spin Request` message was not rejected. Upon receipt of a `Spin Finished` message, any buffered multicast messages should be applied to the participant's copy of the book to make it current.

**Table 1. Spin Finished**

| Field Name | Offset | Length | Type/(Value) | Description |
|---|---|---|---|---|
| Length | 0 | 1 | Binary | Length of this message including this field. |
| Message Type | 1 | 1 | 0x83 | `Spin Finished` message. |
| Sequence | 2 | 4 | Binary | Sequence number from the `Spin Request` message. |
| Total Length = 6 bytes |  |  |  |  |

### Spin Server Usage Example

The following diagram shows the exchange of messages over time between a participant and CFE's Multicast PITCH feed and Spin Server. Note that while the example alone may seem to imply `Add Order` messages only would be sent on a spin, this is not the case. `Trading Status` message may be sent at the beginning of the spin.

At time 1, the participant has no state of the book and desires to become current. The participant caches the received Multicast PITCH messages (sequences 310172 and 310173) for later use. Since the participant has no book, they cannot yet be applied.

At time 5, the participant has successfully logged into the Spin Server and has cached another message, sequence 310174.

At time 7, the participant receives a `Spin Image Available` message which indicates that the spin server is capable of giving them a spin of all open orders as of sequence 310169. The participant does not have all messages cached after 310169 (they are missing 310170 and 310171), so this spin is not useful to the participant.

At time 10, the participant receives a `Spin Image Available` message which is useful since it would be a spin of all orders up to and including sequence 310175 and the participant has all messages after 310175 cached.

At time 11, the participant sends a `Spin Request` for all messages up to and including 310175 and continues to cache Multicast PITCH messages received.

At time 14, the spin server acknowledges the spin request and indicates that three open orders will be sent.

At time 24, the spin server indicates that it has finished sending all open orders. The participant must then apply the cached messages from sequence number 310176 through current.

Note: Spin Servers are available for each unit. Participants may need to employ multiple Spin Servers depending upon their architecture.

_(Figure)_

## Message Types

### Gap Request Proxy Messages

**Table 1. Gap Request Proxy Messages**

| Message Type | Name |
|---|---|
| 0x01 | Login |
| 0x02 | Login Response |
| 0x03 | Gap Request |
| 0x04 | Gap Response |

### Spin Server Messages

**Table 1. Spin Server Messages**

| Message Type | Name |
|---|---|
| 0x01 | Login |
| 0x02 | Login Response |
| 0x80 | Spin Image Available |
| 0x81 | Spin Request |
| 0x82 | Spin Response |
| 0x83 | Spin Finished |

### PITCH Messages

**Table 1. PITCH Messages**

| Message Type | Name |
|---|---|
| 0x20 | Time |
| 0x21 | Add Order - Long |
| 0x22 | Add Order - Short |
| 0x23 | Order Executed |
| 0x25 | Reduce Size - Long |
| 0x26 | Reduce Size - Short |
| 0x27 | Modify Order - Long |
| 0x28 | Modify Order - Short |
| 0x29 | Delete Order |
| 0x2A | Trade - Long |
| 0x2B | Trade - Short |
| 0x2C | Trade Break |
| 0x2D | End of Session |
| 0x31 | Trading Status |
| 0x97 | Unit Clear |
| 0xB1 | Time Reference |
| 0xB9 | Settlement |
| 0xBA | End of Day Summary |
| 0xBB | Futures Instrument Definition |
| 0xBC | Transaction Begin |
| 0xBD | Transaction End |
| 0xBE | Price Limits |
| 0xD3 | Open Interest |
| 0xFA | Futures Variance Symbol Mapping |

## Example Messages

Each of the following message types must be wrapped by a sequenced or unsequenced unit header as described in CFE Sequenced Unit Header Message Fields. Note that in the following examples, each byte is represented by two hexadecimal digits.

### Login Message Example

**Table 1. Login Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 16 | 22 bytes |
| Type | 01 | Login |
| SessionSubId | 30 30 30 31 | "0001" |
| Username | 46 49 52 4D | "FIRM" |
| Filler | 20 20 | " " |
| Password | 41 42 43 44 30 30 20 20 20 20 | "ABCD00" |

### Login Response Message Example

**Table 1. Login Response Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 03 | 3 bytes |
| Type | 02 | Login Response |
| Status | 41 | Login accepted |

### Gap Request Message Example

**Table 1. Gap Request Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 09 | 9 bytes |
| Type | 03 | Gap Request |
| Unit | 01 | Unit 1 |
| Sequence | 3B 10 00 00 | First message: 4155 |
| Count | 32 00 | 50 messages |

### Gap Response Message Example

**Table 1. Gap Response Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 08 | 8 bytes |
| Type | 04 | Gap Response |
| Unit | 01 | Unit 1 |
| Sequence | 3B 10 00 00 | First message: 4155 |
| Status | 41 | Accepted |

### Spin Image Available Message Example

**Table 1. Spin Image Available Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 06 | 6 bytes |
| Type | 80 | Spin Image Available |
| Sequence | 3B 10 00 00 | Sequence: 4155 |

### Spin Request Message Example

**Table 1. Spin Request Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 06 | 6 bytes |
| Type | 81 | Spin Request |
| Sequence | 3B 10 00 00 | Sequence: 4155 |

### Spin Response Message Example

**Table 1. Spin Response Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 0B | 11 bytes |
| Type | 82 | Spin Request |
| Sequence | 3B 10 00 00 | Sequence: 4155 |
| Order Count | 42 00 00 00 | 66 orders |
| Status | 41 | Accepted |

### Spin Finished Message Example

**Table 1. Spin Finished Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 06 | 6 bytes |
| Type | 83 | Spin Finished |
| Sequence | 3B 10 00 00 | Sequence: 4155 |

### Time Message Example

**Table 1. Time Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 0A | 10 bytes |
| Type | 20 | Time |
| Time | 98 85 00 00 | 34,200 seconds = 09:30 AM Eastern |
| Epoch Time | F8 27 94 5A | 1519659000 = February 26, 20189:30:00 AM Central |

### Unit Clear Message Example

**Table 1. Unit Clear Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 06 | 6 bytes |
| Type | 97 | Unit Clear |
| Time Offset | 18 D2 06 00 | 447,000 ns since last Time Message |

### Time Reference Message Example

**Table 1. Time Reference Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 12 | 18 bytes |
| Type | B1 | Time Reference |
| Midnight Reference | E0 50 92 5A | 2018-02-25 00:00:00 Central (1519538400 seconds since the Epoch) |
| Time | 00 E1 00 00 | 16:00:00 |
| Time Offset | 00 00 00 00 | Exactly 16:00:00 |
| Trade Date | 02 ED 33 01 | 20180226 February 26, 2018 |

### Add Order - Long Message Example

**Table 1. Add Order - Long Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 21 | 33 bytes |
| Type | 21 | Add Order - Long |
| Time Offset | 08 5C 44 25 | 625,237,000 ns since Last Time Message |
| Order ID | 96 95 94 93 92 91 00 00 |  |
| Side Indicator | 42 | Buy |
| Quantity | 20 4E 00 00 | 20,000 contracts |
| Symbol | 33 34 35 33 32 31 | 345321 |
| Price | 00 00 32 00 00 00 00 00 | $327.68 |

### Add Order - Short Message Example

**Table 1. Add Order - Short Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 19 | 25 bytes |
| Type | 22 | Add Order - Short |
| Time Offset | 08 5C 44 25 | 625,237,000 ns since Last Time Message |
| Order ID | 98 97 96 D3 22 5A 0E 0E |  |
| Side Indicator | 42 | Buy |
| Quantity | 20 4E | 20,000 contracts |
| Symbol | 33 34 35 33 32 31 | 345321 |
| Price | FF 7F | $327.67 |

### Order Executed Message Example

**Table 1. Order Executed Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 1B | 27 bytes |
| Type | 23 | Order Executed |
| Time Offset | 08 5C 44 25 | 625,237,000 ns since Last Time Message |
| Order Id | 96 95 94 93 92 91 00 00 |  |
| Executed Quantity | 2C 01 00 00 | 300 contracts |
| Execution ID | 56 55 54 53 52 51 00 00 |  |
| Trade Condition | 53 | S - Spread Trade |

### Reduce Size - Long Message Example

**Table 1. Reduce Size - Long Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 12 | 18 bytes |
| Type | 25 | Reduce Size - Long |
| Time Offset | 08 5C 44 25 | 625,237,000 ns since Last Time Message |
| Order Id | 05 40 5B 77 8F 56 1D 0B |  |
| Canceled Quantity | 00 00 01 00 | 65,536 contracts |

### Reduce Size - Short Message Example

**Table 1. Reduce Size - Short Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 10 | 16 bytes |
| Type | 26 | Reduce Size - Short |
| Time Offset | 08 5C 44 25 | 625,237,000 ns since Last Time Message |
| Order Id | 05 40 5B 77 8F 56 1D 0B |  |
| Canceled Quantity | 64 00 | 100 contracts |

### Modify Order - Long Message Example

**Table 1. Modify Order - Long Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 1A | 26 bytes |
| Type | 27 | Modify Order - Long |
| Time Offset | 08 5C 44 25 | 625,237,000 ns since Last Time Message |
| Order Id | 05 40 5B 77 8F 56 1D 0B |  |
| Quantity | FF FF 00 00 | 65,535 contracts |
| Price | 2C 33 32 00 00 00 00 00 | $328.99 |

### Modify Order - Short Message Example

**Table 1. Modify Order - Short Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 12 | 18 bytes |
| Type | 28 | Modify Order - Short |
| Time Offset | 08 5C 44 25 | 625,237,000 ns since Last Time Message |
| Order Id | 05 40 5B 77 8F 56 1D 0B |  |
| Quantity | FF FF | 65,535 contracts |
| Price | 0A 28 | $102.50 |

### Delete Order Message Example

**Table 1. Delete Order Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 0E | 14 bytes |
| Type | 29 | Delete Order |
| Time Offset | 08 5C 44 25 | 625,237,000 ns since Last Time Message |
| Order Id | 05 40 5B 77 8F 56 1D 0B |  |

### Trade - Long Message Example

**Table 1. Trade - Long Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 2A | 42 bytes |
| Type | 2A | Trade - Long |
| Time Offset | 08 5C 44 25 | 625,237,000 ns since Last Time Message |
| Order Id | 05 40 5B 77 8F 56 1D 0B |  |
| Side | 42 | Buy |
| Quantity | F8 24 01 00 | 75,000 contracts |
| Symbol | 33 34 35 33 32 31 | 345321 |
| Price | E8 A3 0F 00 00 00 00 00 | $102.50 |
| Execution Id | 34 2B 46 E0 BB 00 00 00 | 0AAP09VEC |
| Trade Condition | 20 | (space) Normal |

### Trade - Short Message Example

**Table 1. Trade - Short Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 22 | 34 bytes |
| Type | 2B | Trade - Long |
| Time Offset | 08 5C 44 25 | 625,237,000 ns since Last Time Message |
| Order Id | 05 40 5B 77 8F 56 1D 0B |  |
| Side | 42 | Buy |
| Quantity | 64 00 | 100 contracts |
| Symbol | 33 34 35 33 32 31 | 345321 |
| Price | 0A 28 | $102.50 |
| Execution Id | 34 2B 46 E0 BB 00 00 00 | 0AAP09VEC |
| Trade Condition | 53 | S - Spread Trade |

### Trade Break Message Example

**Table 1. Trade Break Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 0E | 14 bytes |
| Type | 2C | Trade Break |
| Time Offset | 08 5C 44 25 | 625,237,000 ns since Last Time Message |
| Execution Id | 34 2B 46 E0 BB 00 00 00 | 0AAP09VEC |

### End of Session Message Example

**Table 1. End of Session Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 06 | 6 bytes |
| Type | 2D | End of Session |
| Time Offset | 08 5C 44 25 | 625,237,000 ns since Last Time Message |

### Transaction Begin Message Example

**Table 1. Transaction Begin Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 06 | 6 bytes |
| Type | BC | Transaction Begin |
| Time Offset | 08 5C 44 25 | 625,237,000 ns since Last Time Message |

### Transaction End Message Example

**Table 1. Transaction End Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 06 | 6 bytes |
| Type | BD | Transaction End |
| Time Offset | 08 5C 44 25 | 625,237,000 ns since Last Time Message |

### Futures Instrument Definition Message Example (Contract Date Different from Expiration Date)

**Table 1. Futures Instrument Definition Message Example (Contract Date Different from Expiration Date)**

| Field | Value | Value Description |
|---|---|---|
| Length | 2D | 45 bytes |
| Type | BB | Futures Instrument Definition Message |
| Time Offset | E8 61 BF 23 | 599,745,000 ns since Last Time Message |
| Symbol | 30 30 30 33 6C 4E | 0003lN |
| Unit Timestamp | 75 2D 40 5E | 2020-02-09 10:04:05 Central Time (1581264245 seconds since Epoch) |
| Report Symbol | 41 4D 42 33 20 20 | AMB3 |
| Futures Flags | 00 | 0 |
| Expiration Date | D4 3D 34 01 | 20200916 - September 16, 2020 |
| Contract Size | 19 00 | 25 |
| Listing State | 41 | A - Active |
| Price Increment | C4 09 00 00 00 00 00 00 | $0.25 |
| Leg Count | 00 | 0 legs |
| Leg Offset | 00 | 0 - No Legs |
| Reserved | 00 | 0 - Reserved |
| Contract Date | A9 3C 34 01 | 20200617 - June 17, 2020 |

### Futures Instrument Definition Message Example (Contract Date Same as Expiration Date)

**Table 1. Futures Instrument Definition Message Example (Contract Date Same as Expiration Date)**

| Field | Value | Value Description |
|---|---|---|
| Length | 2D | 45 bytes |
| Type | BB | Futures Instrument Definition Message |
| Time Offset | 80 A3 14 27 | 655,664,000 ns since Last Time Message |
| Symbol | 30 30 30 33 69 34 | 0003i4 |
| Unit Timestamp | 75 2D 40 5E | 2020-02-09 10:04:05 Central Time (1581264245 seconds since Epoch) |
| Report Symbol | 56 58 20 20 20 20 | VX |
| Futures Flags | 00 | 0 |
| Expiration Date | A9 3C 34 01 | 20200617 – June 17, 2020 |
| Contract Size | E8 03 | 1000 |
| Listing State | 41 | A - Active |
| Price Increment | F4 01 00 00 00 00 00 00 | $0.05 |
| Leg Count | 00 | 0 legs |
| Leg Offset | 00 | 0 – No Legs |
| Reserved | 00 | 0 – Reserved |
| Contract Date | A9 3C 34 01 | 20200617 – June 17, 2020 |

### Futures Instrument Definition w/ 2 Legs Message Example (Contract Date Populated with Zero value)

**Table 1. Futures Instrument Definition w/ 2 Legs Message Example (Contract Date Populated with Zero value)**

| Field | Value | Value Description |
|---|---|---|
| Length | 41 | 65 bytes |
| Type | BB | Futures Instrument Definition Message |
| Time Offset | E8 61 BF 23 | 599,745,000 ns since Last Time Message |
| Symbol | 30 30 30 33 6C 52 | 0003lR |
| Unit Timestamp | 75 2D 40 5E | 2020-02-09 10:04:05 Central Time (1581264245 seconds since Epoch) |
| Report Symbol | 41 4D 42 33 20 20 | AMB3 |
| Futures Flags | 00 | 0 |
| Expiration Date | A9 3C 34 01 | 20200617 – June 17, 2020 |
| Contract Size | 19 00 | 25 |
| Listing State | 41 | A - Active |
| Price Increment | C4 09 00 00 00 00 00 00 | $0.25 |
| Leg Count | 02 | 2 legs |
| Leg Offset | 2D | Legs begin at byte 45 |
| Reserved | 00 | 0 – Reserved |
|  |  | Offset |
| Contract Date | 00 00 00 00 | 0 |
| Leg #1 Ratio | FF FF FF FF | -1 (1 Sell) |
| Leg #1 Symbol | 30 30 30 33 67 75 | 0003gu |
| Leg #2 Ratio | 01 00 00 00 | 1 (1 Buy |
| Leg #2 Symbol | 30 30 30 33 6C 4E | 0003lN |

### Futures Variance Symbol Mapping Message Example

**Table 1. Futures Variance Symbol Mapping Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 28 | 40 bytes |
| Type | FA | Futures Variance Symbol Mapping Message |
| Time Offset | E8 61 BF 23 | 599,745,000 ns since Last Time Message |
| Unit Timestamp | E5 CE 44 66 | 2024-05-14 10:04:05 CT |
| Feed Symbol | 30 30 30 33 6C 52 | 0003lR |
| Futures Symbol | 56 41 20 20 20 20 32 34 30 35 31 37 | VA 240517 |
| Accrued Day Variance | E0 3E 3F 56 32 87 00 00 | 148.650265100000 |
| Num Final Returns | 0F 01 | 271 |
| Num Elapsed Returns | 0D 01 | 269 |

### Trading Status Message Example

**Table 1. Trading Status Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 12 | 18 bytes |
| Type | 31 | Trading Status |
| Time offset | 18 D2 06 00 | 447,000 ns since lastTime Message |
| Symbol | 5A 56 5A 5A 54 20 20 20 | ZVZZT |
| Trading Status | 54 | T = Trading |
| Reserved | 30 20 20 |  |

### Price Limits Message Example

**Table 1. Price Limits Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 1C | 28 bytes |
| Type | BE | Price Limits |
| Time Offset | 18 D2 06 00 | 447,000 ns since last Time Message |
| Symbol | 31 32 33 34 35 20 | 12345 |
| Upper Price Limit | 08 E2 01 00 00 00 00 00 | $12.34 |
| Lower Price Limit | 8C 81 01 00 00 00 00 00 | $9.87 |

### End of Day Summary Message Example

**Table 1. End of Day Summary Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 41 | 65 bytes |
| Type | BA | End of Day Summary |
| Time Offset | 18 D2 06 00 | 447,000 ns since last Time Message |
| Symbol | 39 38 37 36 35 34 | 987654 |
| Open Interest | B1 68 DE 3A | 987,654,321 contracts |
| High Price | DC FB 09 00 00 00 00 00 | $65.43 |
| Low Price | 08 E2 01 00 00 00 00 00 | $12.34 |
| Open Price | E0 49 08 00 00 00 00 00 | $54.32 |
| Close Price | F8 A9 08 00 00 00 00 00 | $56.78 |
| Total Volume | 15 CD 5B 07 | 123,456,789 contracts |
| Block Volume | 88 13 00 00 | 5,000 block contracts |
| ECRP Volume | E8 03 00 00 | 1,000 ECRP contracts |
| Summary Flags | 15 | High Price Valid 0x01 |
| Low Price Valid 0x04 |  |  |
| Has Open/Close 0x10 |  |  |

### Settlement Message Example

**Table 1. Settlement Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 19 | 25 bytes |
| Type | B9 | Settlement |
| Time Offset | 60 84 8E 00 | 9,340,000 ns since last Time Message |
| Symbol | 36 35 34 33 32 31 | 654321 |
| Trade Date | 03 ED 33 01 | 20180227 February 27, 2018 |
| Settlement Price | 4C F8 06 00 00 00 00 00 | $45.67 |
| Issue | 53 | S - Initial Settlement |

### Open Interest Message Example

**Table 1. Open Interest Message Example**

| Field | Value | Value Description |
|---|---|---|
| Length | 19 | 20 bytes |
| Type | D3 | Open Interest |
| Time Offset | 60 84 8E 00 | 9,340,000 ns since last Time Message |
| Symbol | 36 35 34 33 32 31 | 654321 |
| Trade Date | A9 3C 34 01 | 20200617 - June 17, 2020 |
| Open Interest | B1 68 DE 3A | 987,654,321 contracts |

### Sequenced Unit Header with 2 Messages

**Table 1. Sequenced Unit Header with 2 Messages**

| Field | Value | Value Description |
|---|---|---|
| Sequenced Unit Header Message Example |  |  |
| Hdr Length | 31 00 | 49 bytes, including header |
| Hdr Count | 02 | 2 messages to follow |
| Hdr Unit | 01 | Unit 1 |
| Hdr Sequence | 01 00 00 00 | First message has sequence number 1 |
| Message 1: Add Order (Short) Message Example |  |  |
| Length | 19 | 25 bytes |
| Type | 22 | Add Order - Short |
| Time Offset | 08 5C 44 25 | 625,237,000 ns since Last Time Message |
| Order ID | 98 97 96 D3 22 5A 0E 0E |  |
| Side Indicator | 42 | Buy |
| Quantity | 20 4E | 20,000 contracts |
| Symbol | 33 34 35 33 32 31 | 345321 |
| Price | FF 7F | $327.67 |
| Message 2: Reduce Size (Short) Message Example |  |  |
| Length | 10 | 16 bytes |
| Type | 26 | Reduce Size - Short |
| Time Offset | 08 5C 44 25 | 625,237,000 ns since Last Time Message |
| Order Id | 98 97 96 D3 22 5A 0E 0E |  |
| Canceled Quantity | 64 00 | 100 contracts |

## Multicast Configuration

### Production Environment Configuration

#### Limitations/Configurations

The following table defines the configuration for network and gap request limitations. These limitations are session based. CFE reserves the right to adjust the gap request limitations to improve the effectiveness of the gap request infrastructure.

**Table 1. Production Environment - Network and Gap Request Limitations/Configurations**

| Period/Type | Limit/Setting | Notes |
|---|---|---|
| MTU | 1500 | CFE will send UDP messages up to 1500 bytes. Participants should ensure that their infrastructure is configured accordingly. |
| WAN-Shaped Throttle | 100 Mb/s | The real-time and gap multicast head ends are configured to shape their output to this level to minimize packet loss. |
| Gap Response Delay | 2 ms | The Gap Server will delay resending sequenced messages via multicast for the specified limit in order to satisfy multiple GRP gap requests with one multicast response. |
| Count | 100 | Any single gap request may not be for more than this number of dropped messages. |
| 1 Second | 320 Requests | This is the maximum number of retransmission requests allowed per second for each session. This is renewed every clock second. |
| 1 Minute | 1,500 Requests | This is the maximum number of retransmission requests allowed per minute for each session. This is renewed every clock minute. |
| Day | 100,000 Requests | This is the maximum number of retransmission requests allowed per day for each session. |
| Within Range | 1,000,000 Messages | Users' retransmission requests must be within this many messages of the most recent sequence sent by the real-time feed per session. |

#### CFE Unit/Product Distribution

The following table describes the CFE symbol distribution across units.

**Table 1. CFE Production/Certification Environment - Unit/Product Distribution**

| Symbol Range | Unit |
|---|---|
| UX, VX, VXT, VXM, VXMT | 1 |
| IBHY, IBIG, IBGO, IBYO, IEMD, MGTN, VA, XBTF | 2 |
| FBT, FET, PBT, PET | 3 |
| N/A | 4 |

Note - CFE reserves the right to add units and/or change symbol distribution with 48 hours of notice and no migration period. Notice will be given that the distribution will change on a certain date. Care should be taken to support mappings in these tables via software configuration.

#### Multicast Routing Parameters

**Table 1. Production Environment - Multicast Routing Parameters**

| Data Center | Rendezvous Point |
|---|---|
| Primary Data Center C feed | 74.115.128.164 |
| Primary Data Center D feed | 74.115.128.165 |
| Secondary Data Center E feed | 170.137.16.128 |

#### Address/Unit Distribution

The following tables describe the unit distribution across the CFE Multicast PITCH feeds.

Note - CFE reserves the right to add multicast addresses with prior notice, but no migration period. Notice will be given that the distribution will change on a certain date. Care should be taken to support mappings in these tables via software configuration.

**Table 1. Production Environment - Address/Unit Distribution (Primary Datacenter)**

| Primary Datacenter | WAN-Shaped [FC] 74.115.133.96/29 | WAN-Shaped [FD] 74.115.133.104/29 |  |  |  |
|---|---|---|---|---|---|
| Unit | IP Port | Real-time MC | Gap Resp. MC | Real-time MC | Gap Resp. MC |
| 1 | 30001 | 224.0.131.132 | 224.0.131.133 | 233.130.124.132 | 233.130.124.133 |
| 2 | 30002 | 224.0.131.164 | 233.130.124.164 |  |  |
| 3 | 30003 | 224.0.131.165 | 233.130.124.165 |  |  |
| 4 | 30004 | 224.0.131.166 | 233.130.124.166 |  |  |

**Table 2. Production Environment - Address/Unit Distribution (Secondary Datacenter)**

| Secondary Datacenter | WAN-Shaped [FE] 170.137.16.80/29 |  |  |
|---|---|---|---|
| Unit | IP Port | Real-time MC | Gap Resp. MC |
| 1 | 31001 | 233.182.199.0 | 233.182.199.1 |
| 2 | 31002 |  |  |
| 3 | 31003 |  |  |
| 4 | 31004 |  |  |

### US Futures Certification Environment Configuration

#### CFE Unit/Product Distribution

The following table describes the CFE symbol distribution across units.

**Table 1. CFE Production/Certification Environment - Unit/Product Distribution**

| Symbol Range | Unit |
|---|---|
| UX, VX, VXT, VXM, VXMT | 1 |
| IBHY, IBIG, IBGO, IBYO, IEMD, MGTN, VA, XBTF | 2 |
| FBT, FET, PBT, PET | 3 |
| N/A | 4 |

Note - CFE reserves the right to add units and/or change symbol distribution with 48 hours of notice and no migration period. Notice will be given that the distribution will change on a certain date. Care should be taken to support mappings in these tables via software configuration.

#### Certification Multicast Routing Parameters

**Table 1. Certification Environment - Multicast Routing Parameters**

| Data Center | Rendezvous Point |
|---|---|
| Primary Data Center | 74.115.128.130 |

#### Address/Unit Distribution

The following table describes the unit distribution across the certification CFE Multicast PITCH feeds.

**Table 1. Certification Environment - Address/Unit Distribution**

| Primary Datacenter | WAN-Shaped [Cert] 174.136.160.16/28 |  |  |
|---|---|---|---|
| Unit | IP Port | Real-time MC | Gap Resp. MC |
| 1 | 32001 | 224.0.74.196 | 224.0.74.197 |
| 2 | 32002 |  |  |
| 3 | 32003 |  |  |
| 4 | 32004 |  |  |

Note - CFE reserves the right to add multicast addresses with prior notice, but no migration period. Notice will be given that the distribution will change on a certain date. Care should be taken to support mappings in these tables via software configuration.

## Connectivity

### Supported Extranet Carriers

The WAN-Shaped feed will be made available to participants through extranet carriers that have completed their multicast implementation and registered with CFE for receipt of market data. CFE has certified a number of carriers defined in the Cboe Titanium Cboe Futures Exchange Connectivity Manual with respect to redistribution of CFE multicast data feeds. For more information on receiving Multicast PITCH through any of these providers, reach out to the vendor contact noted in the CFE Connectivity Manual under Extranet Providers.

### Bandwidth Recommendation

The WAN-shaped feeds require 100Mbps of bandwidth. CFE will use 90% of these respective bandwidths for Multicast PITCH to allow participants to use the same physical connection for order entry if desired.

## Support

Please direct questions or comments regarding this specification to cfetradedesk@cboe.com.

### Canned Test Data

Customers are strongly encouraged to capture their own test data from the Certification environment to ensure that their systems can correctly decode the PITCH feed and all available message types. To assist firms with their own testing a PITCH sample (taken from the Certification environment) is made available at the link below. Cboe does not guarantee that all message types will appear in test data and cautions that canned test data will be updated infrequently and may not fully reflect the current specification.

CFE PITCH Test Data (last updated 04/02/2020)

## Revision History

| Document Version | Date | Description |
|---|---|---|
| 1.0.0 | 05/01/17 | Initial version. |
| 1.0.1 | 06/28/17 | Updated description for Report Symbol , Leg Offset and Variance Block Offset fields in `Futures Instrument Definition` message. Updated descriptions of Variance Futures fields in `Futures Instrument Definition` message. Updated list of messages included in spin responses. Added `Price Limits` message. Corrected inconsistencies of field and messages lengths for `Trade Long` and `Trade Short` messages. |
| 1.0.2 | 07/11/17 | Added Rendevous Points, Source IP addresses, and Multicast IP addresses. |
| 1.0.3 | 08/08/17 | Replaced Binary Long Price with Binary Price. Updated Data Types to include definition of Binary Price. |
| 1.0.4 | 09/21/17 | Renamed `Trade Date` message to `Time Reference` . Added Epoch Time field to `Time` message. Fixed discrepancies between Spec and Example Messages. |
| 1.0.5 | 09/26/17 | Fixed discrepancies between available PITCH message types and those listed in section 5.3. Corrected feed label references in section 7. |
| 1.0.6 | 10/17/17 | Added clarification on `Trading Status` messages for Complex Instruments going in and out of Queuing because of Threshold Width Cboe branding/logo changes. |
| 1.0.7 | 10/18/17 | Fixed discrepancy with the Secondary Data Center listed as CH4 instead of 400 S La Salle. |
| 1.0.8 | 11/24/17 | Removed LegOffset = 93 value as this value is not possible to be sent. Added missing Price fields in example messages Added clarification to handling of `Order` `Executed` `at` `Price/Size` message `Futures` `Instrument` `Definition` messages are sent for all live symbols on a spin. |
| 1.0.9 | 12/08/17 | Price limits may apply during any trading hours subject to contract specifications. |
| 1.0.10 | 12/29/17 | `Trading` `Status` messages for Complex instruments transitioning in and out of Queuing on account of Threshold Width no longer surpressed. Removed associated commentary from `Trading` `Status` message section. Added "I=Inactive" as possible Listing State . Updated Realized Variance, Discount Factor, Previous ARMVM, and Fed Funds Rate to Signed Binary data type. Corrected the offsets for Leg Ratio and Leg Symbol . Added Canned Test Data section. |
| 1.0.11 | 01/17/18 | Block and ECRP trades ( Trade Condition = B or E) do not update High Price or Low Price . Corrected length of `Transaction End` from 48 to 6 bytes. |
| 1.0.12 | 01/25/18 | Updated field description of Symbol to remove "padding" language. The Symbol field is always six characters, base 62. `Price Limits` are included in a spin. Added Feed Hours and System Restart section. Clarified cases where the `Unit` `Clear` message would be sent. More specifics added to how `End of Day Summary` values are determined. If no `Trading Status` has been received for a Symbol , then the Trading Status is "S= Suspended". |
| 1.0.13 | 02/01/18 | Added links to certification and production symbol mapping files. |
| 1.0.14 | 02/21/18 | Fixed remaining discrepancy with the Secondary Data Center listed as CH4 instead of 400 S La Salle. Updated Trade Condition field values to demonstrate that some values are only sent for simple instruments. Described how trade corrections are modeled in the feed. Additional clarifications added around daily restart based on customer feedback. |
| 1.0.15 | 02/27/18 | Fixed formatting of the `Settlement` message example. |
| 1.1.0 | 03/01/18 | Removed `Executed` `at` `Price/Size` message. This message is not used for CFE. Updated description of High Price and Low Price in `End of Day Summary` message. |
| 1.1.1 | 03/22/18 | The `End of Day Summary` message will be enhanced and expanded to 65 bytes. Total Volume will be updated to include Block and ECRP volume. Block Volume field will be added. ECRP Volume field will be added. Bit Fields field will be added. `End of Day Summary` example was updated. |
| 1.1.2 | 03/23/18 | Updated effective date of `End of Day Summary` message change from 1.1.1 to be effective 06/03/18. |
| 1.1.3 | 05/10/18 | Clarified the cases when sequenced `Futures Instrument Definition` messages are sent. |
| 1.1.4 | 07/16/18 | Removed ModifyBitField1 from `Modify Order - Short` example in section 6.18; not applicable to futures. |
| 1.1.5 | 11/08/18 | Updated Overview and and Multicast Routing Parameter sections with new Multicast Feed IDs (A to FC, B to FD, E to FE). Added note clarifying simple leg FID messages come before complex leg FID messages sent in Spin responses. Updated multicast feed ids in section 1.3 to follow standard naming convention. |
| 1.1.6 | 04/08/19 | Updated Multicast Routing Parameter Data Center feed names to align with references in unit distribution table. |
| 1.1.7 | 01/16/20 | Clarified definition of `Time` message. `Time` messages are only sent when there is a new PITCH message in a given second. |
| 1.1.8 | 02/14/20 | Added Contract Date field to `Futures Instrument Definition` message. Effective trade date 04/27/20. |
| 1.1.9 | 02/24/20 | Variance Offset and Leg Offset values will be set at 45 as a result of the change to add Contract Date. Refer to `Futures Instrument Definition` message for more details. |
| 1.1.10 | 04/07/20 | New Canned Data sample provided dated 04/02/20. Corrected feed symbols from 'FA and FB' to 'FC and FD' in Feed Connectivity Requirements section. |
| 1.1.11 | 07/27/20 | Updated symbols listed in Unit/Product Distribution tables to include VXT, VXM, and VXMT. |
| 1.1.12 | 01/21/21 | Added new value of `I`=Indicative Settlement to the Issue field on the `Settlement` message (effective 03/22/21). |
| 1.2.0 | 08/17/21 | Added new value of `i` = Periodic Indicative Settlement to the Issue field on the `Settlement` message (effective 10/17/21). Added new `Open Interest` message (effective 10/17/21). |
| 1.2.1 | 10/26/21 | Added note indicating CFE will eliminate the 15 minute trading pause for VX, VXM, and AMERIBOR futures products (effective 12/06/21). |
| 1.2.2 | 11/01/21 | Corrected hyperlinks to Production symbol files and Certification symbol files. |
| 1.2.3 | 01/03/22 | Updated `Delete Order` message description. |
| 1.2.4 | 10/09/23 | Added new value of ‘D=Derived’ to Trade Condition field in the Trade message and updated section 2.19 to indicate derived trades will be included in the Total Volume field (effective 12/11/23). Removed values ‘B=Block trade’ and ‘E=ECRP trade’ from Trade Condition field in the `Order Executed` message. Removed ‘E=ECRP trade’ value from Trade Condition field in the `Trade (short)` message. |
| 1.2.5 | 11/28/23 | Updated hyperlinks to symbol mappings in production and certification environments. |
| 1.2.6 | 06/28/24 | Updated section 1.7 to include `Future Variance Symbol Mapping`, added message type `Future Variance Symbol Mapping`, added new message structure for `Futures Instrument Definition` (replacing the current message structure), updated `Variance Block` to `Reserved` in example messages in section 6.26, 6.27 and 6.28, and added `Future Variance Symbol Mapping` example message (effective 09/23/24). |
| 1.2.7 | 07/15/24 | Noted the `Futures Instrument Definition` message contains general futures contract information and is sent for all futures products, including Variance Futures (effective 09/23/24). |
| 1.2.8 | 08/09/24 | The`Futures Variance Symbol Mapping` message may be sent as a sequenced message intraday if a symbol is modified intraday. Clarified the reason for setting the Futures Flags field of the `Futures Instrument Definition` message to zero. |
| 1.2.9 | 09/05/24 | With the implementation of the new 60 second window for VWAP, the system will begin disseminating an intermediate indicative price update (Issue = i) at 2:59:05 p.m. CT for VX and VXM futures products (effective 09/09/24). |
| 1.2.10 | 11/04/24 | Removed the deprecated `Futures Instrument Definition` message with sunset date 09/23/24. Removed the "effective 09/23/24" annotation on the updated `Futures Instrument Definition` message and the new `Futures Variance Symbol Mapping` message. Added two new Matching Units, plus new port and IP information for Matching Units 2-4 (effective 02/03/25). |
| 1.2.11 | 01/15/25 | Updated Feed Hours and System Restart to indicate the PITCH feed will start up on Sunday at approximately 10:30 a.m. CT. Updated with Cboe Titanium branding. |
| 1.2.12 | 01/27/25 | Updated Contract Size description for Futures Instrument Definition Message Fields . Added FBT and FET to Unit 3 Unit/Product Distribution (effective 06/09/25). |
| 1.2.13 | 04/07/25 | Noted in Spin Servers : a `Time` message will be sent as the last message in a Spin if the last `Time` message sent on a Spin is older than the last received time from the internal market data producers. Added XBTF to Unit 2 CFE Unit/Product Distribution (effective 04/28/25). |
| 1.2.14 | 09/09/25 | Added PBT and PET to Unit 3 CFE Unit/Product Distribution (effective 12/15/25 TBD 11/10/25). |
| 1.2.15 | 10/20/25 | Updated CFE Unit/Product Distribution to include MGTN on Unit 2 (effective 12/08/25) (effective 11/17/25). |
| 1.2.16 | 10/30/25 | Updated Spin Servers to include `End of Day Summary` in list of spin request messages. Updated PBT and PET effective date to 12/15/25 TBD . |
| 1.2.17 | 11/17/25 | Updated PBT and PET effective date to 12/15/25. |
| 1.2.18 | 11/18/25 | Updated MGTN effective date to 12/08/25. |
| 1.2.19 | 01/05/26 | Updated Feed Hours and System Restart to reflect the new time that persisted orders are added back into the order book. |
| 1.2.20 | x/x/26 | Updated Time description in `Time` and `Time Reference` messages. |
