Skip to main content
POST
/
api
/
accounts
/
{accountId}
/
redeem
curl --request POST \
  --url https://trade.predexon.com/api/accounts/{accountId}/redeem \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "venue": "polymarket",
  "market": {
    "tokenId": "71321045679252212"
  }
}
'
{
  "transactionHash": "<string>",
  "venue": "<string>",
  "predexonId": "<string>",
  "title": "<string>",
  "outcome": "<string>",
  "sizeRedeemed": "<string>",
  "amountRedeemed": "<string>",
  "status": "completed",
  "market": {
    "tokenId": "<string>",
    "marketId": "<string>",
    "ticker": "<string>",
    "outcome": "<string>",
    "marketSlug": "<string>",
    "assetId": "<string>"
  },
  "message": "<string>"
}
Identify the position with either a canonical predexonId (recommended - works for every venue) or a venue-specific market bag. If both are supplied, predexonId wins. When using the market bag: for Polymarket, Predict, and Limitless, identify the position via market.tokenId. For Opinion, use market.marketId - a single call redeems every outcome in the market. For Hyperliquid, identify the position via predexonId or market.assetId. HIP-4 markets settle automatically when the oracle resolves - your USDC balance updates without an explicit redeem call. Calling this endpoint returns the resolved state for the position.

Wait for on-chain resolution

A position is redeemable only after its market resolves on-chain. Confirm that Get Positions reports status: "redeemable" before calling this endpoint.
Redeeming before the market resolves returns 409 Conflict with error: "position_not_resolved". Unlike most 4xx responses, this one is retryable — the market simply hasn’t settled yet. Poll Get Positions until the position is redeemable, then retry. Don’t drop it.
{
  "error": "position_not_resolved",
  "message": "Position for token <tokenId> is not yet redeemable - the market has not resolved on-chain. Poll GET /positions until status is 'redeemable', then retry.",
  "requestId": "..."
}
Redemption is idempotent - re-redeeming a position that’s already been redeemed is a safe no-op. Winning positions settle 1:1 to pUSD; losing positions redeem to 0.

Authorizations

x-api-key
string
header
required

Path Parameters

accountId
string
required

Body

application/json

Identify the position with either a canonical predexonId (recommended) or a venue-specific market bag. When both are supplied, predexonId wins. Provide one or the other.

venue
enum<string>
required
Available options:
polymarket,
predict,
opinion,
limitless,
hyperliquid
predexonId
string

Canonical per-outcome identifier (px- + 12 base32 chars).

market
object

Venue-specific market identification. Populate the fields the target venue requires: Polymarket needs tokenId; Predict, Opinion, and Limitless need tokenId and one other field (marketId for Predict and Opinion; marketSlug for Limitless); Hyperliquid needs assetId. On responses, the bag contains only the fields the venue surfaces (tokenId, marketId, ticker, outcome, assetId) — request-only fields like marketSlug are not echoed back, and Opinion order-list responses contain marketId only (placement responses include both).

Response

Position redeemed

transactionHash
string

On-chain transaction hash of the redemption.

venue
string
predexonId
string | null

Canonical per-outcome identifier — same value as on the position you redeemed.

title
string
outcome
string
sizeRedeemed
string

Number of outcome shares burned.

result
enum<string>

won if the outcome resolved in your favor (pays out 1 stablecoin per share); lost otherwise.

Available options:
won,
lost
amountRedeemed
string

Stablecoin amount credited back to the trading wallet. 0 when result is lost.

status
enum<string>

Redemption is synchronous — completes inline with the API call.

Available options:
completed
market
object

Venue-specific market identification. Populate the fields the target venue requires: Polymarket needs tokenId; Predict, Opinion, and Limitless need tokenId and one other field (marketId for Predict and Opinion; marketSlug for Limitless); Hyperliquid needs assetId. On responses, the bag contains only the fields the venue surfaces (tokenId, marketId, ticker, outcome, assetId) — request-only fields like marketSlug are not echoed back, and Opinion order-list responses contain marketId only (placement responses include both).

message
string