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.
Addresseswallet 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.
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.
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.
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/onchain-intents. Unknown fields (calls, nonce, chain, recipient, gas) are refused.
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.
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.
Earlier intents on the same deposit wallet that must confirm first. At most 16, distinct.
Maximum array length: 16
Response
The prepared intent (needs_signatures) and the two requests to sign.
An on-chain intent with its two signing requests, both eth_signTypedData_v4 by terms.signer on Polygon (params[1] is a JSON string — pass it unchanged):
nativeRequest — the deposit wallet's Batch authorization over terms.batch. Send it to Kairos when submissionOwner is kairos; keep it for your own submission when client.
Signatures must be plain 65-byte ECDSA (low-s) from the owner key; smart-account signatures are refused.
{
"error": "sign-in token has expired; run a login action"
}
{
"error": "unknown or expired action"
}
{
"error": "unknown or expired action"
}
{
"error": "unknown or expired action"
}
Failed to deserialize the JSON body into the target type: action.price: invalid type: floating point `0.52`, expected a string
Failed to deserialize the JSON body into the target type: action.price: invalid type: floating point `0.52`, expected a string
Failed to deserialize the JSON body into the target type: action.price: invalid type: floating point `0.52`, expected a string
{
"error": "rate limit exceeded for this endpoint; retry later"
}
{
"error": "internal error"
}
{
"error": "unknown or expired action"
}
{"docsConfig":{"theme":"luma","$schema":"https://mintlify.com/docs.json","name":"Kairos","colors":{"primary":"#807dfe","light":"#6d6ae0","dark":"#a5a3ff"},"logo":{"light":"https://mintcdn.com/kairos-c5456474/JzYk92-enXUuMl0B/logo/kairos-wing.png?fit=max\u0026auto=format\u0026n=JzYk92-enXUuMl0B\u0026q=85\u0026s=c7c397bb87847c7f0e27019d68594bff","dark":"https://mintcdn.com/kairos-c5456474/JzYk92-enXUuMl0B/logo/wordmark.png?fit=max\u0026auto=format\u0026n=JzYk92-enXUuMl0B\u0026q=85\u0026s=8f2796ccf6273359a7ad0713bc86686d"},"favicon":"https://mintcdn.com/kairos-c5456474/JzYk92-enXUuMl0B/logo/kairos-wing.png?fit=max\u0026auto=format\u0026n=JzYk92-enXUuMl0B\u0026q=85\u0026s=c7c397bb87847c7f0e27019d68594bff","appearance":{"default":"dark"},"background":{"color":{"light":"#ffffff","dark":"#0a0a0f"}},"navbar":{"primary":{"type":"button","label":"Launch App","href":"https://app.kairos.trade"}},"contextual":{"options":["copy","view","download-spec","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"kairos-c5456474","hasAudioNarration":false,"actualSubdomain":"kairos-c5456474","customDomains":["docs.kairos.trade"],"gitSource":{"type":"github","owner":"kairoslive","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6aead0641411fefa89136024","collectionId":"4b502bda-1c32-4823-b83c-8b1fef053274","liveDeploymentHistoryId":"6aead0641411fefa89136024","schemaVersion":"v3"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6aead0641411fefa89136024","clientVersion":"0.0.4067","searchFilterCounts":[{"language":"default","tag":"API Reference","count":139},{"language":"default","tag":"Data API","count":77},{"language":"default","tag":"Execution API","count":53},{"language":"default","tag":"Partner API","count":36},{"language":"default","tag":"Trading API","count":27},{"language":"default","tag":"Markets","count":20},{"language":"default","tag":"Sports","count":20},{"language":"default","tag":"Endpoints","count":19},{"language":"default","tag":"Documentation","count":18},{"language":"default","tag":"Market Data","count":17}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/partner/on-chain-intents-preview/prepare-a-split-merge-or-redeem-on-a-polymarket-deposit-wallet","slug":"/api-reference/partner/on-chain-intents-preview/prepare-a-split-merge-or-redeem-on-a-polymarket-deposit-wallet","pageMetadata":{"title":"Prepare a split, merge or redeem on a Polymarket deposit wallet","description":"Preview: available on staging (`https://staging-execution.kairos.trade`); production returns `503` until release.\n\nRuns 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.\n\n**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.\n\n**Addresses** `wallet` and `account` must be **lowercase**; a checksummed address is refused.\n\n**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`.\n\n**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\": \u003cnative signature>` to `submission.endpoint`, then report the transaction hash.\n\n**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`.\n\n**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`.","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/onchain-intents","href":"/api-reference/partner/on-chain-intents-preview/prepare-a-split-merge-or-redeem-on-a-polymarket-deposit-wallet","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Preview: available on staging (\", _jsx(_components.code, {\n children: \"https://staging-execution.kairos.trade\"\n }), \"); production returns \", _jsx(_components.code, {\n children: \"503\"\n }), \" until release.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Runs one conditional-token operation — \", _jsx(_components.code, {\n children: \"split\"\n }), \", \", _jsx(_components.code, {\n children: \"merge\"\n }), \" or \", _jsx(_components.code, {\n children: \"redeem\"\n }), \" — 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 \", _jsx(_components.strong, {\n children: \"no gas\"\n }), \". Kairos marks the intent \", _jsx(_components.code, {\n children: \"confirmed\"\n }), \" only after it verifies a finalized receipt whose token transfers equal \", _jsx(_components.code, {\n children: \"intent.terms.effects\"\n }), \" exactly.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Scope.\"\n }), \" Polymarket on Polygon (\", _jsx(_components.code, {\n children: \"137\"\n }), \"), binary markets only. \", _jsx(_components.code, {\n children: \"redeem\"\n }), \" needs a resolved market and an \", _jsx(_components.code, {\n children: \"outcome\"\n }), \"; markets on the legacy conditional-token contract cannot be redeemed here. Each batch is \", _jsx(_components.code, {\n children: \"[approval, operation]\"\n }), \": merge and redeem leave a standing operator approval (\", _jsx(_components.code, {\n children: \"setApprovalForAll\"\n }), \") for the operating contract on the deposit wallet. The wallet must already be set up through a \", _jsx(_components.code, {\n children: \"setup\"\n }), \" action.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Addresses\"\n }), \" \", _jsx(_components.code, {\n children: \"wallet\"\n }), \" and \", _jsx(_components.code, {\n children: \"account\"\n }), \" must be \", _jsx(_components.strong, {\n children: \"lowercase\"\n }), \"; a checksummed address is refused.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Flow.\"\n }), \" Prepare → sign \", _jsx(_components.code, {\n children: \"consentRequest\"\n }), \" (and \", _jsx(_components.code, {\n children: \"nativeRequest\"\n }), \" when \", _jsx(_components.code, {\n children: \"submissionOwner\"\n }), \" is \", _jsx(_components.code, {\n children: \"kairos\"\n }), \") → \", _jsx(_components.code, {\n children: \"POST /v3/onchain-intents/{id}/execute\"\n }), \" before \", _jsx(_components.code, {\n children: \"executeBefore\"\n }), \" (at most 5 minutes out) → poll \", _jsx(_components.code, {\n children: \"GET /v3/onchain-intents/{id}\"\n }), \" until \", _jsx(_components.code, {\n children: \"confirmed\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Do not broadcast the batch from the wallet or the deposit wallet\"\n }), \": a transaction sent from either never confirms. With \", _jsx(_components.code, {\n children: \"submissionOwner: \\\"client\\\"\"\n }), \" (for integrators that have arranged submission access with Kairos), POST \", _jsx(_components.code, {\n children: \"submission.body\"\n }), \" plus \", _jsx(_components.code, {\n children: \"\\\"signature\\\": \u003cnative signature>\"\n }), \" to \", _jsx(_components.code, {\n children: \"submission.endpoint\"\n }), \", then report the transaction hash.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Chaining.\"\n }), \" \", _jsx(_components.code, {\n children: \"dependencies\"\n }), \" lists earlier intents on the same deposit wallet (for example a split, then a merge); an intent executes only after its dependencies are \", _jsx(_components.code, {\n children: \"confirmed\"\n }), \". A trade plan can also depend on a confirmed intent through \", _jsx(_components.code, {\n children: \"ctfDependencies\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Idempotency.\"\n }), \" \", _jsx(_components.code, {\n children: \"Idempotency-Key\"\n }), \" is required. The same key with the same body returns the original intent in its current state; with a different body it is \", _jsx(_components.code, {\n children: \"409\"\n }), \".\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Prepare a split, merge or redeem on a Polymarket deposit wallet","description":"Preview: available on staging (`https://staging-execution.kairos.trade`); production returns `503` until release.\n\nRuns 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.\n\n**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.\n\n**Addresses** `wallet` and `account` must be **lowercase**; a checksummed address is refused.\n\n**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`.\n\n**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\": \u003cnative signature>` to `submission.endpoint`, then report the transaction hash.\n\n**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`.\n\n**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`.","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/onchain-intents","href":"/api-reference/partner/on-chain-intents-preview/prepare-a-split-merge-or-redeem-on-a-polymarket-deposit-wallet","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"prepareOnchainIntent","summary":"Prepare a split, merge or redeem on a Polymarket deposit wallet","description":"Preview: available on staging (`https://staging-execution.kairos.trade`); production returns `503` until release.\n\nRuns 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.\n\n**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.\n\n**Addresses** `wallet` and `account` must be **lowercase**; a checksummed address is refused.\n\n**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`.\n\n**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\": \u003cnative signature>` to `submission.endpoint`, then report the transaction hash.\n\n**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`.\n\n**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`.","tags":["On-chain intents (preview)"],"x-kairos-status":"preview","x-kairos-auth":"partner id or API key triple, plus wallet sign-in (Authorization SIWE) or an API key that owns the wallet","x-kairos-scope":"trade:execute (API-key callers)","x-kairos-rate-limit":"120 requests/minute per client IP per route; 1000/minute when X-Client-Id is sent","security":["ea9305b9-a391-4389-8b4d-b6cc6a31ef2b","6ed60497-6f13-426c-8a50-07d07fd49f12","12901b2b-57fd-4dc5-8181-e437109a4edc","0c0e1869-66ee-45a4-9c90-1a810b2ff07d","450860d1-3571-4253-b0fb-2547c68d5dd6"],"parameters":["ad489316-6304-4e51-9e3b-a2c7a320a039"],"requestBody":"7bf6531a-4b41-4d16-b9cd-e2ac1b9dcbcc","responses":{"200":"349a2494-c120-471c-ba4b-a09f20c8322b","400":"5f030f1c-06b2-44ea-a3d1-f92b1e2f023c","401":"0c0aba25-8238-4fac-aa31-47ab8a16c9aa","403":"4727b7fc-fee1-42a5-b09f-04c9fa2ff708","404":"1c0b3d44-3a0d-4378-a02c-e617ceb94f63","409":"f6ef706f-f6f2-4683-84f4-8bee582009f6","413":"366e2e45-0a13-42e3-8681-72390f27f9a6","415":"2c1ae319-3cc8-4f2f-bd62-4828b9b90bab","422":"65851007-22a7-4186-82c0-399d4b572d35","429":"911fcf8c-45d1-4694-b40d-e602c1c02514","500":"a249582d-eee0-42c8-89fa-d25d4c60f0f9","503":"a43e2ab7-8c91-4dd3-b721-78d0c751572d"},"method":"post","type":"path","servers":["330d272c-627a-4ff5-ad01-0263b300ce7a","83635983-3d27-4bb6-bc26-42ecc043c06c"],"path":"/v3/onchain-intents","baseUrlOptions":["https://execution.kairos.trade","https://staging-execution.kairos.trade"],"title":"Prepare a split, merge or redeem on a Polymarket deposit wallet","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"ad489316-6304-4e51-9e3b-a2c7a320a039":{"name":"Idempotency-Key","in":"header","required":true,"description":"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.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[\\x21-\\x7E]+$","isRequired":true,"description":"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.","uniqueKey":"","typeLabel":"string"},"example":"7f0c2d0e8a7b4c35a1b0f3f1c9e2d4a6"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Body of `POST /v3/onchain-intents`. Unknown fields (calls, nonce, chain, recipient, gas) are refused.","required":["wallet","account","market","operation","amountRaw","submissionOwner","executeBefore"],"properties":{"wallet":{"type":"string","description":"The owner that signs — **lowercase** `0x` address.","pattern":"^0x[0-9a-f]{40}$","example":"0x8ba1f109551bd432803012645ac136ddd64dba72","isRequired":true,"uniqueKey":"wallet","typeLabel":"string"},"account":{"type":"string","description":"The owner's Polymarket deposit wallet (its trading wallet) — **lowercase**, and not equal to `wallet`.","pattern":"^0x[0-9a-f]{40}$","example":"0x2f9c4b8e1d7a6c5b4a3f2e1d0c9b8a7f6e5d4c3b","isRequired":true,"uniqueKey":"account","typeLabel":"string"},"market":{"type":"string","description":"`polymarket:0x\u003c64-hex condition id>` or a bare condition id. Binary markets only.","example":"polymarket:0x5f3a8e1c2b4d6f8a0c2e4b6d8f0a2c4e6b8d0f2a4c6e8b0d2f4a6c8e0b2d4f6a","isRequired":true,"uniqueKey":"market","typeLabel":"string"},"operation":{"type":"string","enum":["split","merge","redeem"],"description":"`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.","isRequired":true,"uniqueKey":"operation","typeLabel":"enum\u003cstring>"},"amountRaw":{"type":"string","description":"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.","example":"1000000","isRequired":true,"uniqueKey":"amountRaw","typeLabel":"string"},"submissionOwner":{"type":"string","enum":["kairos","client"],"description":"Who submits the signed batch. Use `kairos` unless you have arranged submission access with Kairos.","isRequired":true,"uniqueKey":"submissionOwner","typeLabel":"enum\u003cstring>"},"executeBefore":{"type":"string","format":"date-time","description":"In the future, at most 300 s out, whole seconds. Also the batch's on-chain deadline.","example":"2026-10-28T12:04:00Z","isRequired":true,"uniqueKey":"executeBefore","typeLabel":"string\u003cdate-time>"},"outcome":{"type":"integer","enum":[0,1],"description":"Outcome index to redeem. Required for `redeem`, refused otherwise.","uniqueKey":"outcome","typeLabel":"enum\u003cinteger>"},"dependencies":{"type":"array","description":"Earlier intents on the same deposit wallet that must confirm first. At most 16, distinct.","maxItems":16,"default":[],"items":{"type":"string","format":"uuid","uniqueKey":"dependencies.items.[INDEX]","typeLabel":"string\u003cuuid>"},"uniqueKey":"dependencies","typeLabel":"string\u003cuuid>[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"split":{"title":"split","value":{"wallet":"0x8ba1f109551bd432803012645ac136ddd64dba72","account":"0x2f9c4b8e1d7a6c5b4a3f2e1d0c9b8a7f6e5d4c3b","market":"polymarket:0x5f3a8e1c2b4d6f8a0c2e4b6d8f0a2c4e6b8d0f2a4c6e8b0d2f4a6c8e0b2d4f6a","operation":"split","amountRaw":"1000000","submissionOwner":"kairos","executeBefore":"2026-10-28T12:04:00Z"}},"redeem":{"title":"redeem","value":{"wallet":"0x8ba1f109551bd432803012645ac136ddd64dba72","account":"0x2f9c4b8e1d7a6c5b4a3f2e1d0c9b8a7f6e5d4c3b","market":"polymarket:0x5f3a8e1c2b4d6f8a0c2e4b6d8f0a2c4e6b8d0f2a4c6e8b0d2f4a6c8e0b2d4f6a","operation":"redeem","outcome":0,"amountRaw":"1000000","submissionOwner":"kairos","executeBefore":"2026-10-28T12:04:00Z"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"349a2494-c120-471c-ba4b-a09f20c8322b":{"description":"The prepared intent (`needs_signatures`) and the two requests to sign.","content":{"application/json":{"schema":{"type":"object","description":"An on-chain intent with its two signing requests, both `eth_signTypedData_v4` by `terms.signer` on Polygon (`params[1]` is a JSON string — pass it unchanged):\n- `consentRequest` — `KairosOnchainIntent` typed data binding `signer`, `partnerId`, `audience`, `intentId`, `intentHash`, `executeBefore`. Always required.\n- `nativeRequest` — the deposit wallet's `Batch` authorization over `terms.batch`. Send it to Kairos when `submissionOwner` is `kairos`; keep it for your own submission when `client`.\n\nSignatures must be plain 65-byte ECDSA (low-s) from the owner key; smart-account signatures are refused.","required":["intent","consentRequest","nativeRequest","submission"],"properties":{"intent":{"type":"object","required":["terms","intentHash","status","committed","dispatchClaimed","transactionHash","proof"],"properties":{"terms":{"type":"object","description":"The immutable terms; `intentHash` is their hash. `audience`, `executionRegion` and `submissionEndpoint` are opaque values pinned into the signed terms — do not change them.","required":["contractVersion","id","partnerId","audience","executionRegion","signer","account","chainId","market","operation","submissionOwner","submissionEndpoint","batch","effects","dependencies","maxWalletGasCostRaw","createdAt","executeBefore"],"properties":{"contractVersion":{"type":"integer","const":1,"isRequired":true,"uniqueKey":"intent.terms.contractVersion","typeLabel":"integer"},"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"intent.terms.id","typeLabel":"string\u003cuuid>"},"partnerId":{"type":"string","isRequired":true,"uniqueKey":"intent.terms.partnerId","typeLabel":"string"},"audience":{"type":"string","description":"Opaque signed field.","isRequired":true,"uniqueKey":"intent.terms.audience","typeLabel":"string"},"executionRegion":{"type":"string","description":"Opaque signed field.","isRequired":true,"uniqueKey":"intent.terms.executionRegion","typeLabel":"string"},"signer":{"type":"string","isRequired":true,"uniqueKey":"intent.terms.signer","typeLabel":"string"},"account":{"type":"string","isRequired":true,"uniqueKey":"intent.terms.account","typeLabel":"string"},"chainId":{"type":"string","const":"137","isRequired":true,"uniqueKey":"intent.terms.chainId","typeLabel":"string"},"market":{"type":"string","isRequired":true,"uniqueKey":"intent.terms.market","typeLabel":"string"},"operation":{"type":"string","enum":["split","merge","redeem"],"isRequired":true,"uniqueKey":"intent.terms.operation","typeLabel":"enum\u003cstring>"},"submissionOwner":{"type":"string","enum":["kairos","client"],"isRequired":true,"uniqueKey":"intent.terms.submissionOwner","typeLabel":"enum\u003cstring>"},"submissionEndpoint":{"type":"string","description":"Opaque pinned submission URL. Equals `submission.endpoint`.","isRequired":true,"uniqueKey":"intent.terms.submissionEndpoint","typeLabel":"string"},"batch":{"type":"object","description":"The deposit-wallet batch the owner signs. Calls are `[approval, operation]`.","required":["factory","nonce","deadline","calls"],"properties":{"factory":{"type":"string","isRequired":true,"uniqueKey":"intent.terms.batch.factory","typeLabel":"string"},"nonce":{"type":"string","description":"Decimal.","isRequired":true,"uniqueKey":"intent.terms.batch.nonce","typeLabel":"string"},"deadline":{"type":"string","format":"date-time","description":"Equals `executeBefore`.","isRequired":true,"uniqueKey":"intent.terms.batch.deadline","typeLabel":"string\u003cdate-time>"},"calls":{"type":"array","minItems":1,"maxItems":16,"items":{"type":"object","required":["target","value","data"],"properties":{"target":{"type":"string","isRequired":true,"uniqueKey":"intent.terms.batch.calls.items.[INDEX].target","typeLabel":"string"},"value":{"type":"string","example":"0","isRequired":true,"uniqueKey":"intent.terms.batch.calls.items.[INDEX].value","typeLabel":"string"},"data":{"type":"string","isRequired":true,"uniqueKey":"intent.terms.batch.calls.items.[INDEX].data","typeLabel":"string"}},"uniqueKey":"intent.terms.batch.calls.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"intent.terms.batch.calls","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"intent.terms.batch","typeLabel":"object"},"effects":{"type":"array","description":"Exactly what the batch moves on the deposit wallet — the receipt must match.","items":{"type":"object","description":"An exact gross token movement on the deposit wallet.","required":["token","direction","amountRaw"],"properties":{"token":{"oneOf":[{"type":"object","description":"A token, tagged by `kind`.","required":["kind","contract"],"properties":{"kind":{"type":"string","const":"erc20","isRequired":true,"uniqueKey":"intent.terms.effects.items.[INDEX].token.oneOf.0.kind","typeLabel":"string"},"contract":{"type":"string","isRequired":true,"uniqueKey":"intent.terms.effects.items.[INDEX].token.oneOf.0.contract","typeLabel":"string"}},"isRequired":true,"uniqueKey":"intent.terms.effects.items.[INDEX].token.oneOf.0","typeLabel":"object"},{"type":"object","description":"A token, tagged by `kind`.","required":["kind","contract","tokenId"],"properties":{"kind":{"type":"string","const":"erc1155","isRequired":true,"uniqueKey":"intent.terms.effects.items.[INDEX].token.oneOf.1.kind","typeLabel":"string"},"contract":{"type":"string","isRequired":true,"uniqueKey":"intent.terms.effects.items.[INDEX].token.oneOf.1.contract","typeLabel":"string"},"tokenId":{"type":"string","description":"Decimal token id.","isRequired":true,"uniqueKey":"intent.terms.effects.items.[INDEX].token.oneOf.1.tokenId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"intent.terms.effects.items.[INDEX].token.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"intent.terms.effects.items.[INDEX].token","typeLabel":"object"},"direction":{"type":"string","enum":["debit","credit"],"isRequired":true,"uniqueKey":"intent.terms.effects.items.[INDEX].direction","typeLabel":"enum\u003cstring>"},"amountRaw":{"type":"string","isRequired":true,"uniqueKey":"intent.terms.effects.items.[INDEX].amountRaw","typeLabel":"string"}},"uniqueKey":"intent.terms.effects.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"intent.terms.effects","typeLabel":"object[]"},"dependencies":{"type":"array","items":{"type":"object","description":"A confirmed-before-me intent, pinned by hash.","required":["intentId","intentHash","account","chainId","effects"],"properties":{"intentId":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"intent.terms.dependencies.items.[INDEX].intentId","typeLabel":"string\u003cuuid>"},"intentHash":{"type":"string","isRequired":true,"uniqueKey":"intent.terms.dependencies.items.[INDEX].intentHash","typeLabel":"string"},"account":{"type":"string","isRequired":true,"uniqueKey":"intent.terms.dependencies.items.[INDEX].account","typeLabel":"string"},"chainId":{"type":"string","example":"137","isRequired":true,"uniqueKey":"intent.terms.dependencies.items.[INDEX].chainId","typeLabel":"string"},"effects":{"type":"array","items":{"type":"object","description":"An exact gross token movement on the deposit wallet.","required":["token","direction","amountRaw"],"properties":{"token":{"oneOf":[{"type":"object","description":"A token, tagged by `kind`.","required":["kind","contract"],"properties":{"kind":{"type":"string","const":"erc20","isRequired":true,"uniqueKey":"intent.terms.dependencies.items.[INDEX].effects.items.[INDEX].token.oneOf.0.kind","typeLabel":"string"},"contract":{"type":"string","isRequired":true,"uniqueKey":"intent.terms.dependencies.items.[INDEX].effects.items.[INDEX].token.oneOf.0.contract","typeLabel":"string"}},"isRequired":true,"uniqueKey":"intent.terms.dependencies.items.[INDEX].effects.items.[INDEX].token.oneOf.0","typeLabel":"object"},{"type":"object","description":"A token, tagged by `kind`.","required":["kind","contract","tokenId"],"properties":{"kind":{"type":"string","const":"erc1155","isRequired":true,"uniqueKey":"intent.terms.dependencies.items.[INDEX].effects.items.[INDEX].token.oneOf.1.kind","typeLabel":"string"},"contract":{"type":"string","isRequired":true,"uniqueKey":"intent.terms.dependencies.items.[INDEX].effects.items.[INDEX].token.oneOf.1.contract","typeLabel":"string"},"tokenId":{"type":"string","description":"Decimal token id.","isRequired":true,"uniqueKey":"intent.terms.dependencies.items.[INDEX].effects.items.[INDEX].token.oneOf.1.tokenId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"intent.terms.dependencies.items.[INDEX].effects.items.[INDEX].token.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"intent.terms.dependencies.items.[INDEX].effects.items.[INDEX].token","typeLabel":"object"},"direction":{"type":"string","enum":["debit","credit"],"isRequired":true,"uniqueKey":"intent.terms.dependencies.items.[INDEX].effects.items.[INDEX].direction","typeLabel":"enum\u003cstring>"},"amountRaw":{"type":"string","isRequired":true,"uniqueKey":"intent.terms.dependencies.items.[INDEX].effects.items.[INDEX].amountRaw","typeLabel":"string"}},"uniqueKey":"intent.terms.dependencies.items.[INDEX].effects.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"intent.terms.dependencies.items.[INDEX].effects","typeLabel":"object[]"}},"uniqueKey":"intent.terms.dependencies.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"intent.terms.dependencies","typeLabel":"object[]"},"maxWalletGasCostRaw":{"type":"string","const":"0","description":"The wallet pays no gas.","isRequired":true,"uniqueKey":"intent.terms.maxWalletGasCostRaw","typeLabel":"string"},"createdAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"intent.terms.createdAt","typeLabel":"string\u003cdate-time>"},"executeBefore":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"intent.terms.executeBefore","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"intent.terms","typeLabel":"object"},"intentHash":{"type":"string","isRequired":true,"uniqueKey":"intent.intentHash","typeLabel":"string"},"status":{"type":"string","enum":["needs_signatures","awaiting_client","ready","reconciling","confirmed"],"description":"`needs_signatures` → (`/execute`) `ready` (Kairos submits) or `awaiting_client` (you submit) → `reconciling` → `confirmed` (the only terminal status). A reverted transaction returns the intent to `reconciling`; the signed batch stays valid until `executeBefore`. There is no expired status: an intent whose batch was not mined by `executeBefore` stays where it is.","isRequired":true,"uniqueKey":"intent.status","typeLabel":"enum\u003cstring>"},"committed":{"type":"boolean","isRequired":true,"uniqueKey":"intent.committed","typeLabel":"boolean"},"dispatchClaimed":{"type":"boolean","description":"Kairos has submitted (or is submitting) the batch.","isRequired":true,"uniqueKey":"intent.dispatchClaimed","typeLabel":"boolean"},"transactionHash":{"oneOf":[{"type":"string","description":"The candidate transaction, once known (a report or Kairos's own submission); verified only when `proof` is set.","isRequired":true,"uniqueKey":"intent.transactionHash.oneOf.0","typeLabel":"string"},{"type":"null","description":"The candidate transaction, once known (a report or Kairos's own submission); verified only when `proof` is set.","isRequired":true,"uniqueKey":"intent.transactionHash.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"intent.transactionHash","typeLabel":"string | null"},"proof":{"oneOf":[{"type":"object","description":"The verified, finalized transaction.","required":["transactionHash","blockHash","blockNumber","intentHash","effects"],"properties":{"transactionHash":{"type":"string","isRequired":true,"uniqueKey":"intent.proof.oneOf.0.transactionHash","typeLabel":"string"},"blockHash":{"type":"string","isRequired":true,"uniqueKey":"intent.proof.oneOf.0.blockHash","typeLabel":"string"},"blockNumber":{"type":"string","description":"Decimal.","isRequired":true,"uniqueKey":"intent.proof.oneOf.0.blockNumber","typeLabel":"string"},"intentHash":{"type":"string","isRequired":true,"uniqueKey":"intent.proof.oneOf.0.intentHash","typeLabel":"string"},"effects":{"type":"array","items":{"type":"object","description":"An exact gross token movement on the deposit wallet.","required":["token","direction","amountRaw"],"properties":{"token":{"oneOf":[{"type":"object","description":"A token, tagged by `kind`.","required":["kind","contract"],"properties":{"kind":{"type":"string","const":"erc20","isRequired":true,"uniqueKey":"intent.proof.oneOf.0.effects.items.[INDEX].token.oneOf.0.kind","typeLabel":"string"},"contract":{"type":"string","isRequired":true,"uniqueKey":"intent.proof.oneOf.0.effects.items.[INDEX].token.oneOf.0.contract","typeLabel":"string"}},"isRequired":true,"uniqueKey":"intent.proof.oneOf.0.effects.items.[INDEX].token.oneOf.0","typeLabel":"object"},{"type":"object","description":"A token, tagged by `kind`.","required":["kind","contract","tokenId"],"properties":{"kind":{"type":"string","const":"erc1155","isRequired":true,"uniqueKey":"intent.proof.oneOf.0.effects.items.[INDEX].token.oneOf.1.kind","typeLabel":"string"},"contract":{"type":"string","isRequired":true,"uniqueKey":"intent.proof.oneOf.0.effects.items.[INDEX].token.oneOf.1.contract","typeLabel":"string"},"tokenId":{"type":"string","description":"Decimal token id.","isRequired":true,"uniqueKey":"intent.proof.oneOf.0.effects.items.[INDEX].token.oneOf.1.tokenId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"intent.proof.oneOf.0.effects.items.[INDEX].token.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"intent.proof.oneOf.0.effects.items.[INDEX].token","typeLabel":"object"},"direction":{"type":"string","enum":["debit","credit"],"isRequired":true,"uniqueKey":"intent.proof.oneOf.0.effects.items.[INDEX].direction","typeLabel":"enum\u003cstring>"},"amountRaw":{"type":"string","isRequired":true,"uniqueKey":"intent.proof.oneOf.0.effects.items.[INDEX].amountRaw","typeLabel":"string"}},"uniqueKey":"intent.proof.oneOf.0.effects.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"intent.proof.oneOf.0.effects","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"intent.proof.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"intent.proof.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"intent.proof","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"intent","typeLabel":"object"},"consentRequest":{"type":"object","description":"An EIP-1193 request to run through the wallet's provider exactly as given (`provider.request({method, params})`).\n- `eth_signTypedData_v4`: `params` = `[address, typedData]` — `typedData` is a **JSON string**; pass it unchanged.\n- `personal_sign`: `params` = `[hexMessage, address]`.\n- `wallet_sendCalls` (EIP-5792): `params` = `[{version, chainId, from, atomicRequired, calls}]`; the wallet pays gas.\n- `eth_sendTransaction`: `params` = `[{from, to, data, value, chainId?}]`; the wallet pays gas.","required":["method","params"],"properties":{"method":{"type":"string","enum":["eth_signTypedData_v4","personal_sign","wallet_sendCalls","eth_sendTransaction"],"isRequired":true,"uniqueKey":"consentRequest.method","typeLabel":"enum\u003cstring>"},"params":{"type":"array","items":{"oneOf":[{}],"uniqueKey":"consentRequest.params.items.[INDEX]","typeLabel":"any"},"isRequired":true,"uniqueKey":"consentRequest.params","typeLabel":"any[]"}},"example":{"method":"personal_sign","params":["0x6b6169726f732e7472616465207761…","0x8ba1f109551bD432803012645Ac136ddd64DBA72"]},"isRequired":true,"uniqueKey":"consentRequest","typeLabel":"object"},"nativeRequest":{"type":"object","description":"An EIP-1193 request to run through the wallet's provider exactly as given (`provider.request({method, params})`).\n- `eth_signTypedData_v4`: `params` = `[address, typedData]` — `typedData` is a **JSON string**; pass it unchanged.\n- `personal_sign`: `params` = `[hexMessage, address]`.\n- `wallet_sendCalls` (EIP-5792): `params` = `[{version, chainId, from, atomicRequired, calls}]`; the wallet pays gas.\n- `eth_sendTransaction`: `params` = `[{from, to, data, value, chainId?}]`; the wallet pays gas.","required":["method","params"],"properties":{"method":{"type":"string","enum":["eth_signTypedData_v4","personal_sign","wallet_sendCalls","eth_sendTransaction"],"isRequired":true,"uniqueKey":"nativeRequest.method","typeLabel":"enum\u003cstring>"},"params":{"type":"array","items":{"oneOf":[{}],"uniqueKey":"nativeRequest.params.items.[INDEX]","typeLabel":"any"},"isRequired":true,"uniqueKey":"nativeRequest.params","typeLabel":"any[]"}},"example":{"method":"personal_sign","params":["0x6b6169726f732e7472616465207761…","0x8ba1f109551bD432803012645Ac136ddd64DBA72"]},"isRequired":true,"uniqueKey":"nativeRequest","typeLabel":"object"},"submission":{"type":"object","description":"For `submissionOwner: client`: add `\"signature\": \u003cnative signature>` to `body` and POST it to `endpoint`.","required":["endpoint","method","kind","body"],"properties":{"endpoint":{"type":"string","isRequired":true,"uniqueKey":"submission.endpoint","typeLabel":"string"},"method":{"type":"string","const":"POST","isRequired":true,"uniqueKey":"submission.method","typeLabel":"string"},"kind":{"type":"string","const":"deposit_wallet_batch","isRequired":true,"uniqueKey":"submission.kind","typeLabel":"string"},"body":{"type":"object","description":"`{type: \"WALLET\", from, to, nonce, depositWalletParams: {depositWallet, deadline, calls}}` — no signature.","additionalProperties":true,"isRequired":true,"uniqueKey":"submission.body","typeLabel":"object"}},"isRequired":true,"uniqueKey":"submission","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"intent":{"terms":{"contractVersion":1,"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","partnerId":"\u003cstring>","audience":"\u003cstring>","executionRegion":"\u003cstring>","signer":"\u003cstring>","account":"\u003cstring>","chainId":"137","market":"\u003cstring>","operation":"split","submissionOwner":"kairos","submissionEndpoint":"\u003cstring>","batch":{"factory":"\u003cstring>","nonce":"\u003cstring>","deadline":"2023-11-07T05:31:56Z","calls":[{"target":"\u003cstring>","value":"0","data":"\u003cstring>"}]},"effects":[{"token":{"kind":"erc20","contract":"\u003cstring>"},"direction":"debit","amountRaw":"\u003cstring>"}],"dependencies":[{"intentId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","intentHash":"\u003cstring>","account":"\u003cstring>","chainId":"137","effects":[{"token":{"kind":"erc20","contract":"\u003cstring>"},"direction":"debit","amountRaw":"\u003cstring>"}]}],"maxWalletGasCostRaw":"0","createdAt":"2023-11-07T05:31:56Z","executeBefore":"2023-11-07T05:31:56Z"},"intentHash":"\u003cstring>","status":"needs_signatures","committed":true,"dispatchClaimed":true,"transactionHash":"\u003cstring>","proof":{"transactionHash":"\u003cstring>","blockHash":"\u003cstring>","blockNumber":"\u003cstring>","intentHash":"\u003cstring>","effects":[{"token":{"kind":"erc20","contract":"\u003cstring>"},"direction":"debit","amountRaw":"\u003cstring>"}]}},"consentRequest":{"method":"personal_sign","params":["0x6b6169726f732e7472616465207761…","0x8ba1f109551bD432803012645Ac136ddd64DBA72"]},"nativeRequest":{"method":"personal_sign","params":["0x6b6169726f732e7472616465207761…","0x8ba1f109551bD432803012645Ac136ddd64DBA72"]},"submission":{"endpoint":"\u003cstring>","method":"POST","kind":"deposit_wallet_batch","body":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"5f030f1c-06b2-44ea-a3d1-f92b1e2f023c":{"description":"`invalid on-chain intent request` (field rules: lowercase addresses, `account` ≠ `wallet`, canonical `amountRaw` > 0, `outcome` exactly when redeeming, `executeBefore` within 300 s with whole seconds, at most 16 distinct dependencies); `a valid Idempotency-Key is required`; `wallet must be a 0x address`; `account must be the registered signer's Polymarket deposit wallet`; `CTF intents require a Polymarket market`; `CTF intents require a binary market`; `unsupported CTF operation: legacy CTF redeem cannot enforce a signed token debit limit`; `deposit wallet is not deployed at finality`; `redemption must produce a positive bounded payout` (a losing outcome); `unknown CTF prerequisite`; `CTF prerequisite belongs to another account`; other market and condition checks. Plain text for malformed JSON.","content":{"application/json":{"schema":{"type":"object","description":"Wallet API error body. `error` is a human-readable message; `code` is set on a few structured refusals (e.g. `CLIENT_ORDER_ID_CONFLICT`, `POLYMARKET_V2_TRADING_DISABLED`, `SIGNATURE_EXPIRED`); `errorCode` mirrors `code` where the same refusal can also surface on a failed step. Most `/v3` errors carry only `error`. Framework rejections (malformed JSON, wrong shape, missing content type) are plain text, not this body.","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable message.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable code, present on structured refusals only.","uniqueKey":"code","typeLabel":"string"},"errorCode":{"type":"string","description":"Same as `code`; present where the refusal can also appear as a failed step's `errorCode`.","uniqueKey":"errorCode","typeLabel":"string"}},"example":{"error":"unknown or expired action"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"unknown or expired action"}}},"exampleType":"generated"},"text/plain":{"schema":{"type":"string","description":"A plain-text (non-JSON) rejection from request parsing — malformed JSON, a body of the wrong shape, a missing `Content-Type`, a malformed path id or query. Do not JSON-parse it.","example":"Failed to deserialize the JSON body into the target type: action.price: invalid type: floating point `0.52`, expected a string","uniqueKey":"","typeLabel":"string"},"examples":{"Example":{"title":"Example","value":"Failed to deserialize the JSON body into the target type: action.price: invalid type: floating point `0.52`, expected a string"}},"exampleType":"generated"}},"exampleType":"generated"},"0c0aba25-8238-4fac-aa31-47ab8a16c9aa":{"description":"Tenant failures (`send X-Kairos-Partner-Id or your API key (X-Client-Id, X-Api-Key, X-Api-Secret)`, `invalid API key`), or the wallet proof failed:\n- `malformed sign-in token` — not `SIWE \u003ctoken>` as issued, over 4096 bytes, or an invalid lifetime\n- `sign-in token was issued for another partner or node` — issued for another partner or environment\n- `sign-in token has expired; run a login action`\n- `sign-in token signature is not from its wallet`\n- `Missing authorization` — no `Authorization` header and no API key to prove the wallet; `Invalid API credentials`, `API credential has been revoked` or `Invalid token` when the proving credential is not `SIWE` and fails","content":{"application/json":{"schema":{"type":"object","description":"Wallet API error body. `error` is a human-readable message; `code` is set on a few structured refusals (e.g. `CLIENT_ORDER_ID_CONFLICT`, `POLYMARKET_V2_TRADING_DISABLED`, `SIGNATURE_EXPIRED`); `errorCode` mirrors `code` where the same refusal can also surface on a failed step. Most `/v3` errors carry only `error`. Framework rejections (malformed JSON, wrong shape, missing content type) are plain text, not this body.","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable message.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable code, present on structured refusals only.","uniqueKey":"code","typeLabel":"string"},"errorCode":{"type":"string","description":"Same as `code`; present where the refusal can also appear as a failed step's `errorCode`.","uniqueKey":"errorCode","typeLabel":"string"}},"example":{"error":"unknown or expired action"},"uniqueKey":"","typeLabel":"object"},"example":{"error":"sign-in token has expired; run a login action"},"examples":{"Example":{"title":"Example","value":{"error":"sign-in token has expired; run a login action"}}},"exampleType":"examples"}},"exampleType":"examples"},"4727b7fc-fee1-42a5-b09f-04c9fa2ff708":{"description":"`API key missing trade:execute scope`; `wallet partner is disabled`; `wallet dispatch authority was revoked`; `external-signing execution is not enabled for this account`; `API-key access to polymarket is disabled`; or a tenant refusal.","content":{"application/json":{"schema":{"type":"object","description":"Wallet API error body. `error` is a human-readable message; `code` is set on a few structured refusals (e.g. `CLIENT_ORDER_ID_CONFLICT`, `POLYMARKET_V2_TRADING_DISABLED`, `SIGNATURE_EXPIRED`); `errorCode` mirrors `code` where the same refusal can also surface on a failed step. Most `/v3` errors carry only `error`. Framework rejections (malformed JSON, wrong shape, missing content type) are plain text, not this body.","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable message.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable code, present on structured refusals only.","uniqueKey":"code","typeLabel":"string"},"errorCode":{"type":"string","description":"Same as `code`; present where the refusal can also appear as a failed step's `errorCode`.","uniqueKey":"errorCode","typeLabel":"string"}},"example":{"error":"unknown or expired action"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"unknown or expired action"}}},"exampleType":"generated"}},"exampleType":"generated"},"1c0b3d44-3a0d-4378-a02c-e617ceb94f63":{"description":"`wallet not found`; `on-chain intent not found`.","content":{"application/json":{"schema":{"type":"object","description":"Wallet API error body. `error` is a human-readable message; `code` is set on a few structured refusals (e.g. `CLIENT_ORDER_ID_CONFLICT`, `POLYMARKET_V2_TRADING_DISABLED`, `SIGNATURE_EXPIRED`); `errorCode` mirrors `code` where the same refusal can also surface on a failed step. Most `/v3` errors carry only `error`. Framework rejections (malformed JSON, wrong shape, missing content type) are plain text, not this body.","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable message.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable code, present on structured refusals only.","uniqueKey":"code","typeLabel":"string"},"errorCode":{"type":"string","description":"Same as `code`; present where the refusal can also appear as a failed step's `errorCode`.","uniqueKey":"errorCode","typeLabel":"string"}},"example":{"error":"unknown or expired action"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"unknown or expired action"}}},"exampleType":"generated"}},"exampleType":"generated"},"f6ef706f-f6f2-4683-84f4-8bee582009f6":{"description":"`Idempotency-Key already names another intent`; `Polymarket V2 trading is disabled`; `this wallet is not set up yet; run a setup action first`.","content":{"application/json":{"schema":{"type":"object","description":"Wallet API error body. `error` is a human-readable message; `code` is set on a few structured refusals (e.g. `CLIENT_ORDER_ID_CONFLICT`, `POLYMARKET_V2_TRADING_DISABLED`, `SIGNATURE_EXPIRED`); `errorCode` mirrors `code` where the same refusal can also surface on a failed step. Most `/v3` errors carry only `error`. Framework rejections (malformed JSON, wrong shape, missing content type) are plain text, not this body.","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable message.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable code, present on structured refusals only.","uniqueKey":"code","typeLabel":"string"},"errorCode":{"type":"string","description":"Same as `code`; present where the refusal can also appear as a failed step's `errorCode`.","uniqueKey":"errorCode","typeLabel":"string"}},"example":{"error":"unknown or expired action"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"unknown or expired action"}}},"exampleType":"generated"}},"exampleType":"generated"},"366e2e45-0a13-42e3-8681-72390f27f9a6":{"description":"Plain text (`Failed to buffer the request body: length limit exceeded`) when the body is over the limit: 16 KiB for fee settlements, 64 KiB for trade plans and on-chain intents, the server-wide 2 MiB for actions. Above 64 KiB the answer may instead be `{\"error\": \"request body too large\"}`.","content":{"text/plain":{"schema":{"type":"string","description":"A plain-text (non-JSON) rejection from request parsing — malformed JSON, a body of the wrong shape, a missing `Content-Type`, a malformed path id or query. Do not JSON-parse it.","example":"Failed to deserialize the JSON body into the target type: action.price: invalid type: floating point `0.52`, expected a string","uniqueKey":"","typeLabel":"string"},"examples":{"Example":{"title":"Example","value":"Failed to deserialize the JSON body into the target type: action.price: invalid type: floating point `0.52`, expected a string"}},"exampleType":"generated"},"application/json":{"schema":{"type":"object","description":"Wallet API error body. `error` is a human-readable message; `code` is set on a few structured refusals (e.g. `CLIENT_ORDER_ID_CONFLICT`, `POLYMARKET_V2_TRADING_DISABLED`, `SIGNATURE_EXPIRED`); `errorCode` mirrors `code` where the same refusal can also surface on a failed step. Most `/v3` errors carry only `error`. Framework rejections (malformed JSON, wrong shape, missing content type) are plain text, not this body.","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable message.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable code, present on structured refusals only.","uniqueKey":"code","typeLabel":"string"},"errorCode":{"type":"string","description":"Same as `code`; present where the refusal can also appear as a failed step's `errorCode`.","uniqueKey":"errorCode","typeLabel":"string"}},"example":{"error":"unknown or expired action"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"unknown or expired action"}}},"exampleType":"generated"}},"exampleType":"generated"},"2c1ae319-3cc8-4f2f-bd62-4828b9b90bab":{"description":"Plain text — the request has no `Content-Type: application/json` header.","content":{"text/plain":{"schema":{"type":"string","description":"A plain-text (non-JSON) rejection from request parsing — malformed JSON, a body of the wrong shape, a missing `Content-Type`, a malformed path id or query. Do not JSON-parse it.","example":"Failed to deserialize the JSON body into the target type: action.price: invalid type: floating point `0.52`, expected a string","uniqueKey":"","typeLabel":"string"},"examples":{"Example":{"title":"Example","value":"Failed to deserialize the JSON body into the target type: action.price: invalid type: floating point `0.52`, expected a string"}},"exampleType":"generated"}},"exampleType":"generated"},"65851007-22a7-4186-82c0-399d4b572d35":{"description":"Plain text — the body is valid JSON of the wrong shape (a missing or unknown field, or a wrong type).","content":{"text/plain":{"schema":{"type":"string","description":"A plain-text (non-JSON) rejection from request parsing — malformed JSON, a body of the wrong shape, a missing `Content-Type`, a malformed path id or query. Do not JSON-parse it.","example":"Failed to deserialize the JSON body into the target type: action.price: invalid type: floating point `0.52`, expected a string","uniqueKey":"","typeLabel":"string"},"examples":{"Example":{"title":"Example","value":"Failed to deserialize the JSON body into the target type: action.price: invalid type: floating point `0.52`, expected a string"}},"exampleType":"generated"}},"exampleType":"generated"},"911fcf8c-45d1-4694-b40d-e602c1c02514":{"description":"`rate limit exceeded for this endpoint; retry later`. The default limit is 120 requests per minute per client IP per path (1000 when `X-Client-Id` is sent), over a sliding 60 s window; `GET` and `POST` on one path share it. No `Retry-After` header is sent.","content":{"application/json":{"schema":{"type":"object","description":"Wallet API error body. `error` is a human-readable message; `code` is set on a few structured refusals (e.g. `CLIENT_ORDER_ID_CONFLICT`, `POLYMARKET_V2_TRADING_DISABLED`, `SIGNATURE_EXPIRED`); `errorCode` mirrors `code` where the same refusal can also surface on a failed step. Most `/v3` errors carry only `error`. Framework rejections (malformed JSON, wrong shape, missing content type) are plain text, not this body.","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable message.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable code, present on structured refusals only.","uniqueKey":"code","typeLabel":"string"},"errorCode":{"type":"string","description":"Same as `code`; present where the refusal can also appear as a failed step's `errorCode`.","uniqueKey":"errorCode","typeLabel":"string"}},"example":{"error":"unknown or expired action"},"uniqueKey":"","typeLabel":"object"},"example":{"error":"rate limit exceeded for this endpoint; retry later"},"examples":{"Example":{"title":"Example","value":{"error":"rate limit exceeded for this endpoint; retry later"}}},"exampleType":"examples"}},"exampleType":"examples"},"a249582d-eee0-42c8-89fa-d25d4c60f0f9":{"description":"`internal error`.","content":{"application/json":{"schema":{"type":"object","description":"Wallet API error body. `error` is a human-readable message; `code` is set on a few structured refusals (e.g. `CLIENT_ORDER_ID_CONFLICT`, `POLYMARKET_V2_TRADING_DISABLED`, `SIGNATURE_EXPIRED`); `errorCode` mirrors `code` where the same refusal can also surface on a failed step. Most `/v3` errors carry only `error`. Framework rejections (malformed JSON, wrong shape, missing content type) are plain text, not this body.","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable message.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable code, present on structured refusals only.","uniqueKey":"code","typeLabel":"string"},"errorCode":{"type":"string","description":"Same as `code`; present where the refusal can also appear as a failed step's `errorCode`.","uniqueKey":"errorCode","typeLabel":"string"}},"example":{"error":"unknown or expired action"},"uniqueKey":"","typeLabel":"object"},"example":{"error":"internal error"},"examples":{"Example":{"title":"Example","value":{"error":"internal error"}}},"exampleType":"examples"}},"exampleType":"examples"},"a43e2ab7-8c91-4dd3-b721-78d0c751572d":{"description":"Production: the lane is not released. Staging: `canonical Polygon state is unavailable` (an RPC or metadata failure — **or a `redeem` on a market that has not resolved yet**); `execution is disabled for this operation`; `trade plans are disabled`; `partner registry unavailable; retry shortly`; `rate limiter unavailable`.","content":{"application/json":{"schema":{"type":"object","description":"Wallet API error body. `error` is a human-readable message; `code` is set on a few structured refusals (e.g. `CLIENT_ORDER_ID_CONFLICT`, `POLYMARKET_V2_TRADING_DISABLED`, `SIGNATURE_EXPIRED`); `errorCode` mirrors `code` where the same refusal can also surface on a failed step. Most `/v3` errors carry only `error`. Framework rejections (malformed JSON, wrong shape, missing content type) are plain text, not this body.","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable message.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable code, present on structured refusals only.","uniqueKey":"code","typeLabel":"string"},"errorCode":{"type":"string","description":"Same as `code`; present where the refusal can also appear as a failed step's `errorCode`.","uniqueKey":"errorCode","typeLabel":"string"}},"example":{"error":"unknown or expired action"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"unknown or expired action"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"ea9305b9-a391-4389-8b4d-b6cc6a31ef2b":{"walletPartnerId":{"type":"apiKey","in":"header","name":"X-Kairos-Partner-Id","description":"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.","scopes":[],"schemeName":"walletPartnerId"},"walletSignIn":{"type":"apiKey","in":"header","name":"Authorization","description":"Wallet sign-in token: `SIWE \u003ctoken>`, where `\u003ctoken>` 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.","scopes":[],"schemeName":"walletSignIn"}},"6ed60497-6f13-426c-8a50-07d07fd49f12":{"apiKeyClientId":{"type":"apiKey","in":"header","name":"X-Client-Id","description":"Credential client id (`kairos_ck_...`). Must be sent together with X-Api-Key and X-Api-Secret.","scopes":[],"schemeName":"apiKeyClientId"},"apiKeyKey":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"64-char hex API key.","scopes":[],"schemeName":"apiKeyKey"},"apiKeySecret":{"type":"apiKey","in":"header","name":"X-Api-Secret","description":"64-char hex API secret.","scopes":[],"schemeName":"apiKeySecret"},"walletSignIn":{"type":"apiKey","in":"header","name":"Authorization","description":"Wallet sign-in token: `SIWE \u003ctoken>`, where `\u003ctoken>` 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.","scopes":[],"schemeName":"walletSignIn"}},"12901b2b-57fd-4dc5-8181-e437109a4edc":{"apiKeyClientId":{"type":"apiKey","in":"header","name":"X-Client-Id","description":"Credential client id (`kairos_ck_...`). Must be sent together with X-Api-Key and X-Api-Secret.","scopes":[],"schemeName":"apiKeyClientId"},"apiKeyKey":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"64-char hex API key.","scopes":[],"schemeName":"apiKeyKey"},"apiKeySecret":{"type":"apiKey","in":"header","name":"X-Api-Secret","description":"64-char hex API secret.","scopes":[],"schemeName":"apiKeySecret"}},"0c0e1869-66ee-45a4-9c90-1a810b2ff07d":{"walletPartnerId":{"type":"apiKey","in":"header","name":"X-Kairos-Partner-Id","description":"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.","scopes":[],"schemeName":"walletPartnerId"},"apiKeyClientId":{"type":"apiKey","in":"header","name":"X-Client-Id","description":"Credential client id (`kairos_ck_...`). Must be sent together with X-Api-Key and X-Api-Secret.","scopes":[],"schemeName":"apiKeyClientId"},"apiKeyKey":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"64-char hex API key.","scopes":[],"schemeName":"apiKeyKey"},"apiKeySecret":{"type":"apiKey","in":"header","name":"X-Api-Secret","description":"64-char hex API secret.","scopes":[],"schemeName":"apiKeySecret"}},"450860d1-3571-4253-b0fb-2547c68d5dd6":{"walletPartnerId":{"type":"apiKey","in":"header","name":"X-Kairos-Partner-Id","description":"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.","scopes":[],"schemeName":"walletPartnerId"},"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"First-party Kairos session JWT (web app sessions). Not issued to API consumers.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"330d272c-627a-4ff5-ad01-0263b300ce7a":{"url":"https://execution.kairos.trade","description":"Production"},"83635983-3d27-4bb6-bc26-42ecc043c06c":{"url":"https://staging-execution.kairos.trade","description":"Staging"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-Kairos-Partner-Id","description":"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.","scopes":[],"schemeName":"walletPartnerId"},"schema":{"title":"X-Kairos-Partner-Id","type":"string","description":"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.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"walletPartnerId","name":"X-Kairos-Partner-Id"},{"scheme":{"type":"apiKey","in":"header","name":"Authorization","description":"Wallet sign-in token: `SIWE \u003ctoken>`, where `\u003ctoken>` 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.","scopes":[],"schemeName":"walletSignIn"},"schema":{"title":"Authorization","type":"string","description":"Wallet sign-in token: `SIWE \u003ctoken>`, where `\u003ctoken>` 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.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"walletSignIn","name":"Authorization"}],"title":"walletPartnerId \u0026 walletSignIn"},{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-Client-Id","description":"Credential client id (`kairos_ck_...`). Must be sent together with X-Api-Key and X-Api-Secret.","scopes":[],"schemeName":"apiKeyClientId"},"schema":{"title":"X-Client-Id","type":"string","description":"Credential client id (`kairos_ck_...`). Must be sent together with X-Api-Key and X-Api-Secret.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKeyClientId","name":"X-Client-Id"},{"scheme":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"64-char hex API key.","scopes":[],"schemeName":"apiKeyKey"},"schema":{"title":"X-Api-Key","type":"string","description":"64-char hex API key.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKeyKey","name":"X-Api-Key"},{"scheme":{"type":"apiKey","in":"header","name":"X-Api-Secret","description":"64-char hex API secret.","scopes":[],"schemeName":"apiKeySecret"},"schema":{"title":"X-Api-Secret","type":"string","description":"64-char hex API secret.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKeySecret","name":"X-Api-Secret"},{"scheme":{"type":"apiKey","in":"header","name":"Authorization","description":"Wallet sign-in token: `SIWE \u003ctoken>`, where `\u003ctoken>` 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.","scopes":[],"schemeName":"walletSignIn"},"schema":{"title":"Authorization","type":"string","description":"Wallet sign-in token: `SIWE \u003ctoken>`, where `\u003ctoken>` 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.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"walletSignIn","name":"Authorization"}],"title":"apiKeyClientId \u0026 apiKeyKey \u0026 apiKeySecret \u0026 walletSignIn"},{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-Client-Id","description":"Credential client id (`kairos_ck_...`). Must be sent together with X-Api-Key and X-Api-Secret.","scopes":[],"schemeName":"apiKeyClientId"},"schema":{"title":"X-Client-Id","type":"string","description":"Credential client id (`kairos_ck_...`). Must be sent together with X-Api-Key and X-Api-Secret.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKeyClientId","name":"X-Client-Id"},{"scheme":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"64-char hex API key.","scopes":[],"schemeName":"apiKeyKey"},"schema":{"title":"X-Api-Key","type":"string","description":"64-char hex API key.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKeyKey","name":"X-Api-Key"},{"scheme":{"type":"apiKey","in":"header","name":"X-Api-Secret","description":"64-char hex API secret.","scopes":[],"schemeName":"apiKeySecret"},"schema":{"title":"X-Api-Secret","type":"string","description":"64-char hex API secret.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKeySecret","name":"X-Api-Secret"}],"title":"apiKeyClientId \u0026 apiKeyKey \u0026 apiKeySecret"},{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-Kairos-Partner-Id","description":"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.","scopes":[],"schemeName":"walletPartnerId"},"schema":{"title":"X-Kairos-Partner-Id","type":"string","description":"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.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"walletPartnerId","name":"X-Kairos-Partner-Id"},{"scheme":{"type":"apiKey","in":"header","name":"X-Client-Id","description":"Credential client id (`kairos_ck_...`). Must be sent together with X-Api-Key and X-Api-Secret.","scopes":[],"schemeName":"apiKeyClientId"},"schema":{"title":"X-Client-Id","type":"string","description":"Credential client id (`kairos_ck_...`). Must be sent together with X-Api-Key and X-Api-Secret.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKeyClientId","name":"X-Client-Id"},{"scheme":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"64-char hex API key.","scopes":[],"schemeName":"apiKeyKey"},"schema":{"title":"X-Api-Key","type":"string","description":"64-char hex API key.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKeyKey","name":"X-Api-Key"},{"scheme":{"type":"apiKey","in":"header","name":"X-Api-Secret","description":"64-char hex API secret.","scopes":[],"schemeName":"apiKeySecret"},"schema":{"title":"X-Api-Secret","type":"string","description":"64-char hex API secret.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKeySecret","name":"X-Api-Secret"}],"title":"walletPartnerId \u0026 apiKeyClientId \u0026 apiKeyKey \u0026 apiKeySecret"},{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-Kairos-Partner-Id","description":"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.","scopes":[],"schemeName":"walletPartnerId"},"schema":{"title":"X-Kairos-Partner-Id","type":"string","description":"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.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"walletPartnerId","name":"X-Kairos-Partner-Id"},{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"First-party Kairos session JWT (web app sessions). Not issued to API consumers.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"First-party Kairos session JWT (web app sessions). Not issued to API consumers.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"walletPartnerId \u0026 bearerAuth"}]},"originalFileLocation":"openapi/wallet-api.json"},"subdomain":"kairos-c5456474","siteName":"Kairos","title":"Prepare a split, merge or redeem on a Polymarket deposit wallet - Kairos","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-29T04:21:19.679Z","originalFileLocation":"api-reference/partner/on-chain-intents-preview/prepare-a-split-merge-or-redeem-on-a-polymarket-deposit-wallet.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"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\u0026#x27;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: \u0026quot;client\u0026quot; (for integrators that have arranged submission access with Kairos), POST submission.body plus \u0026quot;signature\u0026quot;: 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.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Kairos\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/kairos-c5456474/9YOcCIzMBy0Rv1b-/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/kairos-c5456474/9YOcCIzMBy0Rv1b-/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/kairos-c5456474/9YOcCIzMBy0Rv1b-/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/kairos-c5456474/9YOcCIzMBy0Rv1b-/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/kairos-c5456474/9YOcCIzMBy0Rv1b-/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/kairos-c5456474/9YOcCIzMBy0Rv1b-/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/kairos-c5456474/9YOcCIzMBy0Rv1b-/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/kairos-c5456474/9YOcCIzMBy0Rv1b-/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/kairos-c5456474/9YOcCIzMBy0Rv1b-/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Prepare a split, merge or redeem on a Polymarket deposit wallet - Kairos\">\u003cmeta data-mint-head property=\"og:description\" content=\"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\u0026#x27;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: \u0026quot;client\u0026quot; (for integrators that have arranged submission access with Kairos), POST submission.body plus \u0026quot;signature\u0026quot;: 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.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Kairos\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.kairos.trade/api-reference/partner/on-chain-intents-preview/prepare-a-split-merge-or-redeem-on-a-polymarket-deposit-wallet\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://kairos-c5456474.mintlify.app/_mintlify/api/og/v2?division=On-chain+intents+%28preview%29\u0026amp;title=Prepare+a+split%2C+merge+or+redeem+on+a+Polymarket+deposit+wallet\u0026amp;description=Preview%3A+available+on+staging+%28%60https%3A%2F%2Fstaging-execution.kairos.trade%60%29%3B+production+returns+%60503%60+until+release.%0A%0ARuns+one+conditional-token+operation+%E2%80%94+%60split\u0026amp;theme=530643ae41273bc052a9a850\u0026amp;signature=8d5126020fe9d492f0fde42a6ea58a3c0e6dc76001d95f6057b0ea98e43d1b5e\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Prepare a split, merge or redeem on a Polymarket deposit wallet - Kairos\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"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\u0026#x27;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: \u0026quot;client\u0026quot; (for integrators that have arranged submission access with Kairos), POST submission.body plus \u0026quot;signature\u0026quot;: 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.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://kairos-c5456474.mintlify.app/_mintlify/api/og/v2?division=On-chain+intents+%28preview%29\u0026amp;title=Prepare+a+split%2C+merge+or+redeem+on+a+Polymarket+deposit+wallet\u0026amp;description=Preview%3A+available+on+staging+%28%60https%3A%2F%2Fstaging-execution.kairos.trade%60%29%3B+production+returns+%60503%60+until+release.%0A%0ARuns+one+conditional-token+operation+%E2%80%94+%60split\u0026amp;theme=530643ae41273bc052a9a850\u0026amp;signature=8d5126020fe9d492f0fde42a6ea58a3c0e6dc76001d95f6057b0ea98e43d1b5e\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/kairos-c5456474/9YOcCIzMBy0Rv1b-/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Kairos\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#807dfe\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.kairos.trade/api-reference/partner/on-chain-intents-preview/prepare-a-split-merge-or-redeem-on-a-polymarket-deposit-wallet\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/partner/on-chain-intents-preview/prepare-a-split-merge-or-redeem-on-a-polymarket-deposit-wallet.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.kairos.trade/#organization\",\"name\":\"Kairos\",\"url\":\"https://docs.kairos.trade\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/kairos-c5456474/JzYk92-enXUuMl0B/logo/kairos-wing.png?fit=max\u0026auto=format\u0026n=JzYk92-enXUuMl0B\u0026q=85\u0026s=c7c397bb87847c7f0e27019d68594bff\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.kairos.trade#website\",\"name\":\"Kairos\",\"url\":\"https://docs.kairos.trade\",\"publisher\":{\"@id\":\"https://docs.kairos.trade/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.kairos.trade/api-reference/partner/on-chain-intents-preview/prepare-a-split-merge-or-redeem-on-a-polymarket-deposit-wallet#webpage\",\"url\":\"https://docs.kairos.trade/api-reference/partner/on-chain-intents-preview/prepare-a-split-merge-or-redeem-on-a-polymarket-deposit-wallet\",\"name\":\"Prepare a split, merge or redeem on a Polymarket deposit wallet\",\"description\":\"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\\\": 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.\",\"dateModified\":\"2026-10-29T04:21:19.679Z\",\"isPartOf\":{\"@id\":\"https://docs.kairos.trade#website\"},\"breadcrumb\":{\"@id\":\"https://docs.kairos.trade/api-reference/partner/on-chain-intents-preview/prepare-a-split-merge-or-redeem-on-a-polymarket-deposit-wallet#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.kairos.trade/api-reference/partner/on-chain-intents-preview/prepare-a-split-merge-or-redeem-on-a-polymarket-deposit-wallet#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.kairos.trade/api-reference/partner/actions/start-a-wallet-action-setup-order-cancel-login\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Prepare a split, merge or redeem on a Polymarket deposit wallet\",\"item\":\"https://docs.kairos.trade/api-reference/partner/on-chain-intents-preview/prepare-a-split-merge-or-redeem-on-a-polymarket-deposit-wallet\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.kairos.trade/api-reference/partner/on-chain-intents-preview/prepare-a-split-merge-or-redeem-on-a-polymarket-deposit-wallet#apireference\",\"headline\":\"Prepare a split, merge or redeem on a Polymarket deposit wallet\",\"name\":\"Prepare a split, merge or redeem on a Polymarket deposit wallet\",\"description\":\"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\\\": 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.\",\"url\":\"https://docs.kairos.trade/api-reference/partner/on-chain-intents-preview/prepare-a-split-merge-or-redeem-on-a-polymarket-deposit-wallet\",\"mainEntityOfPage\":{\"@id\":\"https://docs.kairos.trade/api-reference/partner/on-chain-intents-preview/prepare-a-split-merge-or-redeem-on-a-polymarket-deposit-wallet#webpage\"},\"dateModified\":\"2026-10-29T04:21:19.679Z\",\"publisher\":{\"@id\":\"https://docs.kairos.trade/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.kairos.trade#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Kairos\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Kairos","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"Partner API","groups":[{"group":"Get started","icon":"rocket","pages":[{"title":"Kairos Partner API","sidebarTitle":"Introduction","icon":"wallet","href":"/wallets/overview"},{"title":"Onboarding and go-live","sidebarTitle":"Onboarding and go-live","icon":"list-check","href":"/wallets/onboarding"},{"title":"Quickstart: your first order","sidebarTitle":"Quickstart","icon":"rocket","href":"/wallets/quickstart"},{"title":"Partner API authentication","sidebarTitle":"Authentication","icon":"key","href":"/wallets/authentication"}]},{"group":"Onboard users","icon":"user-plus","pages":[{"title":"Set up and fund a wallet","sidebarTitle":"Set up and fund a wallet","icon":"user-plus","href":"/wallets/setup"},{"title":"Venue rules","sidebarTitle":"Venue rules","icon":"building-columns","href":"/wallets/venues"}]},{"group":"Trade","icon":"arrow-right-arrow-left","pages":[{"title":"Show markets","sidebarTitle":"Show markets","icon":"chart-line","href":"/wallets/markets"},{"title":"Place and cancel orders","sidebarTitle":"Place and cancel orders","icon":"arrow-right-arrow-left","href":"/wallets/trade"},{"title":"Show orders and positions","sidebarTitle":"Show orders and positions","icon":"briefcase","href":"/wallets/portfolio"},{"title":"What the wallet signs","sidebarTitle":"What the wallet signs","icon":"signature","href":"/wallets/signing"}]},{"group":"Route and fund","icon":"route","pages":[{"title":"Routing across venues","sidebarTitle":"Routing across venues","icon":"route","href":"/wallets/routing"},{"title":"Funded trade plans","tag":"Preview","sidebarTitle":"Funded trade plans","icon":"route","href":"/wallets/trade-plans"},{"title":"Split, merge and redeem","tag":"Preview","sidebarTitle":"Split, merge, redeem","icon":"link","href":"/wallets/onchain"}]},{"group":"Partner fees","icon":"receipt","pages":[{"title":"Partner fees and settlement","tag":"Preview","sidebarTitle":"Partner fees","icon":"receipt","href":"/wallets/fees"}]},{"group":"Build","icon":"code","pages":[{"title":"TypeScript SDK","sidebarTitle":"TypeScript SDK","icon":"js","href":"/wallets/sdk"},{"title":"Without the SDK: plain HTTP","sidebarTitle":"Plain HTTP clients","icon":"terminal","href":"/wallets/http"},{"title":"Errors, limits and idempotency","sidebarTitle":"Errors and limits","icon":"book","href":"/wallets/reference"}]},{"group":"Endpoints","icon":"brackets-curly","pages":[{"group":"Actions","pages":[{"title":"Start a wallet action (setup, order, cancel, login)","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/actions","href":"/api-reference/partner/actions/start-a-wallet-action-setup-order-cancel-login"},{"title":"Read an action's current step","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/actions/{id}","href":"/api-reference/partner/actions/read-an-actions-current-step"},{"title":"Answer the current step (signature or wallet result)","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/actions/{id}","href":"/api-reference/partner/actions/answer-the-current-step-signature-or-wallet-result"}]},{"group":"Reads","pages":[{"title":"Read a wallet's readiness and balances per venue","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/wallets/{address}","href":"/api-reference/partner/reads/read-a-wallets-readiness-and-balances-per-venue"},{"title":"List a wallet's orders across venues","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/wallets/{address}/orders","href":"/api-reference/partner/reads/list-a-wallets-orders-across-venues"},{"title":"List a wallet's positions across venues","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/wallets/{address}/positions","href":"/api-reference/partner/reads/list-a-wallets-positions-across-venues"}]},{"group":"Fees (preview)","pages":[{"title":"Read a wallet's unpaid trading fees per venue","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/fees","href":"/api-reference/partner/fees-preview/read-a-wallets-unpaid-trading-fees-per-venue"},{"title":"Open a settlement for a wallet's unpaid fees on one venue","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/fees/settlements","href":"/api-reference/partner/fees-preview/open-a-settlement-for-a-wallets-unpaid-fees-on-one-venue"},{"title":"Read (and advance) a fee settlement","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/fees/settlements/{id}","href":"/api-reference/partner/fees-preview/read-and-advance-a-fee-settlement"},{"title":"Post the wallet's signature or transaction hash for a settlement","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/fees/settlements/{id}/answer","href":"/api-reference/partner/fees-preview/post-the-wallets-signature-or-transaction-hash-for-a-settlement"}]},{"group":"Trade plans (preview)","pages":[{"title":"Prepare a trade plan (one buy, optionally funded cross-chain)","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/trade-plans","href":"/api-reference/partner/trade-plans-preview/prepare-a-trade-plan-one-buy-optionally-funded-cross-chain"},{"title":"Read a trade plan","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/trade-plans/{id}","href":"/api-reference/partner/trade-plans-preview/read-a-trade-plan"},{"title":"Post signatures for a trade plan's requests","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/trade-plans/{id}/answers","href":"/api-reference/partner/trade-plans-preview/post-signatures-for-a-trade-plans-requests"},{"title":"Commit a trade plan for execution","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/trade-plans/{id}/execute","href":"/api-reference/partner/trade-plans-preview/commit-a-trade-plan-for-execution"},{"title":"Report client-submitted funding permits","description":"Preview: available on staging (`https://staging-execution.kairos.trade`); production returns `503` until release.\n\nOnly for committed plans with `submission.funding: \"client\"`. After you POST a signed funding permit to its `externalSubmission.endpoint`, report it here so Kairos checks the funding right away. A report is only a hint: it never marks funding as confirmed — Kairos confirms from the provider and the destination chain. `requestHash` and `providerRequestId` must equal the values on the plan's request.","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/trade-plans/{id}/reports","href":"/api-reference/partner/trade-plans-preview/report-client-submitted-funding-permits"}]},{"group":"On-chain intents (preview)","pages":[{"title":"Prepare a split, merge or redeem on a Polymarket deposit wallet","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/onchain-intents","href":"/api-reference/partner/on-chain-intents-preview/prepare-a-split-merge-or-redeem-on-a-polymarket-deposit-wallet"},{"title":"Read an on-chain intent","description":"Preview: available on staging (`https://staging-execution.kairos.trade`); production returns `503` until release.\n\nReturns the intent and its signing requests. Poll until `intent.status` is `confirmed`; `intent.proof` then holds the verified transaction. A committed intent keeps being watched, including after `executeBefore`; an uncommitted one is not. A batch not mined by `executeBefore` (its on-chain deadline) can no longer land, so its intent never confirms — prepare a new one.","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/onchain-intents/{id}","href":"/api-reference/partner/on-chain-intents-preview/read-an-on-chain-intent"},{"title":"Commit an on-chain intent with its signatures","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/onchain-intents/{id}/execute","href":"/api-reference/partner/on-chain-intents-preview/commit-an-on-chain-intent-with-its-signatures"},{"title":"Report the transaction hash of a client-submitted intent","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/onchain-intents/{id}/reports","href":"/api-reference/partner/on-chain-intents-preview/report-the-transaction-hash-of-a-client-submitted-intent"}]}]}]},{"tab":"Trading API","pages":[{"title":"Trading API","href":"/guides/order-types"}]},{"tab":"Market Data","pages":[{"title":"Market Data","href":"/market-data/overview"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference"}]}]},"basePath":"","title":"Prepare a split, merge or redeem on a Polymarket deposit wallet - Kairos","buildId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","deploymentId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","dynamics":["c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["OpenApiReferenceProvider-DX1Meug0.js","utils-B_OMIQVC.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-ChxhRPMa.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CuKvD8Iv.js","snippetPresets-C5d7p2hp.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","Page-BAvA99GL.js","ApiExamples-CfHcE8m4.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C1zZV314.js","shallow-CmQhqCJn.js","getApiPlaygroundDisplay-YRo9s1O7.js","CodeSnippet-RN1MTdfk.js","CodeSnippets-DKLPHxJA.js","getPastedJson-bz0M41mU.js","icon-CsmhpPrv.js","MethodPill-CNGsVE77.js","DuplicateIcon-DilfU_Z2.js","createIcon-BdsYzQck.js","DynamicMarkdown-CbqEDjbV.js","SectionHeading-O6hXpFCN.js","axios-vUo_bRtp.js","Markdown-nKm-uidQ.js","clsx-ClVdStUn.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CIQkMg3R.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-ImrFS4Fy.js"]}