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.
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: 0 = Snapshot (processed as snapshot + updates) 1 = Snapshot + Updates (default) 2 = Disable previous subscription (clears any active client list). |
| 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.
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: 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). |
| 750 | TradeRequestStatus | int | Y | Subscription state: 0 = Accepted 1 = Completed 2 = Rejected. |
| 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.
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. |
| 15 | Currency | string | Y | Currency for price and fee fields. |
| 17 | ExecID | string | Y | Unique identifier assigned by the exchange for this execution event. |
| 31 | LastPx | decimal128 | C | Present when ExecType indicates a fill. Price of the most recent execution. |
| 32 | LastQty | decimal128 | C | Present when ExecType indicates a fill. Quantity of the most recent execution. |
| 37 | OrderID | string | Y | Exchange-assigned order identifier. |
| 38 | OrderQty | decimal128 | Y | Original order quantity. |
| 39 | OrdStatus | char | Y | Current order status: 0 = New 1 = Partially Filled 2 = Filled 4 = Canceled 6 = Pending Cancel 8 = Rejected 9 = Suspended A = Pending New E = Pending Replace C = Expired. |
| 41 | OrigClOrdID | string | Y | Previous client order identifier for replace or cancel flows; unset for new orders. |
| 150 | ExecType | char | Y | Execution type, matching the values documented for order entry (e.g., 0 = New, 4 = Canceled, F = Trade). |
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.