Base URL
Provider support
Combos are Polymarket-only. There is noexchange_id parameter on any endpoint on this page. Connect a supported Polymarket wallet to use combos.
Authentication
Same API-key headers as Orders:KAIROS_CLIENT_ID, KAIROS_API_KEY, and KAIROS_API_SECRET in your shell.
Scopes differ per endpoint, and so does the status code for a bad credential triple:
If redemption returns
AUTH_POLICY_OUTDATED, approve the pending trading-permissions update indicated by update_policies, then retry.
Field naming
Gotcha: every request and response field on this page is
camelCase — legPositionIds, notionalUsd, blendedPriceE6, sharesBalance. Orders uses snake_case (time_in_force, client_order_id, filled_quantity) in the same service. A client that shares one serializer across both will silently send fields the combo endpoints ignore.Number formats
Gotcha: every field suffixedCombos settle in pUSD. TheE6is six-decimal fixed point, serialized as a decimal string —"16393"means0.016393. This applies to prices, proceeds, fees, and share counts alike. Divide by 1,000,000 to get a human value. Two fields break that pattern:
legs[].currentPriceon combo positions is a plain 0–1 decimal, not e6 and not cents.maxPriceCentson execute is in cents per share (60= $0.60), the only cents-scaled field on this page.
*Usdc field names are retained for compatibility.
BUY execution and cash-out share the per-user order submission limit. Exceeding it returns 429; wait before submitting another order.
Wallet-type limits
Combo support depends on the kind of wallet backing your account, and the limits differ per action:
Imported Deposit Wallets can request quotes. Buying and redemption are unavailable; cash-out requires an eligible wallet and returns
400 if unsupported.
Quote a combo
trade:read. A bad credential triple is 401. BUY and cash-out quotes share a limit of 20 requests per minute per user by default; exceeding it returns 429.
Request
400 a combo needs at least 2 legs; more than ten is 400 a combo supports at most 10 legs. A notionalUsd that rounds to zero at six decimals is 400 notionalUsd too small or invalid.
Response
A quote is a maker price, not a reservation. If no maker will price the parlay you get
400 with a message explaining why — see Quote failures.
Execute a combo
/combo/quote.
Scope trade:execute. A bad credential triple is 403.
Request
Response
If the price moved past
maxPriceCents between quote and fill, nothing is traded and the call is 400 The price moved and the quote came back worse than your limit, so nothing was traded. Please try again.
List combo positions
position:read. A bad credential triple is 401.
Request
No parameters.Gotcha: The response includes up to 50 positions. Pagination is unavailable.
Response
Every field is always present — this response contains no nulls and omits nothing.
If positions cannot be loaded, the endpoint returns
500. Retry later.
Quote a cash-out
position:read. A bad credential triple is 403.
Rate limit: 20 requests/minute per user by default, shared with BUY quotes. Exceeding it returns 429 with error_details.code = EXCHANGE_POLYMARKET_RATE_LIMITED.
Request
Response
minProceedsUsd on cash out is compared against proceedsE6, after venue fees but before the Kairos platform fee — not netProceedsE6. Set your floor accordingly, or the fee will eat into the amount you thought you were protecting.
Cash out a combo
trade:execute. A bad credential triple is 403.
Partial cash-outs are not supported. shares must equal your entire held balance exactly; anything else is 400 partial parlay cash-outs are unavailable; cash out the full position.
Request
Gotcha:
minProceedsUsd does not protect the amount you receive. The floor is checked after venue fees, and the Kairos platform fee is deducted afterwards, so a cash-out that passes your floor can still land below it in the wallet. To protect a true net figure, quote first and set minProceedsUsd to your target plus the feeE6 the quote returned.Response
When cash-out is unavailable
A resolved combo has no maker to sell to, so these are all400:
Redeem a combo
trade:execute. A bad credential triple is 403.
Deposit wallets only. EOA and imported wallets are rejected 400 combo redemption is currently supported only for Kairos deposit wallets.
Request
400 conditionId must be 31 bytes (a bytes31), got <n> bytes from '<value>'; one that is not on your wallet is 400 no combo with that conditionId on this wallet.
Response
Redemption is idempotent on-chain, but a second call is reported as a
400, not a success: once the balance is zero you get 400 this parlay isn't redeemable — it hasn't resolved as a win yet, or has already been redeemed or 400 combo has no redeemable share balance (already redeemed?). Check redeemable on the position before calling.
Quote failures
POST /combo/quote, /combo/execute, /combo/cash-out-quote, and /combo/cash-out can return these quote-related 400s. All four are transient and safe to retry:
If combo trading is unavailable, the API returns
503 with
EXCHANGE_POLYMARKET_API_ERROR. Rate limits return 429.
An execution whose outcome cannot be confirmed returns 503
with TRANSACTION_TIMEOUT and an RFQ reference in error_details.details.
Do not automatically resubmit: the trade may still execute. Check your combo
positions and retain the RFQ reference for support.
Errors
Endpoints on this page return the same structured envelope as order submission:code is a legacy PascalCase string and error_details.code is the canonical SCREAMING_SNAKE_CASE wire code — match on error_details.code. error_details.details and error_details.metadata are omitted when absent, never null.
Authentication failures can return a bare {"error": "<message>"} with no error_details.
The Code column below holds error_details.code where this page names one; most statuses on this page cover several conditions that do not share a distinct code, and those are —.
The platform fee is returned separately by
cash-out-quote; the cash-out response does not include a separate fee field.
