Quick answer
Kairos supports market orders (immediate execution at the best available price) and limit orders (rest on the book at your price), with five time-in-force values: GTC, FOK, FAK, IOC, and GTD. Every order names an exact outcome and a price, even market orders, and routes to Kalshi or Polymarket.
Market and limit orders
A limit order rests on the book until filled or cancelled, and pays maker fees when it rests. A market order executes immediately at the best available price. The price field is required even for market orders: Kairos treats it as the limit you are willing to cross to, not a market-price sentinel, and rejects the order without it. Submit the live same-outcome quote, the ask for buys and the bid for sells, pulled from the Market Data WebSocket or GET /markets/batch-prices.
Specifying the outcome
Each market has multiple outcomes. Identify the one you are trading with either the exact human-readable outcome label from market metadata, or its token_id. Never submit a generic side alias like yes or no as the outcome. To close a position, sell the same outcome label you bought, not the opposite outcome.
Time in force
| Value | Behavior |
|---|---|
| GTC (default) | Good till cancelled. Rests until it fills or you cancel it. |
| FOK | Fill or kill. Fills completely and immediately, or the whole order cancels. |
| FAK | Fill and kill. Fills what it can immediately, cancels the remainder. Polymarket-specific. |
| IOC | Immediate or cancel. Alias for FAK: partial fills allowed, remainder cancelled. |
| GTD | Good till date. Expires after expiration_minutes (1 to 43200, required for this value). |
No silent downgrades
An unrecognized time_in_force is rejected, not silently converted to GTC, and it must be a value the target venue supports or the order returns 400 EXCHANGE_UNSUPPORTED.
Order statuses
| Status | Meaning |
|---|---|
| pending | Received, awaiting processing |
| live | Active on the exchange |
| partial | Some contracts have filled |
| filled | Completely filled (terminal) |
| cancelled | You cancelled it (terminal) |
| expired | A GTD order reached expiration (terminal) |
| failed | Could not be executed (terminal) |
Cancelling an order
Cancel from the Orders panel or POST /orders/{order_id}/cancel with the trade:execute scope. One behavior to code against: the endpoint almost always returns 200, even when the cancel does not happen. If the order is already terminal or the venue refuses the cancel, the response carries success: false with an explanatory message rather than a 4xx. Full schemas live in the interactive reference.