Downloads
FIX Specification XML
FIX 5.0 SP2 specification file for the Drop Copy API.
The FIX Drop Copy gateway is designed for direct access users: clients placing orders through one of the Starbase order entry gateways. Non-direct users (e.g. orders placed via the Web UI or WebSocket API) are not supported.
Drop Copy is configured per Member. By default a single Drop Copy session receives the full Member feed — order and trade activity for all portfolios (subaccounts) assigned to that Member, across all gateways and API keys. Every message identifies the portfolio it belongs to in Tag 1
Account (the portfolioId) — the subaccount the order or trade is booked to — so you can demultiplex a full-Member feed per subaccount.If you want the gateway to restrict a session to a single portfolio instead of filtering client-side, set PortfolioScopeOnly (Tag 25002 = Y) on logon. The session is then scoped to the portfolio the API key’s credentials belong to, and events for the Member’s other subaccounts are filtered out server-side. See Scoping a Session to One Portfolio.Connection and Authentication
FIX Version
The gateway uses FIX 5.0 SP2 (FIXT.1.1). TheBeginString field in the logon message must be set to FIXT.1.1. Connections using an older version (e.g. FIX.4.4) are rejected before parsing can identify the sender, so no reject message is returned.
Logon Fields
Scoping a Session to One Portfolio (25002)
By default a Drop Copy session delivers the full Member feed — every portfolio (subaccount) assigned to the Member. There are two ways to work with a specific portfolio:- Client-side demux (default): take the full feed and split it yourself on Tag 1
Account(theportfolioId) present on every Execution Report and Trade Capture Report. - Server-side scoping: set
PortfolioScopeOnly(Tag 25002) =Yon the logon message. The session is scoped to the single portfolio the logon credentials belong to, and the gateway suppresses events for the Member’s other subaccounts.
PortfolioScopeOnly is a FIX BOOLEAN — the value is Y or N. Omitting the tag is equivalent to N (full feed).
With
25002=Y, the open order snapshot on connect and all subsequent Execution Reports / Trade Capture Reports are limited to the credentials’ own portfolio. To receive events for every subaccount under the Member on one session, omit the tag (or send 25002=N) and demultiplex on Tag 1 Account. To run each portfolio on its own session, log on with that portfolio’s API key and 25002=Y.- Execution Reports (
35=8) cover orders and trades that occur in the order book. - Trade Capture Reports (
35=AE) cover trades that occur outside the order book.
Mass quotes (submitted via the SBE Mass Quote API) appear in the Drop Copy feed only when they result in fills. Unexecuted quotes are not included.
Trades placed through Starbase are visible on both the standard WebSocket/FIX trade feeds and on Starbase FIX Drop Copy. Open Starbase orders are different: they are only visible via Starbase FIX Drop Copy (or an SBE order-entry session) — the standard Deribit WebSocket and FIX feeds do not surface open order state for orders placed through Starbase. See Consolidated View: FIX Drop Copy for the reasoning.
Open Order Snapshot on Connect
When a new Drop Copy session is established, Starbase immediately sends Execution Reports for all currently open orders. These snapshot messages are sent automatically (no request is needed) and are marked with a snapshot indicator to distinguish them from live messages. This allows clients to synchronize their order state on connect without requesting an ER replay.Report Types
Order book trades: Execution Reports
Execution Reports are sent for all activity that goes through the order book:Reported trades: Trade Capture Reports
Trade Capture Reports are sent for trades that bypass the order book entirely:Drop Copy Message Types
Orders
Orders
- ExecutionReport <8> | 150=0/4/5: Sent when an order is new, amended, or cancelled. Intermediate speed-bump states are suppressed.
Trades
Trades
- ExecutionReport <8> | 150=F: Sent on any trade generated by an order.
- TradeCaptureReport <AE>: Sent on any trade not generated by an order (e.g. block trades).
- TradeCaptureReportRequestAck <AQ>: Marks the end of a successful trade-capture replay, or rejects the replay request.
Parties Repeating Group (453)
The new
PartyRole=3 (Client ID) entry carries the name of the ITM (clearing account) that the order actually used. When firm/ITM overrides are enabled on Order Entry, this value reflects the overridden ITM; otherwise it matches the user’s default ITM.Orders
ExecutionReport <8> | 150=0/4/5
New (150=0), Canceled (150=4), and Replaced (150=5) reports share the same subset of Execution Report tags. The gateway ignores the intermediate speed-bump state and does not emit Pending New (150=A) or Pending Replace (150=E) reports for it.
- New (
150=0): Confirms a new order in response to any request to generate a new order, such asNewOrderResponse(200)via the SBE Order Entry API. Sent for every new order, even those matched immediately. - Canceled (
150=4): Confirms an order is canceled in response to any request to cancel an order, such asCancelOrderRequest(120)via the SBE Order Entry API or to an unsolicited cancel. - Replaced (
150=5): Confirms order is replaced in response to any request to amend an order such asAmendOrderRequest(110)via the SBE Order Entry API.
Trades
ExecutionReport <8> | 150=1 or 150=2
Sent for trades on orders.TradeCaptureReportRequest <AD>
By sending a TradeCaptureReportRequest on a drop copy connection, a replay of non-order book trades (block trades, position moves) is triggered as a series of sequential TradeCaptureReport (35=AE) messages. The replay starts from the ExecID specified in the request. Trades are available for 24 hours. For a full history of all trades, the Websocket APIs should be utilized.
TradeCaptureReportRequestAck <AQ>
TradeCaptureReportRequestAck (35=AQ) is sent at the end of a successful trade-capture replay, or if the replay request is rejected. It is the trade-capture equivalent of EventResendComplete (F4) / EventResendReject (F5) for fill Execution Report replay (F3).
TradeCaptureReport <AE>
Sent for each non-order book trade (block trade, position move), both proactively as trades occur and in response to aTradeCaptureReportRequest.
Fill Execution Report Replay
Detect gaps in the Drop Copy feed from the standard FIXMsgSeqNum (34) sequence numbers on incoming messages. After a gap or reconnect, recover state as follows:
- Open orders — resynchronize from the open order snapshot sent automatically on connect.
- Fills — request a replay with
EventResendRequest(F3), below. - Block trades and position moves — request a replay with
TradeCaptureReportRequest(AD).
150=1 or 150=2) using two message types. Non-fill Execution Reports (150=0/4/5) are not replayed; use the open order snapshot to recover order state after a reconnect. Fill reports are retained for 24 hours.
ExecIDs are sequential integers assigned per member and track fill events only. The typical flow is to first request the current last fill ExecID as a baseline, then request a replay starting from that point.
LastFillExecIDRequest <F1>
Sent by the client to retrieve the server’s current last fillExecID for this member.
Response: LastFillExecID <F2>
EventResendRequest <F3>
Requests replay of fill Execution Reports (150=1 or 150=2) within an ExecID range. The server streams all matching reports in order, then sends EventResendComplete. Only fill events within the 24-hour retention window are available.
Replayed fill Execution Reports are identical in format to live fill reports. There is no flag or field distinguishing a replayed message from a live one.
Reject: EventResendReject <F5>
BEGIN_EXEC_ID_TOO_SMALL means BeginExecId is older than the 24-hour retention window, or no fill Execution Reports exist yet for this member. Send a LastFillExecIDRequest to re-establish a valid baseline.END_EXEC_ID_TOO_LARGE means EndExecId refers to an event that does not yet exist. Omit EndExecId to replay up to the current last fill event.Reconciliation Across APIs
Use the following identifiers to reconcile Drop Copy against SBE sessions and the standard WebSocket/REST APIs.Mapping orders
The exchange-assigned order ID is the same value on every feed:
To map an order seen on the standard APIs to its Drop Copy records, match
starbase_order_id to Tag 37.
Mapping portfolios (subaccounts)
The portfolio each event books to is carried in Tag 1Account (the portfolioId) on every Execution Report and Trade Capture Report. Use it to route Drop Copy events to the right subaccount, or match it against portfolioId on the standard APIs. When a session is opened with PortfolioScopeOnly (Tag 25002=Y), Tag 1 is constant and equal to the credentials’ own portfolio.
Deduplicating fills: ExecID vs TrdMatchID
ExecID (Tag 17) identifies an event, and one event can contain multiple fills. TrdMatchID (Tag 880) identifies a single fill and is globally unique. When deduplicating fills across feeds, use the tuple (starbase_match_id, starbase_order_id) — starbase_match_id on the standard APIs corresponds to TrdMatchID (Tag 880) on Drop Copy.
End-to-end client order IDs
ClOrdID (Tag 11) is FIX-only — it does not propagate to the standard WebSocket API. To track a client order ID end-to-end on WebSocket notifications, send the value in the deribitLabel field and read it back from the order/trade payloads there. Within SBE itself, use the numeric clientOrderId and the per-connection correlationId for request/response matching.