Get a single order by ID (polysim-shape row).
Returns one order row in the same Polysimulator shape as GET /v1/orders. The order_id path param is the integer ID from an order row or returned by POST /v1/orders / POST /v1/clob/order.
ID space caveat: PendingOrder.id (limit orders) and Order.id (fills) are independent auto-increment sequences — the same integer can refer to different rows in each table. The default lookup precedence is PendingOrder first (matches DELETE semantics and the common limit-order polling case), then Order on miss. Every row returned by this endpoint and GET /v1/orders carries source: pass that value as ?source= to fetch the exact row again. ?source=filled forces the Order table; ?source=pending forces PendingOrder.
When parent_order_id is present on a fill row, it identifies the parent PendingOrder. Fetch that parent with GET /v1/orders/{parent_order_id}?source=pending.
Authorizations
Issue from /v1/keys (or admin-issued for enterprise tier).
Headers
Your PolySimulator API key
Polymarket-CLOB-compat alias for X-API-Key (underscore form). SDK clients ported from Polymarket can authenticate without changing header names. X-API-Key takes precedence when both are provided.
PM-CLOB-compat dashed-form alias for X-API-Key. Same value semantics as POLY_API_KEY but with HTTP-conventional dash separators. Both spellings are accepted end-to-end.
PM-CLOB-compat: Authorization: Bearer ps_live_... (or ps_test_...) is accepted as an alias for X-API-Key so py-clob-client and other ported SDKs authenticate without header name changes. Bearer JWTs are NOT accepted here — use the dashboard-auth endpoints for those.
Path Parameters
Query Parameters
Disambiguate the table lookup: pending forces the PendingOrder table (limit orders), filled forces the Order table (fills). Use the row's response source to fetch that exact row. Default None tries PendingOrder first, falls back to Order on miss.
Optional wallet scope — when supplied, only returns the row if it belongs to this wallet. Mirrors the list_orders wallet_id pattern so per-wallet pollers stay consistent.
Response
Successful Response
Compact order representation for list and single-order endpoints.
ID in the table identified by source. Fetch this exact row with GET /v1/orders/{order_id}?source={source}.
Table containing order_id: pending = PendingOrder, filled = Order. Pass this value as ?source= when fetching the row by ID. This identifies the table, regardless of the row's status.
pending, filled Verified parent PendingOrder ID for a partial fill. The parent must match the user, requested wallet scope, market_id, and client_order_id prefix before the :p_ suffix. Fetch the parent with ?source=pending. Null for pending rows or when no matching parent exists.
Why the order was rejected, as a stable machine tag — for example INSUFFICIENT_BALANCE, SLIPPAGE_EXCEEDED, BOOK_WALK_FAILED, MARKET_PRICE_UNAVAILABLE or STALE_OR_MISMATCHED_BOOK. Set only on a rejected order; null on every other status.