Skip to main content

Drop Copy

The drop copy FIX session provides read-only visibility into order and trade activity for authorized client identifiers. Clients initiate delivery by sending a TradeCaptureReportRequest; the gateway responds with a TradeCaptureReportRequestAck. Once a request is accepted, the session streams the relevant ExecutionReport messages (35=8) and continues to fan out live updates until the subscription is cleared.

Typical flow:

  1. Client sends TradeCaptureReportRequest (35=AD) identifying the client IDs to monitor.
  2. Gateway replies with TradeCaptureReportRequestAck (35=AQ) indicating whether the subscription is active or rejected.
  3. When accepted, historical executions are replayed followed by live drop copy ExecutionReport traffic for the subscribed clients.
  4. Sending another request with SubscriptionRequestType (263)=2 clears the subscription and stops delivery.

TradeCaptureReportRequest (35=AD)

Used to start or adjust a drop copy subscription. At least one party entry with PartyRole (452)=3 must be supplied, and each PartyID (448) must be a decimal client identifier that is 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 cannot 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. The acknowledgement 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”).

Clients must consider the request rejected when TradeRequestStatus (750)=2 or when TradeRequestResult (749) is any value other than 0. When the gateway acknowledges a disable request (SubscriptionRequestType=2), the result is 0 with text “Trade capture subscription cleared” and no further drop copy data is sent until a new subscription is established.

ExecutionReport (35=8)

After a subscription is accepted, the gateway replays and streams execution reports for the authorized clients. The payload mirrors the execution reports documented in the Order Entry section; key fields are summarized 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

All other fields present in the order entry execution reports may also appear and retain their original semantics. Drop copy sessions never originate ExecutionReport messages; they only mirror activity generated by the matching engine for the subscribed client identifiers.