As of SDK v1.0.6, all three SDKs (TypeScript, Python, Go) include helper methods for this endpoint.
- Route:
POST /portfolio/redeem - Auth:
apiToken, Privy, or session auth - Scope:
tradingwhen usingapiToken
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)
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.
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
redeemPositionscall. - Or directly on-chain by calling
redeemPositions(conditionId, indexSets)on the Conditional Tokens Framework contract (orNegRiskAdapter.redeemPositions(conditionId, amounts)for negrisk markets) from the wallet holding the shares. See Smart Contracts for the deployed addresses.