Answer the current step (signature or wallet result)
Posts the wallet’s answer to the step that is needs_signature and returns the next step.
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.
wallet_sendCalls steps (Predict.fun approvals): send {"result": <the 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.
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.
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.
This call waits up to about 45 s for the step to settle, then returns working; keep polling GET /v3/actions/{id}.
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.
Answer to a needs_signature step. Send signature for signature prompts (65 bytes, hex, 0x optional); a JSON string in result is read as the signature. For wallet_sendCalls, send the wallet's return value (or the transaction hashes from fallbackRequests) as result.
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.
{ "id": "6a1f9e2c-3b4d-4c5e-8f6a-7b8c9d0e1f2a", "type": "order", "status": "failed", "request": null, "description": null, "chainId": null, "venue": null, "result": null, "error": "the signing window closed before a signature was accepted; nothing was placed; start a new action", "errorCode": "SIGNATURE_EXPIRED"}
{"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/answer-the-current-step-signature-or-wallet-result","slug":"/api-reference/partner/actions/answer-the-current-step-signature-or-wallet-result","pageMetadata":{"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","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 li: \"li\",\n p: \"p\",\n strong: \"strong\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Posts the wallet’s answer to the step that is \", _jsx(_components.code, {\n children: \"needs_signature\"\n }), \" and returns the next step.\"]\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: \"Signature steps\"\n }), \" (\", _jsx(_components.code, {\n children: \"eth_signTypedData_v4\"\n }), \", \", _jsx(_components.code, {\n children: \"personal_sign\"\n }), \"): send \", _jsx(_components.code, {\n children: \"{\\\"signature\\\": \\\"0x…\\\"}\"\n }), \" — exactly 65 bytes, hex. A JSON string in \", _jsx(_components.code, {\n children: \"result\"\n }), \" is accepted as the signature too. Smart-account (EIP-1271) signatures are refused.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsxs(_components.strong, {\n children: [_jsx(_components.code, {\n children: \"wallet_sendCalls\"\n }), \" steps\"]\n }), \" (Predict.fun approvals): send \", _jsx(_components.code, {\n children: \"{\\\"result\\\": \u003cthe wallet_sendCalls return value>}\"\n }), \", or \", _jsx(_components.code, {\n children: \"{\\\"result\\\": [\\\"0xhash\\\", …]}\"\n }), \" after sending \", _jsx(_components.code, {\n children: \"fallbackRequests\"\n }), \" one by one. The step moves to \", _jsx(_components.code, {\n children: \"working\"\n }), \" while Kairos waits for the approvals on chain.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Failures after a signature are not HTTP errors.\"\n }), \" A venue refusal, an expired signing window, a rate limit or an ambiguous submission comes back as \", _jsx(_components.strong, {\n children: _jsx(_components.code, {\n children: \"200\"\n })\n }), \" with \", _jsx(_components.code, {\n children: \"status: \\\"failed\\\"\"\n }), \", \", _jsx(_components.code, {\n children: \"error\"\n }), \", and — when there is one — \", _jsx(_components.code, {\n children: \"errorCode\"\n }), \". Read \", _jsx(_components.code, {\n children: \"errorCode\"\n }), \" before retrying: \", _jsx(_components.code, {\n children: \"ORDER_OUTCOME_UNKNOWN\"\n }), \" and \", _jsx(_components.code, {\n children: \"CANCEL_OUTCOME_UNKNOWN\"\n }), \" mean the venue may have acted, so read \", _jsx(_components.code, {\n children: \"/v3/wallets/{address}/orders\"\n }), \" before placing again.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Safe to repeat.\"\n }), \" Posting to a step that is no longer \", _jsx(_components.code, {\n children: \"needs_signature\"\n }), \" returns the current step unchanged; a step is never run twice. A wrong signer gets \", _jsx(_components.code, {\n children: \"400\"\n }), \" and the same step stays open for another try.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"This call waits up to about 45 s for the step to settle, then returns \", _jsx(_components.code, {\n children: \"working\"\n }), \"; keep polling \", _jsx(_components.code, {\n children: \"GET /v3/actions/{id}\"\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":"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","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"answerWalletAction","summary":"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}`.","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":["ef6dddc2-f10c-40ff-96c9-85e1bf7a3e75","b9f298a2-fe47-4646-88e9-1b179d60b63b"],"requestBody":"44a0bc6a-4466-40ce-82a2-eb67b41739bc","responses":{"200":"64179761-f939-4373-a246-f848da41f925","400":"1cce11cd-558d-430c-aa97-57660520268d","401":"8c6df693-4628-4432-8f89-1281b563c4fa","403":"e5061d5a-2628-4123-8b2d-0da4353cb8c7","404":"a24624a4-2102-4e24-9b61-e822daac0a14","409":"28362703-099b-423c-939c-6db95d05ac24","413":"f6804bd7-bb9c-48b3-80f9-35fcb07239be","415":"d53e57ba-5180-42d5-830c-312742420ef6","422":"daadb46f-7563-4352-886f-d2cf9736a915","429":"02b81bad-7d0b-45a1-a904-3833833f3a69","500":"615df41f-9110-4976-b409-bcea34cadff4","502":"ba346434-0e75-4521-bb9a-ebfaba49e132","503":"5eedcb85-39a9-4d07-9e0e-9cefdb9366b6","504":"41e61a76-e93f-4774-a765-5a7838112cbb"},"method":"post","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":"Answer the current step (signature or wallet result)","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"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Answer to a `needs_signature` step. Send `signature` for signature prompts (65 bytes, hex, `0x` optional); a JSON string in `result` is read as the signature. For `wallet_sendCalls`, send the wallet's return value (or the transaction hashes from `fallbackRequests`) as `result`.","properties":{"signature":{"type":"string","pattern":"^(0x)?[0-9a-fA-F]{130}$","description":"65-byte ECDSA signature, hex (`0x` optional).","example":"0x4f8b2c1d9e7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c3d9e8f7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c0d9e1b","uniqueKey":"signature","typeLabel":"string"},"result":{"description":"The wallet's return value for `wallet_sendCalls`, or an array of transaction hashes.","uniqueKey":"result","typeLabel":"any"}},"uniqueKey":"","typeLabel":"object"},"examples":{"signature":{"title":"signature","value":{"signature":"0x4f8b2c1d9e7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c3d9e8f7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c0d9e1b"}},"sendCalls":{"title":"sendCalls","value":{"result":{"id":"0x1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c"}}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"64179761-f939-4373-a246-f848da41f925":{"description":"The next step — `needs_signature` (another prompt), `working`, `done`, or `failed` (with `error` and usually `errorCode`).","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":{"signatureExpired":{"title":"signatureExpired","value":{"id":"6a1f9e2c-3b4d-4c5e-8f6a-7b8c9d0e1f2a","type":"order","status":"failed","request":null,"description":null,"chainId":null,"venue":null,"result":null,"error":"the signing window closed before a signature was accepted; nothing was placed; start a new action","errorCode":"SIGNATURE_EXPIRED"}},"loginDone":{"title":"loginDone","value":{"id":"2d4f6a8c-0e1b-4c3d-9e5f-7a9b1c3d5e7f","type":"login","status":"done","request":null,"description":null,"chainId":null,"venue":null,"result":{"token":"TWVzc2FnZSBleGFtcGxl.4f8b2c1d9e7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c1b","expiresAt":"2026-10-29T12:00:00Z"},"error":null}}},"exampleType":"examples"}},"exampleType":"examples"},"1cce11cd-558d-430c-aa97-57660520268d":{"description":"JSON: `signature is required`; `signature must be hex`; `signature must be 65 bytes`; `signature is not from this wallet` (the step stays open — sign with the right account and post again).\n\nPlain text: the body is not valid JSON, or `{id}` is not a UUID.","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":"signature is not from this wallet"},"examples":{"Example":{"title":"Example","value":{"error":"signature is not from this wallet"}}},"exampleType":"examples"},"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":"examples"},"8c6df693-4628-4432-8f89-1281b563c4fa":{"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"},"e5061d5a-2628-4123-8b2d-0da4353cb8c7":{"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"},"a24624a4-2102-4e24-9b61-e822daac0a14":{"description":"`unknown or expired 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"},"examples":{"Example":{"title":"Example","value":{"error":"unknown or expired action"}}},"exampleType":"generated"}},"exampleType":"generated"},"28362703-099b-423c-939c-6db95d05ac24":{"description":"`this action is busy; GET it and retry` — another request is advancing this action. `GET /v3/actions/{id}`, then answer the step it shows.","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":"this action is busy; GET it and retry"},"examples":{"Example":{"title":"Example","value":{"error":"this action is busy; GET it and retry"}}},"exampleType":"examples"}},"exampleType":"examples"},"f6804bd7-bb9c-48b3-80f9-35fcb07239be":{"description":"Plain text (`Failed to buffer the request body: length limit exceeded`) when the body is over the limit: 16 KiB for fee settlements, 64 KiB for trade plans and on-chain intents, the server-wide 2 MiB for actions. Above 64 KiB the answer may instead be `{\"error\": \"request body too large\"}`.","content":{"text/plain":{"schema":{"type":"string","description":"A plain-text (non-JSON) rejection from request parsing — malformed JSON, a body of the wrong shape, a missing `Content-Type`, a malformed path id or query. Do not JSON-parse it.","example":"Failed to deserialize the JSON body into the target type: action.price: invalid type: floating point `0.52`, expected a string","uniqueKey":"","typeLabel":"string"},"examples":{"Example":{"title":"Example","value":"Failed to deserialize the JSON body into the target type: action.price: invalid type: floating point `0.52`, expected a string"}},"exampleType":"generated"},"application/json":{"schema":{"type":"object","description":"Wallet API error body. `error` is a human-readable message; `code` is set on a few structured refusals (e.g. `CLIENT_ORDER_ID_CONFLICT`, `POLYMARKET_V2_TRADING_DISABLED`, `SIGNATURE_EXPIRED`); `errorCode` mirrors `code` where the same refusal can also surface on a failed step. Most `/v3` errors carry only `error`. Framework rejections (malformed JSON, wrong shape, missing content type) are plain text, not this body.","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable message.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable code, present on structured refusals only.","uniqueKey":"code","typeLabel":"string"},"errorCode":{"type":"string","description":"Same as `code`; present where the refusal can also appear as a failed step's `errorCode`.","uniqueKey":"errorCode","typeLabel":"string"}},"example":{"error":"unknown or expired action"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"unknown or expired action"}}},"exampleType":"generated"}},"exampleType":"generated"},"d53e57ba-5180-42d5-830c-312742420ef6":{"description":"Plain text — the request has no `Content-Type: application/json` header.","content":{"text/plain":{"schema":{"type":"string","description":"A plain-text (non-JSON) rejection from request parsing — malformed JSON, a body of the wrong shape, a missing `Content-Type`, a malformed path id or query. Do not JSON-parse it.","example":"Failed to deserialize the JSON body into the target type: action.price: invalid type: floating point `0.52`, expected a string","uniqueKey":"","typeLabel":"string"},"examples":{"Example":{"title":"Example","value":"Failed to deserialize the JSON body into the target type: action.price: invalid type: floating point `0.52`, expected a string"}},"exampleType":"generated"}},"exampleType":"generated"},"daadb46f-7563-4352-886f-d2cf9736a915":{"description":"Plain text — the body is valid JSON of the wrong shape (a missing or unknown field, or a wrong type).","content":{"text/plain":{"schema":{"type":"string","description":"A plain-text (non-JSON) rejection from request parsing — malformed JSON, a body of the wrong shape, a missing `Content-Type`, a malformed path id or query. Do not JSON-parse it.","example":"Failed to deserialize the JSON body into the target type: action.price: invalid type: floating point `0.52`, expected a string","uniqueKey":"","typeLabel":"string"},"examples":{"Example":{"title":"Example","value":"Failed to deserialize the JSON body into the target type: action.price: invalid type: floating point `0.52`, expected a string"}},"exampleType":"generated"}},"exampleType":"generated"},"02b81bad-7d0b-45a1-a904-3833833f3a69":{"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"},"615df41f-9110-4976-b409-bcea34cadff4":{"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"},"ba346434-0e75-4521-bb9a-ebfaba49e132":{"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"},"5eedcb85-39a9-4d07-9e0e-9cefdb9366b6":{"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"},"41e61a76-e93f-4774-a765-5a7838112cbb":{"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":{"ef6dddc2-f10c-40ff-96c9-85e1bf7a3e75":{"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"}},"b9f298a2-fe47-4646-88e9-1b179d60b63b":{"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":"Answer the current step (signature or wallet result) - Kairos","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-29T04:21:19.506Z","originalFileLocation":"api-reference/partner/actions/answer-the-current-step-signature-or-wallet-result.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=\"Posts the wallet\u0026#x27;s answer to the step that is needs_signature and returns the next step. - Signature steps (eth_signTypedData_v4, personal_sign): send {\u0026quot;signature\u0026quot;: \u0026quot;0x…\u0026quot;} — exactly 65 bytes, hex. A JSON string in result is accepted as the signature too. Smart-account (EIP-1271) signatures are refused. - wallet_sendCalls steps (Predict.fun approvals): send {\u0026quot;result\u0026quot;: }, or {\u0026quot;result\u0026quot;: [\u0026quot;0xhash\u0026quot;, …]} after sending fallbackRequests one by one. The step moves to working while Kairos waits for the approvals on chain. 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: \u0026quot;failed\u0026quot;, 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. 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. This call waits up to about 45 s for the step to settle, then returns working; keep polling GET /v3/actions/{id}.\">\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=\"Answer the current step (signature or wallet result) - Kairos\">\u003cmeta data-mint-head property=\"og:description\" content=\"Posts the wallet\u0026#x27;s answer to the step that is needs_signature and returns the next step. - Signature steps (eth_signTypedData_v4, personal_sign): send {\u0026quot;signature\u0026quot;: \u0026quot;0x…\u0026quot;} — exactly 65 bytes, hex. A JSON string in result is accepted as the signature too. Smart-account (EIP-1271) signatures are refused. - wallet_sendCalls steps (Predict.fun approvals): send {\u0026quot;result\u0026quot;: }, or {\u0026quot;result\u0026quot;: [\u0026quot;0xhash\u0026quot;, …]} after sending fallbackRequests one by one. The step moves to working while Kairos waits for the approvals on chain. 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: \u0026quot;failed\u0026quot;, 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. 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. This call waits up to about 45 s for the step to settle, then returns working; keep polling GET /v3/actions/{id}.\">\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/answer-the-current-step-signature-or-wallet-result\">\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=Answer+the+current+step+%28signature+or+wallet+result%29\u0026amp;description=Posts+the+wallet%27s+answer+to+the+step+that+is+%60needs_signature%60+and+returns+the+next+step.%0A%0A-+**Signature+steps**+%28%60eth_signTypedData_v4%60%2C+%60personal_sign%60%29%3A+sen\u0026amp;theme=530643ae41273bc052a9a850\u0026amp;signature=55ff5dc2d50f746f766805aff758183be1c05d23746f17d97e176c0919945861\">\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=\"Answer the current step (signature or wallet result) - Kairos\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Posts the wallet\u0026#x27;s answer to the step that is needs_signature and returns the next step. - Signature steps (eth_signTypedData_v4, personal_sign): send {\u0026quot;signature\u0026quot;: \u0026quot;0x…\u0026quot;} — exactly 65 bytes, hex. A JSON string in result is accepted as the signature too. Smart-account (EIP-1271) signatures are refused. - wallet_sendCalls steps (Predict.fun approvals): send {\u0026quot;result\u0026quot;: }, or {\u0026quot;result\u0026quot;: [\u0026quot;0xhash\u0026quot;, …]} after sending fallbackRequests one by one. The step moves to working while Kairos waits for the approvals on chain. 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: \u0026quot;failed\u0026quot;, 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. 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. This call waits up to about 45 s for the step to settle, then returns working; keep polling GET /v3/actions/{id}.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://kairos-c5456474.mintlify.app/_mintlify/api/og/v2?division=Actions\u0026amp;title=Answer+the+current+step+%28signature+or+wallet+result%29\u0026amp;description=Posts+the+wallet%27s+answer+to+the+step+that+is+%60needs_signature%60+and+returns+the+next+step.%0A%0A-+**Signature+steps**+%28%60eth_signTypedData_v4%60%2C+%60personal_sign%60%29%3A+sen\u0026amp;theme=530643ae41273bc052a9a850\u0026amp;signature=55ff5dc2d50f746f766805aff758183be1c05d23746f17d97e176c0919945861\">\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/answer-the-current-step-signature-or-wallet-result\">\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/answer-the-current-step-signature-or-wallet-result.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/answer-the-current-step-signature-or-wallet-result#webpage\",\"url\":\"https://docs.kairos.trade/api-reference/partner/actions/answer-the-current-step-signature-or-wallet-result\",\"name\":\"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. - 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. - wallet_sendCalls steps (Predict.fun approvals): send {\\\"result\\\": }, or {\\\"result\\\": [\\\"0xhash\\\", …]} after sending fallbackRequests one by one. The step moves to working while Kairos waits for the approvals on chain. 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. 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. This call waits up to about 45 s for the step to settle, then returns working; keep polling GET /v3/actions/{id}.\",\"dateModified\":\"2026-10-29T04:21:19.506Z\",\"isPartOf\":{\"@id\":\"https://docs.kairos.trade#website\"},\"breadcrumb\":{\"@id\":\"https://docs.kairos.trade/api-reference/partner/actions/answer-the-current-step-signature-or-wallet-result#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.kairos.trade/api-reference/partner/actions/answer-the-current-step-signature-or-wallet-result#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\":\"Answer the current step (signature or wallet result)\",\"item\":\"https://docs.kairos.trade/api-reference/partner/actions/answer-the-current-step-signature-or-wallet-result\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.kairos.trade/api-reference/partner/actions/answer-the-current-step-signature-or-wallet-result#apireference\",\"headline\":\"Answer the current step (signature or wallet result)\",\"name\":\"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. - 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. - wallet_sendCalls steps (Predict.fun approvals): send {\\\"result\\\": }, or {\\\"result\\\": [\\\"0xhash\\\", …]} after sending fallbackRequests one by one. The step moves to working while Kairos waits for the approvals on chain. 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. 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. This call waits up to about 45 s for the step to settle, then returns working; keep polling GET /v3/actions/{id}.\",\"url\":\"https://docs.kairos.trade/api-reference/partner/actions/answer-the-current-step-signature-or-wallet-result\",\"mainEntityOfPage\":{\"@id\":\"https://docs.kairos.trade/api-reference/partner/actions/answer-the-current-step-signature-or-wallet-result#webpage\"},\"dateModified\":\"2026-10-29T04:21:19.506Z\",\"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","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"},{"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","description":"Returns whether the wallet is ready to trade on each venue, what to do next, and the venue balance. Needs only the partner id or API key — no wallet sign-in — because it reports on-chain state and readiness, not orders.\n\n**`next`** tells the app what to do: `setup` (run a `setup` action), `wait` (approvals are confirming), `fund` (deposit collateral, or gas on Predict.fun), `blocked` (Hyperliquid cannot enroll this account; see `venueDetail.reason`), or `null`. The top-level `next` picks the most urgent across not-ready venues (`setup` > `wait` > `fund` > `blocked`); when every venue is ready it is `fund` if no ready venue reports a non-zero balance — including when a balance is unknown (`null`).\n\nVenues not offered on the deployment are omitted. A venue whose read failed appears as `{\"ready\": false, \"available\": false, \"error\": …}` and is left out of the top-level `ready` and `next`. Readings may be up to 30 s old (`asOf`); a setup action refreshes them.","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":"Answer the current step (signature or wallet result) - 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"]}