Real-time order updates stream with resume capability.
Query Parameters:
- since=<uint64> Last applied seq for resume (optional; must be >0; absent or 0 → start from live tail)
- market=<id> Repeatable; filter by market_id
- account_id=<id> Repeatable; filter by account_id
Resume Semantics:
- Client connects with since=S (last applied seq)
- Server replays frames with seq >= S in order
- Sends backlog_end (last_seq = current max)
- Continues live streaming If S > current max → immediate live (no backlog) If S too old (retention gap) → error frame (code=resume_too_old) then close (4009)
Idempotency / Ordering:
- seq strictly monotonic per broker; no gaps (gap ⇒ operational incident)
- Client drops any frame with seq <= last_applied_seq
- Expected next seq = last_applied_seq + 1 (else trigger reconnect + resume)
Heartbeats:
- Sent when no order_update within configured interval
- Heartbeat does NOT advance seq; only order_update frames advance seq
- Heartbeat and backlog_end both repeat the last data seq
Flow Control:
- Server may enforce max_pending_frames/bytes and close with code 4008 (flow_control)
Close Codes: 1000 normal 1001 going_away 1011 internal_error 4008 flow_control 4009 resume_too_old / protocol_version 4401 unauthorized
Operation WebSockets-specific information
-
Hide headers attributes Show headers attributes object
-
Broker access key identifier
Format should match the following pattern:
^[A-Za-z0-9._~-]{1,64}$. -
RFC3339 timestamp with milliseconds
-
Keyed BLAKE2b-256 signature hex lowercase
Format should match the following pattern:
^[0-9a-f]{64}$.
-
-
Hide query attributes Show query attributes object
-
Resume from last applied seq (inclusive). Must be >0. If omitted or 0, start from live tail.
Minimum value is
1. -
Repeatable filter by market_id. Absent → all markets accessible to broker.
-
Repeatable filter by event_id. Absent → all events accessible to broker.
-
Repeatable filter by account_id. Absent → all accounts of broker.
-
Order Update Frame
Order state change notification
Payload
-
Value is
order_update. -
Minimum value is
0. -
Current state of an order.
Hide payload attributes Show payload attributes object
-
Values are
BUYorSELL. -
Values are
LIMITorMARKET. -
Values are
GTC,IOC,FOK, orDAY. -
Values are
YESorNO. -
Total filled fees accumulated on this order (in quote currency units).
-
Values are
NEW,ACTIVE,PARTIALLY_FILLED,FILLED,CANCELLED,EXPIRED, orREJECTED. -
Machine-readable reason code for the current status
Values are
USER_REQUEST,MARKET_CLOSED,MARKET_SETTLED,MARKET_VOIDED,TIF_EXPIRATION,FOK_FAILED,IOC_PARTIAL,SELF_TRADE_PREVENTION,INSUFFICIENT_FUNDS,SYSTEM_ERROR,ORDER_ALREADY_FILLED,ORDER_ALREADY_CANCELLED,ORDER_NOT_FOUND,QTY_INVALID,QTY_BELOW_EXECUTED,NO_MATCHING_LIQUIDITY,DUPLICATE_CLIENT_ORDER_ID,EXCEEDS_MAX_ORDER_QTY,EXCEEDS_MAX_ORDER_NOTIONAL, orEXCEEDS_MAX_POSITION. -
Monotonic engine sequence number of the last applied change
-
32 lowercase hex
{
"type": "order_update",
"seq": 42,
"ts_ns": 42,
"payload": {
"order_id": "string",
"client_order_id": "string",
"market_id": "string",
"broker_id": "string",
"account_id": "string",
"side": "BUY",
"type": "LIMIT",
"tif": "GTC",
"token": "YES",
"price": {
"units": 42,
"nanos": 42
},
"qty": {
"units": 42,
"nanos": 42
},
"volume": {
"units": 42,
"nanos": 42
},
"filled_qty": {
"units": 42,
"nanos": 42
},
"filled_volume": {
"units": 42,
"nanos": 42
},
"filled_fee": {
"units": 42,
"nanos": 42
},
"status": "NEW",
"status_reason": "USER_REQUEST",
"last_update_wall_time_ns": 42,
"last_update_engine_seq": 42,
"last_cmd_id_hex": "string"
}
}
{
"type": "order_reject",
"seq": 42,
"ts_ns": 42,
"payload": {
"command_type": "AMEND",
"order_id": "string",
"client_order_id": "string",
"reason": "string",
"correlation_id": "string"
}
}
{
"type": "heartbeat",
"seq": 42,
"ts_ns": 42,
"payload": {
"interval_sec": 42
}
}
{
"type": "backlog_end",
"seq": 42,
"ts_ns": 42,
"payload": {
"last_seq": 42
}
}