FIXMarket Data FIX

POST

The client sends MarketDataRequest (35=V) to the server over TLS/TCP. This is not an HTTP request.

Subscribe to or snapshot an order book on a market data session (56=BITGO-MD), separate from the order-entry session (BITGO).

Subscribe: set 263=1 and 265=1. Tag 262 (MDReqID) must be unique per subscription. Tag 264 (MarketDepth): 0 = full book (up to 100 levels per side), 1100 = top N. Values of 101+ are rejected (281=5).

Snapshot only: set 263=0 for a one-time snapshot with no ongoing subscription.

Unsubscribe: send 263=2 with the same 262 used at subscription time.

Responses: initial MarketDataSnapshotFullRefresh (35=W), then Incremental Refresh (35=X) on updates (~300 ms cycle), or MarketDataRequestReject (35=Y) on error.

Subscription limits: 50 active subscriptions per session; 20 symbols per single request; 100 total symbols per enterprise across all sessions.

Gap detection: tag 83 (RptSeq) is not present on 35=X. Use session-level MsgSeqNum (34) for gap detection. QuickFIX manages this automatically. On gap, resubscribe with 263=1.

Examples (pipe-delimited FIX):

Subscribe to BTC-USD top 10 levels (incremental):

8=FIX.4.4|9=152|35=V|49=0123456789abcdef0123456789abcdef|56=BITGO-MD|34=5|52=20260415-14:30:00.000|262=md-req-001|263=1|264=10|265=1|267=2|269=0|269=1|146=1|55=BTC-USD|10=XXX

Snapshot only (no ongoing subscription):

8=FIX.4.4|9=145|35=V|49=0123456789abcdef0123456789abcdef|56=BITGO-MD|34=6|52=20260415-14:30:01.000|262=md-req-002|263=0|264=1|267=2|269=0|269=1|146=1|55=ETH-USD|10=XXX

Unsubscribe:

8=FIX.4.4|9=145|35=V|49=0123456789abcdef0123456789abcdef|56=BITGO-MD|34=7|52=20260415-14:30:02.000|262=md-req-003|263=2|264=1|267=2|269=0|269=1|146=1|55=BTC-USD|10=XXX

Body Params

object

MarketDataRequest (35=V) on the BITGO-MD session. Aggregated Level 2 orderbook.
  • mdReqID string required
    Required. Client-assigned request ID; must be unique per active subscription.
  • subscriptionRequestType string enum required
    Required. 0 Snapshot only, 1 Snapshot + Subscribe, 2 Unsubscribe.
    012
  • marketDepth integer required
    Required. 0 = full book (up to 100 levels/side); 1100 = top N. Values ≥ 101 → reject 281=5.

    >= 0 · <= 100

  • mdUpdateType string enum
    Optional. Defaults to 0 (Full Refresh) if omitted; set 265=1 explicitly for incremental updates on a live subscription. 0 = Full Refresh, 1 = Incremental updates.
    01
  • noMDEntryTypes integer required
    Required. Number of MDEntryType (269) values that follow. Typically 2 (Bid + Offer).
  • mdEntryType string enum required
    Required (repeating). 0 = Bid, 1 = Offer. Trade (2) is not supported → reject 281=8.
    01
  • noRelatedSym integer required
    Required. Number of symbols in this request. Max 20 symbols per request.
  • symbol string required
    Required (repeating under 146). Product symbol. Limits: 50 subscriptions/session; 100 symbols/enterprise across sessions.

Responses

200
Subscription active; MarketDataSnapshotFullRefresh follows, then incremental updates.

Response Body

object

MarketDataSnapshotFullRefresh (35=W). Server → client. Sent on subscribe and snapshot-only.
  • mdReqID string required
    Required. Echoed subscription request ID.
  • symbol string required
    Required. Product symbol.
  • noMDEntries integer required
    Required. Number of entries in this snapshot.
  • mdEntries array of objects required
    Bid and offer levels up to requested depth.
    mdEntries object
    • mdEntryType string enum required
      Required. 0 Bid, 1 Offer.
      01
    • mdEntryPx string required
      Required. Price level.
    • mdEntrySize string required
      Required. Quantity at this level.
    • mdEntryPositionNo integer required
      Required. Position in book (1 = best).
default
MarketDataRequestReject (35=Y).

Response Body

object

MarketDataRequestReject (35=Y). Server → client when MarketDataRequest fails.
  • mdReqID string required
    Required. Echoed from the original request.
  • mdReqRejReason integer enum required
    Required. 0 Unknown symbol, 1 Duplicate MDReqID, 2 Insufficient Bandwidth, 4 Unsupported SubscriptionRequestType, 5 Unsupported MarketDepth, 6 Unsupported MDUpdateType, 8 Unsupported MDEntryType, 10 Unsupported Scope.
    012456810
  • text string
    Optional. Human-readable reason when non-empty.