Skip to main content
POST

Authorizations

X-Kairos-Partner-Id
string
header
required

Wallet API partner id, issued by Kairos together with the partner's base URL. Identifies the partner (tenant) on every /v3 call; sent instead of an API key. Letters, digits and ._:-, at most 64 characters, case-insensitive. A partner id issued for an individual account cannot be sent this way — that account sends its API key triple instead.

Authorization
string
header
required

Wallet sign-in token: SIWE <token>, where <token> is result.token from a login action (exactly one space after SIWE). Proves the wallet on reads of its orders and positions, and on trade plans, fee settlements and on-chain intents. The token is bound to the partner and the environment that issued it and lasts 24 hours; run a new login action to renew it.

Headers

Idempotency-Key
string
required

1–128 printable ASCII characters, no spaces. Scoped to the wallet's account and the partner, and never expires. The same key with the same body returns the original object in its current state; the same key with a different body is refused with 409. Not honoured on /v3/actions — use clientOrderId there.

Required string length: 1 - 128
Pattern: ^[\x21-\x7E]+$

Body

application/json

Body of POST /v3/trade-plans. camelCase; unknown fields are refused.

wallet
string
required

EVM address, 0x + 40 hex.

Pattern: ^0x[0-9a-fA-F]{40}$
Example:

"0x8ba1f109551bd432803012645ac136ddd64dba72"

interactionMode
enum<string>
required

Both values currently behave the same — every request is a signature collected up front.

Available options:
single_batch,
allow_followup
order
object
required

The order. Decimals must be canonical ("0.5", not "0.50"; "1", not "1.0"). size must match the venue's share lot exactly. Hyperliquid: whole-share size, at most 5 price decimals, GTC/FAK/IOC only. In a response this is the effective order — check it before signing: outcome is canonical and on Predict.fun a GTC order may come back as GTD with expiresAt set.

tradeSubmitBefore
string<date-time>
required

Last moment Kairos may submit the order. RFC 3339 UTC, whole seconds, in the future and at most 5 minutes out.

Example:

"2026-10-28T12:04:00Z"

ctfDependencies
string<uuid>[]

Polymarket only — ids of on-chain intents this buy depends on (e.g. a merge that frees collateral). At most 16, distinct.

Maximum array length: 16
submission
object

Who submits each part. Defaults to Kairos for both. trade accepts only kairos.

funding
object | null

Omit or null when the collateral is already at the venue.

Response

The prepared plan in needs_signatures. A replay with the same Idempotency-Key and body returns the stored plan in its current state.

A trade plan. Statuses: needs_signatures → ready_to_execute → (/execute) funding_pending → trade_pending → completed, with reconciling while an outcome is being confirmed. Terminal: completed, expired, failed, funded_trade_failed, funded_trade_expired.

audience and tradeExecutionRegion are opaque values signed into the plan — do not interpret or change them.

contractVersion
integer
required
id
string<uuid>
required
planHash
string
required

Hash of the plan's terms; every answer must echo it.

revision
string
required

Increases on every stored change ("0" at prepare).

wallet
string
required

The signing wallet, lowercase.

partnerId
string
required
audience
string
required

Opaque signed field.

interactionMode
enum<string>
required
Available options:
single_batch,
allow_followup
submission
object
required

Who submits each part. Defaults to Kairos for both. trade accepts only kairos.

status
enum<string>
required
Available options:
needs_signatures,
ready_to_execute,
funding_pending,
trade_pending,
reconciling,
completed,
expired,
failed,
funded_trade_failed,
funded_trade_expired
venue
enum<string>
required

Venue id. predict.fun is accepted as an input alias of predictfun.

Available options:
polymarket,
predictfun,
hyperliquid
tradeExecutionRegion
string
required

Opaque signed field.

order
object
required

The order. Decimals must be canonical ("0.5", not "0.50"; "1", not "1.0"). size must match the venue's share lot exactly. Hyperliquid: whole-share size, at most 5 price decimals, GTC/FAK/IOC only. In a response this is the effective order — check it before signing: outcome is canonical and on Predict.fun a GTC order may come back as GTD with expiresAt set.

tradingWallet
string
required

Where the collateral must sit — Polymarket's trading wallet, or the wallet itself on Predict.fun and Hyperliquid.

tradePayloadDigest
string
required

Signing digest of the trade request.

tradeBudget
object
required

The collateral ceiling the wallet authorizes. Raw amounts are integer strings in collateral base units.

funding
object | null
required

The funding quote. Raw amounts are integer strings in base units.

createdAt
string<date-time>
required
executeBefore
string<date-time>
required

Deadline for answers and /execute — funding.fundingSubmitBefore when funded, else tradeSubmitBefore.

tradeSubmitBefore
string<date-time>
required
requests
object[]
required
Required array length: 2 - 32 elements
execution
object
required

Progress of a committed plan.

error
object | null
required

Why a plan is in flight or stopped (returned with HTTP 200).

nextAction is reconcile (keep polling) or inspect_funds (terminal: check where the collateral is — bridged funds stay in tradingWallet).

ctfDependencies
object[]