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:
- Client sends
TradeCaptureReportRequest (35=AD)identifying the client IDs to monitor. - Gateway replies with
TradeCaptureReportRequestAck (35=AQ)indicating whether the subscription is active or rejected. - When accepted, historical executions are replayed followed by live
drop copy
ExecutionReporttraffic for the subscribed clients. - Sending another request with
SubscriptionRequestType (263)=2clears 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.
| TAG | NAME | TYPE | REQ | DESCRIPTION |
|---|---|---|---|---|
| 568 | TradeRequestID | string | N | Correlation identifier supplied by the client. Returned in the acknowledgement. |
| 569 | TradeRequestType | int | N | Scope of data requested. Only 0 = ALL_TRADES is supported; other values are ignored and treated as ALL_TRADES. |
| 263 | SubscriptionRequestType | char | N | Controls subscription lifecycle:
|
| 453 | NoPartyIDs | int | Y | Number of party entries. Must be greater than zero and include at least one client identifier. |
| ↳448 | PartyID | string | Y | Decimal client identifier to authorize for drop copy delivery. Multiple entries are permitted. |
| ↳452 | PartyRole | int | Y | Role of the party entry. Must be 3 = Client ID. Entries with other roles are ignored. |
| 55 | Symbol | string | N | Optional symbol filter. Currently ignored. |
| 167 | SecurityType | string | N | Optional security type filter. Currently ignored. |
| 54 | Side | char | N | Optional 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.
| TAG | NAME | TYPE | REQ | DESCRIPTION |
|---|---|---|---|---|
| 568 | TradeRequestID | string | N | Echoes the value from the request. |
| 569 | TradeRequestType | int | N | Echoes the value from the request. |
| 263 | SubscriptionRequestType | char | N | Echoes the value from the request. |
| 911 | TotNumTradeReports | int | N | Total number of trade reports in the snapshot. Not populated for the current implementation. |
| 749 | TradeRequestResult | int | Y | Outcome of the request:
|
| 750 | TradeRequestStatus | int | Y | Subscription state:
|
| 58 | Text | string | N | Human-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.
| TAG | NAME | TYPE | REQ | DESCRIPTION |
|---|---|---|---|---|
| 6 | AvgPx | decimal128 | C | Present when ExecType (150)=F (Trade). Average execution price across fills for the order. |
| 11 | ClOrdID | string | Y | Client order identifier from the originating order flow. |
| 14 | CumQty | decimal128 | Y | Total quantity filled on this order. |
| 15 | Currency | string | N | Currency for price and fee fields. |
| 17 | ExecID | string | Y | Unique identifier assigned by the exchange for this execution event. |
| 18 | ExecInst | string | C | Execution instructions for the order, when present on the order. |
| 31 | LastPx | decimal128 | C | Present when ExecType (150)=F (Trade). Price of the most recent execution. |
| 32 | LastQty | decimal128 | C | Present when ExecType (150)=F (Trade). Quantity of the most recent execution. |
| 37 | OrderID | string | Y | Exchange-assigned order identifier. |
| 38 | OrderQty | decimal128 | C | Original order quantity. Always present on accepted execution reports; on a NewOrderSingle reject, only included when the inbound request set OrderQty. |
| 39 | OrdStatus | char | Y | Current order status:
|
| 40 | OrdType | char | Y | Order type:
|
| 41 | OrigClOrdID | string | C | Previous client order identifier for replace or cancel flows; unset for new orders. |
| 44 | Price | decimal128 | C | Limit 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. |
| 54 | Side | char | Y | Side of order:
|
| 55 | Symbol | string | Y | Ticker symbol. Human-readable representation of the security. |
| 58 | Text | string | C | Human-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. |
| 59 | TimeInForce | char | Y | Specifies how long the order remains in effect:
|
| 60 | TransactTime | utc timestamp | Y | Time the execution report was generated. |
| 150 | ExecType | char | Y | Execution type, matching the values documented for order entry (e.g., 0 = New, 4 = Canceled, F = Trade). |
| 151 | LeavesQty | decimal128 | Y | Quantity open for further execution. |
| 453 | NoPartyIDs | int | Y | Number of PartyID (448) and PartyRole (452) entries. |
| ↳448 | PartyID | string | Y | Start of a new party group entryParty identifier/code. |
| ↳452 | PartyRole | int | Y | Identifies the type or role of the PartyID (448) specified:
|
| 851 | LastLiquidityInd | int | C | Present when ExecType (150)=F (Trade). Indicates whether this execution added or removed liquidity:
|
| 880 | TrdMatchID | string | C | Present when ExecType (150)=F (Trade). Exchange-assigned identifier for the match that produced this execution. |
| 136 | NoMiscFees | int | C | Present when ExecType (150)=F (Trade). Number of miscellaneous fee entries. |
| ↳137 | MiscFeeAmt | decimal128 | C | Start of a new misc fee group entry. Fee amount for this execution. |
| ↳139 | MiscFeeType | string | C | Type of miscellaneous fee:
|
| 2964 | SelfMatchPreventionInst | int | C | Specifics how this order should handle self matches. Present when self-match prevention was set on the order.
|
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.