---
title: "Price a combo cash-out (SELL) without executing it"
method: POST
path: "/combo/cash-out-quote"
tags: ["Combo"]
---

# Price a combo cash-out (SELL) without executing it

`POST /combo/cash-out-quote`

## Request

- Base URL: `https://execution.kairos.trade`
- URL: `https://execution.kairos.trade/combo/cash-out-quote`
- Auth: API key in header `X-Client-Id` and API key in header `X-Api-Key` and API key in header `X-Api-Secret`

Returns the real maker-quoted proceeds for selling an open combo, and subtracts the Kairos platform fee so the preview matches what actually lands in the wallet. A client-side `shares × ∏(leg price)` estimate ignores the maker's spread and systematically overstates the payout — show `netProceedsE6`, not a local calculation.
The platform-fee lookup **fails closed**: a tier-lookup error rejects the quote rather than displaying an optimistic zero fee.
**Fully-resolved and dead combos are rejected up front.** No maker quotes a settled binary, so the RFQ would simply hang; a combo that has fully resolved, or that has any single `RESOLVED_LOSS` leg, gets an immediate `400` instead. A won, fully-resolved combo is redeemed via `POST /combo/redeem`, not cashed out.
**Rate limited** at 20 quotes/minute per user (`COMBO_QUOTE_RATE_LIMIT_PER_MIN`), fail-closed, because each call holds an external RFQ websocket open until the gateway timeout. The `429` carries `error_details.code = EXCHANGE_POLYMARKET_RATE_LIMITED`. No `Retry-After` header.
**Auth & scope.** Requires `position:read` for `polymarket` AND the mutation gate (it is a POST behind `RequireServiceToken` despite being read-only), so an API-key triple or CSRF token is needed — a bare Bearer JWT is not enough.

## Request body

- OrderComboCashOutQuoteRequest: Body for `POST /combo/cash-out-quote`.
  - `legPositionIds` string[], required: The combo's leg position ids, from the position's `legs[].legPositionId`.
  - `shares` number, double, required: Shares to price. Must be finite and > 0. Pass the full `sharesBalance` to preview a complete close.

## Response `200`

Gross proceeds, platform fee, and net proceeds.

- OrderComboCashOutQuoteResponse: Response for `POST /combo/cash-out-quote`. All amounts are six-decimal fixed-point integer strings.
  - `rfqId` string, required
  - `proceedsE6` string, required: GROSS pUSD proceeds from the maker quote. The `minProceedsUsd` floor on `POST /combo/cash-out` is checked against this, not against the net.
  - `feeE6` string, required: Estimated Kairos platform fee on the proceeds.
  - `netProceedsE6` string, required: Proceeds after the platform fee — what actually lands. This is the number to show in a cash-out preview.
  - `blendedPriceE6` string, required

## Other responses

- `400`: `VALIDATION_INVALID_ORDER` — fewer than 2 or more than 10 legs; `shares` not finite or not positive; credentials not configured; the parlay has a lost leg and can no longer pay out; the parlay has fully resolved (redeem it instead); or a gateway no-quote / size / expiry outcome.
- `401`: No valid credential presented — missing/invalid API-key headers or an invalid/expired session token.
- `403`: Missing `position:read` scope, or API-key access to `polymarket` is disabled.
- `429`: Combo-quote rate limit exceeded, or its Redis was unreachable (fails closed). `error_details.code = EXCHANGE_POLYMARKET_RATE_LIMITED`.
- `500`: `INTERNAL_ERROR` — credential load failed, the upstream positions read failed, the fee-tier lookup failed (fails closed), gateway auth failed, or another unmapped gateway error.
- `503`: API-key access to `polymarket` could not be checked (fails closed).

---

[API](https://skmtc.dev/kairos/apis/kairos-order-execution-api.md) - [All operations](https://skmtc.dev/kairos/apis/kairos-order-execution-api/llms.txt) - [OpenAPI document](https://skmtc.dev/kairos/apis/kairos-order-execution-api/revisions/9ba7d463d505?raw)
