If the participants subscribed to ongoing updates for the instrument(s), the platform will then start sending unsolicited MarketDataIncrementalRefresh [X] messages which contain a mixture of trade and/or order book update messages. These incremental market data messages may contain a repeating group of updates in a single message. For example, an incoming sell order which enters the order book, executes against a resting buy order with the remainder written to the order book will trigger a MarketDataIncrementalRefresh [X] message containing the following updates:Documentation Index
Fetch the complete documentation index at: https://docs.polymarket.us/llms.txt
Use this file to discover all available pages before exploring further.
- The deletion of the previous best bid (as a result of the immediate fill)
- The addition of a new best bid (next-best bid price)
- The deletion of the best offer (new order has a better price)
- The addition of a new best offer (representing the balance of the incoming sell order)
- A record relating to the trade, and
- A record relating to updated overall market volume
Table 22: MarketDataIncrementalRefresh (X) message
| Tag | Name | Req | Type | Description |
|---|---|---|---|---|
| < Standard Header > | Y | 35 = X | ||
| 262 | MDReqID | Y | String | The ID of the request as indicated on the request |
| 268 | NoMDEntries | Y | NumInGroup | |
| β 279 | MDUpdateAction | Y | char | The type of action conveyed by this block (0=New, 1=Change, 2=Delete) |
| β 269 | MDEntryType | C | char | Type of entry. Set where MDUpdateAction (279) = (0) New or 1 (Change). 0=Bid, 1=Offer, 2=Trade, 4=Opening Price, 5=Closing Price, 6=Settlement Price, 7=Trading Session High Price, 8=Trading Session Low Price, B=Trade Volume, g=Trading Reference Price |
| β 278 | MDEntryID | N | String | Unique reference for this entry. Typically a 13-character alphanumeric string. |
| β 55 | Symbol | Y | String | Instrument symbol |
| β 22 | SecurityIDSource | Y | int | 8 = Exchange symbol |
| β 48 | SecurityID | Y | String | Will always equal Symbol (55) |
| β 167 | SecurityType | N | String | Type of instrument (CS, FUT, FXSPOT, FXSWAP, OOF, OPT, NONE) |
| β 1151 | SecurityGroup | N | String | Security sub-type. For example βEquitiesβ |
| β 270 | MDEntryPx | N | Price | Order level price where MDEntryType (269) = 0 (Bid) or 1 (Offer). Traded price where MDEntryType (269) = 2 (Trade). Total value traded where MDEntryType (269) = B (Trade Volume) |
| β 271 | MDEntrySize | N | Qty | Remaining order size where MDEntryType (269) = 0 (Bid) or 1 (Offer). Will be zero where MDUpdateAction (279) = 2 (Delete). Trade size where MDEntryType (269) = 2 (Trade). Total quantity traded where MDEntryType (269) = B (Trade Volume) |
| β 272 | MDEntryDate | N | UTCDateOnly | The date on which the price level or trade occurred |
| β 273 | MDEntryTime | N | UTCTimeOnly | The time at which the price level updated or trade occurred (in UTC) |
| β 59 | TimeInForce | N | char | Time in force for this order (0=Good for day, 1=Good till cancel, 6=Good till date) |
| β 126 | ExpireTime | N | UTCTimestamp | Populated where TimeInForce (59) = 6 (Good Till Date) |
| β 37 | OrderID | N | String | Only sent for price level updates. Will match OrderID (37) in the ExecutionReport [8], allowing Participants to identify their own orders within market data. |
| β 40 | OrdType | N | char | 2 = Limit order, K = Market-to-limit order |
| β 828 | TrdType | N | int | Only sent for trades. 0 = Regular trade |
| β 1003 | TradeID | N | String | Only sent for trade updates. Will match the ExecID (17) in the ExecutionReport fill, allowing Participants to identify their own trades within market data. |
| β 2446 | AggressorSide | N | char | Only sent for trades. Indicates which side was the aggressor in a trade (1=Buy, 2=Sell) |
| β 336 | TradingSessionID | C | String | Sent for trades and trading status changes. Possible values: CLOSED, OPEN, PREOPEN, SUSPENDED, EXPIRED, TERMINATED, HALTED, MATCH_AND_CLOSE_AUCTION |
| < Standard Trailer > | Y |
Settlement Outcomes
Implementation
FIX tag 58 (Text) has been added to the MDIncGrp repeating group to communicate final settlement outcomes. When an instrument resolves with final settlement, the MarketDataIncrementalRefresh (35=X) or MarketDataSnapshotFullRefresh (35=W) message includes the textual outcome.Message Structure
When an instrument settles, the message includes:Usage
Final Settlement: Tag 58 is present with the outcome text describing the resolution (e.g., βPistonsβ, βBullsβ, βOverβ, βYesβ). Trade Day Roll: Tag 58 is absent, even when269=6 is present with 336=CLOSED or 336=EXPIRED. Tag 58 only populates when the settlement price and open interest update occur at final settlement, not during initial state transition to EXPIRED.
Technical Notes
- No data dictionary modifications required - tag 58 already exists in FIX 5.0+ spec for MDIncGrp
- This implementation keeps FIX vanilla/standard-compliant
- Tag 58 is equivalent to the TIER1 field in gRPC settlement_tiers