Each step names the chain it needs (
chainId). The SDK switches the wallet to it, and adds the chain if the wallet doesn’t know it.Place an order
filledSize and filledNotional are what matched, before fees. final: true means matching is finished: nothing more will fill and nothing rests. success: false means the order ended without doing anything, or its outcome isn’t confirmed yet; message says which. A resting GTC order returns with final: false; follow it in orders. See order fills.
On some Polymarket sports markets the venue holds a taking order for a second or more before matching it. The call waits through the hold and returns the final fill. See delayed markets.
The venue comes from the market. As a string, a market is venue:market_id; a bare 0x… condition id is a Polymarket market. If the wallet isn’t set up on that venue yet, the order runs the missing setup steps first, in the same call. If setup can’t run there (no BNB for the approvals, a never-funded or blocked Hyperliquid account), the order fails with the reason.
Optional: timeInForce (GTC default, GTD with expiresAt in unix seconds, FOK, FAK, IOC), postOnly: true, and clientOrderId: your own id, so a retry returns the same order instead of placing a second one (rules).
On Hyperliquid each order is one Kairos order signature (plus one perps-to-spot transfer when spot USDC is short); Kairos then places exactly that order with the trade-only agent. Use GTC, FAK or IOC there, with whole-share sizes, and a clientOrderId of 0x plus 32 lowercase hex characters. See venues for every venue’s rules.
On Predict.fun a resting order lasts at most as long as the wallet’s Predict.fun sign-in (about a day): a GTC order is placed as GTD ending 10 minutes before it. When less than an hour of the sign-in is left, the next order renews it with one signature.
Cancel
0x89) whatever the venue, so the wallet may be asked to switch chains.
Errors
A failed action throwsActionFailedError; its step.errorCode says why (codes). NO_MATCH (an immediate order found nothing at its price), VENUE_REJECTED and SIGNATURE_EXPIRED mean nothing was placed. A refused request throws KairosError with status and, where there is one, code.
The order may be live if the action fails with ORDER_OUTCOME_UNKNOWN, or the call throws with error.outcomeUnknown (a server error before an answer). Check kairos.wallet.orders(wallet) before placing it again (not only open orders: it may have filled), or retry with the same clientOrderId, which never places a second order.
Not using JavaScript?
Everything above is plain JSON over HTTPS. Without the SDK walks through the loop with curl and has a complete Python client; the reference lists every field.Next
- Show positions after a fill.
- What the wallet signs, step by step.
- Reference for every field and error.

