Skip to main content

Drop copy

Drop copy is a read-only stream of order and trade activity for the clients your session is authorized to see. Delivery starts when you subscribe and continues until you clear the subscription.

Subscription flow​

  1. Send TradeCaptureReportRequest (35=AD) naming the client IDs to monitor.
  2. The exchange replies with TradeCaptureReportRequestAck (35=AQ), saying whether the subscription is active or rejected.
  3. When accepted, the exchange replays historical executions, then streams live drop copy ExecutionReport (35=8) traffic for the subscribed clients.
  4. To stop delivery, send another request with SubscriptionRequestType (263)=2. This clears the subscription.

The drop copy session also accepts OrderMassStatusRequest (35=BG).

TradeCaptureReportRequest (35=AD)​

Starts or adjusts a drop copy subscription. Supply at least one party entry with PartyRole (452)=3. Each PartyID (448) must be a decimal client identifier authorized for the FIX session.

TAGNAMETYPEREQDESCRIPTION
568TradeRequestIDstringNCorrelation identifier supplied by the client. Returned in the acknowledgement.
569TradeRequestTypeintNScope of data requested. Only 0 = ALL_TRADES is supported; other values are ignored and treated as ALL_TRADES.
263SubscriptionRequestTypecharNControls subscription lifecycle:
  • 0: Snapshot (processed as snapshot + updates)
  • 1: Snapshot + Updates (default)
  • 2: Disable previous subscription (clears any active client list)
453NoPartyIDsintYNumber of party entries. Must be greater than zero and include at least one client identifier.
↳448PartyIDstringYDecimal client identifier to authorize for drop copy delivery. Multiple entries are permitted.
↳452PartyRoleintYRole of the party entry. Must be 3 = Client ID. Entries with other roles are ignored.
55SymbolstringNOptional symbol filter. Currently ignored.
167SecurityTypestringNOptional security type filter. Currently ignored.
54SidecharNOptional side filter. Currently ignored.

If the request can't be parsed or contains unauthorized client identifiers, the session rejects the subscription and clears the in-memory client list.

TradeCaptureReportRequestAck (35=AQ)​

Returned for every trade capture request, indicating whether the subscription is active. It echoes identifiers from the request when they are present.

TAGNAMETYPEREQDESCRIPTION
568TradeRequestIDstringNEchoes the value from the request.
569TradeRequestTypeintNEchoes the value from the request.
263SubscriptionRequestTypecharNEchoes the value from the request.
911TotNumTradeReportsintNTotal number of trade reports in the snapshot. Not populated for the current implementation.
749TradeRequestResultintYOutcome of the request:
  • 0: Successful
  • 3: Invalid parties (missing or malformed client identifiers)
  • 8: TradeRequestType not supported
  • 9: Unauthorized for trade capture report request
  • 99: Other (unexpected error)
750TradeRequestStatusintYSubscription state:
  • 0: Accepted
  • 1: Completed
  • 2: Rejected
58TextstringNHuman-readable reason (e.g., “Trade capture subscription accepted”, “No authorized client party provided”, or “Unauthorized trade capture client identifier”).

Treat the request as rejected when TradeRequestStatus (750)=2 or when TradeRequestResult (749) is any value other than 0.

When the exchange acknowledges a disable request (SubscriptionRequestType=2), the result is 0 with text “Trade capture subscription cleared”. No further drop copy data is sent until you establish a new subscription.

ExecutionReport (35=8)​

After it accepts a subscription, the exchange replays and streams execution reports for the authorized clients. The payload mirrors the execution reports on Order entry; key fields are below.

TAGNAMETYPEREQDESCRIPTION
6AvgPxdecimal128CPresent when ExecType (150)=F (Trade). Average execution price across fills for the order.
11ClOrdIDstringYClient order identifier from the originating order flow.
14CumQtydecimal128YTotal quantity filled on this order.
15CurrencystringNCurrency for price and fee fields.
17ExecIDstringYUnique identifier assigned by the exchange for this execution event.
18ExecInststringCExecution instructions for the order, when present on the order.
31LastPxdecimal128CPresent when ExecType (150)=F (Trade). Price of the most recent execution.
32LastQtydecimal128CPresent when ExecType (150)=F (Trade). Quantity of the most recent execution.
37OrderIDstringYExchange-assigned order identifier.
38OrderQtydecimal128COriginal order quantity. Always present on accepted execution reports; on a NewOrderSingle reject, only included when the inbound request set OrderQty.
39OrdStatuscharYCurrent order status:
  • 0: New
  • 1: Partially Filled
  • 2: Filled
  • 4: Canceled
  • 5: Replaced
  • 6: Pending Cancel
  • 8: Rejected
  • 9: Suspended
  • A: Pending New
  • E: Pending Replace
  • C: Expired
40OrdTypecharYOrder type:
  • 1: Market
  • 2: Limit
41OrigClOrdIDstringCPrevious client order identifier for replace or cancel flows; unset for new orders.
44Pricedecimal128CLimit price for the order. Market orders report the internally stored price. Always present on accepted execution reports; on a NewOrderSingle reject, only included when the inbound request set Price.
54SidecharYSide of order:
  • 1: Buy
  • 2: Sell
55SymbolstringYTicker symbol. Human-readable representation of the security.
58TextstringCHuman-readable reason text. Populated when ExecType (150)=8 (Rejected) with the rejection reason, and when ExecType (150)=4 (Canceled) if the matching engine reports a cancel reason. Not sent on other execution types.
59TimeInForcecharYSpecifies how long the order remains in effect:
  • 1: Good Till Cancel (GTC)
  • 3: Immediate Or Cancel (IOC)
60TransactTimeutc timestampYTime the execution report was generated.
150ExecTypecharYExecution type, matching the values documented for order entry (e.g., 0 = New, 4 = Canceled, F = Trade).
151LeavesQtydecimal128YQuantity open for further execution.
453NoPartyIDsintYNumber of PartyID (448) and PartyRole (452) entries.
↳448PartyIDstringYStart of a new party group entryParty identifier/code.
↳452PartyRoleintYIdentifies the type or role of the PartyID (448) specified:
  • 3: Client ID
851LastLiquidityIndintCPresent when ExecType (150)=F (Trade). Indicates whether this execution added or removed liquidity:
  • 1: Added Liquidity
  • 2: Removed Liquidity
  • 4: Unknown Liquidity
880TrdMatchIDstringCPresent when ExecType (150)=F (Trade). Exchange-assigned identifier for the match that produced this execution.
136NoMiscFeesintCPresent when ExecType (150)=F (Trade). Number of miscellaneous fee entries.
↳137MiscFeeAmtdecimal128CStart of a new misc fee group entry. Fee amount for this execution.
↳139MiscFeeTypestringCType of miscellaneous fee:
  • 4: Exchange Fees
2964SelfMatchPreventionInstintCSpecifics how this order should handle self matches. Present when self-match prevention was set on the order.
  • 1: Cancel Aggressor
  • 3: Cancel Both

Any other field from the order-entry execution reports may also appear, with the same meaning. Drop copy sessions never originate ExecutionReport messages; they only mirror activity the matching engine generates for the subscribed client identifiers.

Next: Market data, the instrument list and order book feed.