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 reachesFILLED, 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
FILLEDrather thanCANCELLED. Always trust the terminal state, not your cancel request. - Modify rejected: If the venue rejects a modify, the order remains
SUBMITTEDwith the previous parameters. Inspect thereasonfield on the status event.
Inspecting history
{ status, reason, occurred_at } records. See Order state history.
Related
- Fills — each fill belongs to one order and contributes to
PARTIALLY_FILLED→FILLEDtransitions. - Realtime WebSocket —
orders.stateevents deliver these exact transitions live. - Order errors — payloads emitted with
REJECTED.

