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

# Redemption Event

> Position payout redemptions on Polymarket.

Emitted when a user redeems their outcome tokens for collateral after a market resolves. The `redeemPositions` function on the Conditional Tokens contract burns the user's shares and pays out USDC based on the resolved outcome.

Every resolved market generates redemption events as holders claim their payouts. A non-zero `payout` means the user held winning shares. A zero payout means the user redeemed losing shares (no collateral returned).

Recent redemption events also include the market's resolved payout vector when available. Use `winning_outcome`, `winning_token_id`, or the ordered `payouts` / `outcome_prices` arrays to identify which outcome won without making a second market lookup.

PM2 AutoRedeemer payouts are bridged into this same event class. For those transactions, `redeemer` is the user wallet from the AutoRedeemer log, not the AutoRedeemer contract, and `source` identifies the AutoRedeemer redemption function.

```json theme={null}
{
  "data": {
    "block_number": 85244342,
    "collateral_token": "0x2791bca1f2de4661ed88a30c99a7a9449aa84174",
    "condition_id": "0x487f28579354d6c4408eea243888cdedbe03e83a219a4708523ef455dcbc5e31",
    "event_title": "Bitcoin Up or Down - April 7, 8:15PM-8:20PM ET",
    "event_type": "redemption",
    "index_sets": [1, 2],
    "log_index": 1282,
    "market_image": "https://polymarket-upload.s3.us-east-2.amazonaws.com/BTC+fullsize.png",
    "market_slug": "btc-updown-5m-1775607300",
    "market_title": "Bitcoin Up or Down - April 7, 8:15PM-8:20PM ET",
    "neg_risk": false,
    "outcome_prices": [1.0, 0.0],
    "outcomes": ["Up", "Down"],
    "payout": 7.566434,
    "payout_e6": "7566434",
    "payouts": [1, 0],
    "redeemer": "0x8858aae9c92a82b00986a0f1a66338e8b0cc8641",
    "taker_base_fee": 1000,
    "tick_size": 0.01,
    "timestamp": 1775608721000,
    "token_ids": [
      "81518481532502107093994258923994884503752044066839262771005198927094175386674",
      "112731399428633109059368520083498445904538970112239739400592554575174180266461"
    ],
    "tokens": {
      "112731399428633109059368520083498445904538970112239739400592554575174180266461": "Down",
      "81518481532502107093994258923994884503752044066839262771005198927094175386674": "Up"
    },
    "tx_hash": "0xcfb51c25a8f6ebb0b5a7484de7812d66f2cbf9935f29c0b56561e74722c64fac",
    "winning_outcome": "Up",
    "winning_outcome_index": 0,
    "winning_token_id": "81518481532502107093994258923994884503752044066839262771005198927094175386674"
  },
  "timestamp": 1775608721000,
  "type": "redemption"
}
```

## Fields

<ResponseField name="type" type="string" required>
  Always `"redemption"`.
</ResponseField>

<ResponseField name="timestamp" type="number" required>
  Block timestamp in Unix milliseconds.
</ResponseField>

<ResponseField name="data" type="object" required>
  <Expandable title="data fields">
    <ResponseField name="tx_hash" type="string" required>
      Transaction hash.
    </ResponseField>

    <ResponseField name="block_number" type="number" required>
      Block number.
    </ResponseField>

    <ResponseField name="log_index" type="number" required>
      Log index within the transaction.
    </ResponseField>

    <ResponseField name="timestamp" type="number" required>
      Block timestamp in Unix milliseconds.
    </ResponseField>

    <ResponseField name="redeemer" type="string" required>
      Address that redeemed positions. This is the wallet that held the outcome tokens and called `redeemPositions`.
    </ResponseField>

    <ResponseField name="collateral_token" type="string" required>
      Collateral token address. USDC.e (`0x2791bca1f2de4661ed88a30c99a7a9449aa84174`) for standard markets.
    </ResponseField>

    <ResponseField name="condition_id" type="string" required>
      Market condition ID — identifies which resolved market's positions were redeemed.
    </ResponseField>

    <ResponseField name="index_sets" type="number[]" required>
      Which outcome slots were redeemed. `[1]` = first outcome only, `[2]` = second outcome only, `[1, 2]` = both outcomes. Most redemptions include all outcomes (`[1, 2]`).
    </ResponseField>

    <ResponseField name="payout" type="number" required>
      USDC amount paid out to the redeemer (6 decimal precision). `0` means the user redeemed losing shares and received nothing.
    </ResponseField>

    <ResponseField name="payout_e6" type="string">
      Exact payout amount in six-decimal integer units. Use this for accounting-safe comparisons.
    </ResponseField>

    <ResponseField name="source" type="string">
      Decoder path for bridged redemptions. PM2 AutoRedeemer events use values such as `AutoRedeemer.Redemption`, `AutoRedeemer.BinaryRedemption`, or `AutoRedeemer.NegRiskRedemption`.
    </ResponseField>

    <ResponseField name="market_title" type="string">
      Human-readable market question. Enriched from metadata.
    </ResponseField>

    <ResponseField name="market_slug" type="string">
      URL slug for the market.
    </ResponseField>

    <ResponseField name="market_image" type="string">
      Market image URL. Enriched from metadata.
    </ResponseField>

    <ResponseField name="event_title" type="string">
      Parent event title. Enriched from metadata.
    </ResponseField>

    <ResponseField name="neg_risk" type="boolean">
      Whether this market uses the negRisk contract type. Enriched from metadata.
    </ResponseField>

    <ResponseField name="tick_size" type="number">
      Minimum price increment (e.g. `0.01` or `0.001`). Enriched from metadata.
    </ResponseField>

    <ResponseField name="taker_base_fee" type="number">
      Taker fee rate in basis points. `200` = 2%, `1000` = 10%, `null` = no fee. Enriched from Polymarket metadata.
    </ResponseField>

    <ResponseField name="tokens" type="object">
      Map of token ID to outcome name for all outcomes in this market. Enriched from metadata.
    </ResponseField>

    <ResponseField name="token_ids" type="string[]">
      Ordered token IDs for this market. Same order as `outcomes`, `payouts`, and `outcome_prices`.
    </ResponseField>

    <ResponseField name="outcomes" type="string[]">
      Ordered outcome labels for this market. Same order as `token_ids`, `payouts`, and `outcome_prices`.
    </ResponseField>

    <ResponseField name="payouts" type="number[]">
      Resolved payout numerators for each outcome. Binary markets usually resolve to `[1, 0]` or `[0, 1]`.
    </ResponseField>

    <ResponseField name="outcome_prices" type="number[]">
      Normalized payout value for each outcome. Binary winners are `1.0`, losing outcomes are `0.0`; split outcomes can be fractional.
    </ResponseField>

    <ResponseField name="winning_outcome_index" type="number">
      Index of the winning outcome when exactly one outcome has a non-zero payout.
    </ResponseField>

    <ResponseField name="winning_outcome" type="string">
      Label of the winning outcome when exactly one outcome has a non-zero payout.
    </ResponseField>

    <ResponseField name="winning_token_id" type="string">
      Token ID of the winning outcome when exactly one outcome has a non-zero payout.
    </ResponseField>
  </Expandable>
</ResponseField>

## Use cases

* **Payout tracking** — monitor who is cashing out resolved positions and how much they receive
* **Wallet PnL** — combine with trade data to calculate realized profit/loss per wallet
* **Market lifecycle** — track the full arc from trading to resolution to redemption
* **Winning wallet alerts** — filter for large `payout` values to spot big winners as they redeem
* **Outcome-aware automations** — use `winning_outcome` or `outcome_prices` directly instead of waiting on slower market metadata refreshes

## Subscribing

Subscribe directly to redemptions:

```json theme={null}
{
  "action": "subscribe",
  "type": "redemptions"
}
```

Or request redemptions from the settlement stream:

```json theme={null}
{
  "action": "subscribe",
  "type": "settlements",
  "filters": {
    "event_types": ["redemption"]
  }
}
```

PM2 AutoRedeemer redemptions also appear here and can be matched to combo-native lifecycle data by `tx_hash`, `condition_id`, `payout_e6`, and `log_index`.

Filter to only winning redemptions using `min_size`:

```json theme={null}
{
  "action": "subscribe",
  "type": "settlements",
  "filters": {
    "event_types": ["redemption"],
    "min_size": 0.01
  }
}
```

Track redemptions for specific wallets:

```json theme={null}
{
  "action": "subscribe",
  "type": "wallets",
  "filters": {
    "wallets": ["0x8858aae9c92a82b00986a0f1a66338e8b0cc8641"],
    "event_types": ["redemption"]
  }
}
```
