Returns the action’s current step. Poll this while status is working; when the step carries holdUntilMs (an order the venue is still matching), wait until then before polling.
An action is readable for 10 minutes after its 15-minute lifetime ends. Unknown, expired, and other partners’ actions all read 404.
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 API contract version. Send 2 — the multi-venue contract this reference documents. Without the header (or with any other value) /v3/actions and /v3/wallets/* serve the original Polymarket-only contract, which ignores venue prefixes, expiresAt and setup.venues, omits chainId, venue and fallbackRequests from steps, refuses orders on a wallet that is not set up (409), and returns snake_case order and position rows.
EIP-155 chain id (hex) the wallet must be on to answer — 0x89 Polygon, 0x38 BNB Chain, 0xa4b1 Arbitrum One (0x66eee Arbitrum Sepolia on Hyperliquid testnet). null for personal_sign and when nothing is asked.
Present with wallet_sendCalls requests only — the same calls as individual eth_sendTransaction requests, for wallets without EIP-5792. Send them in order and answer with {"result": ["0xhash", …]}.
Machine-readable reason on a failed step; the key is omitted when the failure has no code. Codes may be added; treat an unknown code as a failure whose order was not placed.
Code
Meaning
Order placed?
NO_MATCH
An immediate order (FOK/FAK/IOC) found nothing to match.
No
VENUE_REJECTED
The venue refused the order.
No
ORDER_OUTCOME_UNKNOWN
The submission's outcome is unknown. Read the wallet's orders before placing again.
Maybe
CANCEL_OUTCOME_UNKNOWN
Some venue may have cancelled. Read the wallet's orders.
Maybe
SIGNATURE_EXPIRED
The signing window closed before a signature was accepted. Nothing was sent.
No
CLIENT_ORDER_ID_CONFLICT
The clientOrderId names an order with different terms.
No
HYPERLIQUID_AGENT_MISSING
Hyperliquid no longer lists this wallet's trading approval. Run setup again.
{"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/actions/read-an-actions-current-step","slug":"/api-reference/partner/actions/read-an-actions-current-step","pageMetadata":{"title":"Read an action's current step","description":"Returns the action's current step. Poll this while `status` is `working`; when the step carries `holdUntilMs` (an order the venue is still matching), wait until then before polling.\n\nAn action is readable for 10 minutes after its 15-minute lifetime ends. Unknown, expired, and other partners' actions all read `404`.","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/actions/{id}","href":"/api-reference/partner/actions/read-an-actions-current-step","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 ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Returns the action’s current step. Poll this while \", _jsx(_components.code, {\n children: \"status\"\n }), \" is \", _jsx(_components.code, {\n children: \"working\"\n }), \"; when the step carries \", _jsx(_components.code, {\n children: \"holdUntilMs\"\n }), \" (an order the venue is still matching), wait until then before polling.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"An action is readable for 10 minutes after its 15-minute lifetime ends. Unknown, expired, and other partners’ actions all read \", _jsx(_components.code, {\n children: \"404\"\n }), \".\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Read an action's current step","description":"Returns the action's current step. Poll this while `status` is `working`; when the step carries `holdUntilMs` (an order the venue is still matching), wait until then before polling.\n\nAn action is readable for 10 minutes after its 15-minute lifetime ends. Unknown, expired, and other partners' actions all read `404`.","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/actions/{id}","href":"/api-reference/partner/actions/read-an-actions-current-step","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"getWalletAction","summary":"Read an action's current step","description":"Returns the action's current step. Poll this while `status` is `working`; when the step carries `holdUntilMs` (an order the venue is still matching), wait until then before polling.\n\nAn action is readable for 10 minutes after its 15-minute lifetime ends. Unknown, expired, and other partners' actions all read `404`.","tags":["Actions"],"x-kairos-auth":"partner id (X-Kairos-Partner-Id) or API key triple","x-kairos-scope":"trade:execute (API-key callers)","x-kairos-rate-limit":"120 requests/minute per client IP per route; 1000/minute when X-Client-Id is sent","security":["5b37c358-7850-4ee7-a845-1ae2e72cca08","1fa61938-d74e-43e9-8f95-154780fb81b9"],"responses":{"200":"259f4de5-3231-49e3-8954-813ac2f1b327","400":"fa2696e7-5919-4057-9c52-bac7d09d7f99","401":"cae7f8c9-104b-4e55-a77b-4611f72ebace","403":"ed56c1b1-6b53-4600-98b0-cbbf13ea1d7e","404":"c3233d52-f4a4-40d7-84f6-c6fbb81341c2","429":"697c7244-e25f-4e7a-b046-a5ab5161254b","500":"ddde82ef-f447-4676-a6b6-5076032338a9","502":"ba2cd08b-dd7f-4bb3-8960-02d7d2ad69c0","503":"dd92b6c4-4c80-4fd4-9543-3305582da9cc","504":"04fcc67c-89e5-45e3-b026-e3dd63b0b2ca"},"method":"get","type":"path","servers":["330d272c-627a-4ff5-ad01-0263b300ce7a","83635983-3d27-4bb6-bc26-42ecc043c06c"],"path":"/v3/actions/{id}","baseUrlOptions":["https://execution.kairos.trade","https://staging-execution.kairos.trade"],"title":"Read an action's current step","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"b2ae6cb8-05cd-4576-97b5-aa18109dc66e":{"name":"id","in":"path","required":true,"description":"Action id returned by `POST /v3/actions`.","schema":{"type":"string","format":"uuid","isRequired":true,"description":"Action id returned by `POST /v3/actions`.","uniqueKey":"","typeLabel":"string\u003cuuid>"}},"05ba18a4-d1ad-40e9-b163-0392a39c4ada":{"name":"X-Kairos-Wallet-Api","in":"header","required":true,"description":"Wallet API contract version. Send `2` — the multi-venue contract this reference documents. Without the header (or with any other value) `/v3/actions` and `/v3/wallets/*` serve the original Polymarket-only contract, which ignores venue prefixes, `expiresAt` and `setup.venues`, omits `chainId`, `venue` and `fallbackRequests` from steps, refuses orders on a wallet that is not set up (`409`), and returns snake_case order and position rows.","schema":{"type":"string","enum":["2"],"isRequired":true,"description":"Wallet API contract version. Send `2` — the multi-venue contract this reference documents. Without the header (or with any other value) `/v3/actions` and `/v3/wallets/*` serve the original Polymarket-only contract, which ignores venue prefixes, `expiresAt` and `setup.venues`, omits `chainId`, `venue` and `fallbackRequests` from steps, refuses orders on a wallet that is not set up (`409`), and returns snake_case order and position rows.","uniqueKey":"","typeLabel":"enum\u003cstring>"},"example":"2"}},"responses":{"259f4de5-3231-49e3-8954-813ac2f1b327":{"description":"The current step.","content":{"application/json":{"schema":{"type":"object","description":"The current step of an action. Every response from `/v3/actions` and `/v3/actions/{id}` is one of these.","required":["id","type","status","request","description","chainId","venue","result","error"],"properties":{"id":{"type":"string","format":"uuid","description":"Action id. One id for the whole action, across venues.","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"type":{"type":"string","enum":["setup","order","cancel","login"],"isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"`needs_signature` — run `request` and answer; `working` — poll; `done` — read `result`; `failed` — read `error` and `errorCode`.","enum":["needs_signature","working","done","failed"],"isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"request":{"oneOf":[{"type":"object","description":"What the wallet must run. Non-null only while `needs_signature`.","required":["method","params"],"example":{"method":"personal_sign","params":["0x6b6169726f732e7472616465207761…","0x8ba1f109551bD432803012645Ac136ddd64DBA72"]},"properties":{"method":{"type":"string","enum":["eth_signTypedData_v4","personal_sign","wallet_sendCalls","eth_sendTransaction"],"isRequired":true,"uniqueKey":"request.oneOf.0.method","typeLabel":"enum\u003cstring>"},"params":{"type":"array","items":{"oneOf":[{}],"uniqueKey":"request.oneOf.0.params.items.[INDEX]","typeLabel":"any"},"isRequired":true,"uniqueKey":"request.oneOf.0.params","typeLabel":"any[]"}},"isRequired":true,"uniqueKey":"request.oneOf.0","typeLabel":"object"},{"type":"null","description":"What the wallet must run. Non-null only while `needs_signature`.","isRequired":true,"uniqueKey":"request.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"request","typeLabel":"object | null"},"description":{"oneOf":[{"type":"string","description":"Text to show with the wallet prompt (e.g. `Confirm this Hyperliquid order`), or progress text while `working`.","isRequired":true,"uniqueKey":"description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Text to show with the wallet prompt (e.g. `Confirm this Hyperliquid order`), or progress text while `working`.","isRequired":true,"uniqueKey":"description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"description","typeLabel":"string | null"},"chainId":{"oneOf":[{"type":"string","description":"EIP-155 chain id (hex) the wallet must be on to answer — `0x89` Polygon, `0x38` BNB Chain, `0xa4b1` Arbitrum One (`0x66eee` Arbitrum Sepolia on Hyperliquid testnet). `null` for `personal_sign` and when nothing is asked.","example":"0x38","isRequired":true,"uniqueKey":"chainId.oneOf.0","typeLabel":"string"},{"type":"null","description":"EIP-155 chain id (hex) the wallet must be on to answer — `0x89` Polygon, `0x38` BNB Chain, `0xa4b1` Arbitrum One (`0x66eee` Arbitrum Sepolia on Hyperliquid testnet). `null` for `personal_sign` and when nothing is asked.","example":"0x38","isRequired":true,"uniqueKey":"chainId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"chainId","typeLabel":"string | null"},"venue":{"oneOf":[{"type":"string","description":"Venue of the current prompt; `null` when finished and on cancels.","enum":["polymarket","predictfun","hyperliquid"],"isRequired":true,"uniqueKey":"venue.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Venue of the current prompt; `null` when finished and on cancels.","isRequired":true,"uniqueKey":"venue.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"venue","typeLabel":"enum\u003cstring> | null"},"result":{"oneOf":[{"type":"object","description":"Outcome on `done` (and the provisional outcome of a held order). Shape depends on `type`.","required":["ready"],"example":{"ready":false,"venues":{"polymarket":{"ready":true,"tradingWallet":"0x2f9c4b8e1d7a6c5b4a3f2e1d0c9b8a7f6e5d4c3b","transactionHash":"0x7c3e9a1b5d2f4c6e8a0b2d4f6a8c0e2b4d6f8a0c2e4b6d8f0a2c4e6b8d0f2a4c"},"predictfun":{"ready":false,"next":"fund","tradingWallet":"0x8ba1f109551bd432803012645ac136ddd64dba72","venueDetail":{"reason":"needs about 0.0004 BNB on BNB Chain to pay gas for 2 Predict.fun approvals","approvals":2,"gasWei":"400000000000000"}}},"tradingWallet":"0x2f9c4b8e1d7a6c5b4a3f2e1d0c9b8a7f6e5d4c3b","transactionHash":"0x7c3e9a1b5d2f4c6e8a0b2d4f6a8c0e2b4d6f8a0c2e4b6d8f0a2c4e6b8d0f2a4c"},"properties":{"ready":{"type":"boolean","description":"Every requested venue is ready.","isRequired":true,"uniqueKey":"result.oneOf.0.ready","typeLabel":"boolean"},"venues":{"type":"object","description":"Outcome per requested venue.","additionalProperties":{"type":"object","description":"One venue's setup outcome.","required":["ready"],"properties":{"ready":{"type":"boolean","isRequired":true,"uniqueKey":"result.oneOf.0.venues.additionalProperties.ready","typeLabel":"boolean"},"tradingWallet":{"type":"string","description":"EVM address, `0x` + 40 hex.","pattern":"^0x[0-9a-fA-F]{40}$","example":"0x8ba1f109551bd432803012645ac136ddd64dba72","uniqueKey":"result.oneOf.0.venues.additionalProperties.tradingWallet","typeLabel":"string"},"transactionHash":{"oneOf":[{"type":"string","description":"Polymarket — the approval transaction, or `null` when none was needed.","uniqueKey":"result.oneOf.0.venues.additionalProperties.transactionHash.oneOf.0","typeLabel":"string"},{"type":"null","description":"Polymarket — the approval transaction, or `null` when none was needed.","uniqueKey":"result.oneOf.0.venues.additionalProperties.transactionHash.oneOf.1","typeLabel":"null"}],"uniqueKey":"result.oneOf.0.venues.additionalProperties.transactionHash","typeLabel":"string | null"},"sessionExpiresAt":{"type":"string","format":"date-time","description":"Predict.fun — when the venue session ends.","uniqueKey":"result.oneOf.0.venues.additionalProperties.sessionExpiresAt","typeLabel":"string\u003cdate-time>"},"next":{"type":"string","enum":["fund","blocked"],"description":"Why a venue that finished setup is not ready: `fund` (deposit, or BNB for gas) or `blocked`.","uniqueKey":"result.oneOf.0.venues.additionalProperties.next","typeLabel":"enum\u003cstring>"},"venueDetail":{"type":"object","description":"Venue-specific detail. Keys appear only where they apply.","properties":{"chainId":{"type":"string","description":"Chain the venue settles on (hex).","example":"0x89","uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail.chainId","typeLabel":"string"},"gasBalance":{"oneOf":[{"type":"string","description":"Predict.fun — BNB balance for gas, whole units.","uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail.gasBalance.oneOf.0","typeLabel":"string"},{"type":"null","description":"Predict.fun — BNB balance for gas, whole units.","uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail.gasBalance.oneOf.1","typeLabel":"null"}],"uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail.gasBalance","typeLabel":"string | null"},"missingApprovals":{"type":"integer","description":"Predict.fun — approvals still to send.","uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail.missingApprovals","typeLabel":"integer"},"sessionExpiresAt":{"oneOf":[{"type":"string","format":"date-time","description":"Predict.fun — when the venue session ends.","uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail.sessionExpiresAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"Predict.fun — when the venue session ends.","uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail.sessionExpiresAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail.sessionExpiresAt","typeLabel":"string\u003cdate-time> | null"},"network":{"type":"string","description":"Hyperliquid — `Mainnet` or `Testnet`.","uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail.network","typeLabel":"string"},"transferFromPerps":{"type":"object","description":"Hyperliquid — USDC in perps the next order can move to spot (with an extra prompt).","properties":{"available":{"type":"string","example":"12.5","uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail.transferFromPerps.available","typeLabel":"string"},"note":{"type":"string","uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail.transferFromPerps.note","typeLabel":"string"}},"uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail.transferFromPerps","typeLabel":"object"},"code":{"type":"string","description":"Hyperliquid — `HYPERLIQUID_AGENT_MISSING` when the trading approval must be renewed by `setup`.","uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail.code","typeLabel":"string"},"reason":{"type":"string","description":"Why the venue is not ready (fund, blocked, or approval renewal).","uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail.reason","typeLabel":"string"},"blocked":{"type":"boolean","description":"Hyperliquid — this account cannot be enrolled.","uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail.blocked","typeLabel":"boolean"},"accountMode":{"type":"string","description":"Hyperliquid — the account mode that blocks enrollment.","uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail.accountMode","typeLabel":"string"},"approvals":{"type":"integer","description":"Setup result, Predict.fun — approvals the wallet needs gas for.","uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail.approvals","typeLabel":"integer"},"gasWei":{"type":"string","description":"Setup result, Predict.fun — estimated BNB gas needed, in wei.","uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail.gasWei","typeLabel":"string"}},"additionalProperties":true,"uniqueKey":"result.oneOf.0.venues.additionalProperties.venueDetail","typeLabel":"object"},"error":{"type":"string","description":"This venue failed; the others may still have succeeded.","uniqueKey":"result.oneOf.0.venues.additionalProperties.error","typeLabel":"string"}},"uniqueKey":"result.oneOf.0.venues.additionalProperties","typeLabel":"object"},"uniqueKey":"result.oneOf.0.venues","typeLabel":"object"},"tradingWallet":{"oneOf":[{"type":"string","description":"Polymarket's trading wallet, when Polymarket was set up; `null` when Polymarket's setup failed.","uniqueKey":"result.oneOf.0.tradingWallet.oneOf.0","typeLabel":"string"},{"type":"null","description":"Polymarket's trading wallet, when Polymarket was set up; `null` when Polymarket's setup failed.","uniqueKey":"result.oneOf.0.tradingWallet.oneOf.1","typeLabel":"null"}],"uniqueKey":"result.oneOf.0.tradingWallet","typeLabel":"string | null"},"transactionHash":{"oneOf":[{"type":"string","description":"Polymarket's approval transaction, when Polymarket was set up.","uniqueKey":"result.oneOf.0.transactionHash.oneOf.0","typeLabel":"string"},{"type":"null","description":"Polymarket's approval transaction, when Polymarket was set up.","uniqueKey":"result.oneOf.0.transactionHash.oneOf.1","typeLabel":"null"}],"uniqueKey":"result.oneOf.0.transactionHash","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"result.oneOf.0","typeLabel":"object"},{"type":"object","description":"Outcome on `done` (and the provisional outcome of a held order). Shape depends on `type`.","required":["orderId","status","final","success"],"properties":{"orderId":{"type":"string","format":"uuid","description":"Kairos order id — use it to cancel.","isRequired":true,"uniqueKey":"result.oneOf.1.orderId","typeLabel":"string\u003cuuid>"},"status":{"type":"string","description":"Order status: Polymarket's answer (`matched`, `live`, `delayed`, `unmatched`) or the Kairos order status on Hyperliquid (`executing`, `live`, `partial`, `filled`, `cancelled`, `failed`, …). Read `final` and `success` rather than matching on this.","example":"matched","isRequired":true,"uniqueKey":"result.oneOf.1.status","typeLabel":"string"},"final":{"type":"boolean","description":"Matching is finished.","isRequired":true,"uniqueKey":"result.oneOf.1.final","typeLabel":"boolean"},"success":{"type":"boolean","description":"`false` when the order did nothing, failed, or is not confirmed yet.","isRequired":true,"uniqueKey":"result.oneOf.1.success","typeLabel":"boolean"},"venueOrderId":{"oneOf":[{"type":"string","uniqueKey":"result.oneOf.1.venueOrderId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"result.oneOf.1.venueOrderId.oneOf.1","typeLabel":"null"}],"uniqueKey":"result.oneOf.1.venueOrderId","typeLabel":"string | null"},"venueStatus":{"oneOf":[{"type":"string","description":"The venue's first answer.","uniqueKey":"result.oneOf.1.venueStatus.oneOf.0","typeLabel":"string"},{"type":"null","description":"The venue's first answer.","uniqueKey":"result.oneOf.1.venueStatus.oneOf.1","typeLabel":"null"}],"uniqueKey":"result.oneOf.1.venueStatus","typeLabel":"string | null"},"filledSize":{"oneOf":[{"type":"string","description":"Shares filled; `null` when unknown.","example":"7.140348","uniqueKey":"result.oneOf.1.filledSize.oneOf.0","typeLabel":"string"},{"type":"null","description":"Shares filled; `null` when unknown.","example":"7.140348","uniqueKey":"result.oneOf.1.filledSize.oneOf.1","typeLabel":"null"}],"uniqueKey":"result.oneOf.1.filledSize","typeLabel":"string | null"},"filledNotional":{"oneOf":[{"type":"string","description":"Collateral spent or received, before venue fees.","example":"4.069998","uniqueKey":"result.oneOf.1.filledNotional.oneOf.0","typeLabel":"string"},{"type":"null","description":"Collateral spent or received, before venue fees.","example":"4.069998","uniqueKey":"result.oneOf.1.filledNotional.oneOf.1","typeLabel":"null"}],"uniqueKey":"result.oneOf.1.filledNotional","typeLabel":"string | null"},"avgPrice":{"oneOf":[{"type":"string","example":"0.57","uniqueKey":"result.oneOf.1.avgPrice.oneOf.0","typeLabel":"string"},{"type":"null","example":"0.57","uniqueKey":"result.oneOf.1.avgPrice.oneOf.1","typeLabel":"null"}],"uniqueKey":"result.oneOf.1.avgPrice","typeLabel":"string | null"},"message":{"oneOf":[{"type":"string","description":"Set when `success` is false:\n- `No fill: the venue matched none of this order`\n- `The order failed at the venue; any fills shown were reverted`\n- `The venue rejected the order`\n- `Outcome not confirmed yet; check this wallet's orders before placing it again`","uniqueKey":"result.oneOf.1.message.oneOf.0","typeLabel":"string"},{"type":"null","description":"Set when `success` is false:\n- `No fill: the venue matched none of this order`\n- `The order failed at the venue; any fills shown were reverted`\n- `The venue rejected the order`\n- `Outcome not confirmed yet; check this wallet's orders before placing it again`","uniqueKey":"result.oneOf.1.message.oneOf.1","typeLabel":"null"}],"uniqueKey":"result.oneOf.1.message","typeLabel":"string | null"},"venue":{"type":"string","description":"Venue id. `predict.fun` is accepted as an input alias of `predictfun`.","enum":["polymarket","predictfun","hyperliquid"],"uniqueKey":"result.oneOf.1.venue","typeLabel":"enum\u003cstring>"},"market":{"type":"string","description":"`venue:market_id`.","uniqueKey":"result.oneOf.1.market","typeLabel":"string"}},"isRequired":true,"uniqueKey":"result.oneOf.1","typeLabel":"object"},{"type":"object","description":"Outcome on `done` (and the provisional outcome of a held order). Shape depends on `type`.","required":["cancelled","failed","venueDetail"],"example":{"cancelled":["3f2b8c1e-5d4a-4e6f-9b7c-1a2d3e4f5a6b"],"alreadyClosed":[],"failed":[{"orderId":"9c8d7e6f-5a4b-4c3d-8e2f-1a0b9c8d7e6f","reason":"order not found"}],"venueDetail":{}},"properties":{"cancelled":{"type":"array","items":{"type":"string","uniqueKey":"result.oneOf.2.cancelled.items.[INDEX]","typeLabel":"string"},"description":"Order ids cancelled.","isRequired":true,"uniqueKey":"result.oneOf.2.cancelled","typeLabel":"string[]"},"failed":{"oneOf":[{"type":"array","items":{"type":"object","required":["orderId","reason"],"properties":{"orderId":{"type":"string","isRequired":true,"uniqueKey":"result.oneOf.2.failed.oneOf.0.items.[INDEX].orderId","typeLabel":"string"},"reason":{"type":"string","description":"The venue's reason, `cancel failed; retry`, `order not found` (also for ids that are not this wallet's), `venue unavailable; retry`, or an outcome-unknown message.","isRequired":true,"uniqueKey":"result.oneOf.2.failed.oneOf.0.items.[INDEX].reason","typeLabel":"string"},"code":{"type":"string","description":"`CANCEL_OUTCOME_UNKNOWN` when the venue may have cancelled.","uniqueKey":"result.oneOf.2.failed.oneOf.0.items.[INDEX].code","typeLabel":"string"}},"uniqueKey":"result.oneOf.2.failed.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"By id — the failures; with `all` — the number of failures.","isRequired":true,"uniqueKey":"result.oneOf.2.failed.oneOf.0","typeLabel":"object[]"},{"type":"integer","description":"By id — the failures; with `all` — the number of failures.","isRequired":true,"uniqueKey":"result.oneOf.2.failed.oneOf.1","typeLabel":"integer"}],"isRequired":true,"uniqueKey":"result.oneOf.2.failed","typeLabel":"object[] | integer"},"venueDetail":{"type":"object","description":"Per venue: `{cancelled, failed}` counts for `all`, or `{error}` when the venue could not be reached (`{error, code: \"CANCEL_OUTCOME_UNKNOWN\"}` when it may have cancelled). Empty when every venue answered on a by-id cancel.","additionalProperties":{"type":"object","properties":{"cancelled":{"type":"integer","uniqueKey":"result.oneOf.2.venueDetail.additionalProperties.cancelled","typeLabel":"integer"},"failed":{"type":"integer","uniqueKey":"result.oneOf.2.venueDetail.additionalProperties.failed","typeLabel":"integer"},"error":{"type":"string","uniqueKey":"result.oneOf.2.venueDetail.additionalProperties.error","typeLabel":"string"},"code":{"type":"string","uniqueKey":"result.oneOf.2.venueDetail.additionalProperties.code","typeLabel":"string"}},"uniqueKey":"result.oneOf.2.venueDetail.additionalProperties","typeLabel":"object"},"isRequired":true,"uniqueKey":"result.oneOf.2.venueDetail","typeLabel":"object"},"alreadyClosed":{"type":"array","items":{"type":"string","uniqueKey":"result.oneOf.2.alreadyClosed.items.[INDEX]","typeLabel":"string"},"description":"By id — orders already filled, cancelled or expired.","uniqueKey":"result.oneOf.2.alreadyClosed","typeLabel":"string[]"}},"isRequired":true,"uniqueKey":"result.oneOf.2","typeLabel":"object"},{"type":"object","description":"Outcome on `done` (and the provisional outcome of a held order). Shape depends on `type`.","required":["token","expiresAt"],"properties":{"token":{"type":"string","description":"Opaque sign-in token (at most 4096 bytes).","isRequired":true,"uniqueKey":"result.oneOf.3.token","typeLabel":"string"},"expiresAt":{"type":"string","format":"date-time","description":"24 hours after issue.","isRequired":true,"uniqueKey":"result.oneOf.3.expiresAt","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"result.oneOf.3","typeLabel":"object"},{"type":"null","description":"Outcome on `done` (and the provisional outcome of a held order). Shape depends on `type`.","isRequired":true,"uniqueKey":"result.oneOf.4","typeLabel":"null"}],"isRequired":true,"uniqueKey":"result","typeLabel":"object · object · object · object · null"},"error":{"oneOf":[{"type":"string","description":"Why the action failed; non-null on `failed`.","isRequired":true,"uniqueKey":"error.oneOf.0","typeLabel":"string"},{"type":"null","description":"Why the action failed; non-null on `failed`.","isRequired":true,"uniqueKey":"error.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error","typeLabel":"string | null"},"fallbackRequests":{"type":"array","description":"Present with `wallet_sendCalls` requests only — the same calls as individual `eth_sendTransaction` requests, for wallets without EIP-5792. Send them in order and answer with `{\"result\": [\"0xhash\", …]}`.","items":{"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":"fallbackRequests.items.[INDEX].method","typeLabel":"enum\u003cstring>"},"params":{"type":"array","items":{"oneOf":[{}],"uniqueKey":"fallbackRequests.items.[INDEX].params.items.[INDEX]","typeLabel":"any"},"isRequired":true,"uniqueKey":"fallbackRequests.items.[INDEX].params","typeLabel":"any[]"}},"example":{"method":"personal_sign","params":["0x6b6169726f732e7472616465207761…","0x8ba1f109551bD432803012645Ac136ddd64DBA72"]},"uniqueKey":"fallbackRequests.items.[INDEX]","typeLabel":"object"},"uniqueKey":"fallbackRequests","typeLabel":"object[]"},"expiresAtMs":{"type":"integer","format":"int64","description":"Last accepted millisecond (Unix ms) for answering this prompt. Answers after it fail the action with `SIGNATURE_EXPIRED`.","example":1793130772999,"uniqueKey":"expiresAtMs","typeLabel":"integer\u003cint64>"},"holdUntilMs":{"type":"integer","format":"int64","description":"On a `working` order the venue is still matching — poll again after this time (Unix ms). `result` then holds a provisional outcome with `final: false`.","uniqueKey":"holdUntilMs","typeLabel":"integer\u003cint64>"},"errorCode":{"type":"string","description":"Machine-readable reason on a `failed` step; the key is omitted when the failure has no code. Codes may be added; treat an unknown code as a failure whose order was not placed.\n\n| Code | Meaning | Order placed? |\n|---|---|---|\n| `NO_MATCH` | An immediate order (FOK/FAK/IOC) found nothing to match. | No |\n| `VENUE_REJECTED` | The venue refused the order. | No |\n| `ORDER_OUTCOME_UNKNOWN` | The submission's outcome is unknown. Read the wallet's orders before placing again. | Maybe |\n| `CANCEL_OUTCOME_UNKNOWN` | Some venue may have cancelled. Read the wallet's orders. | Maybe |\n| `SIGNATURE_EXPIRED` | The signing window closed before a signature was accepted. Nothing was sent. | No |\n| `CLIENT_ORDER_ID_CONFLICT` | The `clientOrderId` names an order with different terms. | No |\n| `HYPERLIQUID_AGENT_MISSING` | Hyperliquid no longer lists this wallet's trading approval. Run `setup` again. | No |","enum":["NO_MATCH","VENUE_REJECTED","ORDER_OUTCOME_UNKNOWN","CANCEL_OUTCOME_UNKNOWN","SIGNATURE_EXPIRED","CLIENT_ORDER_ID_CONFLICT","HYPERLIQUID_AGENT_MISSING"],"uniqueKey":"errorCode","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"held":{"title":"held","value":{"id":"6a1f9e2c-3b4d-4c5e-8f6a-7b8c9d0e1f2a","type":"order","status":"working","request":null,"description":"Waiting for the venue to match your order","chainId":null,"venue":"polymarket","holdUntilMs":1793130776000,"result":{"orderId":"3f2b8c1e-5d4a-4e6f-9b7c-1a2d3e4f5a6b","status":"delayed","venueOrderId":"0x9d1c5e0b7a3f2e4d6c8b0a1f3e5d7c9b2a4f6e8d0c1b3a5f7e9d2c4b6a8f0e1d","venueStatus":"delayed","filledSize":null,"filledNotional":null,"avgPrice":null,"final":false,"success":false,"message":null,"venue":"polymarket","market":"polymarket:0x5f3a8e1c2b4d6f8a0c2e4b6d8f0a2c4e6b8d0f2a4c6e8b0d2f4a6c8e0b2d4f6a"},"error":null}},"done":{"title":"done","value":{"id":"6a1f9e2c-3b4d-4c5e-8f6a-7b8c9d0e1f2a","type":"order","status":"done","request":null,"description":null,"chainId":null,"venue":null,"result":{"orderId":"3f2b8c1e-5d4a-4e6f-9b7c-1a2d3e4f5a6b","status":"matched","venueOrderId":"0x9d1c5e0b7a3f2e4d6c8b0a1f3e5d7c9b2a4f6e8d0c1b3a5f7e9d2c4b6a8f0e1d","venueStatus":"matched","filledSize":"7.140348","filledNotional":"4.069998","avgPrice":"0.57","final":true,"success":true,"message":null,"venue":"polymarket","market":"polymarket:0x5f3a8e1c2b4d6f8a0c2e4b6d8f0a2c4e6b8d0f2a4c6e8b0d2f4a6c8e0b2d4f6a"},"error":null}},"failed":{"title":"failed","value":{"id":"6a1f9e2c-3b4d-4c5e-8f6a-7b8c9d0e1f2a","type":"order","status":"failed","request":null,"description":null,"chainId":null,"venue":null,"result":null,"error":"no orders found to match with FAK order","errorCode":"NO_MATCH"}}},"exampleType":"examples"}},"exampleType":"examples"},"fa2696e7-5919-4057-9c52-bac7d09d7f99":{"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"},"cae7f8c9-104b-4e55-a77b-4611f72ebace":{"description":"`send X-Kairos-Partner-Id or your API key (X-Client-Id, X-Api-Key, X-Api-Secret)` — no partner id and no API key (a delegation header never qualifies); `invalid API key`.","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":"send X-Kairos-Partner-Id or your API key (X-Client-Id, X-Api-Key, X-Api-Secret)"},"examples":{"Example":{"title":"Example","value":{"error":"send X-Kairos-Partner-Id or your API key (X-Client-Id, X-Api-Key, X-Api-Secret)"}}},"exampleType":"examples"}},"exampleType":"examples"},"ed56c1b1-6b53-4600-98b0-cbbf13ea1d7e":{"description":"`unknown partner id` (unknown, or the Wallet API is not enabled for it); `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` (an API key must carry `trade:execute` to act as the tenant — a `trade:read`-only key is refused, even on reads); `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":"unknown partner id"},"examples":{"Example":{"title":"Example","value":{"error":"unknown partner id"}}},"exampleType":"examples"}},"exampleType":"examples"},"c3233d52-f4a4-40d7-84f6-c6fbb81341c2":{"description":"`unknown or expired action` — also returned for another partner's action.","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":"unknown or expired action"},"examples":{"Example":{"title":"Example","value":{"error":"unknown or expired action"}}},"exampleType":"examples"}},"exampleType":"examples"},"697c7244-e25f-4e7a-b046-a5ab5161254b":{"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"},"ddde82ef-f447-4676-a6b6-5076032338a9":{"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"},"ba2cd08b-dd7f-4bb3-8960-02d7d2ad69c0":{"description":"A venue did not answer cleanly, e.g. `Hyperliquid is unavailable; retry shortly`, `Predict.fun is unavailable; retry shortly`. Retry.","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"},"dd92b6c4-4c80-4fd4-9543-3305582da9cc":{"description":"`partner registry unavailable; retry shortly`; `rate limiter unavailable` (the rate limiter fails closed); `wallet sign-in is not configured on this node`; `\u003cvenue> is not available right now`. Retry later.","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"},"04fcc67c-89e5-45e3-b026-e3dd63b0b2ca":{"description":"`… did not answer in time; GET /v3/actions/{id} before retrying`. The request may have taken effect: read the state before repeating it.","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":{"5b37c358-7850-4ee7-a845-1ae2e72cca08":{"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"}},"1fa61938-d74e-43e9-8f95-154780fb81b9":{"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"}}},"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"}],"title":"walletPartnerId"},{"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"}]},"originalFileLocation":"openapi/wallet-api.json"},"subdomain":"kairos-c5456474","siteName":"Kairos","title":"Read an action's current step - Kairos","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-29T04:21:19.494Z","originalFileLocation":"api-reference/partner/actions/read-an-actions-current-step.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=\"Returns the action\u0026#x27;s current step. Poll this while status is working; when the step carries holdUntilMs (an order the venue is still matching), wait until then before polling. An action is readable for 10 minutes after its 15-minute lifetime ends. Unknown, expired, and other partners\u0026#x27; actions all read 404.\">\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 an action\u0026#x27;s current step - Kairos\">\u003cmeta data-mint-head property=\"og:description\" content=\"Returns the action\u0026#x27;s current step. Poll this while status is working; when the step carries holdUntilMs (an order the venue is still matching), wait until then before polling. An action is readable for 10 minutes after its 15-minute lifetime ends. Unknown, expired, and other partners\u0026#x27; actions all read 404.\">\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/actions/read-an-actions-current-step\">\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=Actions\u0026amp;title=Read+an+action%27s+current+step\u0026amp;description=Returns+the+action%27s+current+step.+Poll+this+while+%60status%60+is+%60working%60%3B+when+the+step+carries+%60holdUntilMs%60+%28an+order+the+venue+is+still+matching%29%2C+wait+until\u0026amp;theme=530643ae41273bc052a9a850\u0026amp;signature=d7a86ddb541409e4e213659e12a61c7c3beb17d209d9e7a5e94ba33494a6fe08\">\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 an action\u0026#x27;s current step - Kairos\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Returns the action\u0026#x27;s current step. Poll this while status is working; when the step carries holdUntilMs (an order the venue is still matching), wait until then before polling. An action is readable for 10 minutes after its 15-minute lifetime ends. Unknown, expired, and other partners\u0026#x27; actions all read 404.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://kairos-c5456474.mintlify.app/_mintlify/api/og/v2?division=Actions\u0026amp;title=Read+an+action%27s+current+step\u0026amp;description=Returns+the+action%27s+current+step.+Poll+this+while+%60status%60+is+%60working%60%3B+when+the+step+carries+%60holdUntilMs%60+%28an+order+the+venue+is+still+matching%29%2C+wait+until\u0026amp;theme=530643ae41273bc052a9a850\u0026amp;signature=d7a86ddb541409e4e213659e12a61c7c3beb17d209d9e7a5e94ba33494a6fe08\">\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/actions/read-an-actions-current-step\">\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/actions/read-an-actions-current-step.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/actions/read-an-actions-current-step#webpage\",\"url\":\"https://docs.kairos.trade/api-reference/partner/actions/read-an-actions-current-step\",\"name\":\"Read an action's current step\",\"description\":\"Returns the action's current step. Poll this while status is working; when the step carries holdUntilMs (an order the venue is still matching), wait until then before polling. An action is readable for 10 minutes after its 15-minute lifetime ends. Unknown, expired, and other partners' actions all read 404.\",\"dateModified\":\"2026-10-29T04:21:19.494Z\",\"isPartOf\":{\"@id\":\"https://docs.kairos.trade#website\"},\"breadcrumb\":{\"@id\":\"https://docs.kairos.trade/api-reference/partner/actions/read-an-actions-current-step#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.kairos.trade/api-reference/partner/actions/read-an-actions-current-step#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\":\"Actions\",\"item\":\"https://docs.kairos.trade/api-reference/partner/actions/start-a-wallet-action-setup-order-cancel-login\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Read an action's current step\",\"item\":\"https://docs.kairos.trade/api-reference/partner/actions/read-an-actions-current-step\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.kairos.trade/api-reference/partner/actions/read-an-actions-current-step#apireference\",\"headline\":\"Read an action's current step\",\"name\":\"Read an action's current step\",\"description\":\"Returns the action's current step. Poll this while status is working; when the step carries holdUntilMs (an order the venue is still matching), wait until then before polling. An action is readable for 10 minutes after its 15-minute lifetime ends. Unknown, expired, and other partners' actions all read 404.\",\"url\":\"https://docs.kairos.trade/api-reference/partner/actions/read-an-actions-current-step\",\"mainEntityOfPage\":{\"@id\":\"https://docs.kairos.trade/api-reference/partner/actions/read-an-actions-current-step#webpage\"},\"dateModified\":\"2026-10-29T04:21:19.494Z\",\"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)","description":"Starts one action for a self-custody wallet and returns its first **step**. Kairos never holds the wallet's key: each step either asks the wallet for one EIP-1193 request (`status: needs_signature`) or reports progress (`working`) or the outcome (`done` / `failed`).\n\n**The step loop.**\n1. `POST /v3/actions` → a step.\n2. While `status` is `needs_signature`: switch the wallet to `chainId` (when non-null), run `request` through the wallet's EIP-1193 provider, and `POST /v3/actions/{id}` with `{\"signature\": \"0x…\"}` (or `{\"result\": …}` for `wallet_sendCalls`). Answer before `expiresAtMs`.\n3. While `status` is `working`: `GET /v3/actions/{id}` every 1–2 s (or after `holdUntilMs` when present).\n4. Stop at `done` (read `result`) or `failed` (read `error` and `errorCode`).\n\n**Action types.** `setup` prepares the wallet on each requested venue; `order` places one order and runs any missing setup first, in the same action; `cancel` cancels orders on every venue with one Polygon signature; `login` returns a sign-in token for the private reads. There are no other action types.\n\n**Body rules.** Field names are **camelCase only**: unknown fields — including snake_case spellings such as `time_in_force`, `post_only`, `client_order_id`, `expires_at`, `order_ids` — are silently ignored, so a snake_case order becomes a `GTC`, non-post-only order without a client id. `price` and `size` must be JSON **strings**; a JSON number is rejected with a plain-text `422`. `expiresAt` is an integer (Unix seconds).\n\n**Idempotency.** `Idempotency-Key` is **not** honoured here. Use `clientOrderId` on orders: the same `clientOrderId` with the same terms returns the existing order (nothing is signed), and different terms are refused with `CLIENT_ORDER_ID_CONFLICT`.\n\n**Timing.** An action lives 15 minutes from creation and stays readable for 10 more minutes, then reads `404`. Polymarket and Predict.fun order signatures are accepted for about 60 s, Hyperliquid order signatures for 300 s, and cancel signatures (every venue) for 300 s; `expiresAtMs` on the step is authoritative.\n\n**Errors before the first signature are HTTP errors.** When the action fails before the wallet was ever asked to sign (for example every requested venue is unavailable), the response is that error's status and body rather than a `failed` step.\n\nSend `X-Kairos-Wallet-Api: 2`; without it this route serves the original Polymarket-only contract.","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)","description":"Posts the wallet's answer to the step that is `needs_signature` and returns the next step.\n\n- **Signature steps** (`eth_signTypedData_v4`, `personal_sign`): send `{\"signature\": \"0x…\"}` — exactly 65 bytes, hex. A JSON string in `result` is accepted as the signature too. Smart-account (EIP-1271) signatures are refused.\n- **`wallet_sendCalls` steps** (Predict.fun approvals): send `{\"result\": \u003cthe wallet_sendCalls return value>}`, or `{\"result\": [\"0xhash\", …]}` after sending `fallbackRequests` one by one. The step moves to `working` while Kairos waits for the approvals on chain.\n\n**Failures after a signature are not HTTP errors.** A venue refusal, an expired signing window, a rate limit or an ambiguous submission comes back as **`200`** with `status: \"failed\"`, `error`, and — when there is one — `errorCode`. Read `errorCode` before retrying: `ORDER_OUTCOME_UNKNOWN` and `CANCEL_OUTCOME_UNKNOWN` mean the venue may have acted, so read `/v3/wallets/{address}/orders` before placing again.\n\n**Safe to repeat.** Posting to a step that is no longer `needs_signature` returns the current step unchanged; a step is never run twice. A wrong signer gets `400` and the same step stays open for another try.\n\nThis call waits up to about 45 s for the step to settle, then returns `working`; keep polling `GET /v3/actions/{id}`.","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/actions/{id}","href":"/api-reference/partner/actions/answer-the-current-step-signature-or-wallet-result"}]},{"group":"Reads","pages":[{"title":"Read a wallet's readiness and balances per venue","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/wallets/{address}","href":"/api-reference/partner/reads/read-a-wallets-readiness-and-balances-per-venue"},{"title":"List a wallet's orders across venues","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/wallets/{address}/orders","href":"/api-reference/partner/reads/list-a-wallets-orders-across-venues"},{"title":"List a wallet's positions across venues","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/wallets/{address}/positions","href":"/api-reference/partner/reads/list-a-wallets-positions-across-venues"}]},{"group":"Fees (preview)","pages":[{"title":"Read a wallet's unpaid trading fees per venue","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/fees","href":"/api-reference/partner/fees-preview/read-a-wallets-unpaid-trading-fees-per-venue"},{"title":"Open a settlement for a wallet's unpaid fees on one venue","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/fees/settlements","href":"/api-reference/partner/fees-preview/open-a-settlement-for-a-wallets-unpaid-fees-on-one-venue"},{"title":"Read (and advance) a fee settlement","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/fees/settlements/{id}","href":"/api-reference/partner/fees-preview/read-and-advance-a-fee-settlement"},{"title":"Post the wallet's signature or transaction hash for a settlement","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/fees/settlements/{id}/answer","href":"/api-reference/partner/fees-preview/post-the-wallets-signature-or-transaction-hash-for-a-settlement"}]},{"group":"Trade plans (preview)","pages":[{"title":"Prepare a trade plan (one buy, optionally funded cross-chain)","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/trade-plans","href":"/api-reference/partner/trade-plans-preview/prepare-a-trade-plan-one-buy-optionally-funded-cross-chain"},{"title":"Read a trade plan","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json get /v3/trade-plans/{id}","href":"/api-reference/partner/trade-plans-preview/read-a-trade-plan"},{"title":"Post signatures for a trade plan's requests","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/trade-plans/{id}/answers","href":"/api-reference/partner/trade-plans-preview/post-signatures-for-a-trade-plans-requests"},{"title":"Commit a trade plan for execution","deprecated":null,"version":null,"openapi":"/openapi/wallet-api.json post /v3/trade-plans/{id}/execute","href":"/api-reference/partner/trade-plans-preview/commit-a-trade-plan-for-execution"},{"title":"Report client-submitted funding permits","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 an action's current step - 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"]}