The FIX Drop Copy API provides a complete record of orders and trades. It uses two distinct message types depending on the trade type:Documentation Index
Fetch the complete documentation index at: https://docs.deribit.com/llms.txt
Use this file to discover all available pages before exploring further.
- 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.
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:| Source | Description |
|---|---|
| Starbase Order Entry | Orders placed via the Starbase Direct Access APIs. |
| Other Order Entry | Orders placed via other methods: Websocket API, Web UI, mobile app, etc. |
| Liquidations | Liquidation and rebalancing orders generated by Deribit’s risk system. |
Reported trades: Trade Capture Reports
Trade Capture Reports are sent for trades that bypass the order book entirely:| Source | Description |
|---|---|
| Block Trades | Privately negotiated trades reported to the exchange. Includes Block RFQ. |
| Position Moves | Transfer of an open position between two accounts under the same main account. |
Drop Copy Message Types
Orders
Orders
- ExecutionReport <8> | 150=0/4/5/A/E: Sent on any new, amended, cancelled, or speed-bumped order.
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).
Parties Repeating Group (453)
| Tag | Name | FIX Type | Req | Description |
|---|---|---|---|---|
| 453 | NoPartyIDs | NumInGroup | Y | Number of PartyIDs in repeating group: 453=5 for all order-status, trade, and drop copy messages. |
| → 448 | PartyID | String(20) | Y | Party identifier/code |
| → 447 | PartyIDSource | Char | Y | 447 = D (Proprietary) |
| → 452 | PartyRole | Int | Y | 1 - Subfirm Code 4 - Clearing Firm Code 11 - Order Originating Trader 55 - Session ID 3 - Client ID (ITM name used for the order) |
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/A/E
New (150=0), Canceled (150=4), Replaced (150=5), Pending New (150=A), and Pending Replace (150=E) reports share the same subset of Execution Report tags.
- 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. - Pending New (
150=A): Sent when a new order is speed bumped and queued pending entry to the book. Followed by a New (150=0) report once the speed bump period expires and the order is placed. - Pending Replace (
150=E): Sent when an amended order is speed bumped and queued pending re-entry to the book. Followed by a Replaced (150=5) report once the speed bump period expires and the order is placed.
| Tag | Name | FIX Type | Req | Description |
|---|---|---|---|---|
| 1 | Account | String(16) | Y | Unique ID representing the account. |
| 453 | NoPartyIDs | NumInGroup | Y | Represents the Parties repeating group. See Parties Repeating Group (453). |
| 11 | ClOrdID | String(36) | Y | Unique client ID representing the order. Must not exceed 36 ascii characters. Client system must maintain uniqueness of this value for the life of the order. |
| 14 | CumQty | Int(9) | Y | Cumulated traded quantity throughout lifespan of an order. |
| 17 | ExecID | String(40) | Y | Unique exchange ID representing the trade execution. |
| 37 | OrderID | String(17) | Y | Unique exchange ID representing the order. |
| 38 | OrderQty | Int(9) | Y | Order quantity. |
| 39 | OrdStatus | Char(1) | Y | Represents order status.
|
| 40 | OrdType | Char(1) | Y | Order type. Market orders are not accepted during opening auction. |
| 41 | OrigClOrdID | String(36) | N | Last accepted ClOrdID in the order chain. |
| 44 | Price | Price(20) | C | Price per single contract unit. Required for limit or stop-limit orders. |
| 54 | Side | Char(1) | Y | Side of order. |
| 55 | Symbol | String(24) | Y | Represents details of an instrument. Future Example: EUM20 |
| 167 | SecurityType | String(6) | N | Represents security type. |
| 59 | TimeInForce | Char(1) | N | Represents how long the order remains in effect. Default is 59=0 (TimeInForce=“Day”). For 59=3 (TimeInForce=“FAK”), MinQty can also be specified. |
| 60 | TransactTime | UTCTimestamp(21) | Y | Time when the order message was submitted. UTC format YYYYMMDD-HH:MM:SS.ssssss in microseconds. Example: 20091216-19:21:41.109000 |
| 99 | StopPx | Price(20) | C | Stop price of the order. Required for stop and stop-limit orders. |
| 18 | ExecInst | Char | N | The execution instruction flags for the order. Supported values: 6 = Add Liquidity Only (Post Only) |
| 110 | MinQty | Int(9) | N | Minimum quantity of an order to be executed. Used only when 59=3 (TimeInForce=“Fill and Kill”). |
| 150 | ExecType | Char(1) | Y | Represents execution type.
|
| 151 | LeavesQty | Int(9) | Y | Number of contracts remaining for execution. |
| 378 | ExecRestatementReason | Int(3) | N | Reason why the order was canceled by the system (e.g., cancel on disconnect, self-match prevention, etc.). |
| 432 | ExpireDate | LocalMktDate(8) | C | Order expiration date, or the last day the order could trade. |
| 528 | OrderCapacity | Int(1) | C | Pass through field from/when present in NewOrder. Identifies origin of order (i.e., capacity of firm placing the order). |
| 582 | CustOrderCapacity | Char(1) | C | Pass through field from/when present in NewOrder. Customer Type Indicator as defined by NFA. |
| 1028 | ManualOrderIndicator | Boolean(1) | Y | Represents whether or not the order was generated manually (Y) or automatically (N) with trading software. |
| 1031 | CustOrderHandlingInst | String(1) | Y | Source of the original order. |
| 3040 | StopLimitPx | Price(20) | C | Limit order price when stop loss is triggered |
| 5979 | RequestTime | Int(20) | N | Time when the request was received by the exchange. Integer value representing UTC time in microseconds since epoch. |
| 7928 | SelfMatchPreventionID | Int(8) | C | Unique ID (per executing firm) representing two orders that should not match. Required when market participants enable SelfMatch Prevention. Max length is 8 digits. |
| 8000 | SelfMatchPreventionStrategy | Char(1) | N | Represents type of cancel instruction when SelfMatch Prevention is triggered. Client systems must also include SelfMatchPreventionID (7928) on the originating message. |
Trades
ExecutionReport <8> | 150=F
Sent for trades on orders.| Tag | Name | FIX Type | Req | Description |
|---|---|---|---|---|
| 1 | Account | String(16) | Y | Unique ID representing the account. |
| 453 | NoPartyIDs | NumInGroup | Y | Represents the Parties repeating group. See Parties Repeating Group (453). |
| 11 | ClOrdID | String(36) | Y | Unique client ID representing the order. Must not exceed 36 ascii characters. Client system must maintain uniqueness of this value for the life of the order. |
| 14 | CumQty | Int(9) | Y | Cumulated traded quantity throughout lifespan of an order. |
| 17 | ExecID | String(40) | Y | Unique exchange ID representing the trade execution. |
| 880 | TrdMatchID | String (20) | Y | Unique exchange ID representing a match event that results in multiple executions or trades. |
| 31 | LastPx | Price(20) | Y | Price at which order was filled. |
| 32 | LastQty | Int(9) | Y | Quantity filled. |
| 37 | OrderID | String(17) | Y | Unique exchange ID representing the order. |
| 38 | OrderQty | Int(9) | C | Order quantity. |
| 39 | OrdStatus | Char(1) | Y | Represents order status, “Partial Fill” (1) or “Complete Fill” (2). |
| 40 | OrdType | Char(1) | Y | Order type such as market, limit, etc. |
| 41 | OrigClOrdID | String(36) | N | Last accepted ClOrdID in the order chain. |
| 44 | Price | Price(20) | C | Price per single contract unit. For Execution Report messages sent in response to Market or Stop orders (with protection), Price is the Protection Price Limit (best available price +/- protection points). If the order is not completely filled, the remaining open quantity rests on the order book at the Protection Price Limit. Note: For spread trade Execution Reports, Price (44) is sent in the Execution Report – Fill Notice (35= 8, 39=1 or 2) for the spread only and not the legs of the spread. |
| 54 | Side | Char(1) | Y | Side of order. |
| 55 | Symbol | String(24) | Y | Represents details of an instrument. Future Example: EUM20. |
| 167 | SecurityType | String(6) | N | Represents security type. |
| 59 | TimeInForce | Char(1) | N | Represents how long the order remains in effect. Default is 59=0 (TimeInForce=“Day”). For 59=3 (TimeInForce=“FAK”), MinQty can also be specified. |
| 60 | TransactTime | UTCTimestamp(21) | Y | Time when the order message was submitted. UTC format YYYYMMDD-HH:MM:SS.ssssss in microseconds. Example: 20091216-19:21:41.109000 |
| 18 | ExecInst | Char | N | The execution instruction flags for the order. Supported values: 6 = Add Liquidity Only (Post Only) |
| 75 | TradeDate | LocalMktDate(8) | Y | Indicates date of trade reference in this message in YYYYMMDD format. |
| 150 | ExecType | Char(1) | Y | Represents execution type, “Trade” (150=F). |
| 151 | LeavesQty | Int(9) | C | Number of contracts remaining for execution after this fill. |
| 393 | TotalNumSecurities | Int(3) | N | Number of leg fill acknowledgment messages sent with spread summary. Sent for spread fill messages only. |
| 442 | MultiLegReportingType | Int(1) | N | Represents acknowledgment of Outright, Leg of Spread, and Spread. |
| 527 | SecondaryExecID | String(40) | C | Unique exchange ID representing link between spread summary fill notice with leg fill notice and trade cancel messages. |
| 528 | OrderCapacity | Int(1) | Y | Represents the type of business conducted:
|
| 1028 | ManualOrderIndicator | Boolean(1) | Y | Represents whether or not the order was generated manually (Y) or automatically (N) with trading software. |
| 1031 | CustOrderHandlingInst | String(1) | Y | Source of the original order. |
| 1057 | AggressorIndicator | Char(1) | C | Represents the order as incoming or resting for the match event. |
| 5979 | RequestTime | Int(20) | N | Time when the request was received by the exchange. Integer value representing UTC time in microseconds since epoch. |
| 828 | TrdType | Int(1) | N | Type of trade.
|
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.
| Tag | Name | FIX Type | Req | Description |
|---|---|---|---|---|
| 568 | TradeRequestID | String | Y | |
| 569 | TradeRequestType | Int | Y | Should always be set to 1 |
| 17 | ExecID | String(40) | N | All trades with ExecIDs larger than or equal to this value will be resent by Starbase |
TradeCaptureReport <AE>
Sent for each non-order book trade (block trade, position move), both proactively as trades occur and in response to aTradeCaptureReportRequest.
| Tag | Name | FIX Type | Req | Description |
|---|---|---|---|---|
| 571 | TradeReportID | String | Y | Unique identifier for this trade report |
| 568 | TradeRequestID | String | N | Echoed from the originating TradeCaptureReportRequest; absent if unsolicited |
| 150 | ExecType | Char(1) | Y | Always F (full and partial fills) |
| 17 | ExecID | String(40) | Y | Unique exchange identifier for this execution |
| 570 | PreviouslyReported | Boolean(1) | Y | Whether this trade was previously reported to the counterparty. Y = previously reported, N = first report |
| 1003 | TradeID | String | Y | Unique identifier for the trade |
| 828 | TradeType | Int(1) | Y | Type of trade. 0 = CLOB trade, 1 = Block trade, 2 = Liquidation trade, 3 = Position move |
| 880 | TrdMatchID | String(20) | Y | Unique identifier for the match event |
| 1040 | BlockID | String | N | Block trade identifier; present for block trades only |
| 32 | TradeQuantity | Int(9) | Y | Quantity traded |
| 31 | LastPx | Price(20) | Y | Price at which the trade occurred |
| 60 | TransactTime | UTCTimestamp(21) | Y | Time of trade in UTC; YYYYMMDD-HH:MM:SS.ssssss |
| 442 | MultiLegReportingType | Int(1) | N | Present for trades on multi-leg instruments. 1 = Single-leg trade, 2 = Leg of a multi-leg trade, 3 = Multi-leg trade |
| 55 | Symbol | String(24) | Y | Instrument name |
| 54 | Side | Char(1) | Y | Side of the trade. 1 = Buy, 2 = Sell |
| 75 | TradeDate | LocalMktDate(8) | Y | Trade date in YYYYMMDD format |
Fill Execution Report Replay
The Drop Copy connection supports on-demand replay of fill Execution Reports (150=F) using two message types. Non-fill Execution Reports (150=0/4/5/A/E) 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.
| Tag | Name | FIX Type | Req | Description |
|---|---|---|---|---|
| 35 | MsgType | String | Y | F1 |
| 790 | TestReqID | String | N | Ignored — required only to satisfy FIX schema validation |
| Tag | Name | FIX Type | Req | Description |
|---|---|---|---|---|
| 35 | MsgType | String | Y | F2 |
| 45 | RefSeqNum | Int | Y | MsgSeqNum of the originating LastFillExecIDRequest |
| 17 | ExecID | Int | Y | Server’s current last fill ExecID for this member |
EventResendRequest <F3>
Requests replay of fill Execution Reports (150=F) 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.
| Tag | Name | FIX Type | Req | Description |
|---|---|---|---|---|
| 35 | MsgType | String | Y | F3 |
| custom | BeginExecId | Int | Y | First fill ExecID to replay, inclusive. Must be within the 24-hour retention window. |
| custom | EndExecId | Int | N | Last fill ExecID to replay, inclusive. If omitted, defaults to the current last fill ExecID for this member. |
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.
| Tag | Name | FIX Type | Req | Description |
|---|---|---|---|---|
| 35 | MsgType | String | Y | F4 |
| 45 | RefSeqNum | Int | Y | MsgSeqNum of the originating EventResendRequest |
| custom | ResentEventCount | Int | Y | Total number of fill Execution Reports replayed |
| Tag | Name | FIX Type | Req | Description |
|---|---|---|---|---|
| 35 | MsgType | String | Y | F5 |
| 45 | RefSeqNum | Int | Y | MsgSeqNum of the originating EventResendRequest |
| 22006 | EventResendRejectReason | Int | Y | 1 = BEGIN_EXEC_ID_TOO_SMALL, 2 = END_EXEC_ID_TOO_LARGE |
| 58 | Text | String | N | Human-readable description |
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.