---
title: "Redeem a resolved, winning combo back to pUSD"
method: POST
path: "/combo/redeem"
tags: ["Combo"]
---

# Redeem a resolved, winning combo back to pUSD

`POST /combo/redeem`

## Request

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

The settlement path a cash-out cannot cover: once every leg has resolved there is no maker to sell to, so a winning combo is redeemed on-chain instead. Executed as a Polymarket relayer `WALLET` batch (approve the combo Router as operator, then redeem), signed by the deposit wallet's owner EOA through the user's delegated Turnkey key.
**Kairos deposit wallets only.** Imported and plain-EOA makers get a `400` — the direct redemption path for them is not built yet.
**Idempotent by construction.** The amount comes from the position's real on-chain share balance, never from the request, and the call is validated against `GET /combo/positions` first. A retry after a successful redeem sees a zero balance and is rejected, rather than firing a second batch that would revert on-chain while the client reads "redeemed".
**Auth & scope.** Requires `trade:execute` for `polymarket`, the mutation gate, and a current Turnkey policy version for the combo-redeem capability specifically (`403 AUTH_POLICY_OUTDATED` if stale).

## Request body

- OrderComboRedeemRequest: Body for `POST /combo/redeem`.
  - `comboConditionId` string, required: The resolved combo's `comboConditionId` (31-byte hex) from `GET /combo/positions`. The amount redeemed is always the position's real on-chain share balance — never caller-supplied — so a wrong or stale value cannot over- or under-redeem.
  - `outcomeIndex` integer, nullable: Winning outcome side; `0` = YES (all legs won). Defaults to `0`.

## Response `200`

The redemption batch was mined.

- OrderComboRedeemResponse: Response for `POST /combo/redeem`.
  - `batchTxId` string, required: The Polymarket relayer batch id for the redemption.
  - `amountE6` string, required: Amount redeemed, six-decimal fixed-point integer string.
  - `status` string, required

## Other responses

- `400`: `VALIDATION_INVALID_ORDER` — the wallet is not a Kairos deposit wallet; the `comboConditionId` is malformed; no combo with that condition id exists on this wallet; the parlay is not redeemable (not resolved as a win yet, or already redeemed); or it has no redeemable share balance.
- `401`: No valid credential presented — missing/invalid API-key headers or an invalid/expired session token.
- `403`: Missing `trade:execute` scope, API-key access to `polymarket` disabled, or installed Turnkey policies behind the version the combo-redeem capability requires (`AUTH_POLICY_OUTDATED`, action `update_policies`).
- `500`: `INTERNAL_ERROR` — credential load failed, the upstream positions read failed, the relayer is not configured, or the redemption batch failed.
- `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)
