Skip to main content
Every order produced by POST /v1/orders emits an append-only sequence of status events. You can read the current status from GET /v1/orders/{order_id}, the full history from GET /v1/orders/{order_id}/states, or subscribe live via the Realtime WebSocket (orders.state events).

State diagram

Status reference

Terminal states

Once an order reaches FILLED, CANCELLED, REJECTED, or EXPIRED, it cannot be modified or cancelled again. The state record and any fills remain queryable indefinitely.

Race conditions

  • Cancel during fill: A cancel issued while the venue is filling may resolve as FILLED rather than CANCELLED. Always trust the terminal state, not your cancel request.
  • Modify rejected: If the venue rejects a modify, the order remains SUBMITTED with the previous parameters. Inspect the reason field on the status event.

Inspecting history

Returns an ordered array of { status, reason, occurred_at } records. See Order state history.
  • Fills — each fill belongs to one order and contributes to PARTIALLY_FILLED → FILLED transitions.
  • Realtime WebSocket — orders.state events deliver these exact transitions live.
  • Order errors — payloads emitted with REJECTED.