X-Kairos-Wallet-Api: 2 and either X-Kairos-Partner-Id or an API key on every request (authentication). Bodies are JSON with camelCase field names. The machine-readable schema is in the API reference.
Endpoints
“Needs a sign-in token” applies with a partner id. An API key whose account owns the wallet doesn’t need one. Preview endpoints are documented on fees, trade plans and on-chain intents.
Start an action
marketisvenue:market_id:polymarket:0x…,predictfun:1027194,hyperliquid:11492. A bare0x…condition id is Polymarket.priceandsizeare strings. Prices are 0–1; sizes are shares.- If the wallet isn’t set up on the order’s venue, the order runs the missing setup first, in the same action.
- Per-venue rules (time in force, decimals, minimums) are on venues.
clientOrderId
Your own id for an order, unique per wallet and venue. Use it to retry an order safely. Up to 128 characters, and it can’t start with trade-plan: (400 clientOrderId uses a reserved prefix). On Hyperliquid it must be 0x plus 32 lowercase hex characters.
Terms compare as numbers, so
"0.5" and "0.50" are the same price. An order whose outcome is unknown keeps its id.
The step
Every action response is a step:Timing
expiresAtMs gives the exact deadline for each step. A signature that arrives later fails the action with SIGNATURE_EXPIRED.
Once you post a signature, the work runs to completion on Kairos’s side, even if your request times out or drops. Posting the same signature again never places a second order: it returns the action as it is now.
Results
Setup
readyistruewhen every requested venue is ready.tradingWalletandtransactionHashat the top are Polymarket’s.- A venue that needs funds (
next: "fund") or can’t be used (next: "blocked") still ends the actiondone, with the reason invenueDetail.reason. - Setup continues past a venue that fails, and reports it as
{ ready: false, error }. The action fails only if every venue failed. - Predict.fun adds
sessionExpiresAt.
Order
message is one of:
No fill: the venue matched none of this orderThe order failed at the venue; any fills shown were revertedThe venue rejected the orderOutcome not confirmed yet; check this wallet's orders before placing it again
- A
FAK,FOKorIOCorder normally ends withfinal: true. One that matched nothing fails withNO_MATCHinstead. - A
GTCorGTDorder that rests endsdonewithfinal: false. Follow it in orders. - Predict.fun reports no fills when an order is posted, so its results have
final: false. - If a final match later fails to settle on-chain, the action shows
status: "failed", the reverted fills,final: trueandsuccess: false.
Delayed markets
Some Polymarket markets hold every order that could take liquidity for a short delay before matching it. Sports markets do this during games (usually 1–3 seconds), and some others hold for 250 ms. Market data shows the delay asmatch_delay_ms (Show markets).
A held order keeps its action working. The step carries holdUntilMs and a provisional result with final: false:
done with the real fill and final: true. If the venue matches none of it, it is still done, with filledSize: "0", final: true, success: false and message: "No fill: the venue matched none of this order". In the rare case that the action’s 15 minutes run out first, it ends done with what is known and final: false. You don’t need a sign-in token to follow a held order.
Cancel
- Cancel by id:
failedlists each order that couldn’t be cancelled, withreason. Ids that aren’t this wallet’s orders are reported asorder not found. - Cancel all:
failedis a count, andvenueDetailholds per-venue counts:{ "polymarket": { "cancelled": 1, "failed": 0 } }. - If no venue confirmed and one may have acted, the action fails with
CANCEL_OUTCOME_UNKNOWNand keeps theresult.
Login
{ "token": "…", "expiresAt": "2026-10-29T12:00:00Z" }. Send it as Authorization: SIWE <token> (details).
Wallet status
GET /v3/wallets/{address}:
venueDetail keys:
Venues that aren’t offered on your deployment are left out.
Orders
GET /v3/wallets/{address}/orders?open=true&limit=50&venue=polymarket
status is one of pending, queued, locked, executing, live, partial, filled, cancelled, expired, failed, orphaned. venueDetail appears only when a venue couldn’t be read.
Positions
GET /v3/wallets/{address}/positions?venue=polymarket. The snapshot is nested under positions:
resolved lists positions whose market resolved; redeemable is true for winners (redeem them). closed lists positions closed to zero. For realized P&L on closed positions, use trader stats.
Errors
An error is JSON:{ "error": "message" }, sometimes with code. The HTTP layer answers some malformed requests in plain text instead (details).
After a signature is posted, failures come back as HTTP 200 with status: "failed" and an errorCode, not as error statuses.
Error codes
Afailed action carries one of these in errorCode. The same codes appear as code on an HTTP error body.
Failures without a code, such as a wallet that isn’t ready or
too many orders; slow down, are described in error.

