Prepare a trade plan (one buy, optionally funded cross-chain)
Preview: available on staging (https://staging-execution.kairos.trade); production returns 503 until release.
A trade plan is one buy order on one venue, authorized up front in one batch of signatures, with an explicit fee ceiling (tradeBudget) and hard deadlines. When the venue account is short of collateral, the plan can also bridge exactly the shortfall from the same wallet’s USDC on Polygon (137) or Arbitrum (42161) through gasless permits. Kairos runs funding first and submits the order only after the destination credit is final.
Use /v3/actions for sells, cancels, setup and login; trade plans are buy-only and the venue wallet must already be set up through a setup action.
Flow. Prepare → check order (the server may normalize it: canonical outcome; on Predict.fun a GTC order becomes a GTD order bounded by the venue session) → sign every requests[] entry whose actionable is true → POST /v3/trade-plans/{id}/answers and/or POST /v3/trade-plans/{id}/execute before executeBefore → poll GET /v3/trade-plans/{id}.
An unfunded plan needs 2 signatures (plan, trade); a funded plan adds funding-1 and funding-2, signed on the source chain. Every signature must be a plain 65-byte ECDSA signature (low-s) from wallet.
Idempotency.Idempotency-Key is required. The same key with the same body returns the stored plan in its current state; with a different body it is 409. clientOrderId is unique per wallet and venue across plans.
Fees.tradeBudget.maxPlatformFeeBps is the Kairos maximum plus the partner maximum (partnerFee.maxBps), never above 1000 bps (10%). Partner fees are configured by Kairos per partner and pinned into the plan the wallet signs. Fees are not deducted in the order: they accrue as debt and are paid through /v3/fees/settlements. When the wallet’s debt is at or above the partner’s threshold, prepare returns 409 FEE_SETTLEMENT_REQUIRED.
Wallet API partner id, issued by Kairos together with the partner's base URL. Identifies the partner (tenant) on every /v3 call; sent instead of an API key. Letters, digits and ._:-, at most 64 characters, case-insensitive. A partner id issued for an individual account cannot be sent this way — that account sends its API key triple instead.
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/trade-plans. camelCase; unknown fields are refused.
The order. Decimals must be canonical ("0.5", not "0.50"; "1", not "1.0"). size must match the venue's share lot exactly.
Hyperliquid: whole-share size, at most 5 price decimals, GTC/FAK/IOC only.
In a response this is the effective order — check it before signing: outcome is canonical and on Predict.fun a GTC order may come back as GTD with expiresAt set.
Omit or null when the collateral is already at the venue.
Show child attributes
Response
The prepared plan in needs_signatures. A replay with the same Idempotency-Key and body returns the stored plan in its current state.
A trade plan. Statuses: needs_signatures → ready_to_execute → (/execute) funding_pending → trade_pending → completed, with reconciling while an outcome is being confirmed. Terminal: completed, expired, failed, funded_trade_failed, funded_trade_expired.
audience and tradeExecutionRegion are opaque values signed into the plan — do not interpret or change them.
The order. Decimals must be canonical ("0.5", not "0.50"; "1", not "1.0"). size must match the venue's share lot exactly.
Hyperliquid: whole-share size, at most 5 price decimals, GTC/FAK/IOC only.
In a response this is the effective order — check it before signing: outcome is canonical and on Predict.fun a GTC order may come back as GTD with expiresAt set.
{"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/trade-plans-preview/prepare-a-trade-plan-one-buy-optionally-funded-cross-chain","slug":"/api-reference/partner/trade-plans-preview/prepare-a-trade-plan-one-buy-optionally-funded-cross-chain","pageMetadata":{"title":"Prepare a trade plan (one buy, optionally funded cross-chain)","description":"Preview: available on staging (`https://staging-execution.kairos.trade`); production returns `503` until release.\n\nA trade plan is **one buy order on one venue**, authorized up front in one batch of signatures, with an explicit fee ceiling (`tradeBudget`) and hard deadlines. When the venue account is short of collateral, the plan can also bridge **exactly the shortfall** from the same wallet's USDC on Polygon (`137`) or Arbitrum (`42161`) through gasless permits. Kairos runs funding first and submits the order only after the destination credit is final.\n\nUse `/v3/actions` for sells, cancels, setup and login; trade plans are buy-only and the venue wallet must already be set up through a `setup` action.\n\n**Flow.** Prepare → check `order` (the server may normalize it: canonical `outcome`; on Predict.fun a `GTC` order becomes a `GTD` order bounded by the venue session) → sign every `requests[]` entry whose `actionable` is `true` → `POST /v3/trade-plans/{id}/answers` and/or `POST /v3/trade-plans/{id}/execute` before `executeBefore` → poll `GET /v3/trade-plans/{id}`.\n\nAn unfunded plan needs 2 signatures (`plan`, `trade`); a funded plan adds `funding-1` and `funding-2`, signed on the **source** chain. Every signature must be a plain 65-byte ECDSA signature (low-s) from `wallet`.\n\n**Idempotency.** `Idempotency-Key` is required. The same key with the same body returns the stored plan in its current state; with a different body it is `409`. `clientOrderId` is unique per wallet and venue across plans.\n\n**Fees.** `tradeBudget.maxPlatformFeeBps` is the Kairos maximum plus the partner maximum (`partnerFee.maxBps`), never above 1000 bps (10%). Partner fees are configured by Kairos per partner and pinned into the plan the wallet signs. Fees are not deducted in the order: they accrue as debt and are paid through `/v3/fees/settlements`. When the wallet's debt is at or above the partner's threshold, prepare returns `409 FEE_SETTLEMENT_REQUIRED`.","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","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: [\"A trade plan is \", _jsx(_components.strong, {\n children: \"one buy order on one venue\"\n }), \", authorized up front in one batch of signatures, with an explicit fee ceiling (\", _jsx(_components.code, {\n children: \"tradeBudget\"\n }), \") and hard deadlines. When the venue account is short of collateral, the plan can also bridge \", _jsx(_components.strong, {\n children: \"exactly the shortfall\"\n }), \" from the same wallet’s USDC on Polygon (\", _jsx(_components.code, {\n children: \"137\"\n }), \") or Arbitrum (\", _jsx(_components.code, {\n children: \"42161\"\n }), \") through gasless permits. Kairos runs funding first and submits the order only after the destination credit is final.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Use \", _jsx(_components.code, {\n children: \"/v3/actions\"\n }), \" for sells, cancels, setup and login; trade plans are buy-only and the venue 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: \"Flow.\"\n }), \" Prepare → check \", _jsx(_components.code, {\n children: \"order\"\n }), \" (the server may normalize it: canonical \", _jsx(_components.code, {\n children: \"outcome\"\n }), \"; on Predict.fun a \", _jsx(_components.code, {\n children: \"GTC\"\n }), \" order becomes a \", _jsx(_components.code, {\n children: \"GTD\"\n }), \" order bounded by the venue session) → sign every \", _jsx(_components.code, {\n children: \"requests[]\"\n }), \" entry whose \", _jsx(_components.code, {\n children: \"actionable\"\n }), \" is \", _jsx(_components.code, {\n children: \"true\"\n }), \" → \", _jsx(_components.code, {\n children: \"POST /v3/trade-plans/{id}/answers\"\n }), \" and/or \", _jsx(_components.code, {\n children: \"POST /v3/trade-plans/{id}/execute\"\n }), \" before \", _jsx(_components.code, {\n children: \"executeBefore\"\n }), \" → poll \", _jsx(_components.code, {\n children: \"GET /v3/trade-plans/{id}\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"An unfunded plan needs 2 signatures (\", _jsx(_components.code, {\n children: \"plan\"\n }), \", \", _jsx(_components.code, {\n children: \"trade\"\n }), \"); a funded plan adds \", _jsx(_components.code, {\n children: \"funding-1\"\n }), \" and \", _jsx(_components.code, {\n children: \"funding-2\"\n }), \", signed on the \", _jsx(_components.strong, {\n children: \"source\"\n }), \" chain. Every signature must be a plain 65-byte ECDSA signature (low-s) from \", _jsx(_components.code, {\n children: \"wallet\"\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 stored plan in its current state; with a different body it is \", _jsx(_components.code, {\n children: \"409\"\n }), \". \", _jsx(_components.code, {\n children: \"clientOrderId\"\n }), \" is unique per wallet and venue across plans.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Fees.\"\n }), \" \", _jsx(_components.code, {\n children: \"tradeBudget.maxPlatformFeeBps\"\n }), \" is the Kairos maximum plus the partner maximum (\", _jsx(_components.code, {\n children: \"partnerFee.maxBps\"\n }), \"), never above 1000 bps (10%). Partner fees are configured by Kairos per partner and pinned into the plan the wallet signs. Fees are not deducted in the order: they accrue as debt and are paid through \", _jsx(_components.code, {\n children: \"/v3/fees/settlements\"\n }), \". When the wallet’s debt is at or above the partner’s threshold, prepare returns \", _jsx(_components.code, {\n children: \"409 FEE_SETTLEMENT_REQUIRED\"\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 trade plan (one buy, optionally funded cross-chain)","description":"Preview: available on staging (`https://staging-execution.kairos.trade`); production returns `503` until release.\n\nA trade plan is **one buy order on one venue**, authorized up front in one batch of signatures, with an explicit fee ceiling (`tradeBudget`) and hard deadlines. When the venue account is short of collateral, the plan can also bridge **exactly the shortfall** from the same wallet's USDC on Polygon (`137`) or Arbitrum (`42161`) through gasless permits. Kairos runs funding first and submits the order only after the destination credit is final.\n\nUse `/v3/actions` for sells, cancels, setup and login; trade plans are buy-only and the venue wallet must already be set up through a `setup` action.\n\n**Flow.** Prepare → check `order` (the server may normalize it: canonical `outcome`; on Predict.fun a `GTC` order becomes a `GTD` order bounded by the venue session) → sign every `requests[]` entry whose `actionable` is `true` → `POST /v3/trade-plans/{id}/answers` and/or `POST /v3/trade-plans/{id}/execute` before `executeBefore` → poll `GET /v3/trade-plans/{id}`.\n\nAn unfunded plan needs 2 signatures (`plan`, `trade`); a funded plan adds `funding-1` and `funding-2`, signed on the **source** chain. Every signature must be a plain 65-byte ECDSA signature (low-s) from `wallet`.\n\n**Idempotency.** `Idempotency-Key` is required. The same key with the same body returns the stored plan in its current state; with a different body it is `409`. `clientOrderId` is unique per wallet and venue across plans.\n\n**Fees.** `tradeBudget.maxPlatformFeeBps` is the Kairos maximum plus the partner maximum (`partnerFee.maxBps`), never above 1000 bps (10%). Partner fees are configured by Kairos per partner and pinned into the plan the wallet signs. Fees are not deducted in the order: they accrue as debt and are paid through `/v3/fees/settlements`. When the wallet's debt is at or above the partner's threshold, prepare returns `409 FEE_SETTLEMENT_REQUIRED`.","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","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"prepareTradePlan","summary":"Prepare a trade plan (one buy, optionally funded cross-chain)","description":"Preview: available on staging (`https://staging-execution.kairos.trade`); production returns `503` until release.\n\nA trade plan is **one buy order on one venue**, authorized up front in one batch of signatures, with an explicit fee ceiling (`tradeBudget`) and hard deadlines. When the venue account is short of collateral, the plan can also bridge **exactly the shortfall** from the same wallet's USDC on Polygon (`137`) or Arbitrum (`42161`) through gasless permits. Kairos runs funding first and submits the order only after the destination credit is final.\n\nUse `/v3/actions` for sells, cancels, setup and login; trade plans are buy-only and the venue wallet must already be set up through a `setup` action.\n\n**Flow.** Prepare → check `order` (the server may normalize it: canonical `outcome`; on Predict.fun a `GTC` order becomes a `GTD` order bounded by the venue session) → sign every `requests[]` entry whose `actionable` is `true` → `POST /v3/trade-plans/{id}/answers` and/or `POST /v3/trade-plans/{id}/execute` before `executeBefore` → poll `GET /v3/trade-plans/{id}`.\n\nAn unfunded plan needs 2 signatures (`plan`, `trade`); a funded plan adds `funding-1` and `funding-2`, signed on the **source** chain. Every signature must be a plain 65-byte ECDSA signature (low-s) from `wallet`.\n\n**Idempotency.** `Idempotency-Key` is required. The same key with the same body returns the stored plan in its current state; with a different body it is `409`. `clientOrderId` is unique per wallet and venue across plans.\n\n**Fees.** `tradeBudget.maxPlatformFeeBps` is the Kairos maximum plus the partner maximum (`partnerFee.maxBps`), never above 1000 bps (10%). Partner fees are configured by Kairos per partner and pinned into the plan the wallet signs. Fees are not deducted in the order: they accrue as debt and are paid through `/v3/fees/settlements`. When the wallet's debt is at or above the partner's threshold, prepare returns `409 FEE_SETTLEMENT_REQUIRED`.","tags":["Trade plans (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":["ea95b536-3774-4095-83fa-3c60a044af82","81e97c1f-c9c6-42cb-9fca-37fafae4fb59","0565e855-8e1d-48bc-b2fc-c74caed74e9d","9769a8d2-457f-410f-9e5f-a1733a5d7c45","5256ccae-e8cf-484b-8e2f-dd9eb2f53dc3"],"parameters":["3be3734d-a37a-423d-bf74-79ff205796a2"],"requestBody":"8099e011-76d8-4d91-a1fb-c174e4fc7d6b","responses":{"200":"f6ea6b76-7839-4c5d-a566-99d889cd1928","400":"b108b777-5beb-43fb-83a4-5484d3c911ac","401":"434803aa-8f1f-4504-842f-4c284f067f2e","403":"53e5aa14-eeaa-4aee-9f83-b1e9d84c758a","404":"a47df0ab-d365-4fc3-a08b-ed94ac6f12ff","409":"ebdff257-4561-4965-a4ca-151e775ddc54","413":"7966ab04-7abd-4cc0-bc59-3192a1944ea4","415":"16887809-4f3d-4a08-be23-36961803edbf","422":"ab1c3b53-bf49-4fbb-90cf-812feea9fa70","429":"0948ce52-2938-4176-b31d-37d03665572f","500":"b83727d5-2cf9-45cc-b50e-c9cf36d3d0eb","503":"43832a50-08ba-4d3c-a2a2-0a6f151d9c09"},"method":"post","type":"path","servers":["330d272c-627a-4ff5-ad01-0263b300ce7a","83635983-3d27-4bb6-bc26-42ecc043c06c"],"path":"/v3/trade-plans","baseUrlOptions":["https://execution.kairos.trade","https://staging-execution.kairos.trade"],"title":"Prepare a trade plan (one buy, optionally funded cross-chain)","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"3be3734d-a37a-423d-bf74-79ff205796a2":{"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/trade-plans`. camelCase; unknown fields are refused.","required":["wallet","interactionMode","order","tradeSubmitBefore"],"properties":{"wallet":{"type":"string","description":"EVM address, `0x` + 40 hex.","pattern":"^0x[0-9a-fA-F]{40}$","example":"0x8ba1f109551bd432803012645ac136ddd64dba72","isRequired":true,"uniqueKey":"wallet","typeLabel":"string"},"interactionMode":{"type":"string","enum":["single_batch","allow_followup"],"description":"Both values currently behave the same — every request is a signature collected up front.","isRequired":true,"uniqueKey":"interactionMode","typeLabel":"enum\u003cstring>"},"order":{"type":"object","additionalProperties":false,"description":"The order. Decimals must be **canonical** (`\"0.5\"`, not `\"0.50\"`; `\"1\"`, not `\"1.0\"`). `size` must match the venue's share lot exactly.\nHyperliquid: whole-share `size`, at most 5 price decimals, `GTC`/`FAK`/`IOC` only.\nIn a response this is the **effective** order — check it before signing: `outcome` is canonical and on Predict.fun a `GTC` order may come back as `GTD` with `expiresAt` set.","required":["market","outcome","side","price","size","timeInForce","postOnly","clientOrderId"],"properties":{"market":{"type":"string","description":"`venue:market_id` (required form here) — `polymarket:0x\u003c64-hex>`, `predictfun:\u003cdigits>`, `hyperliquid:\u003cdigits>`.","example":"polymarket:0x5f3a8e1c2b4d6f8a0c2e4b6d8f0a2c4e6b8d0f2a4c6e8b0d2f4a6c8e0b2d4f6a","isRequired":true,"uniqueKey":"order.market","typeLabel":"string"},"outcome":{"type":"string","minLength":1,"maxLength":64,"example":"Yes","isRequired":true,"uniqueKey":"order.outcome","typeLabel":"string"},"side":{"type":"string","const":"buy","description":"Trade plans are buy-only.","isRequired":true,"uniqueKey":"order.side","typeLabel":"string"},"price":{"type":"string","description":"Canonical decimal, above 0 and below 1.","example":"0.05","isRequired":true,"uniqueKey":"order.price","typeLabel":"string"},"size":{"type":"string","description":"Canonical decimal, shares.","example":"10","isRequired":true,"uniqueKey":"order.size","typeLabel":"string"},"timeInForce":{"type":"string","enum":["GTC","GTD","FOK","FAK","IOC"],"isRequired":true,"uniqueKey":"order.timeInForce","typeLabel":"enum\u003cstring>"},"postOnly":{"type":"boolean","description":"Only with `GTC` or `GTD`.","isRequired":true,"uniqueKey":"order.postOnly","typeLabel":"boolean"},"clientOrderId":{"type":"string","minLength":1,"maxLength":128,"description":"Required. Printable ASCII, unique per wallet and venue across plans; must not start with `trade-plan:`.","example":"partner-trade-1042","isRequired":true,"uniqueKey":"order.clientOrderId","typeLabel":"string"},"expiresAt":{"type":"string","format":"date-time","description":"Required exactly when `timeInForce` is `GTD`. RFC 3339, whole seconds, after `tradeSubmitBefore`.","uniqueKey":"order.expiresAt","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"order","typeLabel":"object"},"tradeSubmitBefore":{"type":"string","format":"date-time","description":"Last moment Kairos may submit the order. RFC 3339 UTC, whole seconds, in the future and at most 5 minutes out.","example":"2026-10-28T12:04:00Z","isRequired":true,"uniqueKey":"tradeSubmitBefore","typeLabel":"string\u003cdate-time>"},"ctfDependencies":{"type":"array","description":"Polymarket only — ids of on-chain intents this buy depends on (e.g. a merge that frees collateral). At most 16, distinct.","maxItems":16,"items":{"type":"string","format":"uuid","uniqueKey":"ctfDependencies.items.[INDEX]","typeLabel":"string\u003cuuid>"},"uniqueKey":"ctfDependencies","typeLabel":"string\u003cuuid>[]"},"submission":{"type":"object","additionalProperties":false,"description":"Who submits each part. Defaults to Kairos for both. `trade` accepts only `kairos`.","properties":{"funding":{"type":"string","enum":["kairos","client"],"default":"kairos","description":"`client` — you POST the signed funding permits yourself (see `requests[].externalSubmission`) and report them.","uniqueKey":"submission.funding","typeLabel":"enum\u003cstring>"},"trade":{"type":"string","enum":["kairos"],"default":"kairos","uniqueKey":"submission.trade","typeLabel":"enum\u003cstring>"}},"uniqueKey":"submission","typeLabel":"object"},"funding":{"oneOf":[{"type":"object","description":"Omit or `null` when the collateral is already at the venue.","required":["sourceChainId","sourceToken","maxAmountRaw","maxGasCostRaw","slippageBps"],"properties":{"sourceChainId":{"type":"string","enum":["137","42161"],"description":"Decimal chain id.","isRequired":true,"uniqueKey":"funding.oneOf.0.sourceChainId","typeLabel":"enum\u003cstring>"},"sourceToken":{"type":"string","description":"That chain's native USDC address.","example":"0xaf88d065e77c8cc2239327c5edb3a432268e5831","isRequired":true,"uniqueKey":"funding.oneOf.0.sourceToken","typeLabel":"string"},"maxAmountRaw":{"type":"string","description":"Most the wallet will spend on the source chain, bridge fees included (integer string, base units, > 0).","example":"750000","isRequired":true,"uniqueKey":"funding.oneOf.0.maxAmountRaw","typeLabel":"string"},"maxGasCostRaw":{"type":"string","description":"Gas cap; routes are gasless, so `\"0\"` works.","example":"0","isRequired":true,"uniqueKey":"funding.oneOf.0.maxGasCostRaw","typeLabel":"string"},"slippageBps":{"type":"integer","minimum":0,"maximum":10000,"example":50,"isRequired":true,"uniqueKey":"funding.oneOf.0.slippageBps","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"funding.oneOf.0","typeLabel":"object"},{"type":"null","description":"Omit or `null` when the collateral is already at the venue.","uniqueKey":"funding.oneOf.1","typeLabel":"null"}],"uniqueKey":"funding","typeLabel":"object | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"funded":{"title":"funded","value":{"wallet":"0x8ba1f109551bd432803012645ac136ddd64dba72","interactionMode":"single_batch","order":{"market":"polymarket:0x5f3a8e1c2b4d6f8a0c2e4b6d8f0a2c4e6b8d0f2a4c6e8b0d2f4a6c8e0b2d4f6a","outcome":"Yes","side":"buy","price":"0.05","size":"10","timeInForce":"GTC","postOnly":true,"clientOrderId":"partner-trade-1042"},"funding":{"sourceChainId":"42161","sourceToken":"0xaf88d065e77c8cc2239327c5edb3a432268e5831","maxAmountRaw":"750000","maxGasCostRaw":"0","slippageBps":50},"tradeSubmitBefore":"2026-10-28T12:04:00Z","submission":{"funding":"kairos","trade":"kairos"}}},"unfunded":{"title":"unfunded","value":{"wallet":"0x8ba1f109551bd432803012645ac136ddd64dba72","interactionMode":"single_batch","order":{"market":"predictfun:1027194","outcome":"Yes","side":"buy","price":"0.52","size":"10","timeInForce":"FOK","postOnly":false,"clientOrderId":"partner-trade-1043"},"funding":null,"tradeSubmitBefore":"2026-10-28T12:04:00Z"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"f6ea6b76-7839-4c5d-a566-99d889cd1928":{"description":"The prepared plan in `needs_signatures`. A replay with the same `Idempotency-Key` and body returns the stored plan in its current state.","content":{"application/json":{"schema":{"type":"object","description":"A trade plan. Statuses: `needs_signatures` → `ready_to_execute` → (`/execute`) `funding_pending` → `trade_pending` → `completed`, with `reconciling` while an outcome is being confirmed. Terminal: `completed`, `expired`, `failed`, `funded_trade_failed`, `funded_trade_expired`.\n\n`audience` and `tradeExecutionRegion` are opaque values signed into the plan — do not interpret or change them.","required":["contractVersion","id","planHash","revision","wallet","partnerId","audience","interactionMode","submission","status","venue","tradeExecutionRegion","order","tradingWallet","tradePayloadDigest","tradeBudget","funding","createdAt","executeBefore","tradeSubmitBefore","requests","execution","error"],"properties":{"contractVersion":{"type":"integer","const":1,"isRequired":true,"uniqueKey":"contractVersion","typeLabel":"integer"},"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"planHash":{"type":"string","description":"Hash of the plan's terms; every answer must echo it.","isRequired":true,"uniqueKey":"planHash","typeLabel":"string"},"revision":{"type":"string","description":"Increases on every stored change (`\"0\"` at prepare).","isRequired":true,"uniqueKey":"revision","typeLabel":"string"},"wallet":{"type":"string","description":"The signing wallet, lowercase.","isRequired":true,"uniqueKey":"wallet","typeLabel":"string"},"partnerId":{"type":"string","isRequired":true,"uniqueKey":"partnerId","typeLabel":"string"},"audience":{"type":"string","description":"Opaque signed field.","isRequired":true,"uniqueKey":"audience","typeLabel":"string"},"interactionMode":{"type":"string","enum":["single_batch","allow_followup"],"isRequired":true,"uniqueKey":"interactionMode","typeLabel":"enum\u003cstring>"},"submission":{"type":"object","additionalProperties":false,"description":"Who submits each part. Defaults to Kairos for both. `trade` accepts only `kairos`.","properties":{"funding":{"type":"string","enum":["kairos","client"],"default":"kairos","description":"`client` — you POST the signed funding permits yourself (see `requests[].externalSubmission`) and report them.","uniqueKey":"submission.funding","typeLabel":"enum\u003cstring>"},"trade":{"type":"string","enum":["kairos"],"default":"kairos","uniqueKey":"submission.trade","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"submission","typeLabel":"object"},"status":{"type":"string","enum":["needs_signatures","ready_to_execute","funding_pending","trade_pending","reconciling","completed","expired","failed","funded_trade_failed","funded_trade_expired"],"isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"venue":{"type":"string","description":"Venue id. `predict.fun` is accepted as an input alias of `predictfun`.","enum":["polymarket","predictfun","hyperliquid"],"isRequired":true,"uniqueKey":"venue","typeLabel":"enum\u003cstring>"},"tradeExecutionRegion":{"type":"string","description":"Opaque signed field.","isRequired":true,"uniqueKey":"tradeExecutionRegion","typeLabel":"string"},"order":{"type":"object","additionalProperties":false,"description":"The order. Decimals must be **canonical** (`\"0.5\"`, not `\"0.50\"`; `\"1\"`, not `\"1.0\"`). `size` must match the venue's share lot exactly.\nHyperliquid: whole-share `size`, at most 5 price decimals, `GTC`/`FAK`/`IOC` only.\nIn a response this is the **effective** order — check it before signing: `outcome` is canonical and on Predict.fun a `GTC` order may come back as `GTD` with `expiresAt` set.","required":["market","outcome","side","price","size","timeInForce","postOnly","clientOrderId"],"properties":{"market":{"type":"string","description":"`venue:market_id` (required form here) — `polymarket:0x\u003c64-hex>`, `predictfun:\u003cdigits>`, `hyperliquid:\u003cdigits>`.","example":"polymarket:0x5f3a8e1c2b4d6f8a0c2e4b6d8f0a2c4e6b8d0f2a4c6e8b0d2f4a6c8e0b2d4f6a","isRequired":true,"uniqueKey":"order.market","typeLabel":"string"},"outcome":{"type":"string","minLength":1,"maxLength":64,"example":"Yes","isRequired":true,"uniqueKey":"order.outcome","typeLabel":"string"},"side":{"type":"string","const":"buy","description":"Trade plans are buy-only.","isRequired":true,"uniqueKey":"order.side","typeLabel":"string"},"price":{"type":"string","description":"Canonical decimal, above 0 and below 1.","example":"0.05","isRequired":true,"uniqueKey":"order.price","typeLabel":"string"},"size":{"type":"string","description":"Canonical decimal, shares.","example":"10","isRequired":true,"uniqueKey":"order.size","typeLabel":"string"},"timeInForce":{"type":"string","enum":["GTC","GTD","FOK","FAK","IOC"],"isRequired":true,"uniqueKey":"order.timeInForce","typeLabel":"enum\u003cstring>"},"postOnly":{"type":"boolean","description":"Only with `GTC` or `GTD`.","isRequired":true,"uniqueKey":"order.postOnly","typeLabel":"boolean"},"clientOrderId":{"type":"string","minLength":1,"maxLength":128,"description":"Required. Printable ASCII, unique per wallet and venue across plans; must not start with `trade-plan:`.","example":"partner-trade-1042","isRequired":true,"uniqueKey":"order.clientOrderId","typeLabel":"string"},"expiresAt":{"type":"string","format":"date-time","description":"Required exactly when `timeInForce` is `GTD`. RFC 3339, whole seconds, after `tradeSubmitBefore`.","uniqueKey":"order.expiresAt","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"order","typeLabel":"object"},"tradingWallet":{"type":"string","description":"Where the collateral must sit — Polymarket's trading wallet, or the wallet itself on Predict.fun and Hyperliquid.","isRequired":true,"uniqueKey":"tradingWallet","typeLabel":"string"},"tradePayloadDigest":{"type":"string","description":"Signing digest of the `trade` request.","isRequired":true,"uniqueKey":"tradePayloadDigest","typeLabel":"string"},"tradeBudget":{"type":"object","description":"The collateral ceiling the wallet authorizes. Raw amounts are integer strings in collateral base units.","required":["collateral","decimals","notionalRaw","maxCollateralFeeRaw","maxPlatformFeeBps","maxDebitRaw","existingSpendableRaw"],"properties":{"collateral":{"oneOf":[{"type":"object","description":"A collateral asset, tagged by `kind`.","required":["kind","chainId","token"],"properties":{"kind":{"type":"string","const":"evm","isRequired":true,"uniqueKey":"tradeBudget.collateral.oneOf.0.kind","typeLabel":"string"},"chainId":{"type":"string","description":"Decimal chain id.","example":"137","isRequired":true,"uniqueKey":"tradeBudget.collateral.oneOf.0.chainId","typeLabel":"string"},"token":{"type":"string","description":"Token address.","example":"0xc011a7e12a19f7b1f670d46f03b03f3342e82dfb","isRequired":true,"uniqueKey":"tradeBudget.collateral.oneOf.0.token","typeLabel":"string"}},"isRequired":true,"uniqueKey":"tradeBudget.collateral.oneOf.0","typeLabel":"object"},{"type":"object","description":"A collateral asset, tagged by `kind`.","required":["kind","environment","ledger","token"],"properties":{"kind":{"type":"string","const":"hypercore","isRequired":true,"uniqueKey":"tradeBudget.collateral.oneOf.1.kind","typeLabel":"string"},"environment":{"type":"string","enum":["mainnet","testnet"],"isRequired":true,"uniqueKey":"tradeBudget.collateral.oneOf.1.environment","typeLabel":"enum\u003cstring>"},"ledger":{"type":"string","const":"spot","isRequired":true,"uniqueKey":"tradeBudget.collateral.oneOf.1.ledger","typeLabel":"string"},"token":{"type":"string","const":"USDC","isRequired":true,"uniqueKey":"tradeBudget.collateral.oneOf.1.token","typeLabel":"string"}},"isRequired":true,"uniqueKey":"tradeBudget.collateral.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"tradeBudget.collateral","typeLabel":"object"},"decimals":{"type":"integer","description":"6 (pUSD, Hyperliquid USDC) or 18 (BNB Chain USDT).","isRequired":true,"uniqueKey":"tradeBudget.decimals","typeLabel":"integer"},"notionalRaw":{"type":"string","description":"Order notional.","isRequired":true,"uniqueKey":"tradeBudget.notionalRaw","typeLabel":"string"},"maxCollateralFeeRaw":{"type":"string","description":"Upper bound on fees: `notional × maxPlatformFeeBps / 10000` plus the venue's own fee bound, rounded up.","isRequired":true,"uniqueKey":"tradeBudget.maxCollateralFeeRaw","typeLabel":"string"},"maxPlatformFeeBps":{"type":"integer","minimum":0,"maximum":1000,"description":"Kairos maximum plus `partnerFee.maxBps`. Prepare is refused (`422`) above 1000 (10%).","isRequired":true,"uniqueKey":"tradeBudget.maxPlatformFeeBps","typeLabel":"integer"},"maxDebitRaw":{"type":"string","description":"`notionalRaw + maxCollateralFeeRaw` — the most this plan can take from the trading account.","isRequired":true,"uniqueKey":"tradeBudget.maxDebitRaw","typeLabel":"string"},"existingSpendableRaw":{"type":"string","description":"Collateral already available at the venue, net of other plans' holds, when prepared (a snapshot, not a reservation).","isRequired":true,"uniqueKey":"tradeBudget.existingSpendableRaw","typeLabel":"string"},"partnerFee":{"type":"object","description":"The partner fee this plan pins, signed by the wallet as part of the plan. Partner fee schedules are configured by Kairos for each partner — a default, optionally per venue, optionally per user — as up to 16 bands selected by order notional (USD) and the user's 30-day trading volume; each band has a maker and a taker shape. The band in force when the plan is prepared is pinned here; later schedule changes do not affect the plan.\n\nAt fill time the partner rate is `maker` or `taker` evaluated at the fill price, charged on notional. Combined with the Kairos rate it never exceeds `tradeBudget.maxPlatformFeeBps` (at most 1000 bps, 10%). Polymarket and Predict.fun only.","required":["scheduleId","maxBps","maker","taker"],"properties":{"scheduleId":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"tradeBudget.partnerFee.scheduleId","typeLabel":"string\u003cuuid>"},"maxBps":{"type":"integer","minimum":0,"maximum":1000,"description":"The highest rate either shape reaches.","isRequired":true,"uniqueKey":"tradeBudget.partnerFee.maxBps","typeLabel":"integer"},"maker":{"oneOf":[{"type":"object","description":"How a partner fee rate varies with the fill price `p` (0–1). Rates are integer bps, 0–1000.","required":["model","bps"],"example":{"model":"flat","bps":25},"properties":{"model":{"type":"string","const":"flat","isRequired":true,"uniqueKey":"tradeBudget.partnerFee.maker.oneOf.0.model","typeLabel":"string"},"bps":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"tradeBudget.partnerFee.maker.oneOf.0.bps","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"tradeBudget.partnerFee.maker.oneOf.0","typeLabel":"object"},{"type":"object","description":"How a partner fee rate varies with the fill price `p` (0–1). Rates are integer bps, 0–1000.","required":["model","points"],"example":{"model":"curve","points":[{"price":"0","feeBps":10},{"price":"0.5","feeBps":60},{"price":"1","feeBps":10}]},"properties":{"model":{"type":"string","const":"curve","isRequired":true,"uniqueKey":"tradeBudget.partnerFee.maker.oneOf.1.model","typeLabel":"string"},"points":{"type":"array","minItems":2,"maxItems":32,"items":{"type":"object","required":["price","feeBps"],"properties":{"price":{"type":"string","description":"Decimal string, 0–1.","isRequired":true,"uniqueKey":"tradeBudget.partnerFee.maker.oneOf.1.points.items.[INDEX].price","typeLabel":"string"},"feeBps":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"tradeBudget.partnerFee.maker.oneOf.1.points.items.[INDEX].feeBps","typeLabel":"integer"}},"uniqueKey":"tradeBudget.partnerFee.maker.oneOf.1.points.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"tradeBudget.partnerFee.maker.oneOf.1.points","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"tradeBudget.partnerFee.maker.oneOf.1","typeLabel":"object"},{"type":"object","description":"How a partner fee rate varies with the fill price `p` (0–1). Rates are integer bps, 0–1000.","required":["model","edgeBps","centerBps"],"example":{"model":"parabolic","edgeBps":5,"centerBps":40},"properties":{"model":{"type":"string","const":"parabolic","isRequired":true,"uniqueKey":"tradeBudget.partnerFee.maker.oneOf.2.model","typeLabel":"string"},"edgeBps":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"tradeBudget.partnerFee.maker.oneOf.2.edgeBps","typeLabel":"integer"},"centerBps":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"tradeBudget.partnerFee.maker.oneOf.2.centerBps","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"tradeBudget.partnerFee.maker.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"tradeBudget.partnerFee.maker","typeLabel":"object"},"taker":{"oneOf":[{"type":"object","description":"How a partner fee rate varies with the fill price `p` (0–1). Rates are integer bps, 0–1000.","required":["model","bps"],"example":{"model":"flat","bps":25},"properties":{"model":{"type":"string","const":"flat","isRequired":true,"uniqueKey":"tradeBudget.partnerFee.taker.oneOf.0.model","typeLabel":"string"},"bps":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"tradeBudget.partnerFee.taker.oneOf.0.bps","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"tradeBudget.partnerFee.taker.oneOf.0","typeLabel":"object"},{"type":"object","description":"How a partner fee rate varies with the fill price `p` (0–1). Rates are integer bps, 0–1000.","required":["model","points"],"example":{"model":"curve","points":[{"price":"0","feeBps":10},{"price":"0.5","feeBps":60},{"price":"1","feeBps":10}]},"properties":{"model":{"type":"string","const":"curve","isRequired":true,"uniqueKey":"tradeBudget.partnerFee.taker.oneOf.1.model","typeLabel":"string"},"points":{"type":"array","minItems":2,"maxItems":32,"items":{"type":"object","required":["price","feeBps"],"properties":{"price":{"type":"string","description":"Decimal string, 0–1.","isRequired":true,"uniqueKey":"tradeBudget.partnerFee.taker.oneOf.1.points.items.[INDEX].price","typeLabel":"string"},"feeBps":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"tradeBudget.partnerFee.taker.oneOf.1.points.items.[INDEX].feeBps","typeLabel":"integer"}},"uniqueKey":"tradeBudget.partnerFee.taker.oneOf.1.points.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"tradeBudget.partnerFee.taker.oneOf.1.points","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"tradeBudget.partnerFee.taker.oneOf.1","typeLabel":"object"},{"type":"object","description":"How a partner fee rate varies with the fill price `p` (0–1). Rates are integer bps, 0–1000.","required":["model","edgeBps","centerBps"],"example":{"model":"parabolic","edgeBps":5,"centerBps":40},"properties":{"model":{"type":"string","const":"parabolic","isRequired":true,"uniqueKey":"tradeBudget.partnerFee.taker.oneOf.2.model","typeLabel":"string"},"edgeBps":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"tradeBudget.partnerFee.taker.oneOf.2.edgeBps","typeLabel":"integer"},"centerBps":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"tradeBudget.partnerFee.taker.oneOf.2.centerBps","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"tradeBudget.partnerFee.taker.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"tradeBudget.partnerFee.taker","typeLabel":"object"}},"uniqueKey":"tradeBudget.partnerFee","typeLabel":"object"}},"isRequired":true,"uniqueKey":"tradeBudget","typeLabel":"object"},"funding":{"oneOf":[{"type":"object","description":"The funding quote. Raw amounts are integer strings in base units.","required":["sourceChainId","sourceToken","sourceDecimals","quoteId","providerRequestId","amountInRaw","maxGasCostRaw","destination","destinationDecimals","recipient","refundRecipient","requiredArrivalRaw","minimumArrivalRaw","expectedArrivalRaw","quoteExpiresAt","fundingSubmitBefore","maxAmountRaw","slippageBps"],"properties":{"sourceChainId":{"type":"string","isRequired":true,"uniqueKey":"funding.oneOf.0.sourceChainId","typeLabel":"string"},"sourceToken":{"type":"string","isRequired":true,"uniqueKey":"funding.oneOf.0.sourceToken","typeLabel":"string"},"sourceDecimals":{"type":"integer","isRequired":true,"uniqueKey":"funding.oneOf.0.sourceDecimals","typeLabel":"integer"},"quoteId":{"type":"string","description":"Opaque quote id.","isRequired":true,"uniqueKey":"funding.oneOf.0.quoteId","typeLabel":"string"},"providerRequestId":{"type":"string","description":"The bridge provider's request id.","isRequired":true,"uniqueKey":"funding.oneOf.0.providerRequestId","typeLabel":"string"},"amountInRaw":{"type":"string","description":"Source debit including bridge fees (at most `maxAmountRaw`).","isRequired":true,"uniqueKey":"funding.oneOf.0.amountInRaw","typeLabel":"string"},"maxGasCostRaw":{"type":"string","description":"Always `\"0\"`.","isRequired":true,"uniqueKey":"funding.oneOf.0.maxGasCostRaw","typeLabel":"string"},"destination":{"oneOf":[{"type":"object","description":"A collateral asset, tagged by `kind`.","required":["kind","chainId","token"],"properties":{"kind":{"type":"string","const":"evm","isRequired":true,"uniqueKey":"funding.oneOf.0.destination.oneOf.0.kind","typeLabel":"string"},"chainId":{"type":"string","description":"Decimal chain id.","example":"137","isRequired":true,"uniqueKey":"funding.oneOf.0.destination.oneOf.0.chainId","typeLabel":"string"},"token":{"type":"string","description":"Token address.","example":"0xc011a7e12a19f7b1f670d46f03b03f3342e82dfb","isRequired":true,"uniqueKey":"funding.oneOf.0.destination.oneOf.0.token","typeLabel":"string"}},"isRequired":true,"uniqueKey":"funding.oneOf.0.destination.oneOf.0","typeLabel":"object"},{"type":"object","description":"A collateral asset, tagged by `kind`.","required":["kind","environment","ledger","token"],"properties":{"kind":{"type":"string","const":"hypercore","isRequired":true,"uniqueKey":"funding.oneOf.0.destination.oneOf.1.kind","typeLabel":"string"},"environment":{"type":"string","enum":["mainnet","testnet"],"isRequired":true,"uniqueKey":"funding.oneOf.0.destination.oneOf.1.environment","typeLabel":"enum\u003cstring>"},"ledger":{"type":"string","const":"spot","isRequired":true,"uniqueKey":"funding.oneOf.0.destination.oneOf.1.ledger","typeLabel":"string"},"token":{"type":"string","const":"USDC","isRequired":true,"uniqueKey":"funding.oneOf.0.destination.oneOf.1.token","typeLabel":"string"}},"isRequired":true,"uniqueKey":"funding.oneOf.0.destination.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"funding.oneOf.0.destination","typeLabel":"object"},"destinationDecimals":{"type":"integer","isRequired":true,"uniqueKey":"funding.oneOf.0.destinationDecimals","typeLabel":"integer"},"recipient":{"type":"string","description":"Equals `tradingWallet`.","isRequired":true,"uniqueKey":"funding.oneOf.0.recipient","typeLabel":"string"},"refundRecipient":{"type":"string","description":"Equals `wallet`; the bridge provider returns a failed bridge here, on the source chain.","isRequired":true,"uniqueKey":"funding.oneOf.0.refundRecipient","typeLabel":"string"},"requiredArrivalRaw":{"type":"string","description":"The shortfall — `maxDebitRaw` minus what is already spendable.","isRequired":true,"uniqueKey":"funding.oneOf.0.requiredArrivalRaw","typeLabel":"string"},"minimumArrivalRaw":{"type":"string","description":"Guaranteed floor, at least `requiredArrivalRaw`. Arrival below it fails the plan (`FUNDING_SHORTFALL`).","isRequired":true,"uniqueKey":"funding.oneOf.0.minimumArrivalRaw","typeLabel":"string"},"expectedArrivalRaw":{"type":"string","description":"Estimate.","isRequired":true,"uniqueKey":"funding.oneOf.0.expectedArrivalRaw","typeLabel":"string"},"quoteExpiresAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"funding.oneOf.0.quoteExpiresAt","typeLabel":"string\u003cdate-time>"},"fundingSubmitBefore":{"type":"string","format":"date-time","description":"Deadline for the funding permits; also the plan's `executeBefore`.","isRequired":true,"uniqueKey":"funding.oneOf.0.fundingSubmitBefore","typeLabel":"string\u003cdate-time>"},"maxAmountRaw":{"type":"string","isRequired":true,"uniqueKey":"funding.oneOf.0.maxAmountRaw","typeLabel":"string"},"slippageBps":{"type":"integer","isRequired":true,"uniqueKey":"funding.oneOf.0.slippageBps","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"funding.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"funding.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"funding","typeLabel":"object | null"},"createdAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"createdAt","typeLabel":"string\u003cdate-time>"},"executeBefore":{"type":"string","format":"date-time","description":"Deadline for answers and `/execute` — `funding.fundingSubmitBefore` when funded, else `tradeSubmitBefore`.","isRequired":true,"uniqueKey":"executeBefore","typeLabel":"string\u003cdate-time>"},"tradeSubmitBefore":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"tradeSubmitBefore","typeLabel":"string\u003cdate-time>"},"requests":{"type":"array","minItems":2,"maxItems":32,"items":{"type":"object","description":"One signature the plan needs, in order:\n- `plan` — `KairosTradePlan` typed data binding `wallet`, `partnerId`, `audience`, `planId`, `planHash`, `executeBefore`, `tradeSubmitBefore`; on the venue's chain.\n- `funding-1`, `funding-2` — funded plans only, on the **source** chain: the bridge authorization, then the USDC `ReceiveWithAuthorization` permit.\n- `trade` — the venue order (Polymarket and Predict.fun native orders; a Kairos `PlaceOrder` authorization on Hyperliquid); on the venue's chain.\n\nSign every request whose `actionable` is `true`. `params[1]` of typed-data requests is a JSON string — pass it unchanged.","required":["id","purpose","kind","signer","chainId","request","requestHash","collectAfter","executeAfter","status","actionable"],"properties":{"id":{"type":"string","example":"plan","isRequired":true,"uniqueKey":"requests.items.[INDEX].id","typeLabel":"string"},"purpose":{"type":"string","enum":["plan","trade","funding"],"isRequired":true,"uniqueKey":"requests.items.[INDEX].purpose","typeLabel":"enum\u003cstring>"},"kind":{"type":"string","const":"signature","isRequired":true,"uniqueKey":"requests.items.[INDEX].kind","typeLabel":"string"},"signer":{"type":"string","description":"Equals `wallet`.","isRequired":true,"uniqueKey":"requests.items.[INDEX].signer","typeLabel":"string"},"chainId":{"oneOf":[{"type":"string","description":"Chain to sign on, hex.","example":"0x89","isRequired":true,"uniqueKey":"requests.items.[INDEX].chainId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Chain to sign on, hex.","example":"0x89","isRequired":true,"uniqueKey":"requests.items.[INDEX].chainId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"requests.items.[INDEX].chainId","typeLabel":"string | null"},"request":{"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":"requests.items.[INDEX].request.method","typeLabel":"enum\u003cstring>"},"params":{"type":"array","items":{"oneOf":[{}],"uniqueKey":"requests.items.[INDEX].request.params.items.[INDEX]","typeLabel":"any"},"isRequired":true,"uniqueKey":"requests.items.[INDEX].request.params","typeLabel":"any[]"}},"example":{"method":"personal_sign","params":["0x6b6169726f732e7472616465207761…","0x8ba1f109551bD432803012645Ac136ddd64DBA72"]},"isRequired":true,"uniqueKey":"requests.items.[INDEX].request","typeLabel":"object"},"requestHash":{"type":"string","description":"Hash of the canonical request; pinned by `planHash`.","isRequired":true,"uniqueKey":"requests.items.[INDEX].requestHash","typeLabel":"string"},"collectAfter":{"type":"array","items":{"type":"string","uniqueKey":"requests.items.[INDEX].collectAfter.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"requests.items.[INDEX].collectAfter","typeLabel":"string[]"},"executeAfter":{"type":"array","description":"Requests that must run before this one (e.g. `trade` after the funding ids).","items":{"type":"string","uniqueKey":"requests.items.[INDEX].executeAfter.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"requests.items.[INDEX].executeAfter","typeLabel":"string[]"},"status":{"type":"string","enum":["ready","accepted","confirmed"],"description":"`ready` → `accepted` (signature stored) → `confirmed` (executed).","isRequired":true,"uniqueKey":"requests.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"actionable":{"type":"boolean","description":"`true` when the client should sign this request now.","isRequired":true,"uniqueKey":"requests.items.[INDEX].actionable","typeLabel":"boolean"},"externalSubmission":{"type":"object","description":"Client-owned funding only: POST the signed permit here yourself, `funding-1` first, with `{kind, requestId, api}` as the body and the signature as the `signature` query parameter.","required":["endpoint","method","kind","requestId","api"],"properties":{"endpoint":{"type":"string","format":"uri","isRequired":true,"uniqueKey":"requests.items.[INDEX].externalSubmission.endpoint","typeLabel":"string\u003curi>"},"method":{"type":"string","const":"POST","isRequired":true,"uniqueKey":"requests.items.[INDEX].externalSubmission.method","typeLabel":"string"},"kind":{"type":"string","enum":["multicall-authorization","eip3009"],"isRequired":true,"uniqueKey":"requests.items.[INDEX].externalSubmission.kind","typeLabel":"enum\u003cstring>"},"requestId":{"type":"string","description":"Equals `funding.providerRequestId`.","isRequired":true,"uniqueKey":"requests.items.[INDEX].externalSubmission.requestId","typeLabel":"string"},"api":{"oneOf":[{"type":"string","description":"The Relay API to call; `swap` on every current route.","isRequired":true,"uniqueKey":"requests.items.[INDEX].externalSubmission.api.oneOf.0","typeLabel":"string"},{"type":"null","description":"The Relay API to call; `swap` on every current route.","isRequired":true,"uniqueKey":"requests.items.[INDEX].externalSubmission.api.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"requests.items.[INDEX].externalSubmission.api","typeLabel":"string | null"}},"uniqueKey":"requests.items.[INDEX].externalSubmission","typeLabel":"object"}},"uniqueKey":"requests.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"requests","typeLabel":"object[]"},"execution":{"type":"object","description":"Progress of a committed plan.","required":["committed","phase","fundingStatus","tradeStatus"],"properties":{"committed":{"type":"boolean","isRequired":true,"uniqueKey":"execution.committed","typeLabel":"boolean"},"phase":{"type":"string","enum":["collecting","funding","trade","finished"],"isRequired":true,"uniqueKey":"execution.phase","typeLabel":"enum\u003cstring>"},"fundingStatus":{"type":"string","enum":["not_required","not_started","pending","awaiting_client","unknown","confirmed"],"description":"`unknown` while the bridge is in flight or uncertain.","isRequired":true,"uniqueKey":"execution.fundingStatus","typeLabel":"enum\u003cstring>"},"tradeStatus":{"type":"string","enum":["not_started","unknown","accepted","failed","expired"],"description":"`accepted` — the venue acknowledged the order (not necessarily filled).","isRequired":true,"uniqueKey":"execution.tradeStatus","typeLabel":"enum\u003cstring>"},"movementId":{"type":"string","description":"The bridge provider's request id, once known.","uniqueKey":"execution.movementId","typeLabel":"string"},"orderId":{"type":"string","description":"Kairos order id.","uniqueKey":"execution.orderId","typeLabel":"string"},"venueOrderId":{"type":"string","uniqueKey":"execution.venueOrderId","typeLabel":"string"},"venueOrderStatus":{"type":"string","example":"live","uniqueKey":"execution.venueOrderStatus","typeLabel":"string"},"confirmedArrivalRaw":{"type":"string","description":"Collateral confirmed at the destination.","uniqueKey":"execution.confirmedArrivalRaw","typeLabel":"string"}},"isRequired":true,"uniqueKey":"execution","typeLabel":"object"},"error":{"oneOf":[{"type":"object","description":"Why a plan is in flight or stopped (returned with HTTP `200`).\n\n| `code` | Meaning |\n|---|---|\n| `OUTCOME_UNKNOWN` | Funding or the trade is in flight; keep polling (`nextAction: reconcile`). |\n| `PLAN_EXPIRED` | Not executed before `executeBefore`. |\n| `TRADE_EXPIRED` | The order was not submitted by `tradeSubmitBefore`, or funding arrived after it. |\n| `FUNDING_SHORTFALL` | Less than `minimumArrivalRaw` arrived. |\n| `COLLATERAL_CHANGED` | The balance fell below `maxDebitRaw` before submission. |\n| `VENUE_REJECTED` | The venue refused the signed order. |\n| `PREFLIGHT_REFUSED` | A pre-submission check refused the order. |\n| `NATIVE_NOT_DISPATCHED` | The trade authorization expired before submission. |\n\n`nextAction` is `reconcile` (keep polling) or `inspect_funds` (terminal: check where the collateral is — bridged funds stay in `tradingWallet`).","required":["code","message","nextAction"],"properties":{"code":{"type":"string","enum":["OUTCOME_UNKNOWN","PLAN_EXPIRED","TRADE_EXPIRED","FUNDING_SHORTFALL","COLLATERAL_CHANGED","VENUE_REJECTED","PREFLIGHT_REFUSED","NATIVE_NOT_DISPATCHED"],"isRequired":true,"uniqueKey":"error.oneOf.0.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.oneOf.0.message","typeLabel":"string"},"nextAction":{"type":"string","enum":["reconcile","inspect_funds"],"isRequired":true,"uniqueKey":"error.oneOf.0.nextAction","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"error.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"error.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error","typeLabel":"object | null"},"ctfDependencies":{"type":"array","items":{"type":"object","description":"An on-chain intent this plan depends on, with the collateral it is expected to free.","required":["intent","anticipatedCreditRaw"],"properties":{"intent":{"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":"ctfDependencies.items.[INDEX].intent.intentId","typeLabel":"string\u003cuuid>"},"intentHash":{"type":"string","isRequired":true,"uniqueKey":"ctfDependencies.items.[INDEX].intent.intentHash","typeLabel":"string"},"account":{"type":"string","isRequired":true,"uniqueKey":"ctfDependencies.items.[INDEX].intent.account","typeLabel":"string"},"chainId":{"type":"string","example":"137","isRequired":true,"uniqueKey":"ctfDependencies.items.[INDEX].intent.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":"ctfDependencies.items.[INDEX].intent.effects.items.[INDEX].token.oneOf.0.kind","typeLabel":"string"},"contract":{"type":"string","isRequired":true,"uniqueKey":"ctfDependencies.items.[INDEX].intent.effects.items.[INDEX].token.oneOf.0.contract","typeLabel":"string"}},"isRequired":true,"uniqueKey":"ctfDependencies.items.[INDEX].intent.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":"ctfDependencies.items.[INDEX].intent.effects.items.[INDEX].token.oneOf.1.kind","typeLabel":"string"},"contract":{"type":"string","isRequired":true,"uniqueKey":"ctfDependencies.items.[INDEX].intent.effects.items.[INDEX].token.oneOf.1.contract","typeLabel":"string"},"tokenId":{"type":"string","description":"Decimal token id.","isRequired":true,"uniqueKey":"ctfDependencies.items.[INDEX].intent.effects.items.[INDEX].token.oneOf.1.tokenId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"ctfDependencies.items.[INDEX].intent.effects.items.[INDEX].token.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"ctfDependencies.items.[INDEX].intent.effects.items.[INDEX].token","typeLabel":"object"},"direction":{"type":"string","enum":["debit","credit"],"isRequired":true,"uniqueKey":"ctfDependencies.items.[INDEX].intent.effects.items.[INDEX].direction","typeLabel":"enum\u003cstring>"},"amountRaw":{"type":"string","isRequired":true,"uniqueKey":"ctfDependencies.items.[INDEX].intent.effects.items.[INDEX].amountRaw","typeLabel":"string"}},"uniqueKey":"ctfDependencies.items.[INDEX].intent.effects.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"ctfDependencies.items.[INDEX].intent.effects","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"ctfDependencies.items.[INDEX].intent","typeLabel":"object"},"anticipatedCreditRaw":{"type":"string","isRequired":true,"uniqueKey":"ctfDependencies.items.[INDEX].anticipatedCreditRaw","typeLabel":"string"}},"uniqueKey":"ctfDependencies.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ctfDependencies","typeLabel":"object[]"}},"example":{"contractVersion":1,"id":"0b1c2d3e-4f5a-4b6c-8d7e-9f0a1b2c3d4e","planHash":"0xb3d5c6e930ee2015f733bd9ffa2a2302fedd2a5bf38628e220f0b675d50f6953","revision":"0","wallet":"0x8ba1f109551bd432803012645ac136ddd64dba72","partnerId":"acme","audience":"https://staging-execution.kairos.trade","interactionMode":"single_batch","submission":{"funding":"kairos","trade":"kairos"},"status":"needs_signatures","venue":"polymarket","tradeExecutionRegion":"opaque-region-id","order":{"market":"polymarket:0x5f3a8e1c2b4d6f8a0c2e4b6d8f0a2c4e6b8d0f2a4c6e8b0d2f4a6c8e0b2d4f6a","outcome":"Yes","side":"buy","price":"0.05","size":"10","timeInForce":"GTC","postOnly":true,"clientOrderId":"partner-trade-1042"},"tradingWallet":"0x2f9c4b8e1d7a6c5b4a3f2e1d0c9b8a7f6e5d4c3b","tradePayloadDigest":"0xa3612e136ad81349bbc469dbc02ebd85d3cfcd3f76f90fc06a5c33d6bd03a67a","tradeBudget":{"collateral":{"kind":"evm","chainId":"137","token":"0xc011a7e12a19f7b1f670d46f03b03f3342e82dfb"},"decimals":6,"notionalRaw":"500000","maxCollateralFeeRaw":"16750","maxPlatformFeeBps":75,"maxDebitRaw":"516750","existingSpendableRaw":"0","partnerFee":{"scheduleId":"7a8b9c0d-1e2f-4a3b-8c4d-5e6f7a8b9c0d","maxBps":25,"maker":{"model":"flat","bps":10},"taker":{"model":"flat","bps":25}}},"funding":{"sourceChainId":"42161","sourceToken":"0xaf88d065e77c8cc2239327c5edb3a432268e5831","sourceDecimals":6,"quoteId":"wallet-funding:0b1c2d3e-4f5a-4b6c-8d7e-9f0a1b2c3d4e","providerRequestId":"0x5d7e9f1a3b5c7d9e1f3a5b7c9d1e3f5a7b9c1d3e5f7a9b1c3d5e7f9a1b3c5d7e","amountInRaw":"531200","maxGasCostRaw":"0","destination":{"kind":"evm","chainId":"137","token":"0xc011a7e12a19f7b1f670d46f03b03f3342e82dfb"},"destinationDecimals":6,"recipient":"0x2f9c4b8e1d7a6c5b4a3f2e1d0c9b8a7f6e5d4c3b","refundRecipient":"0x8ba1f109551bd432803012645ac136ddd64dba72","requiredArrivalRaw":"516750","minimumArrivalRaw":"516750","expectedArrivalRaw":"517900","quoteExpiresAt":"2026-10-28T12:02:00Z","fundingSubmitBefore":"2026-10-28T12:02:00Z","maxAmountRaw":"750000","slippageBps":50},"createdAt":"2026-10-28T12:00:00Z","executeBefore":"2026-10-28T12:02:00Z","tradeSubmitBefore":"2026-10-28T12:04:00Z","requests":[{"id":"plan","purpose":"plan","kind":"signature","signer":"0x8ba1f109551bd432803012645ac136ddd64dba72","chainId":"0x89","request":{"method":"eth_signTypedData_v4","params":["0x8ba1f109551bd432803012645ac136ddd64dba72","{\"domain\":{\"chainId\":137,\"name\":\"KairosTradePlan\",\"version\":\"1\"},\"message\":{\"audience\":\"https://staging-execution.kairos.trade\",\"executeBefore\":\"1793188920\",\"partnerId\":\"acme\",\"planHash\":\"0xb3d5…6953\",\"planId\":\"0b1c2d3e-…\",\"tradeSubmitBefore\":\"1793189040\",\"wallet\":\"0x8ba1…ba72\"},\"primaryType\":\"TradePlan\",\"types\":{…}}"]},"requestHash":"0x164f42fed95c09f82995ceb0d79c95e4074f81d9165c7ec449ffe4f5e15ace6e","collectAfter":[],"executeAfter":[],"status":"ready","actionable":true},{"id":"funding-1","purpose":"funding","kind":"signature","signer":"0x8ba1f109551bd432803012645ac136ddd64dba72","chainId":"0xa4b1","request":{"method":"eth_signTypedData_v4","params":["0x8ba1f109551bd432803012645ac136ddd64dba72","{…}"]},"requestHash":"0x2a4c6e8b0d2f4a6c8e0b2d4f6a8c0e2b4d6f8a0c2e4b6d8f0a2c4e6b8d0f2a4c","collectAfter":[],"executeAfter":[],"status":"ready","actionable":true},{"id":"funding-2","purpose":"funding","kind":"signature","signer":"0x8ba1f109551bd432803012645ac136ddd64dba72","chainId":"0xa4b1","request":{"method":"eth_signTypedData_v4","params":["0x8ba1f109551bd432803012645ac136ddd64dba72","{…}"]},"requestHash":"0x3b5d7f9a1c3e5b7d9f1a3c5e7b9d1f3a5c7e9b1d3f5a7c9e1b3d5f7a9c1e3b5d","collectAfter":[],"executeAfter":["funding-1"],"status":"ready","actionable":true},{"id":"trade","purpose":"trade","kind":"signature","signer":"0x8ba1f109551bd432803012645ac136ddd64dba72","chainId":"0x89","request":{"method":"eth_signTypedData_v4","params":["0x8ba1f109551bd432803012645ac136ddd64dba72","{…}"]},"requestHash":"0x0949c4fc3fec5036e82047f68491e76ea6d7a10b11c8bb5c5b04aa62969a1297","collectAfter":[],"executeAfter":["funding-1","funding-2"],"status":"ready","actionable":true}],"execution":{"committed":false,"phase":"collecting","fundingStatus":"not_started","tradeStatus":"not_started"},"error":null},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"contractVersion":1,"id":"0b1c2d3e-4f5a-4b6c-8d7e-9f0a1b2c3d4e","planHash":"0xb3d5c6e930ee2015f733bd9ffa2a2302fedd2a5bf38628e220f0b675d50f6953","revision":"0","wallet":"0x8ba1f109551bd432803012645ac136ddd64dba72","partnerId":"acme","audience":"https://staging-execution.kairos.trade","interactionMode":"single_batch","submission":{"funding":"kairos","trade":"kairos"},"status":"needs_signatures","venue":"polymarket","tradeExecutionRegion":"opaque-region-id","order":{"market":"polymarket:0x5f3a8e1c2b4d6f8a0c2e4b6d8f0a2c4e6b8d0f2a4c6e8b0d2f4a6c8e0b2d4f6a","outcome":"Yes","side":"buy","price":"0.05","size":"10","timeInForce":"GTC","postOnly":true,"clientOrderId":"partner-trade-1042"},"tradingWallet":"0x2f9c4b8e1d7a6c5b4a3f2e1d0c9b8a7f6e5d4c3b","tradePayloadDigest":"0xa3612e136ad81349bbc469dbc02ebd85d3cfcd3f76f90fc06a5c33d6bd03a67a","tradeBudget":{"collateral":{"kind":"evm","chainId":"137","token":"0xc011a7e12a19f7b1f670d46f03b03f3342e82dfb"},"decimals":6,"notionalRaw":"500000","maxCollateralFeeRaw":"16750","maxPlatformFeeBps":75,"maxDebitRaw":"516750","existingSpendableRaw":"0","partnerFee":{"scheduleId":"7a8b9c0d-1e2f-4a3b-8c4d-5e6f7a8b9c0d","maxBps":25,"maker":{"model":"flat","bps":10},"taker":{"model":"flat","bps":25}}},"funding":{"sourceChainId":"42161","sourceToken":"0xaf88d065e77c8cc2239327c5edb3a432268e5831","sourceDecimals":6,"quoteId":"wallet-funding:0b1c2d3e-4f5a-4b6c-8d7e-9f0a1b2c3d4e","providerRequestId":"0x5d7e9f1a3b5c7d9e1f3a5b7c9d1e3f5a7b9c1d3e5f7a9b1c3d5e7f9a1b3c5d7e","amountInRaw":"531200","maxGasCostRaw":"0","destination":{"kind":"evm","chainId":"137","token":"0xc011a7e12a19f7b1f670d46f03b03f3342e82dfb"},"destinationDecimals":6,"recipient":"0x2f9c4b8e1d7a6c5b4a3f2e1d0c9b8a7f6e5d4c3b","refundRecipient":"0x8ba1f109551bd432803012645ac136ddd64dba72","requiredArrivalRaw":"516750","minimumArrivalRaw":"516750","expectedArrivalRaw":"517900","quoteExpiresAt":"2026-10-28T12:02:00Z","fundingSubmitBefore":"2026-10-28T12:02:00Z","maxAmountRaw":"750000","slippageBps":50},"createdAt":"2026-10-28T12:00:00Z","executeBefore":"2026-10-28T12:02:00Z","tradeSubmitBefore":"2026-10-28T12:04:00Z","requests":[{"id":"plan","purpose":"plan","kind":"signature","signer":"0x8ba1f109551bd432803012645ac136ddd64dba72","chainId":"0x89","request":{"method":"eth_signTypedData_v4","params":["0x8ba1f109551bd432803012645ac136ddd64dba72","{\"domain\":{\"chainId\":137,\"name\":\"KairosTradePlan\",\"version\":\"1\"},\"message\":{\"audience\":\"https://staging-execution.kairos.trade\",\"executeBefore\":\"1793188920\",\"partnerId\":\"acme\",\"planHash\":\"0xb3d5…6953\",\"planId\":\"0b1c2d3e-…\",\"tradeSubmitBefore\":\"1793189040\",\"wallet\":\"0x8ba1…ba72\"},\"primaryType\":\"TradePlan\",\"types\":{…}}"]},"requestHash":"0x164f42fed95c09f82995ceb0d79c95e4074f81d9165c7ec449ffe4f5e15ace6e","collectAfter":[],"executeAfter":[],"status":"ready","actionable":true},{"id":"funding-1","purpose":"funding","kind":"signature","signer":"0x8ba1f109551bd432803012645ac136ddd64dba72","chainId":"0xa4b1","request":{"method":"eth_signTypedData_v4","params":["0x8ba1f109551bd432803012645ac136ddd64dba72","{…}"]},"requestHash":"0x2a4c6e8b0d2f4a6c8e0b2d4f6a8c0e2b4d6f8a0c2e4b6d8f0a2c4e6b8d0f2a4c","collectAfter":[],"executeAfter":[],"status":"ready","actionable":true},{"id":"funding-2","purpose":"funding","kind":"signature","signer":"0x8ba1f109551bd432803012645ac136ddd64dba72","chainId":"0xa4b1","request":{"method":"eth_signTypedData_v4","params":["0x8ba1f109551bd432803012645ac136ddd64dba72","{…}"]},"requestHash":"0x3b5d7f9a1c3e5b7d9f1a3c5e7b9d1f3a5c7e9b1d3f5a7c9e1b3d5f7a9c1e3b5d","collectAfter":[],"executeAfter":["funding-1"],"status":"ready","actionable":true},{"id":"trade","purpose":"trade","kind":"signature","signer":"0x8ba1f109551bd432803012645ac136ddd64dba72","chainId":"0x89","request":{"method":"eth_signTypedData_v4","params":["0x8ba1f109551bd432803012645ac136ddd64dba72","{…}"]},"requestHash":"0x0949c4fc3fec5036e82047f68491e76ea6d7a10b11c8bb5c5b04aa62969a1297","collectAfter":[],"executeAfter":["funding-1","funding-2"],"status":"ready","actionable":true}],"execution":{"committed":false,"phase":"collecting","fundingStatus":"not_started","tradeStatus":"not_started"},"error":null}}},"exampleType":"generated"}},"exampleType":"generated"},"b108b777-5beb-43fb-83a4-5484d3c911ac":{"description":"`Idempotency-Key is required`; `invalid Idempotency-Key`; `invalid trade plan: \u003creason>` (e.g. `funded trade plans currently accept buys`, a non-canonical decimal such as `\"0.50\"`, a deadline outside the 5-minute window); market format errors; `size must align exactly with the venue share lot`; `unknown CTF prerequisite`; `CTF prerequisite belongs to another wallet or audience`; `unsupported source chain`; `clientOrderId uses a reserved prefix`. 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"},"434803aa-8f1f-4504-842f-4c284f067f2e":{"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"},"53e5aa14-eeaa-4aee-9f83-b1e9d84c758a":{"description":"`API key missing trade:execute scope`; `wallet partner is disabled`; `API-key access to \u003cvenue> is disabled`; `external-signing execution is not enabled for this account`; or a tenant refusal (see `POST /v3/actions`).","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"},"a47df0ab-d365-4fc3-a08b-ed94ac6f12ff":{"description":"`wallet not found` — the wallet has no Kairos account, or the caller does not own it; `trade plan not found` — `wallet` differs from the wallet the API key is bound to.","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"},"ebdff257-4561-4965-a4ca-151e775ddc54":{"description":"- `FEE_SETTLEMENT_REQUIRED` (structured body below) — settle through `/v3/fees/settlements`, wait for `confirmed`, then prepare again.\n- `Idempotency-Key already names a different request`; `clientOrderId already names another trade plan`.\n- `set up the venue wallet before preparing a trade plan`; `set up the Hyperliquid wallet before preparing a trade plan`; `renew the Predict.fun wallet session` — run a `setup` action first.\n- `collateral is short; supply an explicit funding source`.\n- `wait for canonical CTF prerequisite confirmation`; `trade plan changed; read it before retrying`.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"`409` from `POST /v3/trade-plans` when the trading wallet's unpaid fees on the plan's collateral are at or above the partner's settlement threshold. Settle through `POST /v3/fees/settlements`, poll until `confirmed`, then prepare again.","required":["error","code","assetKey","owedRaw","thresholdRaw"],"properties":{"error":{"type":"string","example":"unpaid trading fees must be settled before the next trade","isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"string"},"code":{"type":"string","const":"FEE_SETTLEMENT_REQUIRED","isRequired":true,"uniqueKey":"oneOf.0.code","typeLabel":"string"},"assetKey":{"type":"string","description":"Collateral asset, `evm:\u003cchainId>:\u003clowercase token address>`.","example":"evm:137:0xc011a7e12a19f7b1f670d46f03b03f3342e82dfb","isRequired":true,"uniqueKey":"oneOf.0.assetKey","typeLabel":"string"},"owedRaw":{"type":"string","description":"Unpaid fees, integer string in token base units.","example":"10400000","isRequired":true,"uniqueKey":"oneOf.0.owedRaw","typeLabel":"string"},"thresholdRaw":{"type":"string","description":"The partner's settlement threshold in the same units.","example":"10000000","isRequired":true,"uniqueKey":"oneOf.0.thresholdRaw","typeLabel":"string"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"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"],"example":{"error":"unknown or expired action"},"properties":{"error":{"type":"string","description":"Human-readable message.","isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"string"},"code":{"type":"string","description":"Stable code, present on structured refusals only.","uniqueKey":"oneOf.1.code","typeLabel":"string"},"errorCode":{"type":"string","description":"Same as `code`; present where the refusal can also appear as a failed step's `errorCode`.","uniqueKey":"oneOf.1.errorCode","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"feeSettlementRequired":{"title":"feeSettlementRequired","value":{"error":"unpaid trading fees must be settled before the next trade","code":"FEE_SETTLEMENT_REQUIRED","assetKey":"evm:137:0xc011a7e12a19f7b1f670d46f03b03f3342e82dfb","owedRaw":"10400000","thresholdRaw":"10000000"}},"setupRequired":{"title":"setupRequired","value":{"error":"set up the venue wallet before preparing a trade plan"}}},"exampleType":"examples"}},"exampleType":"examples"},"7966ab04-7abd-4cc0-bc59-3192a1944ea4":{"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"},"16887809-4f3d-4a08-be23-36961803edbf":{"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"},"ab1c3b53-bf49-4fbb-90cf-812feea9fa70":{"description":"JSON `the combined Kairos and partner fee exceeds the 10% platform ceiling`; or plain text for a body of the wrong shape (unknown or missing fields, wrong types).","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"},"0948ce52-2938-4176-b31d-37d03665572f":{"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"},"b83727d5-2cf9-45cc-b50e-c9cf36d3d0eb":{"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"},"43832a50-08ba-4d3c-a2a2-0a6f151d9c09":{"description":"Production: `trade plans are disabled` until the lane is released. Staging: a dependency is unavailable — `venue is unavailable for trade plans`; `wallet funding is unavailable`; `no verified gasless funding route is available` (unsupported source → destination pair, e.g. Polygon USDC → Polymarket); `confirmed Polymarket fee schedule is unavailable`; `partner fee policy is unavailable`; `trade plan fee storage is unavailable`; `Polygon balance is unavailable`; `canonical CTF collateral snapshot is unavailable`; `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":{"ea95b536-3774-4095-83fa-3c60a044af82":{"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"}},"81e97c1f-c9c6-42cb-9fca-37fafae4fb59":{"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"}},"0565e855-8e1d-48bc-b2fc-c74caed74e9d":{"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"}},"9769a8d2-457f-410f-9e5f-a1733a5d7c45":{"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"}},"5256ccae-e8cf-484b-8e2f-dd9eb2f53dc3":{"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 trade plan (one buy, optionally funded cross-chain) - Kairos","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-29T04:21:19.614Z","originalFileLocation":"api-reference/partner/trade-plans-preview/prepare-a-trade-plan-one-buy-optionally-funded-cross-chain.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. A trade plan is one buy order on one venue, authorized up front in one batch of signatures, with an explicit fee ceiling (tradeBudget) and hard deadlines. When the venue account is short of collateral, the plan can also bridge exactly the shortfall from the same wallet\u0026#x27;s USDC on Polygon (137) or Arbitrum (42161) through gasless permits. Kairos runs funding first and submits the order only after the destination credit is final. Use /v3/actions for sells, cancels, setup and login; trade plans are buy-only and the venue wallet must already be set up through a setup action. Flow. Prepare → check order (the server may normalize it: canonical outcome; on Predict.fun a GTC order becomes a GTD order bounded by the venue session) → sign every requests[] entry whose actionable is true → POST /v3/trade-plans/{id}/answers and/or POST /v3/trade-plans/{id}/execute before executeBefore → poll GET /v3/trade-plans/{id}. An unfunded plan needs 2 signatures (plan, trade); a funded plan adds funding-1 and funding-2, signed on the source chain. Every signature must be a plain 65-byte ECDSA signature (low-s) from wallet. Idempotency. Idempotency-Key is required. The same key with the same body returns the stored plan in its current state; with a different body it is 409. clientOrderId is unique per wallet and venue across plans. Fees. tradeBudget.maxPlatformFeeBps is the Kairos maximum plus the partner maximum (partnerFee.maxBps), never above 1000 bps (10%). Partner fees are configured by Kairos per partner and pinned into the plan the wallet signs. Fees are not deducted in the order: they accrue as debt and are paid through /v3/fees/settlements. When the wallet\u0026#x27;s debt is at or above the partner\u0026#x27;s threshold, prepare returns 409 FEE_SETTLEMENT_REQUIRED.\">\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 trade plan (one buy, optionally funded cross-chain) - Kairos\">\u003cmeta data-mint-head property=\"og:description\" content=\"Preview: available on staging (https://staging-execution.kairos.trade); production returns 503 until release. A trade plan is one buy order on one venue, authorized up front in one batch of signatures, with an explicit fee ceiling (tradeBudget) and hard deadlines. When the venue account is short of collateral, the plan can also bridge exactly the shortfall from the same wallet\u0026#x27;s USDC on Polygon (137) or Arbitrum (42161) through gasless permits. Kairos runs funding first and submits the order only after the destination credit is final. Use /v3/actions for sells, cancels, setup and login; trade plans are buy-only and the venue wallet must already be set up through a setup action. Flow. Prepare → check order (the server may normalize it: canonical outcome; on Predict.fun a GTC order becomes a GTD order bounded by the venue session) → sign every requests[] entry whose actionable is true → POST /v3/trade-plans/{id}/answers and/or POST /v3/trade-plans/{id}/execute before executeBefore → poll GET /v3/trade-plans/{id}. An unfunded plan needs 2 signatures (plan, trade); a funded plan adds funding-1 and funding-2, signed on the source chain. Every signature must be a plain 65-byte ECDSA signature (low-s) from wallet. Idempotency. Idempotency-Key is required. The same key with the same body returns the stored plan in its current state; with a different body it is 409. clientOrderId is unique per wallet and venue across plans. Fees. tradeBudget.maxPlatformFeeBps is the Kairos maximum plus the partner maximum (partnerFee.maxBps), never above 1000 bps (10%). Partner fees are configured by Kairos per partner and pinned into the plan the wallet signs. Fees are not deducted in the order: they accrue as debt and are paid through /v3/fees/settlements. When the wallet\u0026#x27;s debt is at or above the partner\u0026#x27;s threshold, prepare returns 409 FEE_SETTLEMENT_REQUIRED.\">\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/trade-plans-preview/prepare-a-trade-plan-one-buy-optionally-funded-cross-chain\">\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=Trade+plans+%28preview%29\u0026amp;title=Prepare+a+trade+plan+%28one+buy%2C+optionally+funded+cross-chain%29\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%0AA+trade+plan+is+**one+buy+order+on+one+venue*\u0026amp;theme=530643ae41273bc052a9a850\u0026amp;signature=44cda9bbeb4a0249a9b2ab589885f9810f064107f945eb775b1a4d61c5d6206b\">\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 trade plan (one buy, optionally funded cross-chain) - Kairos\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Preview: available on staging (https://staging-execution.kairos.trade); production returns 503 until release. A trade plan is one buy order on one venue, authorized up front in one batch of signatures, with an explicit fee ceiling (tradeBudget) and hard deadlines. When the venue account is short of collateral, the plan can also bridge exactly the shortfall from the same wallet\u0026#x27;s USDC on Polygon (137) or Arbitrum (42161) through gasless permits. Kairos runs funding first and submits the order only after the destination credit is final. Use /v3/actions for sells, cancels, setup and login; trade plans are buy-only and the venue wallet must already be set up through a setup action. Flow. Prepare → check order (the server may normalize it: canonical outcome; on Predict.fun a GTC order becomes a GTD order bounded by the venue session) → sign every requests[] entry whose actionable is true → POST /v3/trade-plans/{id}/answers and/or POST /v3/trade-plans/{id}/execute before executeBefore → poll GET /v3/trade-plans/{id}. An unfunded plan needs 2 signatures (plan, trade); a funded plan adds funding-1 and funding-2, signed on the source chain. Every signature must be a plain 65-byte ECDSA signature (low-s) from wallet. Idempotency. Idempotency-Key is required. The same key with the same body returns the stored plan in its current state; with a different body it is 409. clientOrderId is unique per wallet and venue across plans. Fees. tradeBudget.maxPlatformFeeBps is the Kairos maximum plus the partner maximum (partnerFee.maxBps), never above 1000 bps (10%). Partner fees are configured by Kairos per partner and pinned into the plan the wallet signs. Fees are not deducted in the order: they accrue as debt and are paid through /v3/fees/settlements. When the wallet\u0026#x27;s debt is at or above the partner\u0026#x27;s threshold, prepare returns 409 FEE_SETTLEMENT_REQUIRED.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://kairos-c5456474.mintlify.app/_mintlify/api/og/v2?division=Trade+plans+%28preview%29\u0026amp;title=Prepare+a+trade+plan+%28one+buy%2C+optionally+funded+cross-chain%29\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%0AA+trade+plan+is+**one+buy+order+on+one+venue*\u0026amp;theme=530643ae41273bc052a9a850\u0026amp;signature=44cda9bbeb4a0249a9b2ab589885f9810f064107f945eb775b1a4d61c5d6206b\">\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/trade-plans-preview/prepare-a-trade-plan-one-buy-optionally-funded-cross-chain\">\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/trade-plans-preview/prepare-a-trade-plan-one-buy-optionally-funded-cross-chain.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/trade-plans-preview/prepare-a-trade-plan-one-buy-optionally-funded-cross-chain#webpage\",\"url\":\"https://docs.kairos.trade/api-reference/partner/trade-plans-preview/prepare-a-trade-plan-one-buy-optionally-funded-cross-chain\",\"name\":\"Prepare a trade plan (one buy, optionally funded cross-chain)\",\"description\":\"Preview: available on staging (https://staging-execution.kairos.trade); production returns 503 until release. A trade plan is one buy order on one venue, authorized up front in one batch of signatures, with an explicit fee ceiling (tradeBudget) and hard deadlines. When the venue account is short of collateral, the plan can also bridge exactly the shortfall from the same wallet's USDC on Polygon (137) or Arbitrum (42161) through gasless permits. Kairos runs funding first and submits the order only after the destination credit is final. Use /v3/actions for sells, cancels, setup and login; trade plans are buy-only and the venue wallet must already be set up through a setup action. Flow. Prepare → check order (the server may normalize it: canonical outcome; on Predict.fun a GTC order becomes a GTD order bounded by the venue session) → sign every requests[] entry whose actionable is true → POST /v3/trade-plans/{id}/answers and/or POST /v3/trade-plans/{id}/execute before executeBefore → poll GET /v3/trade-plans/{id}. An unfunded plan needs 2 signatures (plan, trade); a funded plan adds funding-1 and funding-2, signed on the source chain. Every signature must be a plain 65-byte ECDSA signature (low-s) from wallet. Idempotency. Idempotency-Key is required. The same key with the same body returns the stored plan in its current state; with a different body it is 409. clientOrderId is unique per wallet and venue across plans. Fees. tradeBudget.maxPlatformFeeBps is the Kairos maximum plus the partner maximum (partnerFee.maxBps), never above 1000 bps (10%). Partner fees are configured by Kairos per partner and pinned into the plan the wallet signs. Fees are not deducted in the order: they accrue as debt and are paid through /v3/fees/settlements. When the wallet's debt is at or above the partner's threshold, prepare returns 409 FEE_SETTLEMENT_REQUIRED.\",\"dateModified\":\"2026-10-29T04:21:19.614Z\",\"isPartOf\":{\"@id\":\"https://docs.kairos.trade#website\"},\"breadcrumb\":{\"@id\":\"https://docs.kairos.trade/api-reference/partner/trade-plans-preview/prepare-a-trade-plan-one-buy-optionally-funded-cross-chain#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.kairos.trade/api-reference/partner/trade-plans-preview/prepare-a-trade-plan-one-buy-optionally-funded-cross-chain#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 trade plan (one buy, optionally funded cross-chain)\",\"item\":\"https://docs.kairos.trade/api-reference/partner/trade-plans-preview/prepare-a-trade-plan-one-buy-optionally-funded-cross-chain\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.kairos.trade/api-reference/partner/trade-plans-preview/prepare-a-trade-plan-one-buy-optionally-funded-cross-chain#apireference\",\"headline\":\"Prepare a trade plan (one buy, optionally funded cross-chain)\",\"name\":\"Prepare a trade plan (one buy, optionally funded cross-chain)\",\"description\":\"Preview: available on staging (https://staging-execution.kairos.trade); production returns 503 until release. A trade plan is one buy order on one venue, authorized up front in one batch of signatures, with an explicit fee ceiling (tradeBudget) and hard deadlines. When the venue account is short of collateral, the plan can also bridge exactly the shortfall from the same wallet's USDC on Polygon (137) or Arbitrum (42161) through gasless permits. Kairos runs funding first and submits the order only after the destination credit is final. Use /v3/actions for sells, cancels, setup and login; trade plans are buy-only and the venue wallet must already be set up through a setup action. Flow. Prepare → check order (the server may normalize it: canonical outcome; on Predict.fun a GTC order becomes a GTD order bounded by the venue session) → sign every requests[] entry whose actionable is true → POST /v3/trade-plans/{id}/answers and/or POST /v3/trade-plans/{id}/execute before executeBefore → poll GET /v3/trade-plans/{id}. An unfunded plan needs 2 signatures (plan, trade); a funded plan adds funding-1 and funding-2, signed on the source chain. Every signature must be a plain 65-byte ECDSA signature (low-s) from wallet. Idempotency. Idempotency-Key is required. The same key with the same body returns the stored plan in its current state; with a different body it is 409. clientOrderId is unique per wallet and venue across plans. Fees. tradeBudget.maxPlatformFeeBps is the Kairos maximum plus the partner maximum (partnerFee.maxBps), never above 1000 bps (10%). Partner fees are configured by Kairos per partner and pinned into the plan the wallet signs. Fees are not deducted in the order: they accrue as debt and are paid through /v3/fees/settlements. When the wallet's debt is at or above the partner's threshold, prepare returns 409 FEE_SETTLEMENT_REQUIRED.\",\"url\":\"https://docs.kairos.trade/api-reference/partner/trade-plans-preview/prepare-a-trade-plan-one-buy-optionally-funded-cross-chain\",\"mainEntityOfPage\":{\"@id\":\"https://docs.kairos.trade/api-reference/partner/trade-plans-preview/prepare-a-trade-plan-one-buy-optionally-funded-cross-chain#webpage\"},\"dateModified\":\"2026-10-29T04:21:19.614Z\",\"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","description":"Preview: available on staging (`https://staging-execution.kairos.trade`); not yet released in production, where trade plans — the only source of this fee debt — return `503`.\n\nAnswers a settlement in `awaiting_signature`: a `signature` on Polymarket, a `transactionHash` on Predict.fun — never both. On success the settlement is `submitted`; poll `GET /v3/fees/settlements/{id}` until it is `confirmed`.\n\nA Polymarket signature must be a plain 65-byte ECDSA signature from `wallet` (low-s); smart-account signatures are refused. It is accepted until 30 s before `expiresAt`. `wallet` must be the wallet that opened the settlement (`walletRequest.request.params[0]` on Polymarket).","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","description":"Preview: available on staging (`https://staging-execution.kairos.trade`); production returns `503` until release.\n\nReturns the plan. Poll it after `/execute` until `status` is terminal: `completed`, `expired`, `failed`, `funded_trade_failed`, `funded_trade_expired`. `completed` means the venue **accepted** the order, not that it filled; follow the fill through `/v3/wallets/{address}/orders`.\n\nA plan that was never executed and is past `executeBefore` turns `expired` (`PLAN_EXPIRED`) on this read. `reconciling` with `error.code: OUTCOME_UNKNOWN` is the normal in-flight state while funding or the trade is being confirmed — keep polling. When funding landed but the trade failed or expired, the bridged collateral stays in `tradingWallet`; nothing is refunded automatically.","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","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","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 trade plan (one buy, optionally funded cross-chain) - 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"]}