Place an order.
POST/v1/orders
Places a limit or market order on the YES or NO side of a prediction-market instrument.
order_type=limitrequiresprice_pips(1–9999).order_type=marketwithaction=buyrequiresmax_cost(atomic units of the settlement asset, e.g. USDC atomic).order_type=marketwithaction=sellmust NOT setmax_cost.
Settlement asset is fixed to USDC in V0 (asset_id=1).
The synchronous response carries the engine's outcome: fully filled, rested on the book,
IOC-cancelled with no rest, or rejected. Resting orders subsequently match other
incoming orders; subscribe to the fill WSS channel to receive fills in real time.
Request
Responses
- 200
- 400
- 401
- 403
- 409
- 422
- 504
Order processed by the engine. The status field describes the outcome:
accepted_fully_filled, accepted_rested, accepted_ioc_canceled, or rejected.
A rejected outcome is still returned as HTTP 200 when accompanied by a wire
reject reason — see §reject_reason for the inferred HTTP status mapping when the
reject promotes to 400/403/409/422 at the boundary.
Validation failed or wire-reject promoted to client error. Common error codes — invalid_request, invalid_json, invalid_price, invalid_quantity, invalid_max_cost, unknown_instrument, invalid_api_fields.
Missing or invalid Authorization header.
Account is not in a tradable state. Error codes — account_not_active,
account_trade_frozen.
Instrument lifecycle or self-trade prevention blocked the order.
Error codes — instrument_halted, stp_aborted.
Also the idempotency conflicts (audit F2): client_order_id_reuse (same key, different body) and order_outcome_unknown (same key while the original is in flight or timed out — query GET /v1/orders first).
Reject reasons that map to "we understood the request but cannot execute it
against the current book/balance". Error codes — insufficient_funds,
fok_would_not_fully_fill, max_cost_blocks_any_fill, market_no_liquidity.
Engine did not acknowledge the order within the deadline (default 2 s). Treat as unknown — the order may or may not have been sequenced.