Skip to main content
GET
Combo redemptions and reductions
Use this endpoint to answer one question: after a user’s combo (parlay) was processed, was the whole position redeemed, or were settled legs removed and a smaller combo left behind? The response preserves Polymarket’s public combo activity fields and adds the explicit before-and-after transition. That includes what the combo contained before the operation, which legs were removed, what remained, and whether the resulting combo is still held. This endpoint is additive. It does not change standard positions or combo position responses. Use GET /v3/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.

The consumer view

  • A full redemption means the complete combo was consumed. remaining_leg_count is 0, and there is no remaining combo position.
  • A partial redemption means post-resolution compression removed one or more settled legs and produced a smaller combo. remaining_combo identifies the resulting position and, when available, whether the wallet still holds it.
  • A transformation changes combo structure but is not evidence of a redemption payout. These rows are kept separate so extraction or wrapping is not mistaken for money being redeemed.
For example, leg_transition: "5_to_1" means a five-leg combo became a one-leg combo. Four legs were removed, one leg remained, and the user may still hold the new one-leg position.

How this differs from Polymarket combo activity

Polymarket provides a public combo activity endpoint and combo positions endpoint. The activity response supplies the lifecycle event, reported combo identifiers, amount or payout, transaction details, and a per-leg breakdown. polynode preserves that basic record and adds the transaction-level interpretation needed to explain the redemption directly: In the public 5_to_1 transaction used below, Polymarket reports a COMPRESS event with the resulting one-leg combo. polynode also identifies the consumed five-leg combo, the four removed legs, the exact source-to-destination position transition, and the remaining holding. This removes the need to reconstruct the change from separate activity and position records.

Request

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

Query parameters

Full redemptions

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

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:
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: 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:
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

Evidence and lineage fields

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.

Authorizations

x-api-key
string
header
required

Query Parameters

wallet
string

Wallet address

Pattern: ^0x[a-fA-F0-9]{40}$
market_id
string

One or more comma-separated combo condition IDs. Matches any condition in the lineage.

condition_id
string

Combo condition ID. Matches source, full, parent, reduced, residual, child, and destination conditions.

Pattern: ^0x[a-fA-F0-9]{62}$
position_id
string

Primary, source, destination, or underlying position ID

Pattern: ^[0-9]+$
event_kind
enum<string>
Available options:
PositionRedeemed,
Compressed,
ConvertedOnEvent,
ConvertedToYesBasket,
Extracted,
Injected,
MergedFromYesBasket,
MergedOnCondition,
MergedOnEvent,
SplitOnCondition,
SplitOnEvent,
Unwrapped,
Wrapped,
all
redemption_scope
enum<string>
default:all

full = terminal redemption; partial = non-terminal post-resolution compression; transformation = non-redemption lifecycle lineage

Available options:
full,
partial,
transformation,
all
redemption_type
enum<string>
default:all
Available options:
FULL_COMBO,
PARTIAL_COMBO,
COMBO_TRANSFORMATION,
all
tx_hash
string

Exact Polygon transaction hash

Pattern: ^0x[a-fA-F0-9]{64}$
after
integer<int64>

Inclusive Unix timestamp in seconds

Required range: x >= 0
before
integer<int64>

Inclusive Unix timestamp in seconds

Required range: x >= 0
limit
integer
default:100
Required range: 1 <= x <= 300
offset
integer
default:0
Required range: x >= 0

Response

Combo redemptions and reductions

redemptions
object[]
rows_returned
integer
has_more
boolean
offset
integer
limit
integer
position_type
string
Allowed value: "combo"
source
string
Allowed value: "v3.combos.redemptions"