- Who is the integrator? Your partner id, or your API key.
- Who is the wallet owner? For most calls, the wallet’s own signatures prove it. Reads of private data and a few preview endpoints also need a sign-in token or an API key that owns the wallet.
Base URL
Kairos gives you a base URL together with your partner id. Every path in these docs is relative to it. Preview features are tested on staging athttps://staging-execution.kairos.trade.
Headers
Partner id or API key
- Apps and wallets (partner id)
- Trading for yourself (API key)
Your users sign with their own wallets and need no Kairos account. Send your partner id on every request:The partner id isn’t a secret: it names your integration. Every action still needs the wallet’s own signature, so a partner id alone can’t trade for anyone.
SDK
The version header
SendX-Kairos-Wallet-Api: 2 on every request. The SDK does it for you.
Without it, the same paths serve the original Polymarket-only contract. That contract ignores expiresAt and setup.venues, and doesn’t accept polymarket: market prefixes. Its reads return different shapes. It also refuses an order on a wallet that isn’t set up, instead of running setup first. Every page here describes version 2.
The sign-in token
Orders and positions are private. To read them, the wallet signs in once with Ethereum (SIWE), and you send the token it returns:-
POST /v3/actionswith{ "wallet": "0x…", "action": { "type": "login" } }. -
The step asks for one
personal_signof a message like this: -
Post the signature back. The action ends
donewithresult: { "token": "…", "expiresAt": "…" }. -
Send
Authorization: SIWE <token>on the calls that need it.
- It can’t move funds. Every order, cancel, plan and transfer still needs its own wallet signature.
- It lasts 24 hours. A token that has expired, belongs to another wallet, or was issued for another partner or environment answers
401(or404for another wallet). - Kairos checks it by signature alone and stores nothing. It can’t be revoked early, so it just expires.
- Signing in needs a wallet that has run setup on at least one venue. Otherwise you get
409.
Wallet status is not private. It shows readiness and collateral balances, which are on-chain facts. Any integrator can read it for any address.
Calling from a browser
The API allows browser requests only from origins Kairos has allowlisted. A web app calling your base URL directly from its own domain will fail the CORS preflight. When you get your partner id, either:- ask Kairos to allowlist your app’s origins, or
- call the API from your own server and pass the wallet’s signatures through.
Rate limits
The limit is per route and per IP. A server that proxies many users from one IP shares one budget. A
429 answers {"error":"rate limit exceeded for this endpoint; retry later"} with no Retry-After header: back off on your own schedule. When the limiter itself is unavailable, the API refuses with 503 {"error":"rate limiter unavailable"} rather than letting requests through.

