On-chain intents (preview)

Prepare a split, merge or redeem on a Polymarket deposit wallet

Preview: available on staging (https://staging-execution.kairos.trade); production returns 503 until release.

Runs one conditional-token operation — split, merge or redeem — on the wallet's Polymarket deposit wallet on Polygon. Kairos builds the exact calls and returns two typed-data requests for the owner to sign; the wallet pays no gas. Kairos marks the intent confirmed only after it verifies a finalized receipt whose token transfers equal intent.terms.effects exactly.

Scope. Polymarket on Polygon (137), binary markets only. redeem needs a resolved market and an outcome; markets on the legacy conditional-token contract cannot be redeemed here. Each batch is [approval, operation]: merge and redeem leave a standing operator approval (setApprovalForAll) for the operating contract on the deposit wallet. The wallet must already be set up through a setup action.

Addresses wallet and account must be lowercase; a checksummed address is refused.

Flow. Prepare → sign consentRequest (and nativeRequest when submissionOwner is kairos) → POST /v3/onchain-intents/{id}/execute before executeBefore (at most 5 minutes out) → poll GET /v3/onchain-intents/{id} until confirmed.

Do not broadcast the batch from the wallet or the deposit wallet: a transaction sent from either never confirms. With submissionOwner: "client" (for integrators that have arranged submission access with Kairos), POST submission.body plus "signature": <native signature> to submission.endpoint, then report the transaction hash.

Chaining. dependencies lists earlier intents on the same deposit wallet (for example a split, then a merge); an intent executes only after its dependencies are confirmed. A trade plan can also depend on a confirmed intent through ctfDependencies.

Idempotency. Idempotency-Key is required. The same key with the same body returns the original intent in its current state; with a different body it is 409.

post/v3/onchain-intents

Request

  • Base URL
    https://execution.kairos.trade
  • Auth
    • API key in header X-Kairos-Partner-Id and API key in header Authorization
    • or API key in header X-Client-Id and API key in header X-Api-Key and API key in header X-Api-Secret and API key in header Authorization
    • or API key in header X-Client-Id and API key in header X-Api-Key and API key in header X-Api-Secret
    • or API key in header X-Kairos-Partner-Id and API key in header X-Client-Id and API key in header X-Api-Key and API key in header X-Api-Secret
    • or API key in header X-Kairos-Partner-Id and HTTP bearer

Headers

Idempotency-Keystring 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.

Request body

walletstring required

The owner that signs — lowercase 0x address.

accountstring required

The owner's Polymarket deposit wallet (its trading wallet) — lowercase, and not equal to wallet.

marketstring required

polymarket:0x<64-hex condition id> or a bare condition id. Binary markets only.

operation'split' | 'merge' | 'redeem' required

split — pUSD into one of each outcome token; merge — one of each outcome token back into pUSD; redeem — winning outcome tokens into pUSD on a resolved market.

amountRawstring required

Canonical integer string > 0, 6-decimal base units ("1000000" = 1 pUSD or 1 share). Split and merge: the collateral and the per-outcome amount. Redeem: outcome tokens burned.

outcome0 | 1

Outcome index to redeem. Required for redeem, refused otherwise.

submissionOwner'kairos' | 'client' required

Who submits the signed batch. Use kairos unless you have arranged submission access with Kairos.

executeBeforestring date-time required

In the future, at most 300 s out, whole seconds. Also the batch's on-chain deadline.

dependenciesstring[]

Earlier intents on the same deposit wallet that must confirm first. At most 16, distinct.

Example request

{
  "wallet": "0x8ba1f109551bd432803012645ac136ddd64dba72",
  "account": "0x2f9c4b8e1d7a6c5b4a3f2e1d0c9b8a7f6e5d4c3b",
  "market": "polymarket:0x5f3a8e1c2b4d6f8a0c2e4b6d8f0a2c4e6b8d0f2a4c6e8b0d2f4a6c8e0b2d4f6a",
  "amountRaw": "1000000",
  "executeBefore": "2026-10-28T12:04:00Z"
}

Response

The prepared intent (needs_signatures) and the two requests to sign.

Changes

No recorded changes to this operation across all 1 revision of this API.