Market Data Request (35=V)
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), 1–100 = 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
35=V) on the BITGO-MD session. Aggregated Level 2 orderbook.-
mdReqIDstring requiredRequired. Client-assigned request ID; must be unique per active subscription. -
subscriptionRequestTypestring enum requiredRequired.0Snapshot only,1Snapshot + Subscribe,2Unsubscribe.012 -
marketDepthinteger requiredRequired.0= full book (up to 100 levels/side);1–100= top N. Values ≥ 101 → reject281=5. -
mdUpdateTypestring enumOptional. Defaults to0(Full Refresh) if omitted; set265=1explicitly for incremental updates on a live subscription.0= Full Refresh,1= Incremental updates.01 -
noMDEntryTypesinteger requiredRequired. Number of MDEntryType (269) values that follow. Typically2(Bid + Offer). -
mdEntryTypestring enum requiredRequired (repeating).0= Bid,1= Offer. Trade (2) is not supported → reject281=8.01 -
noRelatedSyminteger requiredRequired. Number of symbols in this request. Max 20 symbols per request. -
symbolstring requiredRequired (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
35=W). Server → client. Sent on subscribe and snapshot-only.-
mdReqIDstring requiredRequired. Echoed subscription request ID. -
symbolstring requiredRequired. Product symbol. -
noMDEntriesinteger requiredRequired. Number of entries in this snapshot. -
mdEntriesarray of objects requiredBid and offer levels up to requested depth.mdEntries object
-
mdEntryTypestring enum requiredRequired.0Bid,1Offer.01 -
mdEntryPxstring requiredRequired. Price level. -
mdEntrySizestring requiredRequired. Quantity at this level. -
mdEntryPositionNointeger requiredRequired. Position in book (1= best).
-
default
MarketDataRequestReject (35=Y).
35=Y).Response Body
object
35=Y). Server → client when MarketDataRequest fails.-
mdReqIDstring requiredRequired. Echoed from the original request. -
mdReqRejReasoninteger enum requiredRequired.0Unknown symbol,1Duplicate MDReqID,2Insufficient Bandwidth,4Unsupported SubscriptionRequestType,5Unsupported MarketDepth,6Unsupported MDUpdateType,8Unsupported MDEntryType,10Unsupported Scope.012456810 -
textstringOptional. Human-readable reason when non-empty.