Skip to main content
POST
Build pinned unsigned on-chain transactions for self-signing (step 1 of 2)

Authorizations

X-Client-Id
string
header
required

Credential client id (kairos_ck_...). Must be sent together with X-Api-Key and X-Api-Secret.

X-Api-Key
string
header
required

64-char hex API key.

X-Api-Secret
string
header
required

64-char hex API secret.

Body

application/json

Body for POST /v2/onchain/intent. You supply the nonce and gas price yourself — the server makes no RPC call while building the intent (no nonce fetch, no gas quote, no balance preflight).

op
enum<string>
required

Which on-chain operation to build. approvals builds the one-time collateral + CTF approvals; redeem claims a resolved position; split/merge convert between collateral and a complete outcome-token set; unwrap_wcol unwraps wrapped collateral.

Available options:
approvals,
redeem,
split,
merge,
unwrap_wcol
Example:

"redeem"

owner_address
string
required

The EOA that will sign and broadcast. Must be a wallet registered to the authenticated caller.

nonce
integer<int64>
required

The signing EOA's next transaction nonce. Caller-supplied — the server never queries the chain for it.

gas_price_wei
string
required

Gas price in wei, decimal string. Must be > 0. Caller-supplied.

condition_id
string | null

CTF conditionId. Required for redeem, split and merge.

neg_risk
boolean | null

Whether the market is a neg-risk market (selects the adapter contract).

collateral_address
string | null
amount
string | null

Amount in wei, decimal string. Required for split and merge; must be > 0.

gas_limit
integer<int64> | null
wcol_amount
string | null

Amount in wei, decimal string. Required for unwrap_wcol; must be > 0.

Response

Pinned unsigned transactions plus the digests to sign.

Response for POST /v2/onchain/intent.

payload_id
string<uuid>
required

Single-use handle. Pass back to POST /v2/onchain/submit.

transactions
object[]
required

The transactions to sign, in the order they must be broadcast (ascending nonce).

expires_at_us
integer<int64>
required

Wall-clock expiry, UNIX microseconds. TTL is 300 s here (longer than the 60 s order-intent TTL, because signing several transactions on a hardware wallet takes longer).

requires_followup
string | null

Reserved. Always absent on a newly-created intent.