Preview: available on staging (https://staging-execution.kairos.trade); production returns 503 until release.
Returns 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.
A 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.
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.
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.
Failed to deserialize the JSON body into the target type: action.price: invalid type: floating point `0.52`, expected a string
{
"error": "sign-in token has expired; run a login action"
}
{
"error": "API key missing trade:read scope"
}
{
"error": "trade plan not found"
}
{
"error": "unknown or expired action"
}
{
"error": "rate limit exceeded for this endpoint; retry later"
}
{
"error": "internal error"
}
{
"error": "unknown or expired action"
}
{"docsConfig":{"theme":"luma","$schema":"https://mintlify.com/docs.json","name":"Kairos","colors":{"primary":"#807dfe","light":"#6d6ae0","dark":"#a5a3ff"},"logo":{"light":"https://mintcdn.com/kairos-c5456474/JzYk92-enXUuMl0B/logo/kairos-wing.png?fit=max\u0026auto=format\u0026n=JzYk92-enXUuMl0B\u0026q=85\u0026s=c7c397bb87847c7f0e27019d68594bff","dark":"https://mintcdn.com/kairos-c5456474/JzYk92-enXUuMl0B/logo/wordmark.png?fit=max\u0026auto=format\u0026n=JzYk92-enXUuMl0B\u0026q=85\u0026s=8f2796ccf6273359a7ad0713bc86686d"},"favicon":"https://mintcdn.com/kairos-c5456474/JzYk92-enXUuMl0B/logo/kairos-wing.png?fit=max\u0026auto=format\u0026n=JzYk92-enXUuMl0B\u0026q=85\u0026s=c7c397bb87847c7f0e27019d68594bff","appearance":{"default":"dark"},"background":{"color":{"light":"#ffffff","dark":"#0a0a0f"}},"navbar":{"primary":{"type":"button","label":"Launch App","href":"https://app.kairos.trade"}},"contextual":{"options":["copy","view","download-spec","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"kairos-c5456474","hasAudioNarration":false,"actualSubdomain":"kairos-c5456474","customDomains":["docs.kairos.trade"],"gitSource":{"type":"github","owner":"kairoslive","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6aead0641411fefa89136024","collectionId":"4b502bda-1c32-4823-b83c-8b1fef053274","liveDeploymentHistoryId":"6aead0641411fefa89136024","schemaVersion":"v3"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6aead0641411fefa89136024","clientVersion":"0.0.4067","searchFilterCounts":[{"language":"default","tag":"API Reference","count":139},{"language":"default","tag":"Data API","count":77},{"language":"default","tag":"Execution API","count":53},{"language":"default","tag":"Partner API","count":36},{"language":"default","tag":"Trading API","count":27},{"language":"default","tag":"Markets","count":20},{"language":"default","tag":"Sports","count":20},{"language":"default","tag":"Endpoints","count":19},{"language":"default","tag":"Documentation","count":18},{"language":"default","tag":"Market Data","count":17}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/partner/trade-plans-preview/read-a-trade-plan","slug":"/api-reference/partner/trade-plans-preview/read-a-trade-plan","pageMetadata":{"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","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: [\"Returns the plan. Poll it after \", _jsx(_components.code, {\n children: \"/execute\"\n }), \" until \", _jsx(_components.code, {\n children: \"status\"\n }), \" is terminal: \", _jsx(_components.code, {\n children: \"completed\"\n }), \", \", _jsx(_components.code, {\n children: \"expired\"\n }), \", \", _jsx(_components.code, {\n children: \"failed\"\n }), \", \", _jsx(_components.code, {\n children: \"funded_trade_failed\"\n }), \", \", _jsx(_components.code, {\n children: \"funded_trade_expired\"\n }), \". \", _jsx(_components.code, {\n children: \"completed\"\n }), \" means the venue \", _jsx(_components.strong, {\n children: \"accepted\"\n }), \" the order, not that it filled; follow the fill through \", _jsx(_components.code, {\n children: \"/v3/wallets/{address}/orders\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A plan that was never executed and is past \", _jsx(_components.code, {\n children: \"executeBefore\"\n }), \" turns \", _jsx(_components.code, {\n children: \"expired\"\n }), \" (\", _jsx(_components.code, {\n children: \"PLAN_EXPIRED\"\n }), \") on this read. \", _jsx(_components.code, {\n children: \"reconciling\"\n }), \" with \", _jsx(_components.code, {\n children: \"error.code: OUTCOME_UNKNOWN\"\n }), \" 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 \", _jsx(_components.code, {\n children: \"tradingWallet\"\n }), \"; nothing is refunded automatically.\"]\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":"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","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"getTradePlan","summary":"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.","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:read for API-key callers (plus trade:execute when the key is also the tenant)","x-kairos-rate-limit":"120 requests/minute per client IP per route; 1000/minute when X-Client-Id is sent","security":["f32dd003-2728-4703-9fba-c0cfd38707fc","c6f3e290-c861-4428-b497-0a42f55e0e09","c4384001-ef28-4517-8358-c7ae89262800","ea7cb31b-51fc-4867-b5c3-980c03627a3e","c5a30af4-5d71-4f20-a623-4c93d9f01923"],"parameters":["dce34219-c44e-4796-bd30-0a345d2a2665"],"responses":{"200":"b92a826d-2ed3-4a07-929d-80427a06a75d","400":"ed8879d7-a5d9-4c4d-89e3-6cc798f084cb","401":"c0831cb5-d63f-40a9-9fc7-3a887c30d800","403":"94b6c128-6915-4a3f-b294-9d4e535f8b6c","404":"4922aa84-7a65-49a2-b27d-0c74229b46d7","409":"2a41452a-0ce9-44a9-af68-9e8c8aa436c6","429":"5077ac78-802c-45ba-8ded-31dafab08314","500":"7dca1436-148c-4d1d-aedd-ab042fe0c7d6","503":"502df3f5-babd-4a61-9fb7-28781852df87"},"method":"get","type":"path","servers":["330d272c-627a-4ff5-ad01-0263b300ce7a","83635983-3d27-4bb6-bc26-42ecc043c06c"],"path":"/v3/trade-plans/{id}","baseUrlOptions":["https://execution.kairos.trade","https://staging-execution.kairos.trade"],"title":"Read a trade plan","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"dce34219-c44e-4796-bd30-0a345d2a2665":{"name":"id","in":"path","required":true,"description":"Trade plan id.","schema":{"type":"string","format":"uuid","isRequired":true,"description":"Trade plan id.","uniqueKey":"","typeLabel":"string\u003cuuid>"}}},"responses":{"b92a826d-2ed3-4a07-929d-80427a06a75d":{"description":"The plan.","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"},"ed8879d7-a5d9-4c4d-89e3-6cc798f084cb":{"description":"Plain text — `{id}` is not a UUID.","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"},"c0831cb5-d63f-40a9-9fc7-3a887c30d800":{"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"},"94b6c128-6915-4a3f-b294-9d4e535f8b6c":{"description":"`API key missing trade:read scope` (reads) or `API key missing trade:execute scope` (writes) when an API key is the caller — `trade:execute` does not imply `trade:read`; or a tenant refusal: `unknown partner id`, `this partner id is used with its API key; send the key instead of X-Kairos-Partner-Id`, `this API key lacks the trade:execute scope`, `the wallet API is not enabled for this account`.","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":"API key missing trade:read scope"},"examples":{"Example":{"title":"Example","value":{"error":"API key missing trade:read scope"}}},"exampleType":"examples"}},"exampleType":"examples"},"4922aa84-7a65-49a2-b27d-0c74229b46d7":{"description":"`trade plan not found` — unknown, or not visible to this partner and wallet.","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":"trade plan not found"},"examples":{"Example":{"title":"Example","value":{"error":"trade plan not found"}}},"exampleType":"examples"}},"exampleType":"examples"},"2a41452a-0ce9-44a9-af68-9e8c8aa436c6":{"description":"`trade plan changed; read it before retrying` — the plan changed while this read was expiring it. Read it again.","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"},"5077ac78-802c-45ba-8ded-31dafab08314":{"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"},"7dca1436-148c-4d1d-aedd-ab042fe0c7d6":{"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"},"502df3f5-babd-4a61-9fb7-28781852df87":{"description":"Production: `trade plans are disabled` until this lane is released (the trade-plan reads and writes other than prepare can return `500 internal error` there instead). Staging: a dependency is unavailable, `partner registry unavailable; retry shortly`, or `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":{"f32dd003-2728-4703-9fba-c0cfd38707fc":{"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"}},"c6f3e290-c861-4428-b497-0a42f55e0e09":{"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"}},"c4384001-ef28-4517-8358-c7ae89262800":{"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"}},"ea7cb31b-51fc-4867-b5c3-980c03627a3e":{"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"}},"c5a30af4-5d71-4f20-a623-4c93d9f01923":{"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":"Read a trade plan - Kairos","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-29T04:21:19.627Z","originalFileLocation":"api-reference/partner/trade-plans-preview/read-a-trade-plan.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. Returns 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. A 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.\">\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=\"Read a trade plan - Kairos\">\u003cmeta data-mint-head property=\"og:description\" content=\"Preview: available on staging (https://staging-execution.kairos.trade); production returns 503 until release. Returns 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. A 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.\">\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/read-a-trade-plan\">\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=Read+a+trade+plan\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%0AReturns+the+plan.+Poll+it+after+%60%2Fexecute%60+un\u0026amp;theme=530643ae41273bc052a9a850\u0026amp;signature=b0a46a753d6e071f68c85eb827a748e334d9180be468c3fb0a7be166476a54e6\">\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=\"Read a trade plan - Kairos\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Preview: available on staging (https://staging-execution.kairos.trade); production returns 503 until release. Returns 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. A 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.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://kairos-c5456474.mintlify.app/_mintlify/api/og/v2?division=Trade+plans+%28preview%29\u0026amp;title=Read+a+trade+plan\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%0AReturns+the+plan.+Poll+it+after+%60%2Fexecute%60+un\u0026amp;theme=530643ae41273bc052a9a850\u0026amp;signature=b0a46a753d6e071f68c85eb827a748e334d9180be468c3fb0a7be166476a54e6\">\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/read-a-trade-plan\">\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/read-a-trade-plan.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/read-a-trade-plan#webpage\",\"url\":\"https://docs.kairos.trade/api-reference/partner/trade-plans-preview/read-a-trade-plan\",\"name\":\"Read a trade plan\",\"description\":\"Preview: available on staging (https://staging-execution.kairos.trade); production returns 503 until release. Returns 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. A 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.\",\"dateModified\":\"2026-10-29T04:21:19.627Z\",\"isPartOf\":{\"@id\":\"https://docs.kairos.trade#website\"},\"breadcrumb\":{\"@id\":\"https://docs.kairos.trade/api-reference/partner/trade-plans-preview/read-a-trade-plan#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.kairos.trade/api-reference/partner/trade-plans-preview/read-a-trade-plan#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\":\"Trade plans (preview)\",\"item\":\"https://docs.kairos.trade/api-reference/partner/trade-plans-preview/prepare-a-trade-plan-one-buy-optionally-funded-cross-chain\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Read a trade plan\",\"item\":\"https://docs.kairos.trade/api-reference/partner/trade-plans-preview/read-a-trade-plan\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.kairos.trade/api-reference/partner/trade-plans-preview/read-a-trade-plan#apireference\",\"headline\":\"Read a trade plan\",\"name\":\"Read a trade plan\",\"description\":\"Preview: available on staging (https://staging-execution.kairos.trade); production returns 503 until release. Returns 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. A 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.\",\"url\":\"https://docs.kairos.trade/api-reference/partner/trade-plans-preview/read-a-trade-plan\",\"mainEntityOfPage\":{\"@id\":\"https://docs.kairos.trade/api-reference/partner/trade-plans-preview/read-a-trade-plan#webpage\"},\"dateModified\":\"2026-10-29T04:21:19.627Z\",\"publisher\":{\"@id\":\"https://docs.kairos.trade/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.kairos.trade#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Kairos\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Kairos","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"Partner API","groups":[{"group":"Get started","icon":"rocket","pages":[{"title":"Kairos Partner API","sidebarTitle":"Introduction","icon":"wallet","href":"/wallets/overview"},{"title":"Onboarding and go-live","sidebarTitle":"Onboarding and go-live","icon":"list-check","href":"/wallets/onboarding"},{"title":"Quickstart: your first order","sidebarTitle":"Quickstart","icon":"rocket","href":"/wallets/quickstart"},{"title":"Partner API authentication","sidebarTitle":"Authentication","icon":"key","href":"/wallets/authentication"}]},{"group":"Onboard users","icon":"user-plus","pages":[{"title":"Set up and fund a wallet","sidebarTitle":"Set up and fund a wallet","icon":"user-plus","href":"/wallets/setup"},{"title":"Venue rules","sidebarTitle":"Venue rules","icon":"building-columns","href":"/wallets/venues"}]},{"group":"Trade","icon":"arrow-right-arrow-left","pages":[{"title":"Show markets","sidebarTitle":"Show markets","icon":"chart-line","href":"/wallets/markets"},{"title":"Place and cancel orders","sidebarTitle":"Place and cancel orders","icon":"arrow-right-arrow-left","href":"/wallets/trade"},{"title":"Show orders and positions","sidebarTitle":"Show orders and positions","icon":"briefcase","href":"/wallets/portfolio"},{"title":"What the wallet signs","sidebarTitle":"What the wallet signs","icon":"signature","href":"/wallets/signing"}]},{"group":"Route and fund","icon":"route","pages":[{"title":"Routing across venues","sidebarTitle":"Routing across venues","icon":"route","href":"/wallets/routing"},{"title":"Funded trade plans","tag":"Preview","sidebarTitle":"Funded trade plans","icon":"route","href":"/wallets/trade-plans"},{"title":"Split, merge and redeem","tag":"Preview","sidebarTitle":"Split, merge, redeem","icon":"link","href":"/wallets/onchain"}]},{"group":"Partner fees","icon":"receipt","pages":[{"title":"Partner fees and settlement","tag":"Preview","sidebarTitle":"Partner fees","icon":"receipt","href":"/wallets/fees"}]},{"group":"Build","icon":"code","pages":[{"title":"TypeScript SDK","sidebarTitle":"TypeScript SDK","icon":"js","href":"/wallets/sdk"},{"title":"Without the SDK: plain HTTP","sidebarTitle":"Plain HTTP clients","icon":"terminal","href":"/wallets/http"},{"title":"Errors, limits and idempotency","sidebarTitle":"Errors and limits","icon":"book","href":"/wallets/reference"}]},{"group":"Endpoints","icon":"brackets-curly","pages":[{"group":"Actions","pages":[{"title":"Start a wallet action (setup, order, cancel, login)","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/actions","href":"/api-reference/partner/actions/start-a-wallet-action-setup-order-cancel-login"},{"title":"Read an action's current step","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/actions/{id}","href":"/api-reference/partner/actions/read-an-actions-current-step"},{"title":"Answer the current step (signature or wallet result)","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/actions/{id}","href":"/api-reference/partner/actions/answer-the-current-step-signature-or-wallet-result"}]},{"group":"Reads","pages":[{"title":"Read a wallet's readiness and balances per venue","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/wallets/{address}","href":"/api-reference/partner/reads/read-a-wallets-readiness-and-balances-per-venue"},{"title":"List a wallet's orders across venues","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/wallets/{address}/orders","href":"/api-reference/partner/reads/list-a-wallets-orders-across-venues"},{"title":"List a wallet's positions across venues","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/wallets/{address}/positions","href":"/api-reference/partner/reads/list-a-wallets-positions-across-venues"}]},{"group":"Fees (preview)","pages":[{"title":"Read a wallet's unpaid trading fees per venue","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/fees","href":"/api-reference/partner/fees-preview/read-a-wallets-unpaid-trading-fees-per-venue"},{"title":"Open a settlement for a wallet's unpaid fees on one venue","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/fees/settlements","href":"/api-reference/partner/fees-preview/open-a-settlement-for-a-wallets-unpaid-fees-on-one-venue"},{"title":"Read (and advance) a fee settlement","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/fees/settlements/{id}","href":"/api-reference/partner/fees-preview/read-and-advance-a-fee-settlement"},{"title":"Post the wallet's signature or transaction hash for a settlement","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/fees/settlements/{id}/answer","href":"/api-reference/partner/fees-preview/post-the-wallets-signature-or-transaction-hash-for-a-settlement"}]},{"group":"Trade plans (preview)","pages":[{"title":"Prepare a trade plan (one buy, optionally funded cross-chain)","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"},{"title":"Read a trade plan","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/trade-plans/{id}","href":"/api-reference/partner/trade-plans-preview/read-a-trade-plan"},{"title":"Post signatures for a trade plan's requests","description":"Preview: available on staging (`https://staging-execution.kairos.trade`); production returns `503` until release.\n\nPosts one or more signatures for the plan's `requests[]`. Answers may arrive in several batches; the whole batch is checked before anything is stored. When every required signature is in, `status` becomes `ready_to_execute`. You can also skip this call and send all signatures in the `/execute` body.\n\nEach signature must be 65 bytes, low-s, and recover to `wallet` over that request's typed data. Re-sending an accepted signature is a no-op; a different signature for an accepted request is refused. With `submission.funding: \"client\"`, keep the funding signatures — Kairos refuses them. Only `kind: \"signature\"` answers are accepted.","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":"Read a trade plan - 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"]}