orders channel costs token. The positions channel carries your positions.
Name each channel in the private field of a subscribe.
To drop both, unsubscribe the subject PRIVATE.
Each channel covers only the subaccount of the key that signed the handshake.
Snapshot
orders.seq counts the order events of your subaccount, not of one connection.
It’s independent of every market’s seq.
A seq of 0 means no event has occurred.
A server restart resets the seq. Never compare a seq across connections.
A subscribe that names only private gets an empty snapshot.
Events
Events arrive in theorders field of a delta, as one batch with one seq.
Within a batch, an order’s fill events come before its open, cancel, or reject.
- open
- fill
- cancel
- reject
201, confirms that the order rests.qty is the resting quantity.clientId appears only when the placement sent one.
An order with an expiry also carries expiresAt, in Unix milliseconds.Positions
The snapshot lists your nonzero positions underpositions.
In a delta, positions holds a seq and a deltas list of the positions that changed.
Positions already account for washes and neutralizations.
- A wash is a self-match: your order traded against another of yours, possibly in another subaccount. You get a
fill, but your position doesn’t change and nothing appears ontrades. - A neutralization is a cash-out. We cancel your resting orders in the market with
reason: "NEUTRALIZED", and may place a hedge order that closes your position.
- A
qtyof0in a delta means the position closed. 100 × cost / qtyis the average price.- The positions
seqis independent oforders.seq.
Slow consumer
A slow consumer is a client that reads too slowly, so its queue fills up.
A seq gap or a heartbeat shows a dropped
orders or positions frame.
A seq gap shows a dropped market frame.
A write that stalls for 15 s closes the connection with code 1008 and reason SLOW_CONSUMER.
Recovery
Every 15 s, we send aheartbeat with your last seq on each private channel you subscribe to.
A quiet channel still reports its seq.
A heartbeat seq above your last seq means you lost a message.
Arrows are messages, top to bottom in time.
On a seq gap, or a heartbeatseq above your last seq, send snapshot with the channel in private.
- After a reconnect, subscribe and take the snapshot. Then diff
openagainst your state onorderId. - If you get no
201for an order, matchclientIdagainstopenandfillbefore you resend.
GET /v3/account/orders and GET /v3/account/positions return the same snapshots.
Each comes with its seq and an ETag. A matching If-None-Match gets 304.

