NAV

Introduction

These are the messages that can be sent and received for market data. For a reference for all FIX tags, see FIXimate

Survey

Please complete our API Use Survey to help us improve your experience using the Gemini APIs.

FIX Dictionary

Gemini uses FIX 4.4 with the 20030618 errata.

Of particular note if you may be using an older dictionary:

Tag Field Value Notes
269 MDEntryType Q = Auction Clearing Price Added FIX.4.4 EP6
18 ExecInst j = Single Execution Requested For Block Trade Added FIX.4.4 EP6
234 StipulationValue FIX enum but should allow other values. Compatible with Errata 20030618 Vol 6 - see p. 86.

Custom tags

Tag Field Type Notes
9001 CancelOnDisconnect Boolean Used in Logon <A> to enable or disable session-level cancel on disconnect.
9002 MDEntryMakerSide Char Used in Market Data - Incremental Refresh <X> MDEntry groups when MDEntryType had the value 2 = Trade to indicate the maker side of a trade. See Examples: Request to enable maker side on trades.
9003 EnableMDEntryMakerSide Boolean Used in Market Data Request <V> to optionally enable showing custom field 9002 MDEntryMakerSide in Market Data - Incremental Refresh <X> messages when MDEntryType had the value 2 = Trade. See Examples: Showing Maker Side For Trades.

Download

For your convenience, Gemini maintains our custom dictionary in QuickFIX XML form:

Environment File
Production https://docs.gemini.com/files/gemini-fix-dictionary.xml.zip
Sandbox https://docs.sandbox.gemini.com/files/gemini-fix-dictionary.xml.zip

Connecting

Gemini's primary trading platform and network point of presence (PoP) is housed in the Equinix NY5 data center in Secaucus, New Jersey. Customers can cross connect from their NY2/NY4/NY5 infrastructure or leverage an approved extranet provider to access Gemini production Market Data feeds, Drop Copy, and Order Entry sessions.

We are also nearing completion of a PoP in Equinix CH3 which will be available via cross connects from the Equinix family of data centers in Chicago and approved extranet providers.

Steps to get connected to our FIX infrastructure:

Complete Account Verification

If your firm has not done so already, please complete the Institutional Account Verification Process

Get connected

Once on-boarded as a Gemini customer, email connectivity@gemini.com with a brief description of your business and your preferred connectivity method. There are 3 options for production FIX connectivity to Gemini:

Cross-connect

For customers with applications in the same data center as Gemini. If you would like to cross-connect, please include the legal entity name that we should include in our LOA (letter of authorization).

Extranet connectivity

Customers who are not in the Equinix family of data centers can leverage an extranet provider to connect to Gemini. If your firm wishes to leverage an extranet provider or third party to connect, please specify that in your email including the providers name.

Third Party Order Management System Provider

There are a number of Service providers that allow Gemini customers to leverage their trading platforms to connect to Gemini for trading. If you would like to cross-connect, please include the legal entity name that we should include in our LOA (letter of authorization). If your firm wishes to leverage an extranet provider or third party to connect, please specify that in your email including the providers name.

Sandbox and Testing

Gemini operates a Sandbox environment which acts as a replica of our production environment. Gemini strongly recommends that all FIX customers create a Sandbox account to test their workflows. Please follow these steps to get a FIX Sandbox environment setup:

Setup a Sandbox Account

Create a Sandbox account by going to: https://sandbox.gemini.com

Permission Your Test IP

E-mail connectivity@gemini.com and specify the email address used to setup your Sandbox account and the Source IP that you will be using to connect to the FIX Sandbox. We will respond back once the IP addresses have been enabled. We will also provide you with the Sender and Target CompId that should be used to connect to the test environment.

Test Your Workflow Thoroughly

Test all messaging workflows specified in our FIX API documentation. (Gemini currently only supports FIX 4.4)

Workflow

After connecting and logging on, the client can either request a security list or subscribe to market data.

Gemini does not resend messages on a market data channel. Instead, Gemini will send a Sequence Reset <4> message with GapFillFlag <123> field set to Y and the new sequence number in the MsgSeqNum <34> field.

Security list

Optional: Gemini offers a security list that supplies the definitive list of symbols traded on the exchange.

  1. Client sends a Security List Request <x>
  2. Gemini responds with a Security List <y>

Market data subscription

After connecting to the the market data channel, the client subscribes to market data by sending a Market Data Request <V> message.

When a client disconnects for any reason, the market data subscription is terminated. Upon reconnecting, the client needs to send another Market Data Request <V> message.

  1. Client sends a Market Data Request <V>
  2. Gemini responds by sending one Market Data - Snapshot/Full Refresh <W>
  3. As bids, offers, trades and/or auctions happen on the exchange, Gemini sends Market Data - Incremental Refresh <X> messages

*FIX 4.4 EP 26 is used to backport MDEntryType (269) = Q Auction Clearing Price to denote indicative and final auction prices.

Supported securities

The following security symbols are valid values for a Symbol <55> field.

Symbols are formatted as CCY1CCY2 where prices are in CCY2 (price currency) and quantities are in CCY1 (quantity currency), as this table makes explicit:

Symbol Price currency Quantity currency Minimum order size Minimum order increment Minimum price increment
BTCUSD USD BTC 0.00001 BTC (1e-5) 0.00000001 BTC (1e-8) 0.01 USD
ETHUSD USD ETH 0.001 ETH (1e-3) 0.000001 ETH (1e-6) 0.01 USD
ETHBTC BTC ETH 0.001 ETH (1e-3) 0.000001 ETH (1e-6) 0.00001 BTC (1e-5)
ZECUSD USD ZEC 0.001 ZEC (1e-3) 0.000001 ZEC (1e-6) 0.01 USD
ZECBTC BTC ZEC 0.001 ZEC (1e-3) 0.000001 ZEC (1e-6) 0.00001 BTC (1e-5)
ZECETH ETH ZEC 0.001 ZEC (1e-3) 0.000001 ZEC (1e-6) 0.0001 ETH (1e-4)
ZECBCH BCH ZEC 0.001 ZEC (1e-3) 0.000001 ZEC (1e-6) 0.0001 BCH (1e-4)
ZECLTC LTC ZEC 0.001 ZEC (1e-3) 0.000001 ZEC (1e-6) 0.001 LTC (1e-3)
BCHUSD USD BCH 0.001 BCH (1e-3) 0.000001 BCH (1e-6) 0.01 USD
BCHBTC BTC BCH 0.001 BCH (1e-3) 0.000001 BCH (1e-6) 0.00001 BTC (1e-5)
BCHETH ETH BCH 0.001 BCH (1e-3) 0.000001 BCH (1e-6) 0.0001 ETH (1e-4)
LTCUSD USD LTC 0.01 LTC (1e-2) 0.00001 LTC (1e-5) 0.01 USD
LTCBTC BTC LTC 0.01 LTC (1e-2) 0.00001 LTC (1e-5) 0.00001 BTC (1e-5)
LTCETH ETH LTC 0.01 LTC (1e-2) 0.00001 LTC (1e-5) 0.0001 ETH (1e-4)
LTCBCH BCH LTC 0.01 LTC (1e-2) 0.00001 LTC (1e-5) 0.0001 BCH (1e-4)

On a market data channel, Gemini will respond to a Security List Request <x> with a Security List <y> containing all the supported symbols on the exchange.

Precision on the exchange

Quantity and price on incoming orders are strictly held to the minimums and increments on the table shown above.

However, once on the exchange, quantities and notional values may exhibit additional precision down to two decimal places past the "minimum order increment" listed above. For instance, it is possible that a btcusd trade could execute for a quantity of 0.0000000001 (1e-10) BTC. This is due to:

This additional precision is marketable once on the exchange.

Your account balances are maintained to full fractional precision in each currency.

Understanding price and quantity

In a Market Data - Incremental Refresh <X> message, the MDEntryPx <270> field is denominated in USD and the MDEntrySize <271> field is denominated in BTC.

RAW
8=FIX.4.4|9=122|35=X|34=41|49=GEMINI|52=20160217-18:07:26.581|56=CLIENT|262=TestMDReqID_1|268=1|279=0|269=0|55=BTCUSD|270=300.43|271=0.57|10=070|

HEADER
        8         BeginString: FIX.4.4
        9          BodyLength: 122
       34           MsgSeqNum: 41
       35             MsgType: MarketDataIncrementalRefresh (X)
       49        SenderCompID: GEMINI
       52         SendingTime: 20160217-18:07:26.581
           56        TargetCompID: CLIENT
BODY
      262             MDReqID: TestMDReqID_1
    NoMDEntries: count = 1
           55              Symbol: BTCUSD
          269         MDEntryType: BID (0)
          270           MDEntryPx: 419.02
          271         MDEntrySize: 9.50
          279      MDUpdateAction: NEW (0)
TRAILER
       10            CheckSum: 070

Currency-based messages and fields

Identifiers

Client supplied FIX identifier field values must contain between at least one and up to one hundred allowed characters.

Any exchange-bound message containing an invalid identifier will be rejected.

Allowed characters

Client supplied identifier values should match against this PCRE regular expression: [:\-_\.#a-zA-Z0-9]{1,100}.

Characters Description ASCII Codes (Dec)
A-Z Uppercase A-Z 65 - 90
a-z Lowercase a-z 97 - 122
0-9 Digits 48 - 57
# Hash, octothorpe, number sign 35
- Hyphen 45
. Period 46
: Colon 58
_ Underscore 95

Client supplied identifiers

Identifiers assigned by Gemini

Market data messages do not have any identifiers assigned by Gemini.

Standard header

The Standard Header is required on every message.

PossResend <97> is not supported. Gemini will report the last sequence number that the exchange received in the header of the Logon <A> message. The client should assume that any events that the server requests to be replayed have not been acted upon: see Beginning a session for details.

Standard Trailer

The Standard Trailer is required on every message.

Session-Level Messages

Establishing a connection

  1. Client sends server → Logon <A> message
  2. Is client ResetSeqNumFlag <141> to Y?
    • Yes, reset sequence numbers and proceed
      • server resets next expected client client sequence number
      • server resets its own sequence number
      • server responds with ← Logon <A> message with reset sequence number
      • client sends server → Heartbeat <0>
    • No, negotiate sequence numbers on both sides
      1. Is client MsgSeqNum <34> value what the server is expecting?
      2. Is server MsgSeqNum <34> value what the client is expecting?
        • No, value is greater than expected
        • No, value is less than expected
          • client disconnects or sends server → Logout <5>
          • Gemini coordinates with the client to triage so the FIX connection can be re-established
        • Otherwise
  3. Success! Your FIX connection is established.

When can sequence numbers be reset?

Gemini runs the server side of the FIX connection ("acceptor"). Gemini never resets sequence numbers on the server side during the logon workflow unless the client explicitly requests it.

The client ("initiator") can reset sequence numbers during Logon <A> by setting ResetSeqNumFlag <141> to Y.

Gemini recommends that client consider configuring the FIX initiator to automatically reset sequence numbers under the following conditions:

While synchronizing sequence numbers after a replay, the client may send a Sequence Reset <4> with GapFillFlag <123> = Y in lieu of a replay.

Ending a connection

The client may send the server an optional Logout <5> message but the exchange will not interpret its absence as being an abnormal condition.

Under certain conditions, the server may send the client a Logout <5> message where the Text <58> field contains the reason, such as scheduled maintenance.

Logon <A>

The Logon <A> message must be the first message sent by the application requesting to initiate a FIX session. The Logon <A> message authenticates an institution establishing a connection to Gemini.

Upon receipt of a Logon <A> message, Gemini will authenticate the institution requesting connection by validating the source IP Address, SenderCompID <49>, and TargetCompID <56> identifying the institution. The server will then issue a Logon <A> message as acknowledgment that the connection request has been accepted. The acknowledgment Logon <A> can also be used by the institution to validate that the connection was established with the correct party. If validation fails, the connection will be dropped without a Reject <2>.

Heartbeat <0>

The Heartbeat <0> monitors the status of the communication link and identifies when the last of a string of messages was not received. The only supported heartbeat interval, as specified by the Logon <A> message, is 30 seconds.

When either end of a FIX connection has not sent any data for HeartBtInt <108> seconds, it will transmit a Heartbeat <0> message. When either end of the connection has not received any data for (HeartBtInt <108> + "some reasonable transmission time") seconds, it will transmit a Test Request <1> message. If there is still no Heartbeat <0> message received after (HeartBtInt <108> + "some reasonable transmission time") seconds then the connection should be considered lost and corrective action be initiated.

Note that a Test Request <1> message can still be sent independent of the value of the HeartBtInt <108>, which will force a Heartbeat <0> message.

Heartbeats issued as the result of Test Request <1> must contain the TestReqID <112> transmitted in the Test Request <1> message. This is useful to verify that the Heartbeat <0> is the result of the Test Request <1> and not as the result of a regular timeout.

Test Request <1>

The Test Request <1> message forces a heartbeat from the opposing application. The Test Request <1> message checks sequence numbers or verifies communication line status. The opposite application responds to the Test Request <1> with a Heartbeat <0> containing the TestReqID <112>.

The TestReqID <112> verifies that the opposite application is generating the heartbeat as the result of Test Request <1> and not a normal timeout. The opposite application includes the TestReqID <112> in the resulting Heartbeat <0>. Any string can be used as the TestReqID <112> (one suggestion is to use a timestamp string).

Resend Request <2>

The resend request is sent by the receiving application to initiate the retransmission of messages. This function is utilized if a sequence number gap is detected, if the receiving application lost a message, or as a function of the initialization process.

The resend request can be used to request a single message, a range of messages or all messages subsequent to a particular message.

Note: the sending application may wish to consider the message type when resending messages; e.g. if a new order is in the resend series and a significant time period has elapsed since its original inception, the sender may not wish to retransmit the order given the potential for changed market conditions. (The Sequence Reset <4> - Gap Fill message is used to skip messages that a sender does not wish to resend.)

Note: it is imperative that the receiving application process messages in sequence order, e.g. if message number 7 is missed and 8-9 received, the application should ignore 8 and 9 and ask for a resend of 7-9, or, preferably, 7-0 (0 represents infinity). This latter approach is strongly recommended to recover from out of sequence conditions as it allows for faster recovery in the presence of certain race conditions when both sides are simultaneously attempting to recover a gap.

Reject <3>

Gemini sends a Reject <3> message when a message is received but cannot be properly processed due to a session-level rule violation. A reject is typically a serious error in the trading application's session logic.

Sequence Reset <4>

The Sequence Reset <4> message is used in response to a Resend Request <2> message when one or more messages must be skipped over for the following reasons:

Gemini does not support Reset mode (GapFillFlag <123> not present or equal to N).

Logout <5>

The Logout <5> message initiates or confirms the termination of a FIX session.

Business Message Reject <j>

Gemini sends Business Message Reject <j> when the exchange receives a valid FIX message which cannot be processed.

Examples include:

Gemini does not use Business Message Reject <j> to handle invalid New Order Single <D> messages. Rejected orders are handled with an Execution Report <8> message with an OrdStatus <39> field with a value of 8 - Rejected.

Exchange-Bound Messages

Security List Request <x>

A Security List Request <x> returns a Security List <y> response containing the symbols traded on the exchange.

See Examples: Request for the symbol list for sample requests and responses.

Market Data Request <V>

Subscribes the current session to a Market Data - Snapshot/Full Refresh <W> followed by zero or more Market Data - Incremental Refresh <X> messages.

See Examples: Market Data Requests for sample requests and responses.

Client-Bound Messages

Security List <y>

A Security List <y> is the response containing the list of securities specified in a Security List Request <x>.

See Examples: Request for the symbol list for sample requests and responses.

Market Data - Snapshot / Full Refresh <W>

The initial response to a Market Data Request <V> is a full snapshot of current state followed by multiple Market Data - Incremental Refresh <X> messages.

See Examples: Full Snapshot.

Market Data - Incremental Refresh <X>

The initial response to a Market Data Request <V> is a full snapshot of current state followed by multiple incremental update messages.

See Examples: Market Data Responses for examples of bids, offers, trades, and auction events.

Market Data Request Reject <Y>

Examples

Market Data Requests

These are some examples of FIX market data requests. These requests only need to be made once per session to setup a FIX connection for market data.

Notes:

Request for Top of Book (bids)

This is a request for the Top of Book BTCUSD bids:

RAW
8=FIX.4.4|9=114|35=V|34=2|49=TRADEBOTMD002|52=20180425-17:51:40.000|56=GEMINI|262=2|263=1|264=1|265=0|146=1|55=BTCUSD|267=1|269=0|10=016|

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 114
       34                     MsgSeqNum: 2
       35                       MsgType: MarketDataRequest (V)
       49                  SenderCompID: TRADEBOTMD002
       52                   SendingTime: 20180425-17:51:40.000
       56                  TargetCompID: GEMINI
BODY
      262                       MDReqID: 2
      263       SubscriptionRequestType: SNAPSHOT_PLUS_UPDATES (1)
      264                   MarketDepth: TOP_OF_BOOK (1)
      265                  MDUpdateType: FULL_REFRESH (0)
    NoRelatedSym: count = 1
           55                        Symbol: BTCUSD
    NoMDEntryTypes: count = 1
          269                   MDEntryType: BID (0)
TRAILER
       10                      CheckSum: 016

and the corresponding response:

RAW
8=FIX.4.4|9=108|35=W|34=2|49=GEMINI|52=20180425-17:51:40.787|56=TRADEBOTMD002|55=BTCUSD|262=2|268=1|269=0|270=8490.07|271=1|10=075|

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 108
       34                     MsgSeqNum: 2
       35                       MsgType: MarketDataSnapshotFullRefresh (W)
       49                  SenderCompID: GEMINI
       52                   SendingTime: 20180425-17:51:40.787
       56                  TargetCompID: TRADEBOTMD002
BODY
       55                        Symbol: BTCUSD
      262                       MDReqID: 2
    NoMDEntries: count = 1
          269                   MDEntryType: BID (0)
          270                     MDEntryPx: 8490.07
          271                   MDEntrySize: 1
TRAILER
       10                      CheckSum: 075

Request for Trades

This is a request for all ETHBTC trades:

RAW
8=FIX.4.4|9=114|35=V|34=2|49=TRADEBOTMD002|52=20180425-17:55:30.000|56=GEMINI|262=2|263=1|264=0|265=0|146=1|55=ETHBTC|267=1|269=2|10=009|

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 114
       34                     MsgSeqNum: 2
       35                       MsgType: MarketDataRequest (V)
       49                  SenderCompID: TRADEBOTMD002
       52                   SendingTime: 20180425-17:55:30.000
       56                  TargetCompID: GEMINI
BODY
      262                       MDReqID: 2
      263       SubscriptionRequestType: SNAPSHOT_PLUS_UPDATES (1)
      264                   MarketDepth: FULL_BOOK (0)
      265                  MDUpdateType: FULL_REFRESH (0)
    NoRelatedSym: count = 1
           55                        Symbol: ETHBTC
    NoMDEntryTypes: count = 1
          269                   MDEntryType: TRADE (2)
TRAILER
       10                      CheckSum: 009

Request for Multiple Symbols

This is a request for the Top of Book BTCUSD, ETHUSD, and ETHBTC bids:

RAW
8=FIX.4.4|9=134|35=V|34=2|49=TRADEBOTMD002|52=20180425-17:55:38.000|56=GEMINI|262=2|263=1|264=1|265=0|146=3|55=BTCUSD|55=ETHUSD|55=ETHBTC|267=1|269=0|10=246|

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 134
       34                     MsgSeqNum: 2
       35                       MsgType: MarketDataRequest (V)
       49                  SenderCompID: TRADEBOTMD002
       52                   SendingTime: 20180425-17:55:38.000
       56                  TargetCompID: GEMINI
BODY
      262                       MDReqID: 2
      263       SubscriptionRequestType: SNAPSHOT_PLUS_UPDATES (1)
      264                   MarketDepth: TOP_OF_BOOK (1)
      265                  MDUpdateType: FULL_REFRESH (0)
    NoRelatedSym: count = 3
           55                        Symbol: BTCUSD
        ----
           55                        Symbol: ETHUSD
        ----
           55                        Symbol: ETHBTC
    NoMDEntryTypes: count = 1
          269                   MDEntryType: BID (0)
TRAILER
       10                      CheckSum: 246

and the corresponding responses:

RAW
8=FIX.4.4|9=108|35=W|34=2|49=GEMINI|52=20180425-17:55:39.151|56=TRADEBOTMD002|55=BTCUSD|262=2|268=1|269=0|270=8490.07|271=1|10=072|

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 108
       34                     MsgSeqNum: 2
       35                       MsgType: MarketDataSnapshotFullRefresh (W)
       49                  SenderCompID: GEMINI
       52                   SendingTime: 20180425-17:55:39.151
       56                  TargetCompID: TRADEBOTMD002
BODY
       55                        Symbol: BTCUSD
      262                       MDReqID: 2
    NoMDEntries: count = 1
          269                   MDEntryType: BID (0)
          270                     MDEntryPx: 8490.07
          271                   MDEntrySize: 1
TRAILER
       10                      CheckSum: 072

and:

RAW
      8=FIX.4.4|9=107|35=W|34=3|49=GEMINI|52=20180425-17:55:39.151|56=TRADEBOTMD002|55=ETHUSD|262=2|268=1|269=0|270=587.35|271=1|10=032|

      HEADER
            8                   BeginString: FIX.4.4
            9                    BodyLength: 107
           34                     MsgSeqNum: 3
           35                       MsgType: MarketDataSnapshotFullRefresh (W)
           49                  SenderCompID: GEMINI
           52                   SendingTime: 20180425-17:55:39.151
           56                  TargetCompID: TRADEBOTMD002
      BODY
           55                        Symbol: ETHUSD
          262                       MDReqID: 2
        NoMDEntries: count = 1
              269                   MDEntryType: BID (0)
              270                     MDEntryPx: 587.35
              271                   MDEntrySize: 1
      TRAILER
           10                      CheckSum: 032

and:

RAW
8=FIX.4.4|9=115|35=W|34=4|49=GEMINI|52=20180425-17:55:39.152|56=TRADEBOTMD002|55=ETHBTC|262=2|268=1|269=0|270=0.06896|271=0.004008|10=152|

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 115
       34                     MsgSeqNum: 4
       35                       MsgType: MarketDataSnapshotFullRefresh (W)
       49                  SenderCompID: GEMINI
       52                   SendingTime: 20180425-17:55:39.152
       56                  TargetCompID: TRADEBOTMD002
BODY
       55                        Symbol: ETHBTC
      262                       MDReqID: 2
    NoMDEntries: count = 1
          269                   MDEntryType: BID (0)
          270                     MDEntryPx: 0.06896
          271                   MDEntrySize: 0.004008
TRAILER
       10                      CheckSum: 152

Request to enable Maker Side on Trades

To enable showing the maker side of trades, create a Market Data Request <V> with custom field EnableMDEntryMakerSide <9003> enabled.

When trades occur that are not block trades, custom field MDEntryMakerSide <9002> will be appear in the MDEntry group with the market side of the trade. See Examples: Showing Maker Side For Trades.

RAW
8=FIX.4.4|9=121|35=V|34=2|49=TRADEBOTMD002|52=20180809-15:59:14.000|56=GEMINI|262=2|263=1|264=1|265=0|9003=Y|146=1|55=BTCUSD|267=1|269=2|10=128|

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 121
       34                     MsgSeqNum: 2
       35                       MsgType: MarketDataRequest (V)
       49                  SenderCompID: TRADEBOTMD002
       52                   SendingTime: 20180809-15:59:14.000
       56                  TargetCompID: GEMINI
BODY
      262                       MDReqID: 2
      263       SubscriptionRequestType: SNAPSHOT_PLUS_UPDATES (1)
      264                   MarketDepth: TOP_OF_BOOK (1)
      265                  MDUpdateType: FULL_REFRESH (0)
     9003        EnableMDEntryMakerSide: Y
    NoRelatedSym: count = 1
           55                        Symbol: BTCUSD
    NoMDEntryTypes: count = 1
          269                   MDEntryType: TRADE (2)
TRAILER
       10                      CheckSum: 128

Market Data Responses

These are some examples of FIX market data sent from GEMINIMKT to TESTMKT001 with price, liquidity, and trade information. Note that this is public data, so no assumption about the trade’s counterparty should be made.

Full snapshot

The initial response to a Market Data Request <V> is a Market Data - Snapshot / Full Refresh <W> message containing a full snapshot of current state.

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 19924
       34                     MsgSeqNum: 4
       35                       MsgType: MarketDataSnapshotFullRefresh (W)
       49                  SenderCompID: GEMINIMKT
       52                   SendingTime: 20180121-03:48:39.102
       56                  TargetCompID: TESTMKT001
BODY
       55                        Symbol: ETHBTC
      262                       MDReqID: 39
    NoMDEntries: count = 685
          269                   MDEntryType: BID (0)
          270                     MDEntryPx: 0.00001
          271                   MDEntrySize: 10111
        ----
...
        ----
          269                   MDEntryType: BID (0)
          270                     MDEntryPx: 0.08989
          271                   MDEntrySize: 8.918
        ----
          269                   MDEntryType: BID (0)
          270                     MDEntryPx: 0.0899
          271                   MDEntrySize: 8.8828
        ----
          269                   MDEntryType: OFFER (1)
          270                     MDEntryPx: 0.09032
          271                   MDEntrySize: 45.134
        ----
          269                   MDEntryType: OFFER (1)
          270                     MDEntryPx: 0.09049
          271                   MDEntrySize: 1.2
        ----
...
        ----
          269                   MDEntryType: OFFER (1)
          270                     MDEntryPx: 1000.00000
          271                   MDEntrySize: 3
TRAILER
       10                      CheckSum: 084

Adding quantity for a given price

This message shows a new bid for 2.8749 ETH priced at 988.88 USD.

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 125
       34                     MsgSeqNum: 5696449
       35                       MsgType: MarketDataIncrementalRefresh (X)
       49                  SenderCompID: GEMINIMKT
       52                   SendingTime: 20180123-04:07:42.101
       56                  TargetCompID: TESTMKT001
BODY
      262                       MDReqID: 40
    NoMDEntries: count = 1
           55                        Symbol: ETHUSD
          269                   MDEntryType: BID (0)
          270                     MDEntryPx: 988.88
          271                   MDEntrySize: 2.8749
          279                MDUpdateAction: NEW (0)
TRAILER
       10                      CheckSum: 187

Changing quantity for a given price

This message shows a new offer for 0.20503505 BTC available at price 10949.04 USD.

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 131
       34                     MsgSeqNum: 5696384
       35                       MsgType: MarketDataIncrementalRefresh (X)
       49                  SenderCompID: GEMINIMKT
       52                   SendingTime: 20180123-04:07:40.057
       56                  TargetCompID: TESTMKT001
BODY
      262                       MDReqID: 38
    NoMDEntries: count = 1
           55                        Symbol: BTCUSD
          269                   MDEntryType: OFFER (1)
          270                     MDEntryPx: 10949.04
          271                   MDEntrySize: 0.20503505
          279                MDUpdateAction: CHANGE (1)
TRAILER
       10                      CheckSum: 199

Removing quantity for a given price

This message shows an ETHBTC bid priced at 0.09156 BTC being removed.

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 115
       34                     MsgSeqNum: 5696454
       35                       MsgType: MarketDataIncrementalRefresh (X)
       49                  SenderCompID: GEMINIMKT
       52                   SendingTime: 20180123-04:07:42.279
       56                  TargetCompID: TESTMKT001
BODY
      262                       MDReqID: 39
    NoMDEntries: count = 1
           55                        Symbol: ETHBTC
          269                   MDEntryType: BID (0)
          270                     MDEntryPx: 0.09156
          279                MDUpdateAction: DELETE (2)
TRAILER
       10                      CheckSum: 197

Trades

This message provides information about a new trade and a corresponding offer deletion. This message implies that the incoming order was a bid because the standing offer priced at 10907.54 USD was deleted.

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 166
       34                     MsgSeqNum: 5696411
       35                       MsgType: MarketDataIncrementalRefresh (X)
       49                  SenderCompID: GEMINIMKT
       52                   SendingTime: 20180123-04:07:40.740
       56                  TargetCompID: TESTMKT001
BODY
      262                       MDReqID: 38
    NoMDEntries: count = 2
           55                        Symbol: BTCUSD
          269                   MDEntryType: TRADE (2)
          270                     MDEntryPx: 10907.54
          271                   MDEntrySize: 0.00059578
          279                MDUpdateAction: NEW (0)
        ----
           55                        Symbol: BTCUSD
          269                   MDEntryType: OFFER (1)
          270                     MDEntryPx: 10907.54
          279                MDUpdateAction: DELETE (2)
TRAILER
       10                      CheckSum: 209

Showing Maker Side For Trades

To enable showing the maker side of trades, create a Market Data Request <V> with custom field EnableMDEntryMakerSide <9003> enabled - see Examples: Request to enable maker side on trades.

This example shows a trade where an incoming offer hit a standing bid at for 0.001 BTC at 7544.94 USD.

RAW
8=FIX.4.4|9=125|35=X|34=3|49=GEMINI|52=20180809-15:59:16.698|56=TRADEBOTMD002|262=2|268=1|279=0|269=2|55=BTCUSD|270=7544.94|271=0.001|9002=1|10=107|

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 125
       34                     MsgSeqNum: 3
       35                       MsgType: MarketDataIncrementalRefresh (X)
       49                  SenderCompID: GEMINI
       52                   SendingTime: 20180809-15:59:16.698
       56                  TargetCompID: TRADEBOTMD002
BODY
      262                       MDReqID: 2
    NoMDEntries: count = 1
           55                        Symbol: BTCUSD
          269                   MDEntryType: TRADE (2)
          270                     MDEntryPx: 7544.94
          271                   MDEntrySize: 0.001
          279                MDUpdateAction: NEW (0)
         9002              MDEntryMakerSide: BUY (1)
TRAILER
       10                      CheckSum: 107

This example shows a trade where an incoming bid lifted a standing offer at for 0.001 BTC at 7549.89 USD.

RAW
8=FIX.4.4|9=125|35=X|34=3|49=GEMINI|52=20180809-15:59:22.882|56=TRADEBOTMD002|262=2|268=1|279=0|269=2|55=BTCUSD|270=7549.89|271=0.001|9002=2|10=109|

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 125
       34                     MsgSeqNum: 3
       35                       MsgType: MarketDataIncrementalRefresh (X)
       49                  SenderCompID: GEMINI
       52                   SendingTime: 20180809-15:59:22.882
       56                  TargetCompID: TRADEBOTMD002
BODY
      262                       MDReqID: 2
    NoMDEntries: count = 1
           55                        Symbol: BTCUSD
          269                   MDEntryType: TRADE (2)
          270                     MDEntryPx: 7549.89
          271                   MDEntrySize: 0.001
          279                MDUpdateAction: NEW (0)
         9002              MDEntryMakerSide: SELL (2)
TRAILER
       10                      CheckSum: 109

Rejected Symbol

RAW
8=FIX.4.4|9=67|35=Y|34=2|49=GEMINIMKT|52=20180511-21:37:57.971|56=TESTMKT001|262=badsym|281=0|10=038|

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 67
       34                     MsgSeqNum: 2
       35                       MsgType: MarketDataRequestReject (Y)
       49                  SenderCompID: GEMINIMKT
       52                   SendingTime: 20180511-21:37:57.971
       56                  TargetCompID: TESTMKT001
BODY
      262                       MDReqID: badsym
      281                MDReqRejReason: UNKNOWN_SYMBOL (0)
TRAILER
       10                      CheckSum: 03

Rejected MD Entry Type

RAW
8=FIX.4.4|9=70|35=Y|34=2|49=GEMINIMKT|52=20180511-21:44:14.765|56=TESTMKT001|262=badmd|281=8|10=121|
HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 70
       34                     MsgSeqNum: 2
       35                       MsgType: MarketDataRequestReject (Y)
       49                  SenderCompID: GEMINIMKT
       52                   SendingTime: 20180511-21:44:14.765
       56                  TargetCompID: TESTMKT001
BODY
      262                       MDReqID: badmd
      281                MDReqRejReason: UNSUPPORTED_MDENTRYTYPE (8)
TRAILER
       10                      CheckSum: 121       

Rejected Subscription Request

RAW
8=FIX.4.4|9=67|35=Y|34=2|49=GEMINIMKT|52=20180514-13:59:56.187|56=TESTMKT001|262=badsub|281=4|10=048|

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 67
       34                     MsgSeqNum: 2
       35                       MsgType: MarketDataRequestReject (Y)
       49                  SenderCompID: GEMINIMKT
       52                   SendingTime: 20180514-13:59:56.187
       56                  TargetCompID: TESTMKT001
BODY
      262                       MDReqID: badsub
      281                MDReqRejReason: UNSUPPORTED_SUBSCRIPTIONREQUESTTYPE (4)
TRAILER
       10                      CheckSum: 048

Block trades

This message provides information about a new IOI order.

See Block Trading for more information.

RAW
8=FIX.4.4|9=112|35=X|34=3|49=TESTMKT001|52=20180408-00:21:21.317|56=GEMINIMKT|262=38|268=1|279=0|269=2|55=BTCUSD|270=10000|271=100|18=j|10=044|

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 112
       34                     MsgSeqNum: 3
       35                       MsgType: MarketDataIncrementalRefresh (X)
       49                  SenderCompID: GEMINIMKT
       52                   SendingTime: 20180408-00:21:21.317
       56                  TargetCompID: TESTMKT001
BODY
      262                       MDReqID: 38
    NoMDEntries: count = 1
           18                      ExecInst: SINGLE_EXECUTION_REQUESTED_FOR_BLOCK_TRADE (j)
           55                        Symbol: BTCUSD
          269                   MDEntryType: TRADE (2)
          270                     MDEntryPx: 10000
          271                   MDEntrySize: 100
          279                MDUpdateAction: NEW (0)
TRAILER
       10                      CheckSum: 044

Auction events

The auction price and quantity are provided with MDEntryType <269> value Q = Auction Clearing Price. The index value used as the collar price for the auction event is provided with MDEntryType <269> value 3 = Index Value.

See Gemini Marketplace: Auctions for more information.

Indicative

Note that the time in ExpireTime <126>, 21:00:00.000, is not the same as the time in MDEntryTime <273>, 20:50:00.000. This signifies an indicative auction event.

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 196
       34                     MsgSeqNum: 24989
       35                       MsgType: MarketDataIncrementalRefresh (X)
       49                  SenderCompID: GEMINIMKT
       52                   SendingTime: 20180122-20:50:00.154
       56                  TargetCompID: TESTMKT001
BODY
      262                       MDReqID: 1
    NoMDEntries: count = 2
           55                        Symbol: BTCUSD
          126                    ExpireTime: 20180122-21:00:00.000
          269                   MDEntryType: AUCTION_CLEARING_PRICE (Q)
          270                     MDEntryPx: 10421.76
          271                   MDEntrySize: 0.10000000
          273                   MDEntryTime: 20:50:00.000
          279                MDUpdateAction: NEW (0)
        ----
          269                   MDEntryType: INDEX_VALUE (3)
          270                     MDEntryPx: 10460.74
          279                MDUpdateAction: NEW (0)
TRAILER
       10                      CheckSum: 212

Final

Note that the time in ExpireTime <126>, 21:00:00.000, is the same as the time in MDEntryTime <273>. This signifies a final auction event.

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 197
       34                     MsgSeqNum: 25366
       35                       MsgType: MarketDataIncrementalRefresh (X)
       49                  SenderCompID: GEMINIMKT
       52                   SendingTime: 20180122-21:00:00.145
       56                  TargetCompID: TESTMKT003
BODY
      262                       MDReqID: 1
    NoMDEntries: count = 2
           55                        Symbol: BTCUSD
          126                    ExpireTime: 20180122-21:00:00.000
          269                   MDEntryType: AUCTION_CLEARING_PRICE (Q)
          270                     MDEntryPx: 10381.00
          271                   MDEntrySize: 35.90433360
          273                   MDEntryTime: 21:00:00.000
          279                MDUpdateAction: NEW (0)
        ----
          269                   MDEntryType: INDEX_VALUE (3)
          270                     MDEntryPx: 10395.16
          279                MDUpdateAction: NEW (0)
TRAILER
       10                      CheckSum: 014

Request for the symbol list

This is a request for the list of symbols:

RAW
8=FIX.4.4|9=74|35=x|34=2|49=TRADEBOTMD002|52=20180425-17:51:27.000|56=GEMINI|320=1|559=0|10=099|

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 74
       34                     MsgSeqNum: 2
       35                       MsgType: SecurityListRequest (x)
       49                  SenderCompID: TRADEBOTMD002
       52                   SendingTime: 20180425-17:51:27.000
       56                  TargetCompID: GEMINI
BODY
      320                 SecurityReqID: 1
      559       SecurityListRequestType: SYMBOL (0)
TRAILER
       10                      CheckSum: 099


and the associated response:

RAW
8=FIX.4.4|9=146|35=y|34=2|49=GEMINI|52=20180425-17:51:27.544|56=TRADEBOTMD002|320=1|322=1|560=0|146=6|55=BTCUSD|55=ETHBTC|55=ETHUSD|55=ZECUSD|55=ZECBTC|55=ZECETH|10=054|

HEADER
        8                   BeginString: FIX.4.4
        9                    BodyLength: 146
       34                     MsgSeqNum: 2
       35                       MsgType: SecurityList (y)
       49                  SenderCompID: GEMINI
       52                   SendingTime: 20180425-17:51:27.544
       56                  TargetCompID: TRADEBOTMD002
BODY
      320                 SecurityReqID: 1
      322            SecurityResponseID: 1
      560         SecurityRequestResult: VALID_REQUEST (0)
    NoRelatedSym: count = 3
           55                        Symbol: BTCUSD
        ----
           55                        Symbol: ETHBTC
        ----
           55                        Symbol: ETHUSD
        ----
           55                        Symbol: ZECUSD
        ----
           55                        Symbol: ZECBTC
        ----
           55                        Symbol: ZECETH
TRAILER
       10                      CheckSum: 054

Revision History

Date Notes
2016/03/23 Initial FIX Market Data API documentation
2017/07/27 New Feature Top of book: Market Data Request <V> adds support for MarketDepth <264> value of 1 = Top Of Book

Documentation bugfix: clarified that market data subscription with duplicate MDReqID <262> value will be rejected in Client supplied identifiers.
2017/08/30 Documentation bugfix: clarified description of MDEntryType <269> in Market Data - Snapshot / Full Refresh <W>.
2017/12/01 API Change added MDEntryType <269> value 3 = INDEX_VALUE to Market Data - Incremental Refresh <X> to support reporting the auction collar price.
2018/01/22 Documentation bugfix: fixed ExpireTime <126> tag number in documentation for Market Data - Incremental Refresh <X> and Market Data - Snapshot / Full Refresh <W>

Documentation improvement: added examples of Market Data Request <V>, Market Data - Incremental Refresh <X>, and Market Data - Snapshot / Full Refresh <W> messages.
2018/03/09 Documentation bugfix: correct MsgType <35> tag number in documentation for Security List Request <x>

Documentation improvement: added examples of Security List Request <x> and Security List <y> messages.
2018/04/06 New Feature: Document block trading support.
2018/05/18 Add additional examples of Market Data requests and responses.
2018/08/07 API Change Added support for maker side using custom tags 9002 MDEntryMakerSide and EnableMDEntryMakerSide.

© Copyright 2018 Gemini Trust Company, LLC.