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

# polymarket_polygon.combo_actions

> Polymarket Combos lifecycle actions — splits, merges, redemptions, and combinatorial structuring primitives on the v3 stack.

export const TableSample = ({tableName, tableSchema}) => <>
    <div className="hidden dark:block">
      <iframe src={`https://dune.com/embeds/3419983/5785629?table_schema_t6f0df=${tableSchema}&table_name_t6f0df=${tableName}&darkMode=true`} style={{
  width: '100%',
  height: '500px',
  border: 'none',
  marginTop: '10px'
}} />
    </div>
    <div className="dark:hidden">
      <iframe src={`https://dune.com/embeds/3419983/5785629?table_schema_t6f0df=${tableSchema}&table_name_t6f0df=${tableName}`} style={{
  width: '100%',
  height: '500px',
  border: 'none',
  marginTop: '10px'
}} />
    </div>
  </>;

The `polymarket_polygon.combo_actions` table contains combo lifecycle actions: splits, merges, per-user redemptions, and the combinatorial structuring primitives (wrap, compress, extract, inject, …), enriched with combo metadata from `combo_details`. Settlement-internal splits/merges are excluded by construction — those are the mint/merge legs of RFQ fills and live in `combo_trades`.

## Table Schema

| Column | Type | Description |
| - | - | - |
| `block_month` | `DATE` | UTC month of the event block time (partition key) |
| `block_time` | `TIMESTAMP` | UTC event block time |
| `block_number` | `BIGINT` | Block number in which the action was executed |
| `action` | `VARCHAR` | Lifecycle action type (`split`, `merge`, `redemption`, `wrap`, `unwrap`, `compress`, `convert_to_yes_basket`, `merge_from_yes_basket`, `split_on_condition`, `merge_on_condition`, `extract`, `inject`) |
| `combo_condition_id` | `VARBINARY` | Combo condition ID (bytes31); for combo detail join `combo_details` on `combo_condition_id` and `outcome_index = 0` |
| `position_id` | `UINT256` | v3 PositionManager token ID for position-scoped actions; joins `combo_details.token_id` |
| `outcome_index` | `INTEGER` | Outcome byte of `position_id` (0 = YES, 1 = NO) |
| `outcome` | `VARCHAR` | Outcome as label; Yes pays out only if every leg wins |
| `related_position_id` | `UINT256` | Secondary position ID (wrap/unwrap underlying, compress new position) |
| `related_condition_id` | `VARBINARY` | Secondary condition ID (child-YES / reduced condition) |
| `related_condition_id_2` | `VARBINARY` | Tertiary condition ID (child-NO / residual condition) |
| `all_condition_ids` | `ARRAY(VARBINARY)` | All condition IDs of the row combined into one array (NULLs dropped). Filter `WHERE contains(all_condition_ids, X)` to find every action touching combo X — `combo_condition_id` alone is the parent combo (not the child/residual) on `extract`, `inject`, `split_on_condition` and `merge_on_condition` |
| `initiator` | `VARBINARY` | Address performing the action |
| `recipient` | `VARBINARY` | Recipient of the action's output where emitted; the redeemed user on auto-redemptions |
| `recipient_2` | `VARBINARY` | NO-token recipient of a split |
| `amount` | `DOUBLE` | Share/set quantity (= pUSD moved 1:1 for splits/merges); NULL on auto-redemptions |
| `payout` | `DOUBLE` | pUSD returned in USD (redemption payout, compress collateral out) |
| `is_auto_redeemed` | `BOOLEAN` | On redemptions: TRUE when executed by the AutoRedeemer on the user's behalf |
| `combo_name` | `VARCHAR` | Generated combo name (`question: outcome AND ...`); NULL unless every leg is labeled |
| `leg_count` | `BIGINT` | Number of legs in the combo |
| `contract_address` | `VARBINARY` | Contract that emitted the event |
| `evt_index` | `INTEGER` | Index of the event within the transaction |
| `tx_hash` | `VARBINARY` | Transaction hash |
| `tx_from` | `VARBINARY` | Transaction sender |
| `_updated_at` | `TIMESTAMP` | When this row was last inserted or updated by the dbt pipeline |

## Table sample

<TableSample tableSchema="polymarket_polygon" tableName="combo_actions" />

## Example query

```sql theme={null}
-- Combo redemption payouts by day, split by auto vs manual
SELECT
  DATE_TRUNC('day', block_time) AS day,
  is_auto_redeemed,
  SUM(payout) AS payout_usd,
  COUNT(*) AS num_redemptions
FROM polymarket_polygon.combo_actions
WHERE action = 'redemption'
  AND block_time >= NOW() - INTERVAL '30' DAY
GROUP BY 1, 2
ORDER BY 1
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.