Introduction
Institutions can use the FIX Order Entry session to submit and cancel orders.
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 |
---|---|---|---|
234 | StipulationValue |
FIX enum but should allow other values. Compatible with Errata 20030618 Vol 6 - see p. 86. |
Custom tags
Tag | Field | Type | Notes |
---|---|---|---|
9000 | RiskLiquidityFlag |
Boolean | Used in NewOrderSingle <D> Indicates whether or not the order should match against Liquidation Orders sent from the Liquidation Engine. Only allowed from permissioned Market Makers. |
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. |
9009 | MDEntryFundingIsRealized |
Boolean | Used in Market Data - Incremental Refresh <X> MDEntry groups when MDEntryType had the value S = Funding Amount to indicate the IsRealized field of Funding Amount. |
9008 | EventId |
Int | Used in Market Data - Incremental Refresh <X> to specify the event associated with the update. This is for information only and may not be used to form a business logic. See Examples: market data responses send to clients. |
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, logging on, and synchronizing sequence numbers, the client can submit orders.
Submitting an order
- Client sends server → New Order Single Limit<D> message or a New Order Single Market<D> message
- Does Gemini accept the order?
- Yes, order is accepted for initial processing
- Server sends client ← an Execution Report <8> for a new order with:
- ExecType <150> set to
0 = New
- OrdStatus <39> set to
0 = New
- ExecType <150> set to
- Is the order marketable?
- Yes, server executes one or more initial fills
- Server sends client ← an Execution Report <8> for each fill or partial fill (see below for more details)
- Does the order have remaining quantity?
- Yes, server puts the remaining quantity on the book
- No, server closes the order
- No, server puts the entire quantity of the order on the book
- Yes, server executes one or more initial fills
- Server sends client ← an Execution Report <8> for a new order with:
- No, order is rejected
- Server sends client ← an Execution Report <8> indicating the order was rejected with:
- ExecType <150> set to
8 = Rejected
- OrdStatus <39> set to
8 = Rejected
- ExecType <150> set to
- Server sends client ← an Execution Report <8> indicating the order was rejected with:
- No, Throttle exceeded
- Server sends client ← a Session Reject <3> indicating message was rejected becuase of rate limit breach
- Yes, order is accepted for initial processing
Submitting a stop limit order
- Client sends server → New Order Single Stop Limit <D> message with OrdType <40>
4 = Stop Limit
, and either a StopPx <99> value less than or equal to Price <44> on a Side <54>1 = Buy
, or a StopPx <99> value greater than or equal to Price <44> on a Side <54>2 = Sell
. - Does Gemini accept the order?
- Yes, order is accepted for initial processing
- Server sends client ← an Execution Report <8> for a new order with:
- ExecType <150> set to
0 = New
- OrdStatus <39> set to
0 = New
- StopPx <99> set to same StopPx value provided on entry
- ExecType <150> set to
- Has a trade occurred that would trigger your stop order?
- Yes, the stop order triggers and sends client ← an Execution Report <8> message with the child limit order details.
- No, the stop order stays hidden and resting until a qualifying trade triggers it, or until the order is cancelled.
- Is the limit order marketable?
- Yes, server executes one or more initial fills
- Server sends client ← an Execution Report <8> for each fill or partial fill (see below for more details)
- Does the order have remaining quantity?
- Yes, server puts the remaining quantity on the book
- No, server closes the order
- No, server puts the entire quantity of the order on the book
- Yes, server executes one or more initial fills
- Server sends client ← an Execution Report <8> for a new order with:
- No, order is rejected
- server sends client ← an Execution Report <8> indicating the order was rejected with:
- ExecType <150> set to
8 = Rejected
- OrdStatus <39> set to
8 = Rejected
- ExecType <150> set to
- server sends client ← an Execution Report <8> indicating the order was rejected with:
- Yes, order is accepted for initial processing
When trades occur
In the event of a partial fill, Gemini sends an Execution Report <8> with:
- ExecType <150> set to
F = Trade
- OrdStatus <39> set to
1 = Partially filled
When the order is completely filled, Gemini sends an Execution Report <8> with:
- ExecType <150> set to
F = Trade
- OrdStatus <39> set to
2 = Filled
Canceling an order
- Client sends an Order Cancel Request <F>
- If successful, Gemini responds with an Execution Report <8> with:
- ExecType <150> set to
4 = Canceled
- OrdStatus <39> set to
4 = Canceled
- ExecType <150> set to
- If unsuccessful, Gemini responds with an Order Cancel Reject <9> explaining why the request to cancel the order could not be fulfilled.
Third Party Support
Gemini allows OMS/OEMS firms to send orders on behalf of existing Gemini accounts after signing a service bureau agreement.
Once the agreement is signed, Gemini will provide a unique comp ID for the account. The OMS/OEMS should use this comp ID in the OnBehalfOfCompID <115> field of the header:
- the customer's Gemini account identifier is used in the OnBehalfOfCompID <115> field
- the third party firm identifier is used in the SenderCompID <49> field
These messages require both OnBehalfOfCompID <115> and SenderCompID <49>:
- New Order Single <D> when submitting orders on behalf of that account
- Order Cancel Request <F> when cancelling orders on behalf of that account
The Execution Report <8> header sent in response to one of these messages will echo back the SenderCompID <49> value, and the value originally provided in OnBehalfOfCompID <115> will be placed into DeliverToCompID <128>.
See Drop Copy: Third Party Support for details on Drop Copy third party support.
Supported symbols
The following symbols are valid values for a Symbol <55> field.
Symbols are formatted as CCY1CCY2
where prices are in CCY2
and quantities are in CCY1
. CCY1
is in the Currency
column and CCY2
is in the respective CCY2 Price Increment
column:
Symbol | Minimum Order Size | Tick Size | Quote Currency Price Increment |
---|---|---|---|
btcusd | 0.00001 BTC (1e-5) | 0.00000001 BTC (1e-8) | 0.01 USD |
btceur | 0.00001 BTC (1e-5) | 0.00000001 BTC (1e-8) | 0.01 EUR |
btcgbp | 0.00001 BTC (1e-5) | 0.00000001 BTC (1e-8) | 0.01 GBP |
btcsgd | 0.00001 BTC (1e-5) | 0.00000001 BTC (1e-8) | 0.01 SGD |
ethbtc | 0.001 ETH (1e-3) | 0.000001 ETH (1e-6) | 0.00001 BTC (1e-5) |
ethusd | 0.001 ETH (1e-3) | 0.000001 ETH (1e-6) | 0.01 USD |
etheur | 0.001 ETH (1e-3) | 0.000001 ETH (1e-6) | 0.01 EUR |
ethgbp | 0.001 ETH (1e-3) | 0.000001 ETH (1e-6) | 0.01 GBP |
ethsgd | 0.001 ETH (1e-3) | 0.000001 ETH (1e-6) | 0.01 SGD |
bchusd | 0.001 BCH (1e-3) | 0.000001 BCH (1e-6) | 0.01 USD |
bchbtc | 0.001 BCH (1e-3) | 0.000001 BCH (1e-6) | 0.00001 BTC (1e-5) |
bcheth | 0.001 BCH (1e-3) | 0.000001 BCH (1e-6) | 0.0001 ETH (1e-4) |
ltcusd | 0.01 LTC (1e-2) | 0.00001 LTC (1e-5) | 0.01 USD |
ltcbtc | 0.01 LTC (1e-2) | 0.00001 LTC (1e-5) | 0.0000001 BTC (1e-7) |
ltceth | 0.01 LTC (1e-2) | 0.00001 LTC (1e-5) | 0.00001 ETH (1e-5) |
ltcbch | 0.01 LTC (1e-2) | 0.00001 LTC (1e-5) | 0.0001 BCH (1e-4) |
batusd | 1.0 BAT (1e0) | 0.000001 BAT (1e-6) | 0.00001 USD (1e-5) |
daiusd | 0.1 DAI (1e-1) | 0.000001 DAI (1e-6) | 0.00001 USD (1e-5) |
linkusd | 0.1 LINK (1e-1) | 0.000001 LINK (1e-6) | 0.00001 USD (1e-5) |
oxtusd | 1.0 OXT (1e0) | 0.000001 OXT (1e-6) | 0.00001 USD (1e-5) |
linkbtc | 0.1 LINK (1e-1) | 0.000001 LINK (1e-6) | 0.00000001 BTC (1e-8) |
linketh | 0.1 LINK (1e-1) | 0.000001 LINK (1e-6) | 0.0000001 ETH (1e-7) |
ampusd | 10.0 AMP (1e1) | 0.000001 AMP (1e-6) | 0.00001 USD (1e-5) |
compusd | 0.001 COMP (1e-3) | 0.000001 COMP (1e-6) | 0.01 USD |
paxgusd | 0.0001 PAXG (1e-4) | 0.00000001 PAXG (1e-8) | 0.01 USD |
mkrusd | 0.001 MKR (1e-3) | 0.000001 MKR (1e-6) | 0.01 USD |
zrxusd | 0.1 ZRX (1e-1) | 0.000001 ZRX (1e-6) | 0.00001 USD (1e-5) |
kncusd | 0.1 KNC (1e-1) | 0.000001 KNC (1e-6) | 0.00001 USD (1e-5) |
manausd | 1.0 MANA (1e0) | 0.000001 MANA (1e-6) | 0.00001 USD (1e-5) |
storjusd | 0.1 STORJ (1e-1) | 0.000001 STORJ (1e-6) | 0.00001 USD (1e-5) |
snxusd | 0.01 SNX (1e-2) | 0.000001 SNX (1e-6) | 0.0001 USD (1e-4) |
crvusd | 0.1 CRV (1e-1) | 0.000001 CRV (1e-6) | 0.0001 USD (1e-4) |
balusd | 0.01 BAL (1e-2) | 0.000001 BAL (1e-6) | 0.0001 USD (1e-4) |
uniusd | 0.01 UNI (1e-2) | 0.000001 UNI (1e-6) | 0.0001 USD (1e-4) |
renusd | 0.01 REN (1e-2) | 0.000001 REN (1e-6) | 0.00001 USD (1e-5) |
umausd | 0.01 UMA (1e-2) | 0.000001 UMA (1e-6) | 0.0001 USD (1e-4) |
yfiusd | 0.00001 YFI (1e-5) | 0.000001 YFI (1e-6) | 0.01 USD |
aaveusd | 0.001 AAVE (1e-3) | 0.000001 AAVE (1e-6) | 0.0001 USD (1e-4) |
filusd | 0.1 FIL (1e-1) | 0.000001 FIL (1e-6) | 0.0001 USD (1e-4) |
sklusd | 0.1 SKL (1e-1) | 0.000001 SKL (1e-6) | 0.00001 USD (1e-5) |
grtusd | 0.1 GRT (1e-1) | 0.000001 GRT (1e-6) | 0.0001 USD (1e-4) |
bntusd | 0.01 BNT (1e-2) | 0.000001 BNT (1e-6) | 0.0001 USD (1e-4) |
1inchusd | 0.01 1INCH (1e-2) | 0.000001 1INCH (1e-6) | 0.0001 USD (1e-4) |
lrcusd | 0.1 LRC (1e-1) | 0.000001 LRC (1e-6) | 0.00001 USD (1e-5) |
sandusd | 0.1 SAND (1e-1) | 0.000001 SAND (1e-6) | 0.00001 USD (1e-5) |
cubeusd | 0.01 CUBE (1e-2) | 0.000001 CUBE (1e-6) | 0.0001 USD (1e-4) |
lptusd | 0.001 LPT (1e-3) | 0.000001 LPT (1e-6) | 0.0001 USD (1e-4) |
bondusd | 0.001 BOND (1e-3) | 0.000001 BOND (1e-6) | 0.0001 USD (1e-4) |
maticusd | 0.1 MATIC (1e-1) | 0.000001 MATIC (1e-6) | 0.00001 USD (1e-5) |
injusd | 0.01 INJ (1e-2) | 0.000001 INJ (1e-6) | 0.0001 USD (1e-4) |
sushiusd | 0.01 SUSHI (1e-2) | 0.000001 SUSHI (1e-6) | 0.0001 USD (1e-4) |
dogeusd | 0.1 DOGE (1e-1) | 0.000001 DOGE (1e-6) | 0.00001 USD (1e-5) |
alcxusd | 0.00001 ALCX (1e-5) | 0.000001 ALCX (1e-6) | 0.01 USD (1e-2) |
ftmusd | 0.03 FTM (3e-2) | 0.000001 FTM (1e-6) | 0.0001 USD (1e-4) |
ankrusd | 0.1 ANKR (1e-1) | 0.000001 ANKR (1e-6) | 0.00001 USD (1e-5) |
btcgusd | 0.00001 BTC (1e-5) | 0.00000001 BTC (1e-8) | 0.01 GUSD |
ethgusd | 0.001 ETH (1e-3) | 0.000001 ETH (1e-6) | 0.01 GUSD |
ctxusd | 0.002 CTX (2e-3) | 0.000001 CTX (1e-6) | 0.0001 USD (1e-4) |
xtzusd | 0.02 XTZ (2e-2) | 0.000001 XTZ (1e-6) | 0.0001 USD (1e-4) |
axsusd | 0.003 AXS (3e-3) | 0.000001 AXS (1e-6) | 0.01 USD (1e-2) |
slpusd | 0.5 SLP (5e-1) | 0.000001 SLP (1e-6) | 0.0000001 USD (1e-7) |
lunausd | 1 LUNA (1e0) | 0.000001 LUNA (1e-6) | 0.00000001 USD (1e-8) |
mco2usd | 0.02 MCO2 (2e-2) | 0.000001 MCO2 (1e-6) | 0.001 USD (1e-3) |
dogebtc | 1.0 DOGE (1e0) | 0.00000001 DOGE (1e-8) | 0.000000001 BTC (1e-9) |
dogeeth | 1.0 DOGE (1e0) | 0.00000001 DOGE (1e-8) | 0.00000001 ETH (1e-8) |
wcfgusd | 0.05 WCFG (5e-2) | 0.000001 WCFG (1e-6) | 0.00001 USD (1e-5) |
rareusd | 0.1 RARE (1e-1) | 0.000001 RARE (1e-6) | 0.001 USD (1e-3) |
radusd | 0.01 RAD (1e-2) | 0.000001 RAD (1e-6) | 0.001 USD (1e-3) |
qntusd | 0.0004 QNT (4e-4) | 0.000001 QNT (1e-6) | 0.01 USD (1e-2) |
nmrusd | 0.003 NMR (3e-3) | 0.000001 NMR (1e-6) | 0.001 USD (1e-3) |
maskusd | 0.01 MASK (1e-2) | 0.000001 MASK (1e-6) | 0.001 USD (1e-3) |
fetusd | 0.1 FET (1e-1) | 0.000001 FET (1e-6) | 0.00001 USD (1e-5) |
ashusd | 0.005 ASH (5e-3) | 0.000001 ASH (1e-6) | 0.001 USD (1e-3) |
audiousd | 0.05 AUDIO (5e-2) | 0.000001 AUDIO (1e-6) | 0.00001 USD (1e-5) |
api3usd | 0.03 API3 (3e-2) | 0.000001 API3 (1e-6) | 0.001 USD (1e-3) |
usdcusd | 0.1 USDC (1e-1) | 0.000001 USDC (1e-6) | 0.00001 USD (1e-5) |
shibusd | 1000.0 SHIB (1e3) | 0.000001 SHIB (1e-6) | 0.000000001 USD (1e-9) |
rndrusd | 0.02 RNDR (2e-2) | 0.000001 RNDR (1e-6) | 0.001 USD (1e-3) |
galausd | 0.4 GALA (4e-1) | 0.000001 GALA (1e-6) | 0.00001 USD (1e-5) |
ensusd | 0.002 ENS (2e-3) | 0.000001 ENS (1e-6) | 0.001 USD (1e-3) |
kp3rusd | 0.0001 KP3R (1e-4) | 0.000001 KP3R (1e-6) | 0.01 USD (1e-2) |
cvcusd | 0.2 CVC (2e-1) | 0.000001 CVC (1e-6) | 0.00001 USD (1e-5) |
elonusd | 60000.0 ELON (6e4) | 0.000001 ELON (1e-6) | 0.00000000001 USD (1e-11) |
mimusd | 0.1 MIM (1e-1) | 0.000001 MIM (1e-6) | 0.0001 USD (1e-4) |
spellusd | 5.0 SPELL (5e0) | 0.000001 SPELL (1e-6) | 0.0000001 USD (1e-7) |
tokeusd | 0.002 TOKE (2e-3) | 0.000001 TOKE (1e-6) | 0.001 USD (1e-3) |
ldousd | 0.02 LDO (2e-2) | 0.000001 LDO (1e-6) | 0.001 USD (1e-3) |
rlyusd | 0.2 RLY (2e-1) | 0.000001 RLY (1e-6) | 0.00001 USD (1e-5) |
solusd | 0.001 SOL (1e-3) | 0.000001 SOL (1e-6) | 0.001 USD (1e-3) |
rayusd | 0.03 RAY (3e-2) | 0.000001 RAY (1e-6) | 0.001 USD (1e-3) |
sbrusd | 1.0 SBR (1e0) | 0.000001 SBR (1e-6) | 0.000001 USD (1e-6) |
apeusd | 0.02 APE (2e-2) | 0.000001 APE (1e-6) | 0.001 USD (1e-3) |
dpiusd | 0.0006 DPI (6e-4) | 0.000001 DPI (1e-6) | 0.01 USD (1e-2) |
indexusd | 0.02 INDEX (2e-2) | 0.000001 INDEX (1e-6) | 0.001 USD (1e-3) |
gusdsgd | 0.1 GUSD | 0.000001 GUSD (1e-6) | 0.001 SGD (1e-3) |
qrdousd | 0.04 QRDO (4e-2) | 0.000001 QRDO (1e-6) | 0.00001 USD (1e-5) |
zbcusd | 3.0 ZBC (3e0) | 0.000001 ZBC (1e-6) | 0.00001 USD (1e-5) |
chzusd | 0.5 CHZ (5e-1) | 0.000001 CHZ (1e-6) | 0.00001 USD (1e-5) |
revvusd | 1.0 REVV (1e0) | 0.000001 REVV (1e-6) | 0.00001 USD (1e-5) |
jamusd | 10.0 JAM (1e1) | 0.000001 JAM (1e-6) | 0.0000001 USD (1e-7) |
fidausd | 0.06 FIDA (6e-2) | 0.000001 FIDA (1e-6) | 0.00001 USD (1e-5) |
gmtusd | 0.1 GMT (1e-1) | 0.000001 GMT (1e-6) | 0.00001 USD (1e-5) |
orcausd | 0.05 ORCA (5e-2) | 0.000001 ORCA (1e-6) | 0.001 USD (1e-3) |
aliusd | 2.0 ALI (2e0) | 0.000001 ALI (1e-6) | 0.000001 USD (1e-6) |
truusd | 0.8 TRU (8e-1) | 0.000001 TRU (1e-6) | 0.00001 USD (1e-5) |
gusdgbp | 0.1 GUSD (1e-1) | 0.0001 GUSD (1e-4) | 0.001 GBP (1e-3) |
dotusd | 0.01 DOT (1e-2) | 0.000001 DOT (1e-6) | 0.0001 USD (1e-4) |
ernusd | 0.05 ERN (5e-2) | 0.000001 ERN (1e-6) | 0.0001 USD (1e-4) |
galusd | 0.04 GAL (4e-2) | 0.000001 GAL (1e-6) | 0.0001 USD (1e-4) |
eulusd | 0.03 EUL (3e-2) | 0.000001 EUL (1e-6) | 0.0001 USD (1e-4) |
samousd | 10.0 SAMO (1e+1) | 0.000001 SAMO (1e-6) | 0.0000001 USD (1e-7) |
bicousd | 0.2 BICO (2e-1) | 0.000001 BICO (1e-6) | 0.00001 USD (1e-5) |
imxusd | 0.1 IMX (1e-1) | 0.000001 IMX (1e-6) | 0.00001 USD (1e-5) |
plausd | 0.3 PLA (3e-1) | 0.000001 PLA (1e-6) | 0.00001 USD (1e-5) |
iotxusd | 3.0 IOTX (3e+0) | 0.000001 IOTX (1e-6) | 0.000001 USD (1e-6) |
avaxusd | 0.005 AVAX (5e-3) | 0.000001 AVAX (1e-6) | 0.001 USD (1e-3) |
atomusd | 0.01 ATOM (1e-2) | 0.000001 ATOM (1e-6) | 0.001 USD (1e-3) |
usdtusd* | 0.1 USDT (1e-1) | 0.000001 USDT (1e-6) | 0.0001 USD (1e-4) |
btcusdt* | 0.00001 BTC (1e-5) | 0.00000001 BTC (1e-8) | 0.01 USDT (1e-2) |
ethusdt* | 0.001 ETH (1e-3) | 0.000001 ETH (1e-6) | 0.01 USDT (1e-2) |
pepeusd | 1000 PEPE (1e3) | 0.000001 PEPE (1e-6) | 0.000000001 USD (1e-9) |
xrpusd | 0.1 XRP (1e-1) | 0.000001 XRP (1e-6) | 0.00001 USD (1e-5) |
hntusd | 0.04 HNT (4e-1) | 0.000001 HNT (1e-6) | 0.0001 USD (1e-4) |
wifusd | 0.07 WIF (7e-2) | 0.000001 WIF (1e-6) | 0.0001 USD (1e-4) |
*Note: Not available to trade for customers in New York
On a market data channel, Gemini will respond to a Symbol List Request <x> with a Symbol List <y> containing all the supported symbols on the exchange.
All Supported Symbols
btcusd
ethbtc
ethusd
bchusd
bchbtc
bcheth
ltcusd
ltcbtc
ltceth
ltcbch
batusd
daiusd
linkusd
oxtusd
linkbtc
linketh
ampusd
compusd
paxgusd
mkrusd
zrxusd
kncusd
manausd
storjusd
snxusd
crvusd
balusd
uniusd
renusd
umausd
yfiusd
aaveusd
filusd
btceur
btcgbp
etheur
ethgbp
btcsgd
ethsgd
sklusd
grtusd
bntusd
1inchusd
lrcusd
sandusd
cubeusd
lptusd
bondusd
maticusd
injusd
sushiusd
dogeusd
alcxusd
ftmusd
ankrusd
btcgusd
ethgusd
ctxusd
xtzusd
axsusd
slpusd
lunausd
mco2usd
dogebtc
dogeeth
wcfgusd
rareusd
radusd
qntusd
nmrusd
maskusd
fetusd
ashusd
audiousd
api3usd
usdcusd
shibusd
rndrusd
galausd
ensusd
kp3rusd
cvcusd
elonusd
mimusd
spellusd
tokeusd
ldousd
rlyusd
solusd
rayusd
sbrusd
apeusd
dpiusd
indexusd
gusdsgd
qrdousd
zbcusd
chzusd
revvusd
jamusd
fidausd
gmtusd
orcausd
aliusd
truusd
gusdgbp
dotusd
ernusd
galusd
eulusd
samousd
bicousd
imxusd
plausd
iotxusd
avaxusd
atomusd
usdtusd
btcusdt
ethusdt
pepeusd
xrpusd
hntusd
wifusd
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:
- incoming market orders that may result in partial fills
- fees
- holds
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 New Order Single <D>, the OrderQty <38> field is denominated in BTC (the quantity currency) and the Price <44> field is denominated in USD (the price currency).
RAW
8=FIX.4.4|9=137|35=D|34=2237|49=CLIENT|52=20160218-22:25:24.277|56=GEMINI|11=SOME_ORDER|38=5|40=2|44=420.18|54=1|55=BTCUSD|59=1|60=20160218-17:24:14.453|10=066|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 137
34 MsgSeqNum: 2237
35 MsgType: NewOrderSingle (D)
49 SenderCompID: CLIENT
52 SendingTime: 20160218-22:25:24.277
56 TargetCompID: GEMINI
BODY
11 ClOrdID: SOME_ORDER
38 OrderQty: 5
40 OrdType: LIMIT (2)
44 Price: 420.18
54 Side: BUY (1)
55 Symbol: BTCUSD
59 TimeInForce: GOOD_TILL_CANCEL (1)
60 TransactTime: 20160218-17:24:14.453
TRAILER
10 CheckSum: 066
Currency-denominated fields
Message | Fields denominated in price currency | Fields denominated in quantity currency |
---|---|---|
New Order Single <D> | Price <44> | OrderQty <38> MinQty <110> |
Order Cancel Request <F> | OrderQty <38> | |
Execution Report <8> | Price <44> AvgPx <6> LastPx <31> |
OrderQty <38> CumQty <14> LeavesQty <151> LastQty <32> |
IOI <6> | StipulationValue <234> when StipulationType <233> is PRICE |
IOIQty <27> StipulationValue <234> when StipulationType <233> is MINQTY |
Fees
The amount in Commission <12> is denominated in the currency specified by the currency code value in CommCurrency <479>.
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
-
- Tag
- Name
- Defined in
- Echoed back
- Description
-
- 11
- ClOrdID
-
The client's request identifier. May refer to either an order or an order cancel request.
Gemini strongly recommends that you make this field unique amongst active orders for a given port. We also recommend that you make this field globally unique, usually by adding a date to the beginning of the order id (e.g.20160114_0001
).
Gemini will not enforce uniqueness, but will simply allow a second order with a duplicate ClOrdID <11> to be placed, which may cause confusion in reporting tools that consume execution reports from the order entry channel and trade capture reports from the dropcopy channel.
-
- 41
- OrigClOrdID
-
ClOrdID <11> of the order to cancel. Needs to correspond to a current outstanding order submitted during this trading session.
Gemini will cancel every active order whose ClOrdID <11> value matches the value given in this field.
Identifiers assigned by Gemini
-
- Tag
- Name
- Defined in
- Description
-
- 49
- SenderCompID
- Standard Header
- Assigned value used to identify the firm sending the message.
- When message is sent from Gemini to the client,
GEMINI
- When message is sent from the client to Gemini, the client identifier, e.g.
CLIENT-OE
- When message is sent from Gemini to the client,
-
- 56
- TargetCompID
- Standard Header
- Assigned value used to identify the firm receiving the message.
- When message is sent from Gemini to the client, the client identifier, e.g.
CLIENT-OE
- When message is sent from the client to Gemini,
GEMINI
- When message is sent from Gemini to the client, the client identifier, e.g.
-
- 37
- OrderID
-
Globally unique order identifier assigned by Gemini. This order id is assigned to an individual order for the lifetime of the order. When the order appears in an Execution Report <8> with ExecType <150> =
0 = New
and OrdStatus <39> =0 = New
, then the order is on the book.
In the case of an order cancel reject, the value of this field isNONE
.
-
- 17
- ExecID
- Globally unique event identifier assigned by Gemini. In context, this event id may refer to any of the following events:
- order accepted id when the order is on the book
- trade id for partial fill or fill
- order cancellation id
- order rejection id
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.
-
- Tag
- Name
- Req
- Description
-
- 8
- BeginString
- Y
- Identifies the beginning of new message and protocol version. Always the first tag in the message.
Valid value:- FIX.4.4
-
- 9
- BodyLength
- Y
- Message length, in bytes, forward to the CheckSum <10> field. Always the second tag in the message.
-
- 35
- MsgType
- Y
- Defines message type. Always the third tag in the message.
-
- 34
- MsgSeqNum
- Y
-
- 49
- SenderCompID
- Y
- Assigned value used to identify the firm sending the message.
-
- 43
- PossDupFlag
- N*
- Indicates possible retransmission of message with this sequence number.
Valid values:- Y = Possible duplicate
- N = Original transmission
*Required for a re-transmitted message.
-
- 52
- SendingTime
- Y
- Time of message transmission (always expressed in UTC).
-
- 56
- TargetCompID
- Y
- Assigned value used to identify the firm receiving the message.
-
- 115
- OnBehalfOfCompID
- N*
- Assigned value used to identify firm originating message if the message was delivered by a third party such as an OMS or OEMS: required when an OMS/OEMS submits or cancels orders on behalf of another Gemini account.
- Not used or supported in Market Data or single party Order Entry or Drop Copy
- Third party order entry header usage as follows:
- the customer's Gemini account identifier is used in the OnBehalfOfCompID <115> field
- the third party firm identifier is used in the SenderCompID <49> field
- See Order Entry: Third Party Support for further details.
- Third party support for Drop Copy does not use OnBehalfOfCompID <115> in the header - see Drop Copy: Third Party Support for details.
-
- 128
- DeliverToCompID
- N*
- Used in Execution Reports only.
- Not used or supported in Market Data or single party Order Entry or Drop Copy
- The customer's Gemini account identifier is returned in the DeliverToCompID <128> field on Execution Reports
- Third party support for Drop Copy does not use DeliverToCompID <128> in the header - see Drop Copy: Third Party Support for details.
-
- 122
- OrigSendingTime
- N*
- Original time of message transmission (always expressed in UTC) when transmitting orders as the result of a resend request.
*Required for a re-transmitted message.
Standard Trailer
The Standard Trailer is required on every message.
-
- Tag
- Name
- Req
- Description
-
- 10
- CheckSum
- Y
- Three byte, simple checksum. Always the last tag in the message.
Session-Level Messages
Establishing a connection
- Client sends server → Logon <A> message
- Is client ResetSeqNumFlag <141> to
Y
?- Yes, reset sequence numbers and proceed
- server resets next expected 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
- Is client MsgSeqNum <34> value what the server is expecting?
- No, value is greater than expected
- server responds with ← Logon <A> message
- server sends client ← Resend Request <2>
- client sends server → Sequence Reset <4> (GapFillFlag <123> =
Y
)
- No, value is less than expected
- server disconnects
- after checking what happened, client re-sends Logon <A> message with ResetSeqNumFlag <141> field set to
Y
- Otherwise
- server sends client ← Heartbeat <0>
- No, value is greater than expected
- Is server MsgSeqNum <34> value what the client is expecting?
- No, value is greater than expected
- server responds with ← Logon <A> message
- client sends server → Resend Request <2>
- replay from server to client proceeds
- server responds with ← message PossDupFlag <43> =
Y
- …
- server responds with ← message PossDupFlag <43> =
Y
- replay from server to client is complete
- server responds with ← Heartbeat <0>
- 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
- client sends server → Heartbeat <0>
- No, value is greater than expected
- Is client MsgSeqNum <34> value what the server is expecting?
- Yes, reset sequence numbers and proceed
- 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:
- logon
- logout
- disconnect
- error
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
When the client disconnects from an order entry channel, for whatever reason, the exchange will cancel all the orders associated with that FIX session.
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 <3>.
-
- Tag
- Name
- Req
- Description
-
- Standard Header
- Y
- MsgType = A
-
- 141
- ResetSeqNumFlag
- N
- Should be set to
Y
when the client wants to indicates that the both sides of the FIX session should reset sequence numbers.
-
- 98
- EncryptMethod
- Y
- Gemini does not support encryption.
Valid value:- 0 = None
- 108
- HeartBtInt
- Y
Heartbeat interval in seconds. Valid value:
- 30 = 30 seconds
- 9001
- CancelOnDisconnect
- N
Only used for Order Entry. When present and true, orders will be cancelled on disconnect. When present and false, orders will not be cancelled on disconnect. When absent, orders will not be cancelled on disconnect. Valid value:
- Y = Enable cancel on disconnect for this session
- N = Disable cancel on disconnect for this session
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.
-
- Tag
- Name
- Req
- Description
-
- Standard Header
- Y
- MsgType = 0
-
- 112
- TestReqID
- N*
- Required when the heartbeat is the result of a Test Request (1) message
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).
-
- Tag
- Name
- Req
- Description
-
- Standard Header
- Y
- MsgType = 1
- 112
- TestReqID
- Y
- Identifier included in Test Request <1> message to be returned in resulting Heartbeat <0>
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.
- To request a single message: BeginSeqNo <7> = EndSeqNo <16>
- To request a range of messages: BeginSeqNo <7> = first message of range, EndSeqNo <16> = last message of range<
- To request all messages subsequent to a particular message: BeginSeqNo <7> = first message of range, EndSeqNo <16> = 0 (represents infinity) .
-
- Tag
- Name
- Req
- Description
-
- Standard Header
- Y
- MsgType = 2
-
- 7
- BeginSeqNo
- Y
-
- 16
- EndSeqNo
- Y
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. A session reject would also be generated if client message rate has exceeded the allocated throttle.
-
- Tag
- Name
- Req
- Description
-
- Standard Header
- Y
- MsgType = 3
-
- 45
- RefSeqNum
- Y
- MsgSeqNum <34> of the rejected message.
-
- 58
- Text
- N
- Explanation for rejection
-
- 371
- RefTagID
- N
- The tag number of the FIX field being referenced.
-
- 372
- RefMsgType
- N
- The MsgType <35> of the rejected message.
-
- 373
- SessionRejectReason
- N
- Code to identify the reason for the Reject <3> message.
Valid values:- 0 = Invalid tag number
- 1 = Required tag missing
- 2 = Tag not defined for this message type
- 3 = Undefined Tag
- 4 = Tag specified without a value
- 5 = Value is incorrect (out of range) for this tag
- 6 = Incorrect data format for value
- 10 = SendingTime <52> accuracy problem
- 11 = Invalid MsgType <35>
- 99 = Other
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:
- During normal resend processing, the sending application may choose not to send a message (e.g. an aged order).
- During normal resend processing, a number of administrative messages are skipped and not resent (such as Heartbeat <0> and Test Request <1>).
Gemini does not support Reset mode (GapFillFlag <123> not present or equal to N
).
-
- Tag
- Name
- Req
- Description
-
- Standard Header
- Y
- MsgType = 4
-
- 36
- NewSeqNo
- Y
- New sequence number. The receiver should expect this to be the sequence number of the following message.
-
- 123
- GapFillFlag
- Y
- Indicates that the sender is skipping messages rather than resending them.
Valid value:- Y = Gap Fill message
Logout <5>
The Logout <5> message initiates or confirms the termination of a FIX session.
-
- Tag
- Name
- Req
- Description
-
- Standard Header
- Y
- MsgType = 5
-
- 58
- Text
- N
- Reason for logging out.
Business Message Reject <j>
Gemini sends Business Message Reject <j> when the exchange receives a valid FIX message which cannot be processed.
Examples include:
- receiving a market data request on an order entry channel, or vice versa
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
.
-
- Tag
- Name
- Req
- Description
-
- Standard Header
- Y
- MsgType = j
-
- 45
- RefSeqNum
- Y
- MsgSeqNum <34> of the rejected message.
-
- 58
- Text
- N
- Explanation for rejection.
-
- 372
- RefMsgType
- N
- MsgType <35> of the rejected message.
-
- 379
- BusinessRejectRefID
- N
- The value of the business level ID field being referenced.
-
- 380
- BusinessRejectReason
- Y
- Code to identify the reason for the Business Message Reject <j> message
Valid values:- 0 = Other
- 1 = Unknown ID
- 2 = Unknown Security
- 3 = Unsupported Message Type
- 4 = Application not available
- 5 = Conditionally Required Field Missing
Exchange-Bound Messages
New Order Single <D> (LIMIT)
To submit a new limit order to Gemini, send a New Order Single <D> message with OrdType Limit.
Gemini will respond to a New Order Single <D> message with an Execution Report <8>. See Execution Report <8> for examples.
If Gemini receives a New Order Single <D> message with the PossResend <97> flag set to Y
in the header, that order will be rejected with Business Message Reject <j>.
-
- Tag
- Name
- Req
- Description
-
- Standard Header
- Y
- MsgType = D
-
- 11
- ClOrdID
- Y
- Unique identifier of the order as assigned by the institution. Uniqueness must be guaranteed by the institution for the duration of the connection to the order entry channel.
-
- 23
- IOIID
- N*
- Unique identifier of an IOI.
* Required when responding to an IOI.
-
- 18
- ExecInst
- N
- Used for specific execution options in combination with TimeInForce <59>
6 = Participate don't initiate
(denotes maker-or-cancel when combined with TimeInForce value1 = Good Till Cancel (GTC)
)
-
- 38
- OrderQty
- Y
- Decimal quantity. Full quantity will be visible on the book.
-
- 110
- MinQty
- N*
-
- 40
- OrdType
- Y
- Order type.
Valid values:- 2 = Limit
-
- 44
- Price
- Y
- Decimal price.
Price is required when OrdType <40> is2 = Limit
.
-
- 54
- Side
- Y
- Side of the order.
Valid values:- 1 = Buy
- 2 = Sell
-
- 55
- Symbol
- Y
- Ticker symbol of the order.
See Supported Securities for valid values.
-
- 59
- TimeInForce
- Y
- Specifies how long the order remains in effect.
Valid value:
- 1 = Good Till Cancel (GTC)
- 3 = Immediate Or Cancel (IOC)
- 4 = Fill Or Kill (FOK)
-
- 60
- TransactTime
- Y
- Time of order creation (expressed in UTC).
New Order Single <D> (MARKET)
To submit a new market order to Gemini, send a New Order Single <D> message with OrdType Market.
Gemini will respond to a New Order Single <D> message with an Execution Report <8>. See Execution Report <8> for examples.
-
- Tag
- Name
- Req
- Description
-
- Standard Header
- Y
- MsgType = D
-
- 11
- ClOrdID
- Y
- Unique identifier of the order as assigned by the institution. Uniqueness must be guaranteed by the institution for the duration of the connection to the order entry channel.
-
- 40
- OrdType
- Y
- Order type.
Valid values:- 1 = Market
-
- 54
- Side
- Y
- Side of the order.
Valid values:- 1 = Buy
- 2 = Sell
-
- 55
- Symbol
- Y
- Ticker symbol of the order.
See Supported Securities for valid values.
-
- 60
- TransactTime
- Y
- Time of order creation (expressed in UTC).
-
- 152
- CashOrderQty
- N*
- * Required when Side is BUY with exception to Derivatives enabled flow(e.g. PerpetualSwap). Amount in price currency to use in the Market order
New Order Single <D> (STOP LIMIT)
To submit a new stop limit order to Gemini, send a New Order Single <D> message with OrdType Stop Limit.
Gemini will respond to a New Order Single <D> message with an Execution Report <8>. See Execution Report <8> for examples.
If Gemini receives a New Order Single <D> message with the PossResend <97> flag set to Y
in the header, that order will be rejected with Business Message Reject <j>.
-
- Tag
- Name
- Req
- Description
-
- Standard Header
- Y
- MsgType = D
-
- 11
- ClOrdID
- Y
- Unique identifier of the order as assigned by the institution. Uniqueness must be guaranteed by the institution for the duration of the connection to the order entry channel.
-
- 38
- OrderQty
- Y
- Decimal quantity. Full quantity will be visible on the book.
-
- 110
- MinQty
- N*
- Minimum fill quantity.
-
- 40
- OrdType
- Y
- Order type.
Valid values:- 4 = Stop Limit
-
- 44
- Price
- Y
- Decimal price.
Price is required when OrdType <40> is4 = Stop Limit
.
-
- 99
- StopPx
- Y
- Decimal price.
StopPx is required when OrdType <40> is4 = Stop Limit
.
-
- 54
- Side
- Y
- Side of the order.
Valid values:- 1 = Buy
- 2 = Sell
-
- 55
- Symbol
- Y
- Ticker symbol of the order.
See Supported Securities for valid values.
-
- 59
- TimeInForce
- Y
- Specifies how long the order remains in effect.
Valid value:
- 1 = Good Till Cancel (GTC)
-
- 60
- TransactTime
- Y
- Time of order creation (expressed in UTC).
Order Cancel Request <F>
The Order Cancel Request <F> message requests the cancellation of all of the remaining quantity of an existing order.
Gemini cancels order on the basis of the value in the OrigClOrdID <41> field. All other fields are required in the FIX specs but will be disregarded.
- if the order can successfully be canceled before being completely filled, an Execution Report <8> with ExecType <150> set to
4 = Canceled
- if the request fails, an Order Cancel Reject <9> message with CxlRejReason <102> of
1 = Unknown order
-
- Tag
- Name
- Req
- Description
-
- Standard Header
- Y
- MsgType = F
-
- 11
- ClOrdID
- Y
- Unique identifier of the cancel request as assigned by the institution. Uniqueness must be guaranteed by the institution for the duration of the connection to the order entry channel.
-
- 41
- OrigClOrdID
- Y
- ClOrdID <11> of the order to cancel. Needs to correspond to a current outstanding order submitted during this trading session.
-
- 54
- Side
- Y
- Side of the order to cancel.
Valid values:- 1 = Buy
- 2 = Sell
-
- 55
- Symbol
- Y
- Ticker symbol of the order.
See Supported Securities for valid values.
-
- 60
- TransactTime
- Y
- Time that the order cancel request was initiated by the institution (expressed in UTC).
Client-Bound Messages
Execution Report <8>
Gemini uses the Execution Report <8> message to:
- confirm the receipt of an order
- confirm a stop order has triggered
- confirm the successful cancellation of an order
- relay fill information on orders
- reject orders
Each execution report contains two fields which are used to communicate both the current state of the order as understood by the exchange (OrdStatus <39>) and the purpose of the message (ExecType <150>).
-
- Tag
- Name
- Req
- Description
-
- Standard Header
- Y
- MsgType = 8
-
- 37
- OrderID
- Y
- Unique order identifier assigned by Gemini
-
- 11
- ClOrdID
- Y
- Unique order identifier assigned by the institution
-
- 41
- OrigClOrdID
- N*
- ClOrdID <11> of the order to cancel. Needs to correspond to a current outstanding order submitted during this trading session.
* Required for a response to an Order Cancel Request <F>.
-
- 17
- ExecID
- Y
- Unique event ID assigned by Gemini.
-
- 150
- ExecType
- Y
- Describes the purpose of the Execution Report
Valid values:- 0 = New
- F = Trade
- 4 = Canceled
- 8 = Rejected
-
- 18
- ExecInst
- N
- Indicates if an order was Maker-or-Cancel
Valid values:- 6 = Participate don't initiate (maker-or-cancel)
-
- 39
- OrdStatus
- Y
- Describes the current order status
Valid values:- 0 = New
- 1 = Partially filled
- 2 = Filled
- 4 = Canceled
- 8 = Rejected
-
- 55
- Symbol
- Y
- Ticker symbol of the order.
See Supported Securities for valid values.
-
- 54
- Side
- Y
- Side of the order.
Valid values:- 1 = Buy
- 2 = Sell
-
- 44
- Price
- N*
- Limit price of the order.
* Required if ExecType <150> is not8 = Rejected
and if specified on the order.
-
- 99
- StopPx
- N*
- Stop price of the order.
* Required if ExecType <150> is not8 = Rejected
and responding to a OrdType <40> is4 = Stop Limit
order entry.
-
- 6
- AvgPx
- Y
- Calculated average price of fills on this order. Zero for order with no fills.
-
- 31
- LastPx
- N*
- Price of the fill. This field is only present when the order is updated due to a match on the exchange.
* Required if ExecType <150> isF = Trade
.
-
- 14
- CumQty
- Y
- Total quantity of the order that is filled.
-
- 38
- OrderQty
- N*
- Decimal amount of BTC to purchase. The general rule is: OrderQty <38> = CumQty <14> + LeavesQty <151>.
* Required if ExecType <150> is not8 = Rejected
.
-
- 151
- LeavesQty
- Y
- Quantity <53> open for further execution. If the OrdStatus <39> is
4 = Canceled
or8 = Rejected
(in which case the order is no longer active) then LeavesQty <151> could be 0, otherwise LeavesQty <151> = OrderQty <38> - CumQty <14>.
-
- 32
- LastQty
- N*
- Quantity of the fill. This field is only present when the order is updated due to a match on the exchange.
* Required if ExecType <150> isF = Trade
.
-
- 12
- Commission
- N*
- Fee charged for trade. Negative for rebates.
* Required if ExecType <150> isF = Trade
.
-
- 479
- CommCurrency
- N*
- Currency code of the currency that the fee is denominated in.
* Required if ExecType <150> isF = Trade
.
-
- 13
- CommType
- N*
- Commission type.
Valid value:- 3 = absolute (total monetary amount)
* Required if ExecType <150> isF = Trade
.
-
- 851
- LastLiquidityInd
- N*
- Whether this order added liquidity ("maker") or removed liquidity ("taker").
Valid values:- 1 = Added Liquidity
- 2 = Removed Liquidity
* Required if ExecType <150> isF = Trade
.
-
- 103
- OrdRejReason
- N*
- Reason the order was rejected.
Valid values:- 1 = Unknown symbol
- 2 = Exchange closed for scheduled maintenance
- 3 = Order exceeds limit
- 13 = Incorrect quantity
- 99 = Other
* Required if ExecType <150> is8 = Rejected
.
-
- 58
- Text
- N*
- Reason for order rejection or cancellation. In case of Cancel Ack this conditional tag will only be populated to "Requested", in response to explicit Order Cancel requests (35=F). Unsolicited cancel acks may not have this tag enriched.
* Required if OrdRejReason <103> is99 = Other
.
-
- 59
- TimeInForce
- Y*
- Specifies how long the order remains in effect. Absence of this field would be interpreted as a day order, which Gemini does not currently support.
Valid value:
- 1 = Good Till Cancel (GTC)
- 3 = Immediate Or Cancel (IOC)
- 4 = Fill Or Kill (FOK)
-
- 60
- TransactTime
- Y
- Time the transaction represented by this ExecutionReport <8> occurred (expressed in UTC).
Order Cancel Reasons
Reasons orders are canceled include, but are not limited to:
- MakerOrCancelWouldTake - A
maker-or-cancel
order would fill immediately - ImmediateOrCancelWouldPost - An
immediate-or-cancel
order would not fill immediately - FillOrKillWouldNotFill - A
fill-or-kill
order would not fully fill immediately - ExceedsPriceLimits - Exceeds price limits imposed by Gemini
- SelfCrossPrevented - Crosses a pre-existing open order
- MarketOrderSweptBook - Unable to completely fill the
market
order
Order Cancel Reject <9>
Gemini sends an Order Cancel Reject <9> message when the exchange receives an Order Cancel Request <F> message which cannot be honored because:
- Order Cancel Request <F> message has an unknown OrigClOrdID <41>
- the order referred to by OrigClOrdID <41> exists, but cannot be canceled because it is not currently active:
- rejected
- already filled
- already canceled
-
- Tag
- Name
- Req
- Description
-
- Standard Header
- Y
- MsgType = 9
-
- 11
- ClOrdID
- Y
- Unique identifier for order as assigned by the institution.
-
- 37
- OrderID
- Y
- Unique identifier for the order as assigned by Gemini. Uniqueness is guaranteed for the trading session. The value is
NONE
for unknown orders.
-
- 39
- OrdStatus
- Y
- Identifies the current status of order. The status is
8 = Rejected
if the order is unknown.
Valid values:- 0 = New
- 1 = Partially filled
- 2 = Filled
- 4 = Canceled
- 8 = Rejected
-
- 41
- OrigClOrdID
- Y
- The ClOrdID <11> of the order to cancel. Needs to correspond to a current outstanding order submitted during this trading session.
-
- 60
- TransactTime
- Y
- Time the transaction represented by this Order Cancel Reject <9> occurred (expressed in UTC).
-
- 102
- CxlRejReason
- N
- Code to identify reason for cancel rejection.
Valid values:- 0 = Too late to cancel
- 1 = Unknown order
- 3 = Order already in Pending Cancel or Pending Replace status
-
- 198
- SecondaryOrderID
- N
- Can be used to provide order id used by exchange or executing system.
-
- 434
- CxlRejResponseTo
- Y
- Indicates the type of request that the message is in response to.
Valid values:
-
- 58
- Text
- N
Gemini Clearing
Gemini Clearing allows two parties to settle a trade off the order book. The initiator enters the trade details for any supported symbol and generates a trade_id
. If a counterparty_id
is supplied, only the specified counterparty can confirm the order. If a counterparty_id
is not supplied, the ticket will generate a trade_id
that can filled by any counterparty.
Gemini Clearing Workflow
Bilateral Trade
- Initiator places a New Order Cross <s> message with the order details
- Did the initiator use a
counterparty_id
?- Yes, only the Gemini account associated with the
counterparty_id
will be able to complete the order. - No, anybody with the
clearing_id
will be able to confirm the order.
- Yes, only the Gemini account associated with the
- The counterparty will be able to confirm the order on the web interface, via FIX, or via REST
- The order initiator can cancel the order if the counterparty has not yet confirmed. Cancellation can be performed on the web interface, via FIX, and REST.
- Once confirmed, Gemini will attempt settlement. Settlement can only occur when both parties have the funds required in their account to fill the trade.
- If any party does not post the funds required to settle the trade before the expiration time, then the order will expire.
Broker Trade
- The broker submits a New Order Cross <s> message with the order details and both
counterparty_id
s of the buyer and seller. - The buyer and seller can both review the trade details and confirm the order on the web interface, via FIX, or via REST
- Either side can cancel the trade if both the buyer and seller have yet to confirm the order. Cancellation can be done via the web interface, FIX, and REST
- The broker will be able to see the status of the order on the web interface and over the /v1/clearing/status endpoint on the REST API
- Once confirmed, Gemini will attempt settlement. Settlement can only occur when both parties have the funds required in their account to fill the trade.
- If any party does not post the funds required to settle the trade before the expiration time, then the order will expire.
Initiate a Clearing Order
New Order Cross <s>
To submit a new Gemini Clearing order, send a New Order Cross <s> message with OrdType Limit.
Gemini will respond to a New Order Cross <s> with an Execution Report <8>. The Execution Report <8> will have [tag 37] populated with the clearing_id
which the counterparty will need to confirm the order.
-
- Tag
- Name
- Req
- Description
-
- Standard Header
- Y
- MsgType = s
-
- 11
- ClOrdId
- Y
- Unique identifier of the cross order as assigned by the institution. Uniqueness must be guaranteed by the institution for the duration of the connection to the order entry channel.
-
- 38
- OrderQty
- Y
- Decimal quantity of quantity currency to buy or sell
-
- 40
- OrdType
- Y
- Order type.
Valid values:- 2 = Limit
-
- 44
- Price
- Y
- Decimal price. Price is denominated in
CCY1
.
-
- 54
- Side
- Y
- Side of the initiator of the order.
Valid values:- 1 = Buy
- 2 = Sell
-
- 55
- Symbol
- Y
- Ticker symbol of the order.
See Supported Symbols for valid values.
-
- 60
- TransactTime
- Y
- Time of order creation (expressed in UTC).
-
- 126
- ExpireTime
- Y
- Time of order expiration (expressed in UTC). Can be up to 30 days from order initiation.
-
- 548
- CrossID
- Y
- Unique identifier for a cross order
-
- 549
- CrossType
- Y
- Type of cross being submitted.
Valid values:- 1 = Cross trade which is either completely executed or not
-
- 550
- CrossPrioritization
- Y
- Indicates if one side or the other of a cross order should be prioritized.
Valid values:- 0 = None
-
- 583
- ClOrdLinkID
- N*
- Also referred to as
counterparty_id
. A value that is assigned to a specific counterparty Gemini account. Can be accessed on the web interface under theGEMINI ID
label. See workflow for more detail.
RAW
8=FIX.4.4|9=204|35=s|34=2|49=TESTOE001|52=20190807-19:28:38.078|56=GEMINI|40=2|44=12000|55=BTCUSD|60=20190807-19:28:38.078|126=20190807-21:28:38.078|548=26990504|549=1|550=0|552=1|54=1|11=87749738|38=2.22222|10=023|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 204
35 MsgType: NewOrderCross (s)
34 MsgSeqNum: 2
49 SenderCompID: TESTOE001
52 SendingTime: 20190807-19:28:38.078
56 TargetCompID: GEMINI
BODY
40 OrdType: LIMIT (2)
44 Price: 12000
55 Symbol: BTCUSD
60 TransactTime: 20190807-19:28:38.078
126 ExpireTime: 20190807-21:28:38.078
548 CrossID: 26990504
549 CrossType: Cross trade which is either completely executed or not executed at all (1)
550 CrossPrioritization: No priority (0)
552 NoSides: One Side (1)
54 Side: BUY (1)
11 ClOrdID: 87749738
38 OrderQty: 2.22222
TRAILER
10 CheckSum: 023
New Order Cross Execution Report <8>
RAW
8=FIX.4.4|9=197|35=8|34=2|49=GEMINI|52=20190807-19:28:38.251|56=TESTOE001|6=12000|11=87749738|14=2.22222|17=1565206118250|37=2DZ4MPQM|39=0|44=12000|54=1|55=BTCUSD|60=20190807-19:28:38.250|150=0|151=2.22222|10=009|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 197
35 MsgType: ExecutionReport (8)
34 MsgSeqNum: 2
49 SenderCompID: GEMINI
52 SendingTime: 20190807-19:28:38.251
56 TargetCompID: TESTOE001
BODY
6 AvgPx: 12000
11 ClOrdID: 87749738
14 CumQty: 2.22222
17 ExecID: 1565206118250
37 OrderID: 2DZ4MPQM
39 OrdStatus: NEW (0)
44 Price: 12000
54 Side: BUY (1)
55 Symbol: BTCUSD
60 TransactTime: 20190807-19:28:38.250
150 ExecType: NEW (0)
151 LeavesQty: 2.22222
TRAILER
10 CheckSum: 009
Clearing Order Confirmation
New Order Cross Confirmation
To confirm a Gemini Clearing order, the counterparty must login and confirm the order. The order must be confirmed with the same details provided in the initial order.
Gemini will respond to a New Order Cross <s> with an Execution Report <8>.
-
- Tag
- Name
- Req
- Description
-
- Standard Header
- Y
- MsgType = s
-
- 11
- ClOrdId
- Y
- Unique identifier of the cross order as assigned by the institution. Uniqueness must be guaranteed by the institution for the duration of the connection to the order entry channel.
-
- 38
- OrderQty
- Y
- Decimal quantity of quantity currency to buy or sell
-
- 40
- OrdType
- Y
- Order type.
Valid values:- 2 = Limit
-
- 44
- Price
- Y
- Decimal price. Price is denominated in
CCY1
.
-
- 54
- Side
- Y
- Side of the counterparty of the order. Will be the opposite side of the initiator.
Valid values:- 1 = Buy
- 2 = Sell
-
- 55
- Symbol
- Y
- Ticker symbol of the order.
See Supported Symbols for valid values.
-
- 60
- TransactTime
- Y
- Time or order creatio (expressed in UTC).
-
- 117
- QuoteID
- Y
- Also called
clearing_id
, will be provided to initiator in tag <37> of the execution report, or if acounterparty_id
is used, theclearing_id
will show up in the counterparty's blotter on the web interface
-
- 126
- ExpireTime
- Y
- Time of order expiration (expressed in UTC). Can be up to 30 days from order initiation.
-
- 548
- CrossID
- Y
- Unique identifier for a cross order
-
- 549
- CrossType
- Y
- Type of cross being submitted.
Valid values:- 1 = Cross trade which is either completely executed or not
-
- 550
- CrossPrioritization
- Y
- Indicates if one side or the other of a cross order should be prioritized.
Valid values:- 0 = None
RAW
8=FIX.4.4|9=191|35=s|34=2|49=TESTOE002|52=20190806-18:49:03.689|56=GEMINI|40=2|44=12000|55=btcusd|60=20190806-18:49:03.689|117=4KZ306ZG|548=86478800|549=1|550=0|552=1|54=2|11=46081666|38=2.22222|10=103|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 191
35 MsgType: NewOrderCross (s)
34 MsgSeqNum: 2
49 SenderCompID: TESTOE002
52 SendingTime: 20190806-18:49:03.689
56 TargetCompID: GEMINI
BODY
40 OrdType: LIMIT (2)
44 Price: 12000
55 Symbol: BTCUSD
60 TransactTime: 20190806-18:49:03.689
117 QuoteID: 2DZ4MPQM
548 CrossID: 86478800
549 CrossType: 1
550 CrossPrioritization: 0
552 Number of sides: 1
54 Side: SELL (2)
11 ClOrdID: 46081666
38 OrderQty: 2.22222
TRAILER
10 CheckSum: 103
New Order Cross Confirmation Execution Report <8>
See Execution Report <8> for more details on execution report tags.
RAW
8=FIX.4.4|9=205|35=8|34=2|49=GEMINI|52=20190806-18:49:03.839|56=TESTOE002|6=12000|11=46081666|14=2.22222|17=1565117343839|37=4KZ306ZG|39=0|44=12000|54=2|55=BTCUSD|58=ORDER_CONFIRMED|60=20190806-18:49:03.839|150=0|151=2.22222|10=057|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 205
35 MsgType: ExecutionReport (8)
34 MsgSeqNum: 2
49 SenderCompID: GEMINI
52 SendingTime: 20190806-18:49:03.839
56 TargetCompID: TESTOE002
BODY
6 AvgPx: 12000
11 ClOrdID: 46081666
14 CumQty: 2.22222
17 ExecID: 1565117343839
37 OrderID: 4KZ306ZG
39 OrdStatus: New (0)
44 Price: 12000
54 Side: SELL (2)
55 Symbol: BTCUSD
58 Text: ORDER_CONFIRMED
60 TransactTime: 20190806-18:49:03.839
150 ExecType: NEW (0)
151 LeavesQty: 2.22222
TRAILER
10 CheckSum: 057
Clearing Order Cancellation
Cross Order Cancel Request
Once an initiator places a [new order cross][#initiate-a-clearing-order], a cross order cancellation request can be placed to cancel the order before it is confirmed by the counterparty. Once the order is confirmed by the counterparty, it cannot be cancelled.
-
- Tag
- Name
- Req
- Description
-
- Standard Header
- Y
- MsgType = u
-
- 37
- OrderID
- Y
- The OrderID given in tag 37 in the Execution Report <8> of the original order.
-
- 55
- Symbol
- Y
- Ticker symbol of the order.
See Supported Symbols for valid values.
-
- 60
- TransactTime
- Y
- Time of order creation (expressed in UTC).
-
- 548
- CrossID
- Y
- Unique identifier for a cross order
-
- 549
- CrossType
- Y
- Type of cross being submitted.
Valid values:- 1 = Cross trade which is either completely executed or not
-
- 550
- CrossPrioritization
- Y
- Indicates if one side or the other of a cross order should be prioritized.
Valid values:- 0 = None
-
- 551
- OrigCrossID
- Y
- CrossID given in the original new order cross in tag 548
-
- 54
- Side
- Y
- Side of the initiator of the order.
Valid values:- 1 = Buy
- 2 = Sell
-
- 41
- OrigClOrdID
- Y
- ClOrdID given in the original new order cross.
-
- 11
- ClOrdId
- Y
- Unique identifier of the cross order as assigned by the institution. Uniqueness must be guaranteed by the institution for the duration of the connection to the order entry channel.
RAW
8=FIX.4.4|9=201|34=3|35=u|49=TESTOE001|52=20190806-20:30:28.898|56=GEMINI|37=2DZ4MPQM|55=BTCUSD|60=20190806-20:30:28.898|548=73180000|549=1|550=0|551=26990504|552=1|54=2|41=87749738|11=76494933|38=2.22222|10=128|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 201
34 MsgSeqNum: 3
35 MsgType: Cross Order Cancel Request
49 SenderCompID: TESTOE001
52 SendingTime: 20190806-20:30:28.898
56 TargetCompID: GEMINI
BODY
37 OrderID: 2DZ4MPQM
55 Symbol: BTCUSD
60 TransactTime: 20190806-20:30:28.898
548 CrossID: 73180000
549 CrossType: 1
550 CrossPrioritization: 0
551 OrigCrossID: 26990504
552 NoSides: 1
54 Side: SELL (2)
41 OrigClOrdID: 87749738
11 ClOrdID: 76494933
38 OrderQty: 2.22222
TRAILER
10 CheckSum: 066
Cross Order Cancel Request Execution Report
RAW
8=FIX.4.4|9=202|35=8|34=3|49=GEMINI|52=20190806-20:30:28.947|56=TESTOE001|6=0|11=76494933|14=2.22222|17=1565123428947|37=2DZ4MPQM|39=4|54=2|55=BTCUSD|58=ORDER_CANCELED|60=20190806-20:30:28.947|150=4|151=2.22222|10=127|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 202
35 MsgType: ExecutionReport (8)
34 MsgSeqNum: 3
49 SenderCompId: GEMINI
52 SendingTime: 20190806-20:30:28.947
56 TargetCompID: TESTOE001
BODY
6 AvgPx: 0
11 ClOrdID: 76494933
14 CumQty: 2.22222
17 ExecID: 1565123428947
37 OrderID: 2DZ4MPQM
39 OrdStatus: CANCELED (4)
54 Side: SELL (2)
55 Symbol: BTCUSD
58 Text: ORDER_CANCELLED
60 TransactTime: 20190806-20:30:28.947
150 ExecType: CANCELED (4)
151 LeavesQty: 2.22222
TRAILER
10 CheckSum: 127
FIX Broker Support
Gemini Clearing also allows for brokers to facilitate trades between two Gemini customers. A broker can submit a new Gemini Clearing order that must then be confirmed by each counterparty before settlement.
Broker New Order Cross
-
- Tag
- Name
- Req
- Description
-
- Standard Header
- Y
- MsgType = s
-
- 40
- OrdType
- Y
- Order type.
Valid values:- 2 = Limit
-
- 44
- Price
- Y
- Decimal price. Price is denominated in
CCY1
-
- 55
- Symbol
- Y
- Ticker symbol of the order.
See Supported Symbols for valid values.
-
- 60
- TransactTime
- Y
- Time of order creation (expressed in UTC).
-
- 548
- CrossID
- Y
- Unique identifier for a cross order
-
- 549
- CrossType
- Y
- Type of cross being submitted.
Valid values:- 1 = Cross trade which is either completely executed or not
-
- 550
- CrossPrioritization
- Y
- Indicates if one side or the other of a cross order should be prioritized.
Valid values:- 0 = None
-
- 54
- Side
- Y
- Part of a repeating group
Side of the source/target of the order. The opposite repeating group must have the opposite side.
Valid values:- 1 = Buy
- 2 = Sell
-
- 11
- ClOrdID
- Y
- Part of a repeating group
Unique identifier of the cross order as assigned by the institution. Uniqueness must be guaranteed by the institution for the duration of the connection to the order entry channel.
-
- 583
- ClOrdLinkID
- Y
- Part of a repeating group
Also referred to ascounterparty_id
. A value that is assigned to a specific counterparty Gemini account. Can be accessed on the web interface under theGEMINI ID
label. See workflow for more detail.
Must be consistent with the rest of the repeating group.
-
- 38
- OrderQty
- Y
- Part of a repeating group
Decimal quantity of quantity currency to buy or sell.
Must match the opposing repeating group.
-
- 126
- ExpireTime
- Y
- Time of order expiration (expressed in UTC). Can be up to 30 days from order initiation.
RAW
8=FIX.4.4|9=247|35=s|34=2|49=TESTOE001|52=20190905-13:29:45.762|56=GEMINI|40=2|44=10000|55=btcusd|60=20190905-13:29:45.762|548=49382061|549=1|550=0|552=2|54=1|11=63216195|583=R485E04Q|38=25.01|54=2|11=44996792|583=7467JVXP|38=25.01|126=20190905-15:29:45.762|10=236|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 247
35 MsgType: NewOrderCross (s)
34 MsgSeqNum: 2
49 SenderCompID: TESTOE001
52 SendingTime: 20190905-13:29:45.762
56 TargetCompID: GEMINI
BODY
40 OrdType: LIMIT (2)
44 Price: 10000
55 Symbol: BTCUSD
60 TransactTime: 20190905-13:29:45.762
548 CrossID: 49382061
549 CrossType: Cross trade which is either completely executed or not executed at all (1)
550 CrossPrioritization: No priority (0)
552 NoSides: Two Sides (2)
126 ExpireTime: 20190905-15:29:45.762
REPEATING GROUPS
54 Side: BUY (1)
11 ClOrdID: 63216195
583 ClOrdLinkID: R485E04Q
38 OrderQty: 25.01
54 Side: SELL (2)
11 ClOrdID: 44996792
583 ClOrdLinkID: 7467JVXP
38 OrderQty: 25.01
TRAILER
10 CheckSum: 236
Broker New Order Cross Execution Report
After submitting a new order cross as a broker, 2 execution reports will be sent (one for each side of the trade).
RAW
8=FIX.4.4|9=211|35=8|34=2|49=GEMINI|52=20190905-13:29:45.928|56=TESTOE001|6=10000|11=63216195|14=25.01|17=1567690185928|37=G9LVQOX5|39=0|44=10000|54=1|55=btcusd|60=20190905-13:29:45.928|150=0|151=25.01|583=R485E04Q|10=239|
8=FIX.4.4|9=211|35=8|34=3|49=GEMINI|52=20190905-13:29:45.929|56=TESTOE001|6=10000|11=44996792|14=25.01|17=1567690185928|37=G9LVQOX5|39=0|44=10000|54=2|55=btcusd|60=20190905-13:29:45.928|150=0|151=25.01|583=7467JVXP|10=054|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 211
35 MsgType: ExecutionReport (8)
34 MsgSeqNum: 2
49 SenderCompID: GEMINI
52 SendingTime: 20190905-13:29:45.928
56 TargetCompID: TESTOE001
BODY
6 AvgPx: 10000
11 ClOrdID: 63216195
14 CumQty: 25.01
17 ExecID: 1567690185928
37 OrderID: G9LVQOX5
39 OrdStatus: NEW (0)
44 Price: 10000
54 Side: BUY (1)
55 Symbol: BTCUSD
60 TransactTime: 20190905-13:29:45.928
150 ExecType: NEW (0)
151 LeavesQty: 25.01
583 ClOrdLinkID: Clearing ID for corresponding Gemini account (R485E04Q)
Trailer
10 CheckSum: 239
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 211
35 MsgType: ExecutionReport (8)
34 MsgSeqNum: 3
49 SenderCompID: GEMINI
52 SendingTime: 20190905-13:29:45.929
56 TargetCompID: TESTOE001
BODY
6 AvgPx: 10000
11 ClOrdID: 44996792
14 CumQty: 25.01
17 ExecID: 1567690185928
37 OrderID: G9LVQOX5
39 OrdStatus: NEW (0)
44 Price: 10000
54 Side: SELL (2)
55 Symbol: BTCUSD
60 TransactTime: 20190905-13:29:45.928
150 ExecType: NEW (0)
151 LeavesQty: 25.01
583 ClOrdLinkID: Clearing ID for corresponding Gemini account (7467JVXP)
Trailer
10 CheckSum: 054
Examples
New Order Single
This is a New Order Single (D
in MsgType <35>) request:
RAW
8=FIX.4.4|9=144|35=D|34=2|49=TRADEBOTOE002|52=20180425-17:56:41.000|56=GEMINI|11=iWM60sx3dreT9N9yEE|38=1|40=2|44=10000|54=1|55=BTCUSD|59=1|60=20180425-17:56:41|10=073|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 144
34 MsgSeqNum: 2
35 MsgType: NewOrderSingle (D)
49 SenderCompID: TRADEBOTOE002
52 SendingTime: 20180425-17:56:41.000
56 TargetCompID: GEMINI
BODY
11 ClOrdID: iWM60sx3dreT9N9yEE
38 OrderQty: 1
40 OrdType: LIMIT (2)
44 Price: 10000
54 Side: BUY (1)
55 Symbol: BTCUSD
59 TimeInForce: GOOD_TILL_CANCEL (1)
60 TransactTime: 20180425-17:56:41
TRAILER
10 CheckSum: 073
Execution Reports
The following section contains examples of execution reports.
Notes:
- Explanatory notes about the execution report fields are provided after each example. Additional information about the fields can be found in the Execution Report <8> documentation and here.
- Gemini associates the following OrdStatus <39> outcomes with each supported ExecType <150>:
-
- 0 = New
- 0 = New
- 1 = Partially filled
- 2 = Filled
- 8 = Rejected
-
- F = Trade
- 1 = Partially filled
- 2 = Filled
-
- 4 = Canceled
- 4 = Canceled
-
- 8 = Rejected
- 8 = Rejected
Execution report for a new order
This is an example of an Execution Report <8> in response to TRADEBOTOE002
's New Order Single <D>:
RAW
8=FIX.4.4|9=195|35=8|34=2|49=GEMINI|52=20180425-17:56:42.071|56=TRADEBOTOE002|6=0|11=iWM60sx3dreT9N9yEE|14=0|17=335278099|37=335278098|38=1|39=0|44=10000|54=1|55=BTCUSD|59=1|60=20180425-17:56:42.071|150=0|151=1|10=163|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 195
34 MsgSeqNum: 2
35 MsgType: ExecutionReport (8)
49 SenderCompID: GEMINI
52 SendingTime: 20180425-17:56:42.071
56 TargetCompID: TRADEBOTOE002
BODY
6 AvgPx: 0
11 ClOrdID: iWM60sx3dreT9N9yEE
14 CumQty: 0
17 ExecID: 335278099
37 OrderID: 335278098
38 OrderQty: 1
39 OrdStatus: NEW (0)
44 Price: 10000
54 Side: BUY (1)
55 Symbol: BTCUSD
59 TimeInForce: GOOD_TILL_CANCEL (1)
60 TransactTime: 20180425-17:56:42.071
150 ExecType: NEW (0)
151 LeavesQty: 1
TRAILER
10 CheckSum: 163
Notes:
- AvgPx:
0
is the avg price of all fills on the order. Given that this is a new order execution report, there are no fills to average. - ClOrdID:
iWM60sx3dreT9N9yEE
is a unique request identifier assigned byTRADEBOTOE002
in the ClOrdID <11> field in the original New Order Single <D>. - CumQty:
0
is the total quantity filled. Again, given that this is a new order execution report, there are no fills. - ExecID:
335278099
is an order acceptance event id assigned by Gemini; see Identifiers - ExecType:
NEW (0)
indicates that this execution report is for a new order. - LeavesQty:
1
represents the quantity left open for execution. In a new order, this should equal OrderQty <38>. - OrderID:
335278098
is a globally unique order event id assigned by Gemini at the time the order is submitted. - OrderQty:
1
represents the number of BTC ordered. - OrdStatus:
NEW (0)
indicates that the order's status is new. - Price:
10000
is the price denominated in USD (the price currency). See Understanding price and quantity for further explanation of price currency vs quantity currency. - StopPx:
Not shown in this example. Same format as Price
Required for a OrdType <40> is4 = Stop Limit
order entry ACK. - Side:
BUY (1)
refers to the side of the order. - Symbol:
BTCUSD
is the symbol name. See Supported securities for a list of valid symbols and an explanation of which currencies price and quantities fields are denominated in. - TimeInForce:
GOOD_TILL_CANCEL (1)
specifies that the new order is GTC. - TransactTime:
20180425-17:56:42.071
is the time when the order was created.
Execution report for a stop trigger
This is an example of an Execution Report <8> for a stop trigger message. This will only show up for a OrdType <40> is 4 = Stop Limit
order once a trigger event occurs, and doubles as an order ack for the newly created child limit order.
RAW
8=FIX.4.4|9=190|35=8|34=5|49=GEMINI|52=20191105-21:16:55.970|56=TRADEBOTOE003|6=0|11=qCBPcHUu8w1|14=0|17=366449739|37=366449738|38=3|39=0|44=6409.65|54=1|55=BTCUSD|59=1|60=20191105-21:16:55.930|150=0|151=3|10=223|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 190
34 MsgSeqNum: 5
35 MsgType: ExecutionReport (8)
49 SenderCompID: GEMINI
52 SendingTime: 20191105-21:16:55.970
56 TargetCompID: TRADEBOTOE003
BODY
6 AvgPx: 0
11 ClOrdID: qCBPcHUu8w1
14 CumQty: 0
17 ExecID: 366449739
37 OrderID: 366449738
38 OrderQty: 3
39 OrdStatus: NEW (0)
44 Price: 6409.65
54 Side: BUY (1)
55 Symbol: BTCUSD
59 TimeInForce: GOOD_TILL_CANCEL (1)
60 TransactTime: 20191105-21:16:55.930
150 ExecType: NEW (0)
151 LeavesQty: 3
TRAILER
10 CheckSum: 223
Notes:
- AvgPx:
0
is the avg price of all fills on the order. Given that this is a new order execution report, there are no fills to average. - ClOrdID:
qCBPcHUu8w1
is a unique request identifier assigned byTRADEBOTOE003
. - CumQty:
0
is the total quantity filled. Again, given that this is a new order execution report for the child limit order, there are no fills. - ExecID:
366449739
is an order acceptance event id assigned by Gemini; see Identifiers - ExecType:
NEW (0)
indicates that this execution report is for a new order. - LeavesQty:
3
represents the quantity left open for execution. In a new order, this should equal OrderQty <38>. - OrderID:
366449738
is a globally unique order event id assigned by Gemini at the time the stop order triggers. - OrderQty:
3
represents the number of BTC ordered. - OrdStatus:
NEW (0)
indicates that the order's status is new. - Price:
6409.65
is the price denominated in USD (the price currency). See Understanding price and quantity for further explanation of price currency vs quantity currency. - Side:
BUY (1)
refers to the side of the order. - Symbol:
BTCUSD
is the symbol name. See Supported securities for a list of valid symbols and an explanation of which currencies price and quantities fields are denominated in. - TimeInForce:
GOOD_TILL_CANCEL (1)
specifies that the new order is GTC. - TransactTime:
20191105-21:16:55.930
is the time when the order was created.
Execution report for a fill
In this scenario, TRADEBOTOE002
's order fills at 8400.00. In this case, TRADEBOTOE002
is on the taker side and pays the base fee of 100bps (1.00%). This is an example of an associated execution report:
RAW
8=FIX.4.4|9=248|35=8|34=3|49=GEMINI|52=20180516-22:03:10.031|56=TRADEBOTOE002|6=8400.00|11=af9hLHqlLYAYb3ErKJ|12=8.400000|13=3|14=1|17=336157291|31=8400.00|32=1|37=336157289|38=1|39=2|44=10000|54=1|55=BTCUSD|59=1|60=20180516-22:03:10.030|150=F|151=0|479=USD|851=2|10=116|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 248
34 MsgSeqNum: 3
35 MsgType: ExecutionReport (8)
49 SenderCompID: GEMINI
52 SendingTime: 20180516-22:03:10.031
56 TargetCompID: TRADEBOTOE002
BODY
6 AvgPx: 8400.00
11 ClOrdID: af9hLHqlLYAYb3ErKJ
12 Commission: 8.400000
13 CommType: ABSOLUTE (3)
14 CumQty: 1
17 ExecID: 336157291
31 LastPx: 8400.00
32 LastQty: 1
37 OrderID: 336157289
38 OrderQty: 1
39 OrdStatus: FILLED (2)
44 Price: 10000
54 Side: BUY (1)
55 Symbol: BTCUSD
59 TimeInForce: GOOD_TILL_CANCEL (1)
60 TransactTime: 20180516-22:03:10.030
150 ExecType: TRADE (F)
151 LeavesQty: 0
479 CommCurrency: USD
851 LastLiquidityInd: REMOVED_LIQUIDITY (2)
TRAILER
10 CheckSum: 116
Notes:
- AvgPx:
8400.00
is the avg price of all fills on the order. - CommType:
ABSOLUTE (3)
indicates that Commision <12> is a total monetary amount. - Commission:
8.400000
is in USD as indicated by CommCurrency <479>. - CumQty:
1
is the total quantity filled. - LastLiquidityInd:
REMOVED_LIQUIDITY (2)
indicates thatTRADEBOTOE002
was a liquidity taker. - LeavesQty:
0
represents the quantity left open for execution. In a filled trade, this should equal OrderQty <38> - CumQty <14>. - OrderQty:
1
represents the number of BTC ordered.
Execution report for a partial fill
In this example, TRADEBOTOE002
is on the maker side and receives an execution report for an order with an original quantity of 20 BTC that was partially filled for 10 BTC with 10 BTC remaining for a fee of 0.00%:
RAW
8=FIX.4.4|9=254|35=8|34=5|49=GEMINI|52=20180517-15:07:16.894|56=TRADEBOTOE002|6=8338.67|11=1tfX3IJi9HP87dkqlo|12=0.000000|13=3|14=10|17=336933409|31=8338.67|32=10|37=336933405|38=20|39=1|44=8338.67|54=1|55=BTCUSD|59=3|60=20180517-15:07:16.892|150=F|151=10|479=USD|851=1|10=001|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 254
34 MsgSeqNum: 5
35 MsgType: ExecutionReport (8)
49 SenderCompID: GEMINI
52 SendingTime: 20180517-15:07:16.894
56 TargetCompID: TRADEBOTOE002
BODY
6 AvgPx: 8338.67
11 ClOrdID: 1tfX3IJi9HP87dkqlo
12 Commission: 0.000000
13 CommType: ABSOLUTE (3)
14 CumQty: 10
17 ExecID: 336933409
31 LastPx: 8338.67
32 LastQty: 10
37 OrderID: 336933405
38 OrderQty: 20
39 OrdStatus: PARTIALLY_FILLED (1)
44 Price: 8338.67
54 Side: BUY (1)
55 Symbol: BTCUSD
59 TimeInForce: IMMEDIATE_OR_CANCEL (3)
60 TransactTime: 20180517-15:07:16.892
150 ExecType: TRADE (F)
151 LeavesQty: 10
479 CommCurrency: USD
851 LastLiquidityInd: ADDED_LIQUIDITY (1)
TRAILER
10 CheckSum: 001
Notes:
- AvgPx:
8338.67
is the average price of all fills on this order. - ClOrdID:
1tfX3IJi9HP87dkqlo
is a unique request identifier assigned byTRADEBOTOE002
in the ClOrdID <11> field in the original New Order Single <D>. - CumQty:
10
is the total quantity of the order that is filled. - ExecID:
336933409
is the trade event id assigned by Gemini; see Identifiers. - ExecType:
TRADE (F)
indicates that this execution report is for a trade (either partial fill or fill). - LastLiquidityInd:
ADDED_LIQUIDITY (1)
indicates thatTRADEBOTOE002
was a maker in this order. - LastPx:
8338.67
is the price of the last fill. - LastQty:
10
is the quantity of the partial fill. - LeavesQty:
10
indicates that there is a remaining quantity of 10 open for further execution. - OrderQty:
20
is the quantity indicated in the original New Order Single <D>. - OrdStatus:
PARTIALLY_FILLED (1)
indicates that the order is partially filled. - Price:
8338.67
is the limit price of the order.
Execution report for an order cancellation
In this example, TRADEBOTOE002
receives an execution report, in response to a previously sent Order Cancel Request <F>, indicating that the order with a ClOrdID <11> = GHDzdNUUXaMMDZdfwe
was cancelled:
RAW
8=FIX.4.4|9=220|35=8|34=3|49=GEMINI|52=20180425-17:57:59.538|56=TRADEBOTOE002|6=0|11=GHDzdNUUXaMMDZdfwe|14=0|17=335278132|37=335278128|38=1|39=4|41=z35u64KR1gen7f2SpB|44=93392.64|54=2|55=BTCUSD|58=REQUESTED|59=1|60=20180425-17:57:59.537|150=4|151=0|10=254|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 220
34 MsgSeqNum: 3
35 MsgType: ExecutionReport (8)
49 SenderCompID: GEMINI
52 SendingTime: 20180425-17:57:59.538
56 TargetCompID: TRADEBOTOE002
BODY
6 AvgPx: 0
11 ClOrdID: GHDzdNUUXaMMDZdfwe
14 CumQty: 0
17 ExecID: 335278132
37 OrderID: 335278128
38 OrderQty: 1
39 OrdStatus: CANCELED (4)
41 OrigClOrdID: z35u64KR1gen7f2SpB
44 Price: 93392.64
54 Side: SELL (2)
55 Symbol: BTCUSD
58 Text: REQUESTED
59 TimeInForce: GOOD_TILL_CANCEL (1)
60 TransactTime: 20180425-17:57:59.537
150 ExecType: CANCELED (4)
151 LeavesQty: 0
TRAILER
10 CheckSum: 254
Notes:
- AvgPx:
0
is the avg price of all fills on the order. Given that this order was cancelled before any fills, the average price is 0. - ClOrdID:
GHDzdNUUXaMMDZdfwe
is a unique request identifier assigned byTRADEBOTOE002
in the ClOrdID <11> field in the original New Order Single <D>. - CumQty:
0
is the total quantity filled. Again, given that this order had no fills, this number is 0. - ExecID:
335278132
is an order cancellation event id assigned by Gemini; see Identifiers - ExecType:
CANCELED (4)
indicates that this execution report is for a cancelled order. - LeavesQty:
0
represents the quantity left open for execution. In a cancelled or expired order, this quantity should equal 0. - OrderID:
335278128
is a globally unique order event id assigned by Gemini at the time the order is submitted. - OrderQty:
1
represents the number of BTC cancelled. - OrdStatus:
CANCELED (4)
indicates that the order's status is cancelled. - OrigClOrdID:
z35u64KR1gen7f2SpB
corresponds to the ClOrdID <11> of the order to cancel. - Price:
93392.64
is the price denominated in USD (the price currency). See Understanding price and quantity for further explanation of price currency vs quantity currency. - Side:
SELL (2)
refers to the side of the order. - Symbol:
BTCUSD
is the symbol name. See Supported securities for a list of valid symbols and an explanation of which currencies price and quantities fields are denominated in. - Text:
REQUESTED
indicates that this execution report was for the cancellation of a GTC order where the user initiated the cancel request. - TimeInForce:
GOOD_TILL_CANCEL (1)
specifies that the order was GTC. - TransactTime:
20180425-17:57:59.537
is the time when the order was created.
In this next example, TRADEBOTOE002
first sent an Order Cancel Request <F> for order 1tfX3IJi9HP87dkqlo
that was previously partially filled. This is an execution report for the cancellation of the remaining quantity:
RAW
8=FIX.4.4|9=238|35=8|34=7|49=GEMINI|52=20180517-15:07:16.896|56=TRADEBOTOE002|6=8338.67|11=1tfX3IJi9HP87dkqlo|14=10|17=336933412|37=336933405|38=20|39=4|44=8338.67|54=1|55=BTCUSD|59=3|60=20180517-15:07:16.892|150=4|151=0|10=080|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 238
34 MsgSeqNum: 7
35 MsgType: ExecutionReport (8)
49 SenderCompID: GEMINI
52 SendingTime: 20180517-15:07:16.896
56 TargetCompID: TRADEBOTOE002
BODY
6 AvgPx: 8338.67
11 ClOrdID: 1tfX3IJi9HP87dkqlo
14 CumQty: 10
17 ExecID: 336933412
37 OrderID: 336933405
38 OrderQty: 20
39 OrdStatus: CANCELED (4)
44 Price: 8338.67
54 Side: BUY (1)
55 Symbol: BTCUSD
59 TimeInForce: IMMEDIATE_OR_CANCEL (3)
60 TransactTime: 20180517-15:07:16.892
150 ExecType: CANCELED (4)
151 LeavesQty: 0
TRAILER
10 CheckSum: 080
Notes:
- CumQty:
10
is the total quantity filled. This order had 1 fill for 10 BTC before it was cancelled. - LeavesQty:
0
represents the quantity left open for execution. In a cancelled or expired order, this quantity should equal 0. - OrderQty:
20
represents the quantity of BTC ordered in the original New Order Single <D>.
Execution report for a reject
In this scenario, TRADEBOTOE002
sent another New Order Single <D> but this time there is an error: the Symbol <55> field value is invalid.
Because the symbol is invalid, the server rejects the order. This is an example of an associated execution report:
RAW
8=FIX.4.4|9=237|35=8|34=2|49=GEMINI|52=20180516-22:09:05.019|56=TRADEBOTOE002|6=0|11=7v1cs7HFCT2WehadcO|14=0|17=1526508545018|37=0|38=10.4|39=8|44=0.05|54=2|55=ABCDEF|58=Unsupported Symbol value 'ABCDEF'|59=1|60=20180516-22:09:05.018|103=99|150=8|151=0|10=090|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 237
34 MsgSeqNum: 2
35 MsgType: ExecutionReport (8)
49 SenderCompID: GEMINI
52 SendingTime: 20180516-22:09:05.019
56 TargetCompID: TRADEBOTOE002
BODY
6 AvgPx: 0
11 ClOrdID: 7v1cs7HFCT2WehadcO
14 CumQty: 0
17 ExecID: 1526508545018
37 OrderID: 0
38 OrderQty: 10.4
39 OrdStatus: REJECTED (8)
44 Price: 0.05
54 Side: SELL (2)
55 Symbol: ABCDEF
58 Text: Unsupported Symbol value 'ABCDEF'
59 TimeInForce: GOOD_TILL_CANCEL (1)
60 TransactTime: 20180516-22:09:05.018
103 OrdRejReason: OTHER (99)
150 ExecType: REJECTED (8)
151 LeavesQty: 0
TRAILER
10 CheckSum: 090
Notes:
- LeavesQty:
0
indicates that there is no quantity remaining for further execution. - OrderQty:
10.4
is the quantity ordered in the original New Order Single <D>. - OrdRejReason:
OTHER (99)
suggests that there is an alternative reason for rejection. In this example, the reason for rejection is stated in the Text <58> field. - OrdStatus:
REJECTED (8)
indicates that the order is rejected. - Symbol:
ABCDEF
is not a valid symbol. See Supported securities for a list of valid symbols. - Text:
Unsupported Symbol value 'ABCDEF'
indicates that the symbol field's value is invalid.
Order Cancel Request
This is an Order Cancel Request that cancels an order of 1 BTC that was previously entered with an CLOrdID of z35u64KR1gen7f2SpB
:
RAW
8=FIX.4.4|9=147|35=F|34=3|49=TRADEBOTOE002|52=20180425-17:57:59.000|56=GEMINI|11=GHDzdNUUXaMMDZdfwe|38=1|41=z35u64KR1gen7f2SpB|54=2|55=BTCUSD|60=20180425-17:57:59|10=185|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 147
34 MsgSeqNum: 3
35 MsgType: OrderCancelRequest (F)
49 SenderCompID: TRADEBOTOE002
52 SendingTime: 20180425-17:57:59.000
56 TargetCompID: GEMINI
BODY
11 ClOrdID: GHDzdNUUXaMMDZdfwe
38 OrderQty: 1
41 OrigClOrdID: z35u64KR1gen7f2SpB
54 Side: SELL (2)
55 Symbol: BTCUSD
60 TransactTime: 20180425-17:57:59
TRAILER
10 CheckSum: 185
and its associated Execution Report response:
RAW
8=FIX.4.4|9=220|35=8|34=3|49=GEMINI|52=20180425-17:57:59.538|56=TRADEBOTOE002|6=0|11=GHDzdNUUXaMMDZdfwe|14=0|17=335278132|37=335278128|38=1|39=4|41=z35u64KR1gen7f2SpB|44=93392.64|54=2|55=BTCUSD|58=REQUESTED|59=1|60=20180425-17:57:59.537|150=4|151=0|10=254|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 220
34 MsgSeqNum: 3
35 MsgType: ExecutionReport (8)
49 SenderCompID: GEMINI
52 SendingTime: 20180425-17:57:59.538
56 TargetCompID: TRADEBOTOE002
BODY
6 AvgPx: 0
11 ClOrdID: GHDzdNUUXaMMDZdfwe
14 CumQty: 0
17 ExecID: 335278132
37 OrderID: 335278128
38 OrderQty: 1
39 OrdStatus: CANCELED (4)
41 OrigClOrdID: z35u64KR1gen7f2SpB
44 Price: 93392.64
54 Side: SELL (2)
55 Symbol: BTCUSD
58 Text: REQUESTED
59 TimeInForce: GOOD_TILL_CANCEL (1)
60 TransactTime: 20180425-17:57:59.537
150 ExecType: CANCELED (4)
151 LeavesQty: 0
TRAILER
10 CheckSum: 254
Server Side Cancellations
This is an example of an Execution Report for an order that was canceled because part or all of the maker-or-cancel
order would fill immediately:
8=FIX.4.4|9=207|35=8|34=6|49=GEMINI|52=20180530-15:25:13.110|56=DEV|6=0|11=GHDzdNUUXaMMDZdfwe|14=0|17=48|18=6|37=46|38=10|39=4|44=448.01|54=1|55=BTCUSD|58=MAKER_OR_CANCEL_WOULD_TAKE|59=1|60=20150218-18:45:02.030|150=4|151=0|10=031|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 207
34 MsgSeqNum: 6
35 MsgType: ExecutionReport (8)
49 SenderCompID: GEMINI
52 SendingTime: 20180530-15:25:13.110
56 TargetCompID: DEV
BODY
6 AvgPx: 0
11 ClOrdID: GHDzdNUUXaMMDZdfwe
14 CumQty: 0
17 ExecID: 48
18 ExecInst: PARTICIPATE_DONT_INITIATE (6)
37 OrderID: 46
38 OrderQty: 10
39 OrdStatus: CANCELED (4)
44 Price: 448.01
54 Side: BUY (1)
55 Symbol: BTCUSD
58 Text: MAKER_OR_CANCEL_WOULD_TAKE
59 TimeInForce: GOOD_TILL_CANCEL (1)
60 TransactTime: 20150218-18:45:02.030
150 ExecType: CANCELED (4)
151 LeavesQty: 0
TRAILER
10 CheckSum: 031
This is an example of an Execution Report for an order that was canceled because the immediate-or-cancel
order would not fill immediately:
8=FIX.4.4|9=212|35=8|34=4|49=GEMINI|52=20180530-15:34:56.648|56=DEV|6=448.06|11=GHDzdNUUXaMMDZdfwe|14=1.2|17=35|37=31|38=5.0|39=4|44=448.06|54=2|55=BTCUSD|58=IMMEDIATE_OR_CANCEL_WOULD_POST|59=3|60=20150218-18:45:02.017|150=4|151=0|10=062|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 212
34 MsgSeqNum: 4
35 MsgType: ExecutionReport (8)
49 SenderCompID: GEMINI
52 SendingTime: 20180530-15:34:56.648
56 TargetCompID: DEV
BODY
6 AvgPx: 448.06
11 ClOrdID: GHDzdNUUXaMMDZdfwe
14 CumQty: 1.2
17 ExecID: 35
37 OrderID: 31
38 OrderQty: 5.0
39 OrdStatus: CANCELED (4)
44 Price: 448.06
54 Side: SELL (2)
55 Symbol: BTCUSD
58 Text: IMMEDIATE_OR_CANCEL_WOULD_POST
59 TimeInForce: IMMEDIATE_OR_CANCEL (3)
60 TransactTime: 20150218-18:45:02.017
150 ExecType: CANCELED (4)
151 LeavesQty: 0
TRAILER
10 CheckSum: 062
View the most common reasons here.
New Order Single on Behalf of Third Party
This is a New Order Single request on behalf of a third party. For more information, see Third Party Support
RAW
8=FIX.4.4|9=162|35=D|34=2|49=TRADEBOTOE001|52=20180425-17:58:11.000|56=GEMINI|115=AA1AA1AAA1|11=FLWC3iFc6ygIxFSKVY|38=10|40=2|44=8490.44|54=2|55=BTCUSD|59=1|60=20180425-17:58:11|10=024|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 162
34 MsgSeqNum: 2
35 MsgType: NewOrderSingle (D)
49 SenderCompID: TRADEBOTOE001
52 SendingTime: 20180425-17:58:11.000
56 TargetCompID: GEMINI
115 OnBehalfOfCompID: AA1AA1AAA1
BODY
11 ClOrdID: FLWC3iFc6ygIxFSKVY
38 OrderQty: 10
40 OrdType: LIMIT (2)
44 Price: 8490.44
54 Side: SELL (2)
55 Symbol: BTCUSD
59 TimeInForce: GOOD_TILL_CANCEL (1)
60 TransactTime: 20180425-17:58:11
TRAILER
10 CheckSum: 024
and its associated Execution Report:
RAW
8=FIX.4.4|9=214|35=8|34=2|49=GEMINI|52=20180425-17:58:12.286|56=TRADEBOTOE001|115=AA1AA1AAA1|6=0|11=FLWC3iFc6ygIxFSKVY|14=0|17=335278137|37=335278136|38=10|39=0|44=8490.44|54=2|55=BTCUSD|59=1|60=20180425-17:58:12.285|150=0|151=10|10=155|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 214
34 MsgSeqNum: 2
35 MsgType: ExecutionReport (8)
49 SenderCompID: GEMINI
52 SendingTime: 20180425-17:58:12.286
56 TargetCompID: TRADEBOTOE001
128 DeliverToCompID: AA1AA1AAA1
BODY
6 AvgPx: 0
11 ClOrdID: FLWC3iFc6ygIxFSKVY
14 CumQty: 0
17 ExecID: 335278137
37 OrderID: 335278136
38 OrderQty: 10
39 OrdStatus: NEW (0)
44 Price: 8490.44
54 Side: SELL (2)
55 Symbol: BTCUSD
59 TimeInForce: GOOD_TILL_CANCEL (1)
60 TransactTime: 20180425-17:58:12.285
150 ExecType: NEW (0)
151 LeavesQty: 10
TRAILER
10 CheckSum: 155
New Market BUY Order
This is an example of a request for a market BUY order.
RAW
8=FIX.4.4|9=126|35=D|34=2|49=DEV|52=20181023-17:49:51.691|56=GEMINI|11=FLWC3iFi6ygIxFSKVY|40=1|54=1|55=BTCUSD|60=20150218-18:45:02.003|152=500.0|10=235|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 126
34 MsgSeqNum: 2
35 MsgType: NewOrderSingle (D)
49 SenderCompID: DEV
52 SendingTime: 20181023-17:49:51.691
56 TargetCompID: GEMINI
BODY
11 ClOrdID: FLWC3iFi6ygIxFSKVY
40 OrdType: MARKET (1)
54 Side: BUY (1)
55 Symbol: BTCUSD
60 TransactTime: 20150218-18:45:02.003
152 CashOrderQty: 500.0
TRAILER
10 CheckSum: 235
Notes:
- OrdType:
MARKET (1)
indicates this is a Market order - CashOrderQty:
500.0
The amount of USD used to buy BTC. CashOrderQty is always the amount in price currency used to buy the quantity currency
and the associated Execution Report for a market BUY order.
RAW
8=FIX.4.4|9=163|35=8|34=2|49=GEMINI|52=20181023-17:49:51.943|56=DEV|6=0|11=FLWC3iFi6ygIxFSKVY|14=0|17=43|37=42|39=0|54=1|55=BTCUSD|60=20150218-18:45:02.042|150=0|151=500.0|152=500.0|10=069|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 163
34 MsgSeqNum: 2
35 MsgType: ExecutionReport (8)
49 SenderCompID: GEMINI
52 SendingTime: 20181023-17:49:51.943
56 TargetCompID: DEV
BODY
6 AvgPx: 0
11 ClOrdID: FLWC3iFi6ygIxFSKVY
14 CumQty: 0
17 ExecID: 43
37 OrderID: 42
39 OrdStatus: NEW (0)
54 Side: BUY (1)
55 Symbol: BTCUSD
60 TransactTime: 20150218-18:45:02.042
150 ExecType: NEW (0)
151 LeavesQty: 500.0
152 CashOrderQty: 500.0
TRAILER
10 CheckSum: 069
New Market SELL Order
This is an example of a request for a market SELL order.
RAW
8=FIX.4.4|9=126|35=D|34=2|49=DEV|52=20181023-17:49:51.691|56=GEMINI|11=YLWC3xFi6ygIxFSKVY|40=1|54=1|55=BTCUSD|60=20150218-18:45:02.003|152=500.0|10=112|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 126
34 MsgSeqNum: 2
35 MsgType: NewOrderSingle (D)
49 SenderCompID: DEV
52 SendingTime: 20181023-17:49:51.691
56 TargetCompID: GEMINI
BODY
11 ClOrdID: YLWC3xFi6ygIxFSKVY
38 OrderQty: 2.0
40 OrdType: MARKET (1)
54 Side: SELL (2)
55 Symbol: BTCUSD
60 TransactTime: 20150218-18:45:02.010
TRAILER
10 CheckSum: 112
Notes:
- OrdType:
MARKET (1)
indicates this is a Market order - OrderQty:
2.0
The amount of BTC to sell for USD
and the associated Execution Report for a market SELL order.
RAW
8=FIX.4.4|9=161|35=8|34=2|49=GEMINI|52=20181023-20:26:27.359|56=DEV|6=0|11=YLWC3xFi6ygIxFSKVY|14=0|17=43|37=42|38=2.0|39=0|54=2|55=BTCUSD|60=20150218-18:45:02.042|150=0|151=2.0|10=113|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 161
34 MsgSeqNum: 2
35 MsgType: ExecutionReport (8)
49 SenderCompID: GEMINI
52 SendingTime: 20181023-20:26:27.359
56 TargetCompID: DEV
BODY
6 AvgPx: 0
11 ClOrdID: YLWC3xFi6ygIxFSKVY
14 CumQty: 0
17 ExecID: 43
37 OrderID: 42
38 OrderQty: 2.0
39 OrdStatus: NEW (0)
54 Side: SELL (2)
55 Symbol: BTCUSD
60 TransactTime: 20150218-18:45:02.042
150 ExecType: NEW (0)
151 LeavesQty: 2.0
TRAILER
10 CheckSum: 113
Market Order Fill
This is an example of an Execution Report for a filled market BUY order
RAW
8=FIX.4.4|9=297|35=8|34=3|49=GEMINI|52=20181023-17:49:51.958|56=DEV|6=448.06|11=FLWC3iFi6ygIxFSKVY|12=9.80392156863|13=3|14=1.0940411517|17=44|31=448.06|32=1.0940411517|37=42|39=2|54=1|55=BTCUSD|60=20150218-18:45:02.043|150=F|151=0|152=500.0|479=USD|851=2|10=089|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 297
34 MsgSeqNum: 3
35 MsgType: ExecutionReport (8)
49 SenderCompID: GEMINI
52 SendingTime: 20181023-17:49:51.958
56 TargetCompID: DEV
BODY
6 AvgPx: 448.06
11 ClOrdID: FLWC3iFi6ygIxFSKVY
12 Commission: 9.8039215686
13 CommType: ABSOLUTE (3)
14 CumQty: 1.0940411517
17 ExecID: 44
31 LastPx: 448.06
32 LastQty: 1.0940411517
37 OrderID: 42
39 OrdStatus: FILLED (2)
54 Side: BUY (1)
55 Symbol: BTCUSD
60 TransactTime: 20150218-18:45:02.043
150 ExecType: TRADE (F)
151 LeavesQty: 0
152 CashOrderQty: 500.0
479 CommCurrency: USD
851 LastLiquidityInd: REMOVED_LIQUIDITY (2)
TRAILER
10 CheckSum: 089
Market Order Partial Fill
In the rare case a market order sweeps the book and only partially fills, two Execution Reports will be generated: one describing the partial fill and another cancelling the market order as it was only partially filled.
Here is an example of the partial fill Execution Report.
RAW
8=FIX.4.4|9=237|35=8|34=3|49=GEMINI|52=20181023-18:05:07.978|56=DEV|6=448.06|11=CLWC3iFi6ygIyFSKVY|12=8.9612|13=3|14=1.0|17=44|31=448.06|32=1.0|37=42|39=1|54=1|55=BTCUSD|60=20150218-18:45:02.043|150=F|151=42.9788|152=500.0|479=USD|851=2|10=172|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 237
34 MsgSeqNum: 3
35 MsgType: ExecutionReport (8)
49 SenderCompID: GEMINI
52 SendingTime: 20181023-18:05:07.978
56 TargetCompID: DEV
BODY
6 AvgPx: 448.06
11 ClOrdID: CLWC3iFi6ygIyFSKVY
12 Commission: 8.9612
13 CommType: ABSOLUTE (3)
14 CumQty: 1.0
17 ExecID: 44
31 LastPx: 448.06
32 LastQty: 1.0
37 OrderID: 42
39 OrdStatus: PARTIALLY_FILLED (1)
54 Side: BUY (1)
55 Symbol: BTCUSD
60 TransactTime: 20150218-18:45:02.043
150 ExecType: TRADE (F)
151 LeavesQty: 42.9788
152 CashOrderQty: 500.0
479 CommCurrency: USD
851 LastLiquidityInd: REMOVED_LIQUIDITY (2)
TRAILER
10 CheckSum: 172
Notes:
- CumQty:
1.0
is the total quantity filled. - LeavesQty:
42.978800000
indicates the unfilled notional value of the order. - CashOrderQty:
500.0
is the original notional value desired to be filled.
and the following Execution Report representing a cancellation of the order.
RAW
8=FIX.4.4|9=199|35=8|34=4|49=GEMINI|52=20181023-18:05:07.984|56=DEV|6=448.06|11=CLWC3iFi6ygIyFSKVY|14=1.0|17=46|37=42|39=4|54=1|55=BTCUSD|58=MARKET_ORDER_SWEPT_BOOK|60=20150218-18:45:02.045|150=4|151=0|152=500.0|10=TRAILER|
HEADER
8 BeginString: FIX.4.4
9 BodyLength: 199
34 MsgSeqNum: 4
35 MsgType: ExecutionReport (8)
49 SenderCompID: GEMINI
52 SendingTime: 20181023-18:05:07.984
56 TargetCompID: DEV
BODY
6 AvgPx: 448.06
11 ClOrdID: CLWC3iFi6ygIyFSKVY
14 CumQty: 1.0
17 ExecID: 46
37 OrderID: 42
39 OrdStatus: CANCELED (4)
54 Side: BUY (1)
55 Symbol: BTCUSD
58 Text: MARKET_ORDER_SWEPT_BOOK
60 TransactTime: 20150218-18:45:02.045
150 ExecType: CANCELED (4)
151 LeavesQty: 0
152 CashOrderQty: 500.0
TRAILER
10 CheckSum: 184
Notes:
- TEXT:
MARKET_ORDER_SWEPT_BOOK
text indicating the cancel reason for the order
Errors
When a message is received but cannot be properly processed due to some rule violation (like invalid field values or attributes), we will return back
- a Reject <3>, or
- an Execution Report <8> with an OrdStatus <39> field with a value of
8 = Rejected
and an ExecType <150> field with a value of8 = Rejected
, or - a Business Message Reject <j>
Where possible, there will be an error message in Text <58> explaining the Rejection. Here is a list of some common error messages and reasons for Rejection.
Message Type | Error Message | Reason |
---|---|---|
Reject <3> | Value is incorrect (out of range) for this tag | Here are some reasons for why a field value may be invalid:
|
Reject <3> | Tag not defined for this message type (TAG) | Message contains an extra unsupported FIX tag. |
Reject <3> | Invalid tag value | |
Reject <3> | System Error: Message rate exceeded allocated throttle | Throttle exceeded |
Execution Report <8> (Rejected) | InvalidPrice | The message specified a price that was too low or had the incorrect precision. |
Execution Report <8> (Rejected) | Unsupported Symbol value 'ABCDEF' | An invalid Symbol was provided (ex: 'ABCDEFGH' instead of 'BTCUSD' in Symbol <55>) |
Execution Report <8> (Rejected) | StopPx is required for OrdType: 4 | New Stop Limit orders require a valid stop price in StopPx <99>. |
Execution Report <8> (Rejected) | Price must be within 50% of StopPx for OrdType: 4 | New Stop Limit orders require the Limit Price <44> be within 50% of the StopPx <99>. |
Execution Report <8> (Rejected) | Stop limit orders only support standard order behavior | If provided, 1 = Good Till Cancel (GTC) is the only TimeInForce <59> value allowed in conjunction with stop limit orders. All other values will trigger this rejection. |
Business Message Reject <j> | Unsupported message type | Used to Reject a FIX message which is not unsupported by this specific FIX API, e.g. a Market Data Request <V> received on a FIX Order Entry Channel. |
Business Message Reject <j> | Conditionally Required Field Missing (TAG) | A conditionally required field, identified by its tag, is missing. (ex: OrderQty <38> is missing) |
Business Message Reject <j> | System Error: Application not available | Backend system not available |
Revision History
Date | Notes |
---|---|
2016/03/23 | Initial FIX Order Entry API documentation. |
2017/11/17 | Add ExecInst=6 for Maker-or-Cancel orders. |
2018/02/22 | New Feature: Document Third Party Support. Add OnBehalfOfCompID <115> field to Standard Header. |
2018/04/06 | New Feature: Document block trading support. Add IOI <6> for broadcast of IOI to block trade market makers and update New Order Single <D> with options for placing an IOI and respoding to an IOI. |
2018/04/30 | Document actual examples of Reject messages and Execution Report rejects in an errors section. |
2018/05/18 | Add additional examples of using the Order Entry API. |
2018/06/18 | Add examples for order cancel reason. |
2018/09/14 | Add Documentation for fill-or-kill orders. |
2019/08/08 | Add documentation for Gemini Clearing |
2019/11/12 | Add documentation for Stop Order flow |
2020/01/24 | Update Third Party Execution Report details |
2022/05/09 | Update FIX Order Cancel Reject details |
2022/06/23 | Deprecating documentation for Auction and Block trading support |
2022/10/21 | New Feature: Add fix tag 9000 RiskLiquidityFlag. Indicates whether or not the order should match against Liquidation Orders sent from the Liquidation Engine. Only allowed from permissioned Market Makers. |
- Trust is Our Product™
- For trademarks and patents, please see the Legal Notice.
- NMLS #1518126
- © Copyright 2022 Gemini Trust Company, LLC.