Orders API
The Orders API provides order entry and management capabilities for trading on markets.Base URL
Endpoints
Order Entry
Order Query
Order Management
Batched Operations
Up to 20 orders per call.
Note:
/v1/orders/open/cancel cancels all of your open orders (optionally filtered by market). Use /v1/orders/batched/cancel when you want to cancel a specific list of order IDs.
Order Types
All enum values are passed as strings in the request body:
Example:
Order Intent
Orders require an intent indicating position direction. Pass these as string values:
Example - Buy NO contracts:
Alternative: Outcome Side + Action
Instead ofintent, you can specify the equivalent outcomeSide + action pair. Both forms are accepted on CreateOrder and the batched variants. If both are sent, outcomeSide+action wins.
Example: same “buy NO contracts” order, expressed with outcomeSide + action:
Order returned by GET /v1/order/{orderId} and GET /v1/orders/open includes both intent and outcomeSide+action, so you can read whichever you prefer. The price-vs-side rules below apply to both forms.
Understanding Price with Order Intent
Only the long side (YES) is directly tradable. The short side (NO) is synthetic exposure created through positions in the long side. Theprice.value field always represents the long side’s price, regardless of which order intent you use. In the market slug, the first team is always the long/YES side and the second team is the short/NO side. A common mistake is attempting to buy both YES at 0.60 and NO at 0.40, which causes a self-match error. Since YES and NO prices must sum to $1.00, buying NO at 0.40 is equivalent to buying YES at 0.60 - you’re placing two buy orders at the same price level on the same instrument. If you want exposure to both sides, use different price levels (e.g., buy YES at 0.55 and buy NO at 0.50).
Example: For market aec-cbb-usc-iowa-2026-01-28:
- YES (long side) = USC
- NO (short side) = Iowa
price.valuealways refers to USC’s price
In binary markets, YES and NO are inverses: buying NO at 0.83 is equivalent to buying YES at 0.17 (1.00 - 0.83). Since
price.value always represents the YES side, you must set it to 0.17 when trading Iowa (NO) at 0.83. To trade the NO side at any price X, set price.value = 1.00 - X.
Price Validation
Orders must haveprice.value between 0.01 and 0.99 (the exchange’s absolute price limits).
Invalid prices (below 0.01 or above 0.99) are restricted at the exchange level. Since the order is sent to the exchange, you will still receive an orderID, but the order will never fill because it gets rejected during validation.
Example:
Quantity and Tick Size by Market
Markets can differ in both minimum order quantity and minimum price increment. Read these fields from the market response before submitting or modifying an order:
The
quantity field on order requests and order responses is a number and can contain decimals for partial-contract markets. Submit quantity and price.value already aligned to the market’s minimumTradeQty and orderPriceMinTickSize. Extra precision is not part of the public contract and can be normalized to the market precision; for example, on a market with minimumTradeQty: 0.01 and orderPriceMinTickSize: 0.01, quantity: 0.015 can be accepted and returned as 0.01, and price.value: "0.515" can be returned as "0.51".
Order Side
The order side indicates buy or sell direction:Order States
Orders progress through these states:Time in Force
Manual Order Indicator
Required to indicate whether the order is placed by a human or automated system:Execution Types
Execution events returned in synchronous order responses:Order Reject Reasons
If an order is rejected, the reason will be one of:Slippage Tolerance
For market orders or close position orders, you can specify slippage tolerance:Default Values
slippageTolerance is optional and defaults to:
- Market orders: Unlimited (no slippage protection by default)
- Limit orders: Not applicable (price is fixed)
ticks: 5, the order will reject if the best ask moves above 0.55 before execution.
Complete Create Order Example
Rate Limits
The API enforces a global rate limit of 20 requests per second per API key across all endpoints. Notes:- Rate limits are enforced at the edge (Cloudflare) before requests reach the API
- Limits are applied per API key
- Implement exponential backoff and request throttling in your application
Best Practices
- Use string enum values - All enums are passed as strings (e.g.,
"ORDER_TYPE_LIMIT", not1) - Use WebSocket for updates - Subscribe to order updates instead of polling
- Preview before submit - Use the preview endpoint for order validation
- Handle rejects - Implement proper error handling for rejected orders
- Use asynchronous execution for limit orders - For market-making and resting limit orders, avoid
synchronousExecution: trueas it waits up to 10 seconds for final order state. Instead, submit orders asynchronously (the default) and poll withGET /v1/order/{orderId}to check status (~100ms). Only usesynchronousExecution: truefor immediately-fillable orders where you need to wait for fill confirmation. - Specify manual order indicator - Required for regulatory compliance
- Respect rate limits - Implement request throttling to stay within rate limits and avoid 429 errors