Skip to main content
Client BetaThis feature is currently in client beta and requires account enablement.
Prime FIX Market Data provides level 2 market data on FIX 5.0 for Prime Trading Spot instruments. This includes OHLCV (Open, High, Low, Close, Volume), bids and offers, and trade history data. This requires a separate API key from the API key used for FIX Order Entry.

Getting Started

To get started quickly with FIX Market Data, take a look at the sample FIX Market Data Go reference application on Coinbase Samples.

Logon (A)

Logon messages must conform to FIXT 1.1. For market data sessions, configure your Logon as follows:
TagReqNameDescription
8YBeginStringMust be FIXT.1.1
9YBodyLengthLength of body
35YMsgTypeMust be A
34YMsgSeqNumMust be 1
49YSenderCompIDThe Service Account ID (on messages from the client)
52YSendingTimeMust be within 5 seconds of server time in UTC
56YTargetCompIDMust be COIN (on messages from the client)
95YRawDataLengthNumber of bytes in the RawData field
96YRawDataClient message signature (see Logon)
98YEncryptMethodMust be 0 (none)
108YHeartBtIntHeartbeat interval is capped at 300s, defaults to 30s
141YResetSeqNumFlagResets the sequence number. Can be Y/N
553YUsernameClient API Key (Replaces tag 9407)
554YPasswordClient API passphrase
1137YDefaultApplVerIDMust be 9 (FIX 5.0 SP2)
9406YDropCopyFlagMust be N
10YCheckSumChecksum

Supported Message Types

The Prime FIX Market Data API supports the following message types: Client to Server:
  • MarketDataRequest (V)
Server to Client:
  • MarketDataRequestReject (Y)
  • MarketDataSnapshotFullRefresh (W)
  • MarketDataIncrementalRefresh (X)
  • SecurityStatus (f)

MarketDataRequest (V)

Sent by the client when placing a market data request.
TagReqNameDescription
262YMDReqIDClient unique identifier for market data request
263YSubscriptionRequestType0 = Snapshot only
1 = Snapshot+Updates (Subscribe)
2 = Disable previous Snapshot+Update (Unsubscribe)
264YMarketDepth0 = Full depth (L2)
1 = Top of book
N>1 = Report best N price tiers of data
265NMDUpdateTypeRequired if SubscriptionRequestType <263> = 1:
0 = Snapshot+Updates
1 = Updates only
267YNoMDEntryTypesNumber of MDEntryType <269> fields requested
↳269YMDEntryType0 = Bid
1 = Offer
2 = Trade
4 = Open
5 = Close
7 = High
8 = Low
B = Volume
146YNoRelatedSymNumber of Symbols <55> requested
↳55YSymbolRepeating group of symbols for which the client requests market data

MarketDataRequestReject (Y)

Sent by the server in case the MarketDataRequest (V) fails.
TagReqNameDescription
262YMDReqIDClient unique identifier for market data request
281YMDReqRejReasonSee MDReqRejReason table
58NTextUser friendly error message

MDReqRejReason

Possible values for MDReqRejReason (see MarketDataRequestReject (Y)).
ValueDescription
0Unknown symbol
1Duplicate MDReqID
2Insufficient bandwidth
3Insufficient permission
4Invalid SubscriptionRequestType <263>
5Invalid MarketDepth <264>
6Unsupported MDUpdateType <267>
7Other
8Unsupported MDEntryType <269>

MarketDataSnapshotFullRefresh (W)

Sent by the server to view a new stream of market data information.
TagReqNameDescription
262YMDReqIDClient unique identifier for market data request
55YSymbolThe trading pair from MarketDataRequest
268YNoMDEntriesNumber of market data updates in snapshot
911YTotNumReportsTotal number of reports being sent in response to a single request
963YReportIDUnique identifier of the report itself
↳269YMDEntryType0 = Bid
1 = Offer
2 = Trade
4 = Open
5 = Close
7 = High
8 = Low
B = Volume
↳278YMDEntryIDUnique identifier for this market data entry
↳83YRptSeqPublic sequence number for each entry in the snapshot by symbol
↳270NMDEntryPxPrice of the market data entry (Not present if MDEntryType = B)
↳271NMDEntrySizeVolume represented by the market data entry (Not present if MDEntryType = 4, 5, 7, or 8)
↳272YMDEntryDateDate of the market data entry
↳2446NAggressorSideIf MDEntryType = 2 (Trade), the side of the order:
1 = Buy
2 = Sell
↳273YMDEntryTimeTime of the market data entry
↳453NNoPartyIDsOnly present if MDEntryType = 2 (Trade). Will always be 1
↳↳448NPartyIDMarket Identifier Code (MIC) for Venue
↳↳447NPartyIDSourceWill always be G, Market Identifier Code (MIC)
↳↳452NPartyRoleWill always be 73, Execution Venue

MarketDataIncrementalRefresh (X)

Sent by the server to view updates to an existing stream.
TagReqNameDescription
262YMDReqIDClient unique identifier for market data request
55YSymbolThe trading pair from MarketDataRequest
268YNoMDEntriesNumber of market data updates in snapshot
↳279YMDUpdateActionType of entry update:
0 = NEW
1 = CHANGE
2 = DELETE
↳269YMDEntryType0 = Bid
1 = Offer
2 = Trade
4 = Open
5 = Close
7 = High
8 = Low
B = Volume
↳278YMDEntryIDUnique identifier for this market data entry
↳83YRptSeqPublic sequence number for each entry in the snapshot by symbol
↳270NMDEntryPxPrice of the market data entry (Not present if MDEntryType = B)
↳271NMDEntrySizeVolume represented by the market data entry (Not present if MDEntryType = 4, 5, 7, or 8)
↳272YMDEntryDateDate of the market data entry
↳2446NAggressorSideIf MDEntryType = 2 (Trade), the side of the order:
1 = Buy
2 = Sell
↳273YMDEntryTimeTime of the market data entry
↳453NNoPartyIDsOnly present if MDEntryType = 2 (Trade). Will always be 1
↳↳448NPartyIDMarket Identifier Code (MIC) for Venue
↳↳447NPartyIDSourceWill always be G, Market Identifier Code (MIC)
↳↳452NPartyRoleWill always be 73, Execution Venue

SecurityStatus (f)

Sent by the server once when an existing stream fails, and once when it reconnects.
TagReqNameDescription
55YSymbolSymbol
326YSecurityTradingStatus3 = Resume
999 = Market data feed temporarily unavailable
58YTextMarket data feed temporarily unavailable for MDReqID {MDReqID} for stream type:
- bid/offer
- trade
- OHLCV