Full publication and partial event
HTTP position reads return the canonical Position in asuccess/message/data envelope. Position list pages contain a positions array and explicit pagination/incompleteness. The WebSocket positions channel can publish a full Position, an array of Positions, a page object or a partial event; decode the frame type and payload shape first.
Do not overwrite a full cached position with a partial event. Preserve exact link, instrument, revision and current generation context. An absent field in a partial event is not an instruction to clear a value.
Position identity and numeric projections
Active position pages include pending/open projections; inactive pages include canceled/closed projections. Projection status and durable fill accounting must be interpreted together. Delayed fill evidence or recovery can change what is currently known; an old closed snapshot is not a permanent guarantee against later reconciliation.
Attached order arrays
open_orders: opening rows for this lifecycle.close_orders: terminal closing rows where present.stop_loss_orders: SL and SLx-related protection rows/configuration.take_profit_orders: TP rows/configuration.
row_id, created_at_ms, slot_id and order_id carry row/physical-order identity. created_at_ms is milliseconds; it is an explicit exception to second-based timestamps.
A moved row is not a generic successful cancel. A stable slot can have a different physical successor order. Use the current exact
order_id for an amendment and never infer that a previous generation is safe to cancel solely from a slot name.
Order rows retain protection metadata, including relative SL/TP steps, TP weights, SLx activation state, trigger, trailing peak and enabled-mode fields. Those fields describe owner-managed protection; they do not authorize a client to skip the modification lifecycle.
Exposure and economic amounts
Canonical size is in base units for spot/linear and quote-face units for inverse topology. Do not apply a spot-style multiplication to inverse contracts or treat contract counts, input quote amounts and canonical exposure as interchangeable. The adapter owns venue conversion.
Use published canonical aggregates for position accounting rather than summing display rows across replacement generations. The
executed tuples and published sums are related views; adding both double-counts execution. Likewise a receipt’s allocated position UUID is not itself proof of nonzero exposure.
Terminal progress
Optionalterminal_request_kind distinguishes close (1) and cancel (2) intent. The publication can include terminal phase and queue index/size. Queued intent is not exchange execution already started. A receipt can have its correlated terminal sequence, while the position publication remains the source for current orders and exposure.
A robust exit observer checks the current position lifecycle, net exposure and remaining owned order work. It does not convert 202, handed_off, an empty group capture or an incomplete page into a flatness assertion.
P&L history completeness
Position history includescomplete, terminal, reset_required, sample boundaries and points. Each point has its timestamp, optional decimal value, completeness, resolution and gap_before marker. A null or incomplete point is unavailable information, not zero P&L. On reset, discard the invalid baseline and rebuild the requested history.
The OpenAPI schemas define every publication field and its nullability. The stream protocol defines frame variants and snapshot/revision reconciliation. This guide supplies semantics; it does not replace those exact types.