Bullish FIX API Overview
Hours Of Operation
The Bullish API will ordinarily be available 24 x 7 x 365.
The platform may be closed temporarily from time-to-time should this be required for upgrades or maintenance, and Bullish shall notify clients well in advance when required. Please contact support for more information.
Network Connectivity
Bullish offers a variety of network connectivity options which include AWS private link and GCP private service connect. Please contact your Bullish relationship manager for details and to discuss which is suitable for you.
Support
For assistance with this FIX specification, or Bullish functionality generally, please visit our support site at https://support.bullish.com or contact your Bullish relationship manager.
FIX Dictionary
An up to date copy of the FIX dictionary to complement this FIX specification can be found at https://github.com/bullish-exchange/api-docs/blob/master/src/fix-api/fix-dictionary.xml
Forward Compatibility
Our FIX API is enhanced periodically through the addition of new optional fields to support new functionality. For uninterrupted service and smoother adoption of these additive enhancements, we strongly recommend configuring client FIX systems to be tolerant of unrecognized optional tags. We do not suggest strict dictionary validation which may otherwise lead to message rejections.
Users, Accounts, Authentication & Security
Bullish clients can create and authorize individual traders (or trading systems) to trade on the Bullish platform with specific authorizations via the trading UI (see Account Management – Bullish Help Center for more information on this). In the case of entering or managing orders, the identity of the instructing trader or system should be indicated in SenderSubId (50) of the Standard Header.
In order to log into the FIX session, a Password (554) is required in the Logon [A] message. This can be generated by the clients institutional representative via the trading UI (https://exchange.bullish.com) once traders have been declared. Ordinarily, this is a long-lived password (i.e. without expiry); it may, however, change as a result of changing traders and/or accounts. In this case, the FIX session should be closed and a new Logon entered with the new password, to ensure that orders can be entered for the new trader/account.
For more information on managing users and accounts within the system, please contact your Bullish relationship manager.
Order Account Identification (Allocation)
All orders submitted to the Bullish platform must indicate the account on whose behalf they are submitted, using the Account (1) FIX field. The platform will use this information to debit/credit the underlying account following each trade.
Service Overview
The FIX API allows Bullish customers to:
-
Submit and cancel orders on the Bullish platform.
-
Receive notification of trades.
-
Download reference data about instruments on the platform.
Real-time market data for the Bullish exchange is not currently provided over FIX. This can be received by connecting to the WebSocket API, details of which are available here.
FIX, REST & WebSocket Interoperability
It is possible to trade via both REST and FIX which would result in the following behavior:
-
Order creation requests sent via REST are published to a subscribed private data WebSocket (order state updates) only.
-
Order creation requests sent via FIX are published to both a subscribed private data WebSocket (order state updates) and the FIX session (execution reports).
-
Order cancellations sent via FIX that result in the cancellation of open orders that were originally sent via REST are published to both a subscribed private data WebSocket (order state updates) and the FIX session (execution reports).
It is strongly recommended by Bullish to avoid trading over both FIX and REST simultaneously. However, if it is required to do so it is recommended to use separate sub-accounts to segregate your FIX and REST trading flows.
Symbology
Instruments are typically identified within the Bullish platform using a commonly-understood mnemonic in the format of <quoted currency><base currency>. For example, spot prices for Bitcoin quoted in US Dollar would have a Symbol (55) value of `BTCUSD`.
A complete list of instruments available for trading on the Bullish exchange (and their symbols) can be retrieved either via the FIX session using the SecurityListRequest [x] message, or from the public `markets` REST endpoint.
Throttling/Rate limits
Each trading account will be subject to rate limiting on the Bullish platform, with the default set to 50 new orders/amends per second. For more information on increasing your rate limits, please reach out to your Bullish relationship manager.
Should this rate be exceeded, the new order will be rejected with a ExecutionReport [8] message indicating ExecType (150) = 8 (rejected), OrderStatus (39) = 8 (rejected) and OrdRejReason (103) = 3034 (Rate limit exceeded).
Similarly, the amend message will be rejected with a OrderCancelReject [9] message indicating CxlRejResponseTo (434) = 2 (Order Cancel / Replace Request), RejectText (1328) = Rate limit error and CxlRejReason (102) = 3034 (Rate limit exceeded).
There is an additional global rate limit specific to the exchange. It is used to help limit the flow of orders into the exchange. It affects all clients fairly. When the global rate limit is breached the new order will be rejected with a ExecutionReport [8] message indicating ExecType (150) = 8 (rejected), OrderStatus (39) = 8 (rejected) and OrdRejReason (103) = 3035 (Global rate limit exceeded). Similarly the amend message will be rejected with a OrderCancelReject [9] message indicating CxlRejResponseTo (434) = 2 (Order Cancel / Replace Request), RejectText (1328) = Rate limit error and CxlRejReason (102) = 3035 (Global rate limit exceeded).
Note that order cancellation requests are not subject to rate limiting.
Cancel on Disconnect
Order entry sessions are configured to automatically cancel all open orders on accounts that have been traded, in the event of disconnection. There is currently no configuration to modify this default cancellation behavior. WebSocket API can be leveraged to get the latest order and trade snapshots.
Please note that cancel on disconnect behavior is tied to trading account id. On session disconnect, it will cancel all open orders on that trading account id. This will also cancel any open orders entered from another active session that used the same trading account id.
Example: Session 1 - Order 1 - trading account id 1234 Session 2 - Order 2 - trading account id 1234 On Session 1 disconnect it will cancel both Order 1 and Order 2 that used trading account id 1234. Session 2 will receive Unsolicited cancellation for Order 2
Timestamps
In line with FIX protocol practice, all timestamps used within this API shall be expressed in Universal Coordinated Time (UTC) to millisecond precision, with the format YYYYMMDD-HH:MM:SS.sss
Identifiers
Client specified identifier values for ClOrdID(11) should be a unique positive integer expressed as a string in the range 1 to 100,000,000,000,000,000.
Market Parameters
The Bullish platform offers trading in a variety of symbols, each of which may have its own trading parameters which may constrain both the functionality offered (e.g. order types) as well as pricing and quantity values. These parameters can be accessed via the FIX interface using the SecurityListRequest [x] message.
The following table summarizes how various trading attributes vary across the platform:
| Price and quantity precision | Both price and quantity are decimal numbers, with the precision for each set at the instrument level. |
|---|---|
| Minimum/maximum price and quantity | These may vary at the instrument level. |
| Minimum price increments (tick size) | This may vary at the instrument level, but is typically equal to the smallest price that can be expressed with the price precision. |
| Order types | Three order types are supported by the platform: limit, market, and stop limit. |
| Time In Force (order validity) | All full range of Time In Force conditions (Good Till Cancel, Fill Or Kill and Immediate Or Cancel) are available for all instruments. |
Error & Rejection Codes
Whilst every effort is made to list error and rejection codes in this document, please visit the link below for the most up-to-date list https://github.com/bullish-exchange/api-docs/wiki/Error-&-Rejection-Codes.