> ## Documentation Index
> Fetch the complete documentation index at: https://docs.limitless.exchange/llms.txt
> Use this file to discover all available pages before exploring further.

# Redeem Resolved Positions

<Info>
  As of SDK v1.0.6, all three SDKs (TypeScript, Python, Go) include helper methods for this endpoint.
</Info>

Redeems winning conditional-token positions for a resolved market from a server-wallet sub-account.

* Route: `POST /portfolio/redeem`
* Auth: `apiToken`, Privy, or session auth
* Scope: `trading` when using `apiToken`

### Request body

| Field         | Type     | Required | Description                                                                                          |
| ------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------- |
| `conditionId` | `string` | Yes      | CTF condition id (`bytes32` hex string).                                                             |
| `onBehalfOf`  | `number` | No       | Managed sub-account profile id (partner flow). Must be a child of the authenticated partner profile. |

### Example (HMAC)

```bash theme={null}
curl -X POST "https://api.limitless.exchange/portfolio/redeem" \
  -H "content-type: application/json" \
  -H "lmts-api-key: <tokenId>" \
  -H "lmts-signature: <base64_hmac_sha256_signature>" \
  -H "lmts-timestamp: <iso_8601_timestamp>" \
  -d '{
    "conditionId": "0xa0ba8fd0acc2b86585734c07eb3bef4133f584d5abde78a558a6b8bfc3bbdec0",
    "onBehalfOf": 12345
  }'
```

### Notes

* Market must be resolved and the position must have redeemable balance.
* API-level resolved status can appear before CTF settlement; on-chain payout must be posted before redemption succeeds.
* Legacy API keys are not supported on server-wallet operations.

<Info>
  **Why this endpoint is server-wallet only.** Redeeming a CTF position is an on-chain transaction that must be signed by the wallet holding the shares. This endpoint can only sign for wallets Limitless manages (Privy-backed server-wallet sub-accounts), so it does not accept EOA-owned or user-managed smart-wallet profiles. There is no "auto redeem" performed by Limitless on behalf of EOA users — self-custodial by design.

  **EOA and user-owned smart-wallet users** redeem their own positions on-chain instead:

  * Through the Limitless UI **Portfolio → Positions → Redeem**, which prompts the connected wallet to sign the `redeemPositions` call.
  * Or directly on-chain by calling `redeemPositions(conditionId, indexSets)` on the Conditional Tokens Framework contract (or `NegRiskAdapter.redeemPositions(conditionId, amounts)` for negrisk markets) from the wallet holding the shares. See [Smart Contracts](/user-guide/smart-contracts) for the deployed addresses.
</Info>
