Skip to main content
The FIX Drop Copy API provides a complete record of orders and trades. It uses two distinct message types depending on the trade type:
  • Execution Reports (35=8) — for orders and trades that occur in the order book.
  • Trade Capture Reports (35=AE) — for 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:
SourceDescription
Starbase Order EntryOrders placed via the Starbase Direct Access APIs.
Other Order EntryOrders placed via other methods: Websocket API, Web UI, mobile app, etc.
LiquidationsLiquidation 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:
SourceDescription
Block TradesPrivately negotiated trades reported to the exchange. Includes Block RFQ.
Position MovesTransfer of an open position between two accounts under the same main account.

Drop Copy Message Types

Parties Repeating Group (453)

TagNameFIX TypeReqDescription
453NoPartyIDsNumInGroupYNumber of PartyIDs in repeating group: 453=5 for all order-status, trade, and drop copy messages.
→ 448PartyIDString(20)YParty identifier/code
→ 447PartyIDSourceCharY447 = D (Proprietary)
→ 452PartyRoleIntY1 - 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

New (150=0), Canceled (150=4), and Replaced (150=5) 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 as NewOrderResponse(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 as CancelOrderRequest(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 as AmendOrderRequest(110)via the SBE OrderEntry API.
TagNameFIX TypeReqDescription
1AccountString(16)YUnique ID representing the account.
453NoPartyIDsNumInGroupYRepresents the Parties repeating group. See Parties Repeating Group (453).
11ClOrdIDString(36)YUnique 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.
14CumQtyInt(9)YCumulated traded quantity throughout lifespan of an order.
17ExecIDString(40)YUnique exchange ID representing the trade execution.
37OrderIDString(17)YUnique exchange ID representing the order.
38OrderQtyInt(9)YOrder quantity.
39OrdStatusChar(1)YRepresents order status, “New”, “Canceled”, or “Replaced”.
  • 0 = New
  • 4 = Canceled
  • 5 = Replaced
40OrdTypeChar(1)YOrder type. Market orders are not accepted during opening auction.
41OrigClOrdIDString(36)NLast accepted ClOrdID in the order chain.
44PricePrice(20)CPrice per single contract unit. Required for limit or stop-limit orders.
54SideChar(1)YSide of order.
55SymbolString(24)YRepresents details of an instrument. Future Example: EUM20
167SecurityTypeString(6)NRepresents security type.
59TimeInForceChar(1)NRepresents how long the order remains in effect. Default is 59=0 (TimeInForce=“Day”). For 59=3 (TimeInForce=“FAK”), MinQty can also be specified.
60TransactTimeUTCTimestamp(21)YTime when the order message was submitted. UTC format YYYYMMDD-HH:MM:SS.ssssss in microseconds.
Example: 20091216-19:21:41.109000
99StopPxPrice(20)CStop price of the order. Required for stop and stop-limit orders.
18ExecInstCharNThe execution instruction flags for the order.

Supported values:
6 = Add Liquidity Only (Post Only)
110MinQtyInt(9)NMinimum quantity of an order to be executed. Used only when 59=3 (TimeInForce=“Fill and Kill”).
150ExecTypeChar(1)YRepresents execution type, New (150=0), Canceled (150=4), or Replaced (150=5).
151LeavesQtyInt(9)YNumber of contracts remaining for execution.
378ExecRestatementReasonInt(3)NReason why the order was canceled by the system (e.g., cancel on disconnect, self-match prevention, etc.).
432ExpireDateLocalMktDate(8)COrder expiration date, or the last day the order could trade.
528OrderCapacityInt(1)CPass through field from/when present in NewOrder. Identifies origin of order (i.e., capacity of firm placing the order).
582CustOrderCapacityChar(1)CPass through field from/when present in NewOrder. Customer Type Indicator as defined by NFA.
1028ManualOrderIndicatorBoolean(1)YRepresents whether or not the order was generated manually (Y) or automatically (N) with trading software.
1031CustOrderHandlingInstString(1)YSource of the original order.
3040StopLimitPxPrice(20)CLimit order price when stop loss is triggered
5979RequestTimeInt(20)NTime when the request was received by the exchange. Integer value representing UTC time in microseconds since epoch.
7928SelfMatchPreventionIDInt(8)CUnique ID (per executing firm) representing two orders that should not match. Required when market participants enable SelfMatch Prevention. Max length is 8 digits.
8000SelfMatchPreventionStrategyChar(1)NRepresents 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.
TagNameFIX TypeReqDescription
1AccountString(16)YUnique ID representing the account.
453NoPartyIDsNumInGroupYRepresents the Parties repeating group. See Parties Repeating Group (453).
11ClOrdIDString(36)YUnique 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.
14CumQtyInt(9)YCumulated traded quantity throughout lifespan of an order.
17ExecIDString(40)YUnique exchange ID representing the trade execution.
880TrdMatchIDString (20)YUnique exchange ID representing a match event that results in multiple executions or trades.
31LastPxPrice(20)YPrice at which order was filled.
32LastQtyInt(9)YQuantity filled.
37OrderIDString(17)YUnique exchange ID representing the order.
38OrderQtyInt(9)COrder quantity.
39OrdStatusChar(1)YRepresents order status, “Partial Fill” (1) or “Complete Fill” (2).
40OrdTypeChar(1)YOrder type such as market, limit, etc.
41OrigClOrdIDString(36)NLast accepted ClOrdID in the order chain.
44PricePrice(20)CPrice 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.
54SideChar(1)YSide of order.
55SymbolString(24)YRepresents details of an instrument. Future Example: EUM20.
167SecurityTypeString(6)NRepresents security type.
59TimeInForceChar(1)NRepresents how long the order remains in effect. Default is 59=0 (TimeInForce=“Day”). For 59=3 (TimeInForce=“FAK”), MinQty can also be specified.
60TransactTimeUTCTimestamp(21)YTime when the order message was submitted. UTC format YYYYMMDD-HH:MM:SS.ssssss in microseconds.
Example: 20091216-19:21:41.109000
18ExecInstCharNThe execution instruction flags for the order.

Supported values:
6 = Add Liquidity Only (Post Only)
75TradeDateLocalMktDate(8)YIndicates date of trade reference in this message in YYYYMMDD format.
150ExecTypeChar(1)YRepresents execution type, “Trade” (150=F).
151LeavesQtyInt(9)CNumber of contracts remaining for execution after this fill.
393TotalNumSecuritiesInt(3)NNumber of leg fill acknowledgment messages sent with spread summary. Sent for spread fill messages only.
442MultiLegReportingTypeInt(1)NRepresents acknowledgment of Outright, Leg of Spread, and Spread.
527SecondaryExecIDString(40)CUnique exchange ID representing link between spread summary fill notice with leg fill notice and trade cancel messages.
528OrderCapacityInt(1)YRepresents the type of business conducted:
  • 528=0 = Customer/Agency
  • 528=1 = Principal
1028ManualOrderIndicatorBoolean(1)YRepresents whether or not the order was generated manually (Y) or automatically (N) with trading software.
1031CustOrderHandlingInstString(1)YSource of the original order.
1057AggressorIndicatorChar(1)CRepresents the order as incoming or resting for the match event.
5979RequestTimeInt(20)NTime when the request was received by the exchange. Integer value representing UTC time in microseconds since epoch.
828TrdTypeInt(1)NType of trade.
  • 0 = CLOB trade
  • 1 = Block trade
  • 2 = Liquidation 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.
TagNameFIX TypeReqDescription
568TradeRequestIDStringY
569TradeRequestTypeIntYShould always be set to 1
17ExecIDString(40)NAll 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 a TradeCaptureReportRequest.
TagNameFIX TypeReqDescription
571TradeReportIDStringYUnique identifier for this trade report
568TradeRequestIDStringNEchoed from the originating TradeCaptureReportRequest; absent if unsolicited
150ExecTypeChar(1)YAlways F (full and partial fills)
17ExecIDString(40)YUnique exchange identifier for this execution
570PreviouslyReportedBoolean(1)YWhether this trade was previously reported to the counterparty. Y = previously reported, N = first report
1003TradeIDStringYUnique identifier for the trade
828TradeTypeInt(1)YType of trade. 0 = CLOB trade, 1 = Block trade, 2 = Liquidation trade, 3 = Position move
880TrdMatchIDString(20)YUnique identifier for the match event
1040BlockIDStringNBlock trade identifier; present for block trades only
32TradeQuantityInt(9)YQuantity traded
31LastPxPrice(20)YPrice at which the trade occurred
60TransactTimeUTCTimestamp(21)YTime of trade in UTC; YYYYMMDD-HH:MM:SS.ssssss
442MultiLegReportingTypeInt(1)NPresent for trades on multi-leg instruments. 1 = Single-leg trade, 2 = Leg of a multi-leg trade, 3 = Multi-leg trade
55SymbolString(24)YInstrument name
54SideChar(1)YSide of the trade. 1 = Buy, 2 = Sell
75TradeDateLocalMktDate(8)YTrade date in YYYYMMDD format