- 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.
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 a period on a best-effort basis. 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 |
Execution Report Replay
The Drop Copy connection supports on-demand replay of execution reports usingtwo message types. Use this to recover missed reports after a reconnect without
re-establishing the full session. ExecIDs are sequential integers assigned per member. The typical flow is to
first request the current last ExecID as a baseline, then request a replay from
LastExecIDRequest <F1>
Sent by the client to retrieve the server’s current lastExecID 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 LastExecIDRequest |
| 17 | ExecID | Int | Y | Server’s current last ExecID for this member |
EventResendRequest <F3>
Requests replay of execution reports within an ExecID range. The server streams all matching reports in order, then sendsEventResendComplete.
| Tag | Name | FIX Type | Req | Description |
|---|---|---|---|---|
| 35 | MsgType | String | Y | F3 |
| custom | BeginExecId | Int | Y | First ExecID to replay, inclusive. Must be within the server’s retention window. |
| custom | EndExecId | Int | N | Last ExecID to replay, inclusive. If omitted, defaults to the server’s current last ExecID for this member. |
Replayed execution reports are identical in format to live reports. There is no
flag or field distinguishing a replayed message from a live one.
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 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 server’sretention window, or no execution reports exist yet for this member. Send a
LastExecIDRequest to re-establish a valid baseline.END_EXEC_ID_TOO_LARGE means EndExecId refers to an event that does notyet exist. Omit
EndExecId to replay up to the current last event.