Skip to main content
Every wallet API request answers two questions:
  1. Who is the integrator? Your partner id, or your API key.
  2. 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 at https://staging-execution.kairos.trade.

Headers

Partner id or 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

Send X-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:
  1. POST /v3/actions with { "wallet": "0x…", "action": { "type": "login" } }.
  2. The step asks for one personal_sign of a message like this:
  3. Post the signature back. The action ends done with result: { "token": "…", "expiresAt": "…" }.
  4. Send Authorization: SIWE <token> on the calls that need it.
What to know about the token:
  • 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 (or 404 for 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.

Auth errors