> ## 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.

# Combo Redemptions

> Query terminal combo redemptions, partial post-resolution compression, and exact on-chain lineage.

Returns the canonical combo redemption, post-resolution compression, and condition-lineage feed across wallets. For matching events, the response preserves Polymarket's public combo activity fields and adds explicit evidence plus condition and position lineage.

This endpoint is additive. It does not change standard positions or combo position responses.

Use [`GET /v3/combos/activity`](/data/combos/activity) for ordinary combo acquisition and burn activity such as `PositionsSplit` and `PositionsMerged`. This endpoint is scoped to terminal redemptions, post-resolution compression, and the module-level transformations needed to explain redemption lineage.

## Request

```
GET /v3/combos/redemptions
```

No filter is required. Use the filters below for wallet, market, position, transaction, event, scope, or time-bounded reads.

### Query parameters

| Parameter          | Type    | Default | Description                                                                                               |
| ------------------ | ------- | ------- | --------------------------------------------------------------------------------------------------------- |
| `wallet`           | string  | --      | Wallet address                                                                                            |
| `market_id`        | string  | --      | One or more comma-separated combo condition IDs. Matches any condition in the lineage.                    |
| `condition_id`     | string  | --      | Combo condition ID. Matches the source, full, parent, reduced, residual, child, or destination condition. |
| `position_id`      | string  | --      | Decimal ERC-1155 position ID. Matches the primary, source, destination, or underlying position.           |
| `event_kind`       | string  | --      | `PositionRedeemed`, `Compressed`, `Extracted`, `Unwrapped`, or another supported combo lifecycle event    |
| `redemption_scope` | string  | `all`   | `full`, `partial`, `transformation`, or `all`                                                             |
| `redemption_type`  | string  | `all`   | `FULL_COMBO`, `PARTIAL_COMBO`, `COMBO_TRANSFORMATION`, or `all`                                           |
| `tx_hash`          | string  | --      | Exact Polygon transaction hash                                                                            |
| `after`            | integer | --      | Inclusive Unix timestamp in seconds                                                                       |
| `before`           | integer | --      | Inclusive Unix timestamp in seconds                                                                       |
| `limit`            | integer | 100     | Results per page, max 300                                                                                 |
| `offset`           | integer | 0       | Pagination offset                                                                                         |

## Full redemptions

```bash theme={null}
curl "https://api.polynode.dev/v3/combos/redemptions?wallet=0xf83ec0e37ac9eece71c064507270e9001a734663&redemption_scope=full&limit=25" \
  -H "x-api-key: $POLYNODE_API_KEY"
```

```json theme={null}
{
  "event_kind": "PositionRedeemed",
  "redemption_scope": "full",
  "redemption_type": "FULL_COMBO",
  "redemption_evidence": "terminal_position_redeemed",
  "is_full_combo_redemption": true,
  "is_partial_combo_redemption": false,
  "is_terminal_redemption": true,
  "is_partial_combo_reduction": false,
  "has_collateral_payout": true,
  "combo_condition_id": "0x03c90d5cf41198141f9d85cee33943b3750000000000000000000000000000",
  "combo_position_id": "1712167034491293012950849257976671163728504435933953725817269660684235309057",
  "payout_usdc": "0.001749",
  "source_leg_count": 3,
  "removed_leg_count": 3,
  "remaining_leg_count": 0,
  "leg_transition": "3_to_0",
  "legs": [
    {"leg_index": 0, "leg_outcome_label": "Yes"},
    {"leg_index": 1, "leg_outcome_label": "No"},
    {"leg_index": 2, "leg_outcome_label": "No"}
  ]
}
```

`PositionRedeemed` proves that the entire referenced combo position was redeemed. A terminal `Compressed` event whose destination position is `0` is also classified as `full`, with `redemption_evidence: "terminal_compression"`. Router and auto-redeemer transactions use the user-facing wallet rather than attributing the redemption to an intermediary contract.

## Partial post-resolution redemptions

```bash theme={null}
curl "https://api.polynode.dev/v3/combos/redemptions?redemption_scope=partial&event_kind=Compressed&limit=25" \
  -H "x-api-key: $POLYNODE_API_KEY"
```

A non-terminal `Compressed` row proves that post-resolution processing changed an old combo position into a smaller combo position. The leg arrays below are abbreviated:

```json theme={null}
{
  "event_kind": "Compressed",
  "type": "COMPRESS",
  "side": "Compress",
  "wallet_address": "0xc82f0a25aad828f59347670e63ead5ea144466a7",
  "redemption_scope": "partial",
  "redemption_type": "PARTIAL_COMBO",
  "redemption_evidence": "post_resolution_compression",
  "is_full_combo_redemption": false,
  "is_partial_combo_redemption": true,
  "is_terminal_redemption": false,
  "is_partial_combo_reduction": true,
  "has_collateral_payout": false,
  "combo_condition_id": "0x03f20b4d62f602343ec586eb21b1fd88320000000000000000000000000000",
  "combo_position_id": "1784593540973682895298448580384733359095951577285561914582372891673092947968",
  "full_combo_condition_id": "0x0387525b6b182939b62c8ffd3f64c703aa0000000000000000000000000000",
  "reduced_combo_condition_id": "0x03f20b4d62f602343ec586eb21b1fd88320000000000000000000000000000",
  "source_position_id": "1596031307328819069153563606934811624985504858539062944212408350305599619073",
  "destination_position_id": "1784593540973682895298448580384733359095951577285561914582372891673092947969",
  "amount_usdc": "392.295381",
  "position_amount_usdc": "392.295381",
  "collateral_out_usdc": "0.000000",
  "source_leg_count": 5,
  "removed_leg_count": 4,
  "remaining_leg_count": 1,
  "leg_transition": "5_to_1",
  "full_legs": [{"leg_index": 0, "leg_outcome_label": "Spain"}],
  "source_legs": [{"leg_index": 0, "leg_outcome_label": "Spain"}],
  "remaining_legs": [
    {
      "leg_index": 0,
      "leg_position_id": "607054667337535653336040312390449441244232932993621750080905322313694576640",
      "leg_condition_id": "0x4a0aa5a56b98476ffbab967ba0eb70d35794ad0f154fbce5b976d6053bb47808",
      "leg_outcome_index": 0,
      "leg_outcome_label": "Argentina",
      "market_token_id": "67596909630505748192273119086224135081859582478741941473155557882450542807607",
      "leg_result": "won",
      "leg_current_price": "1.0000",
      "leg_price_source": "settlement",
      "market": {
        "title": "Argentina vs. Cabo Verde: Team to Advance",
        "slug": "fifwc-arg-cvi-2026-07-03-team-to-advance",
        "active": true,
        "closed": true,
        "accepting_orders": false,
        "resolved": true,
        "winning_outcome_index": 0
      }
    }
  ],
  "removed_legs": [{"leg_index": 0, "leg_outcome_label": "Spain"}],
  "remaining_combo": {
    "combo_condition_id": "0x03f20b4d62f602343ec586eb21b1fd88320000000000000000000000000000",
    "combo_position_id": "1784593540973682895298448580384733359095951577285561914582372891673092947969",
    "shares_created": "392.295381",
    "current_wallet_balance": "873.364653",
    "still_held": true,
    "status": "OPEN"
  },
  "metadata_coverage": "complete",
  "tx_hash": "0xe73ed3c24d1ca763984df61fad854479c45ea67b555ebaa547c994aa777add0c",
  "log_index": 559,
  "block_number": 89561963
}
```

For a combo reduced to a smaller combo—for example, three legs reduced to two:

* `full_combo_condition_id` identifies the pre-transition combo consumed by this compression.
* `reduced_combo_condition_id` identifies the surviving smaller combo.
* `combo_condition_id`, `combo_position_id`, and `legs` retain Polymarket's basic record for the surviving combo.
* `full_legs` and `source_legs` preserve that pre-transition combo context.
* `remaining_legs` and `removed_legs` compare the indexed leg registries.
* `source_position_id` and `destination_position_id` provide the exact ERC-1155 transition.
* `source_leg_count`, `removed_leg_count`, and `remaining_leg_count` answer how many legs the operation started with, removed, and left behind. `leg_transition` is the compact form, such as `3_to_2`.
* `remaining_combo` is a compact holding snapshot for the destination combo. It does not include entry price, cost basis, or P\&L and is not a replacement for the positions endpoint.

`has_collateral_payout` and `collateral_out_usdc` tell you whether compression also emitted collateral. A zero collateral amount can still be a real partial resolution: the surviving value moved entirely into the reduced combo position.

For a full redemption, `remaining_leg_count` is `0`, `removed_leg_count` equals the source leg count, and `remaining_combo` is omitted. If a partial redemption's current destination balance is unavailable, `remaining_combo` still includes its condition, position, and `shares_created`; balance-dependent fields are omitted rather than assumed to be zero.

## Leg identifiers, result, and price

Each object in `legs`, `full_legs`, `source_legs`, `remaining_legs`, `removed_legs`, and `residual_legs` can include:

| Field                          | Description                                                                                                                |
| ------------------------------ | -------------------------------------------------------------------------------------------------------------------------- |
| `leg_position_id`              | Position ID used by the combo contract for this leg                                                                        |
| `leg_condition_id`             | Standard market condition ID                                                                                               |
| `leg_outcome_index`            | Selected outcome index within the standard market                                                                          |
| `leg_outcome_label`            | Selected outcome label                                                                                                     |
| `market_token_id`              | Canonical Polymarket CLOB token ID for the selected outcome. Use this with price, order-book, trade, and candle endpoints. |
| `leg_result`                   | `won`, `lost`, `resolved`, or `pending` for the selected outcome                                                           |
| `leg_current_price`            | Best available canonical price for the selected outcome, formatted from `0.0000` to `1.0000`                               |
| `leg_price_source`             | `settlement`, `clob_mid`, `last_fill`, or `polymarket_market`                                                              |
| `market.active`                | Whether Polymarket marks the market active                                                                                 |
| `market.closed`                | Whether the market is closed                                                                                               |
| `market.accepting_orders`      | Whether the market currently accepts orders                                                                                |
| `market.resolved`              | Whether a final result is known                                                                                            |
| `market.winning_outcome_index` | Winning outcome index when one unique winner is known                                                                      |

`settlement` is the terminal `0` or `1` outcome value. `clob_mid` is the current order-book midpoint. `last_fill` is the most recent trade price when a midpoint is unavailable. `polymarket_market` is Polymarket's market-level outcome price fallback.

`market_token_id` is intentionally distinct from `leg_position_id`. The former is the standard market token accepted by price and order-book endpoints; the latter is the combo contract's leg identifier.

Permissionless combo markets can contain an on-chain leg that has no corresponding Polymarket CLOB market or order book. In that case, the exact `leg_position_id` remains present while `market_token_id`, `leg_result`, `leg_current_price`, `leg_price_source`, and standard market metadata are omitted rather than inferred.

## Structural extraction is not a redemption

`Extracted` returns `full_combo_condition_id`, `reduced_combo_condition_id`, and `residual_combo_condition_id`, which is useful for reconstructing a larger combo into smaller branches. It is classified as:

```json theme={null}
{
  "event_kind": "Extracted",
  "redemption_scope": "transformation",
  "redemption_type": "COMBO_TRANSFORMATION",
  "redemption_evidence": "condition_extraction",
  "is_partial_combo_redemption": false,
  "is_partial_combo_reduction": true
}
```

This distinction is intentional: `Extracted` proves exact condition lineage, but it does not prove a redemption payout. Use `Compressed` for a partial post-resolution transition and `PositionRedeemed` or terminal compression for a terminal redemption.

## Scope meanings

| Scope            | Meaning                                                                                                                   |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `full`           | A complete combo position was redeemed (`PositionRedeemed`) or terminally compressed to position `0`.                     |
| `partial`        | A non-terminal post-resolution `Compressed` event changed the old combo into a reduced combo.                             |
| `transformation` | A non-redemption lifecycle transformation such as extract, inject, wrap, unwrap, convert, or condition/event split/merge. |

## Evidence and lineage fields

| Field                                                          | Description                                                                                      |
| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| `redemption_evidence`                                          | Why the row is classified as terminal, partial, extraction, injection, or another transformation |
| `is_terminal_redemption`                                       | `true` for terminal `PositionRedeemed` or terminal compression                                   |
| `is_partial_combo_reduction`                                   | `true` for a smaller-combo compression or structural extraction                                  |
| `has_collateral_payout`                                        | Whether `payout_usdc` or `collateral_out_usdc` is positive                                       |
| `lineage_event_id`                                             | Stable transaction-hash/log-index identifier                                                     |
| `full_combo_condition_id`                                      | Pre-transition full/source combo condition for this event                                        |
| `parent_combo_condition_id`                                    | Parent condition for condition/event operations                                                  |
| `source_combo_condition_id`                                    | Condition consumed by the operation                                                              |
| `reduced_combo_condition_id`                                   | Smaller combo condition produced by a reduction                                                  |
| `residual_combo_condition_id`                                  | Residual condition emitted by extract/inject                                                     |
| `child_yes_combo_condition_id` / `child_no_combo_condition_id` | Child conditions emitted by condition splits/merges                                              |
| `destination_combo_condition_id`                               | Primary destination condition when one exists                                                    |
| `source_position_id` / `destination_position_id`               | Exact position transition when present                                                           |
| `underlying_position_id`                                       | Standard underlying position for wrap/unwrap operations                                          |

Condition-to-position mapping is deterministic: the combo condition occupies the high 31 bytes of the position ID and the outcome index occupies the low byte. This lets historical full redemptions map to their combo without re-indexing unrelated contracts.

For a chain of multiple compressions, `full_combo_condition_id` is the immediate pre-transition combo on each row, not a guessed earliest ancestor. Follow `source_position_id` and `destination_position_id` across rows when the chain facts are available; the endpoint does not invent a root parlay identifier that the contract did not emit.

## Metadata coverage

`metadata_coverage` describes the leg expansion available for that row:

* `complete`: the required combo leg registries are available.
* `missing_source_legs`: the source condition is known on chain, but its leg metadata is not yet available.
* `missing_reduced_legs`: the reduction is known on chain, but the reduced combo's leg metadata is not yet available.

The condition and position lineage remains chain-derived even when descriptive leg metadata is incomplete.


## OpenAPI

````yaml GET /v3/combos/redemptions
openapi: 3.1.0
info:
  title: PolyNode API
  description: >-
    Real-time Polymarket data API with decoded mempool settlements, OHLCV
    candles, and full Polygon JSON-RPC proxy.
  contact:
    name: PolyNode
    url: https://polynode.dev
  license:
    name: ''
  version: 2.0.0
servers:
  - url: https://api.polynode.dev
    description: Production
security:
  - api_key: []
paths:
  /v3/combos/redemptions:
    get:
      tags:
        - V3 Combos
      summary: Combo redemptions and reductions
      description: >-
        List full combo redemptions, partial combo reductions, and related
        lifecycle transformations with exact on-chain condition and position
        lineage, before/removed/remaining leg counts, canonical market token
        IDs, per-leg result and price context, and a compact remaining-combo
        holding when applicable.
      operationId: v3_combo_redemptions
      parameters:
        - name: wallet
          in: query
          schema:
            type: string
            pattern: ^0x[a-fA-F0-9]{40}$
          description: Wallet address
        - name: market_id
          in: query
          schema:
            type: string
          description: >-
            One or more comma-separated combo condition IDs. Matches any
            condition in the lineage.
        - name: condition_id
          in: query
          schema:
            type: string
            pattern: ^0x[a-fA-F0-9]{62}$
          description: >-
            Combo condition ID. Matches source, full, parent, reduced, residual,
            child, and destination conditions.
        - name: position_id
          in: query
          schema:
            type: string
            pattern: ^[0-9]+$
          description: Primary, source, destination, or underlying position ID
        - name: event_kind
          in: query
          schema:
            type: string
            enum:
              - PositionRedeemed
              - Compressed
              - ConvertedOnEvent
              - ConvertedToYesBasket
              - Extracted
              - Injected
              - MergedFromYesBasket
              - MergedOnCondition
              - MergedOnEvent
              - SplitOnCondition
              - SplitOnEvent
              - Unwrapped
              - Wrapped
              - all
        - name: redemption_scope
          in: query
          schema:
            type: string
            enum:
              - full
              - partial
              - transformation
              - all
            default: all
          description: >-
            full = terminal redemption; partial = non-terminal post-resolution
            compression; transformation = non-redemption lifecycle lineage
        - name: redemption_type
          in: query
          schema:
            type: string
            enum:
              - FULL_COMBO
              - PARTIAL_COMBO
              - COMBO_TRANSFORMATION
              - all
            default: all
        - name: tx_hash
          in: query
          schema:
            type: string
            pattern: ^0x[a-fA-F0-9]{64}$
          description: Exact Polygon transaction hash
        - name: after
          in: query
          schema:
            type: integer
            format: int64
            minimum: 0
          description: Inclusive Unix timestamp in seconds
        - name: before
          in: query
          schema:
            type: integer
            format: int64
            minimum: 0
          description: Inclusive Unix timestamp in seconds
        - name: limit
          in: query
          schema:
            type: integer
            default: 100
            minimum: 1
            maximum: 300
        - name: offset
          in: query
          schema:
            type: integer
            default: 0
            minimum: 0
      responses:
        '200':
          description: Combo redemptions and reductions
          content:
            application/json:
              schema:
                type: object
                properties:
                  redemptions:
                    type: array
                    items:
                      $ref: '#/components/schemas/ComboRedemption'
                  rows_returned:
                    type: integer
                  has_more:
                    type: boolean
                  offset:
                    type: integer
                  limit:
                    type: integer
                  position_type:
                    type: string
                    const: combo
                  source:
                    type: string
                    const: v3.combos.redemptions
        '400':
          description: Invalid filter
        '401':
          description: Unauthorized
        '503':
          description: Combo read model unavailable
      security:
        - api_key: []
components:
  schemas:
    ComboRedemption:
      type: object
      description: >-
        One chain-derived combo redemption, post-resolution compression, or
        related lifecycle transformation.
      required:
        - position_type
        - is_combo
        - id
        - type
        - event_kind
        - side
        - module_kind
        - user_address
        - wallet_address
        - combo_condition_id
        - module_id
        - timestamp
        - tx_hash
        - log_index
        - block_number
        - redemption_scope
        - redemption_type
        - redemption_evidence
        - is_full_combo_redemption
        - is_partial_combo_redemption
        - is_terminal_redemption
        - is_partial_combo_reduction
        - has_collateral_payout
        - lineage_event_id
        - lineage_status
        - legs
        - full_legs
        - source_legs
        - remaining_legs
        - removed_legs
        - residual_legs
        - metadata_coverage
        - parity_status
      properties:
        position_type:
          type: string
          const: combo
        is_combo:
          type: boolean
          const: true
        id:
          type: string
          description: Stable public log identifier.
        type:
          type: string
          description: Polymarket-compatible activity type.
        event_kind:
          type: string
          enum:
            - PositionRedeemed
            - Compressed
            - ConvertedOnEvent
            - ConvertedToYesBasket
            - Extracted
            - Injected
            - MergedFromYesBasket
            - MergedOnCondition
            - MergedOnEvent
            - SplitOnCondition
            - SplitOnEvent
            - Unwrapped
            - Wrapped
        side:
          type: string
        module_kind:
          type: string
          const: Combinatorial
        user_address:
          type: string
          pattern: ^0x[a-f0-9]{40}$
        wallet_address:
          type: string
          pattern: ^0x[a-f0-9]{40}$
        combo_condition_id:
          type: string
          pattern: ^0x[a-f0-9]{62}$
        combo_position_id:
          type: string
          pattern: ^[0-9]+$
        combo_outcome_index:
          type: integer
          minimum: 0
          maximum: 255
        module_id:
          type: integer
          const: 3
        amount_usdc:
          type: string
        payout_usdc:
          type: string
        position_amount_usdc:
          type: string
        collateral_out_usdc:
          type: string
        timestamp:
          type: integer
          format: int64
        tx_dttm:
          type: string
          format: date-time
        tx_hash:
          type: string
          pattern: ^0x[a-f0-9]{64}$
        log_index:
          type: integer
        block_number:
          type: integer
          format: int64
        redemption_scope:
          type: string
          enum:
            - full
            - partial
            - transformation
          description: >-
            Terminal redemption, non-terminal post-resolution compression, or
            non-redemption lifecycle transformation.
        redemption_type:
          type: string
          enum:
            - FULL_COMBO
            - PARTIAL_COMBO
            - COMBO_TRANSFORMATION
        redemption_evidence:
          type: string
          enum:
            - terminal_position_redeemed
            - terminal_compression
            - post_resolution_compression
            - condition_extraction
            - condition_injection
            - lifecycle_transformation
        is_full_combo_redemption:
          type: boolean
        is_partial_combo_redemption:
          type: boolean
        is_terminal_redemption:
          type: boolean
        is_partial_combo_reduction:
          type: boolean
        has_collateral_payout:
          type: boolean
        source_event_kind:
          type: string
        full_combo_condition_id:
          type: string
          pattern: ^0x[a-f0-9]{62}$
          description: >-
            Pre-transition full/source combo for this event; not a guessed
            earliest ancestor.
        parent_combo_condition_id:
          type: string
          pattern: ^0x[a-f0-9]{62}$
        source_combo_condition_id:
          type: string
          pattern: ^0x[a-f0-9]{62}$
        reduced_combo_condition_id:
          type: string
          pattern: ^0x[a-f0-9]{62}$
        residual_combo_condition_id:
          type: string
          pattern: ^0x[a-f0-9]{62}$
        child_yes_combo_condition_id:
          type: string
          pattern: ^0x[a-f0-9]{62}$
        child_no_combo_condition_id:
          type: string
          pattern: ^0x[a-f0-9]{62}$
        destination_combo_condition_id:
          type: string
          pattern: ^0x[a-f0-9]{62}$
        source_position_id:
          type: string
          pattern: ^[0-9]+$
        destination_position_id:
          type: string
          pattern: ^[0-9]+$
        underlying_position_id:
          type: string
          pattern: ^[0-9]+$
        event_id:
          type: string
        condition_index:
          type: integer
        lineage_event_id:
          type: string
        lineage_status:
          type: string
        lineage:
          type: object
          additionalProperties: true
        source_leg_count:
          type: integer
          minimum: 0
          description: >-
            Number of legs in the source combo immediately before this
            operation.
        removed_leg_count:
          type: integer
          minimum: 0
          description: Number of source legs removed by this operation.
        remaining_leg_count:
          type: integer
          minimum: 0
          description: >-
            Number of legs left in the destination combo; zero for a full
            redemption.
        leg_transition:
          type: string
          pattern: ^[0-9]+_to_[0-9]+$
          description: Compact before-to-after leg count, for example 3_to_2 or 3_to_0.
        legs:
          type: array
          items:
            $ref: '#/components/schemas/ComboRedemptionLeg'
        full_legs:
          type: array
          items:
            $ref: '#/components/schemas/ComboRedemptionLeg'
        source_legs:
          type: array
          items:
            $ref: '#/components/schemas/ComboRedemptionLeg'
        remaining_legs:
          type: array
          items:
            $ref: '#/components/schemas/ComboRedemptionLeg'
        removed_legs:
          type: array
          items:
            $ref: '#/components/schemas/ComboRedemptionLeg'
        residual_legs:
          type: array
          items:
            $ref: '#/components/schemas/ComboRedemptionLeg'
        remaining_combo:
          $ref: '#/components/schemas/ComboRedemptionRemainingCombo'
        metadata_coverage:
          type: string
          enum:
            - complete
            - missing_source_legs
            - missing_reduced_legs
        parity_status:
          type: string
    ComboRedemptionLeg:
      type: object
      description: >-
        One selected standard-market outcome represented inside a combo
        redemption.
      required:
        - leg_index
      properties:
        leg_index:
          type: integer
          minimum: 0
        leg_position_id:
          type: string
          pattern: ^[0-9]+$
          description: >-
            Combo-contract position identifier for this leg. This is distinct
            from market_token_id.
        leg_condition_id:
          type: string
          pattern: ^0x[a-f0-9]{64}$
        leg_outcome_index:
          type: integer
          minimum: 0
        leg_outcome_label:
          type: string
        leg_status:
          type: string
        leg_resolved_at:
          type: string
          format: date-time
        market_token_id:
          type: string
          pattern: ^[0-9]+$
          description: Canonical Polymarket CLOB token ID for the selected outcome.
        leg_result:
          type: string
          enum:
            - won
            - lost
            - resolved
            - pending
        leg_current_price:
          type: string
          pattern: ^(0\.[0-9]{4}|1\.0000)$
          description: Best available selected-outcome price from 0.0000 to 1.0000.
        leg_price_source:
          type: string
          enum:
            - settlement
            - clob_mid
            - last_fill
            - polymarket_market
        market:
          $ref: '#/components/schemas/ComboRedemptionLegMarket'
    ComboRedemptionRemainingCombo:
      type: object
      description: >-
        Compact destination-combo holding created by a partial redemption. This
        is not a positions, cost-basis, or P&L record.
      required:
        - combo_condition_id
        - combo_position_id
      properties:
        combo_condition_id:
          type: string
          pattern: ^0x[a-f0-9]{62}$
        combo_position_id:
          type: string
          pattern: ^[0-9]+$
        shares_created:
          type: string
          pattern: ^[0-9]+\.[0-9]{6}$
        current_wallet_balance:
          type: string
          pattern: ^[0-9]+\.[0-9]{6}$
        still_held:
          type: boolean
        status:
          type: string
          enum:
            - OPEN
            - CLOSED
    ComboRedemptionLegMarket:
      type: object
      description: >-
        Public Polymarket market metadata and current resolution state for a
        combo leg.
      properties:
        market_id:
          type: string
        slug:
          type: string
        title:
          type: string
        outcome:
          type: string
        image_url:
          type: string
        icon_url:
          type: string
        category:
          type: string
        subcategory:
          type: string
        tags:
          type: array
          items: {}
        end_date:
          type: string
          format: date-time
        active:
          type: boolean
        closed:
          type: boolean
        accepting_orders:
          type: boolean
        resolved:
          type: boolean
        winning_outcome_index:
          type: integer
          minimum: 0
        event:
          $ref: '#/components/schemas/ComboRedemptionLegEvent'
    ComboRedemptionLegEvent:
      type: object
      description: Public Polymarket event metadata associated with a combo leg.
      properties:
        event_id:
          type: string
        event_slug:
          type: string
        event_title:
          type: string
        event_image:
          type: string
  securitySchemes:
    api_key:
      type: apiKey
      in: header
      name: x-api-key

````