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

# Activity Events

> Real-time split, merge, and redemption events

The activity channel (`"activity"`) delivers four event types: `split`, `merge`, `redeem`, and `conversion`. These represent position management operations on Polymarket's Conditional Token Framework.

<Note>
  **pUSD deposit/withdrawal events are on a separate [collateral channel](/websocket/collateral)** - not mixed into activity. Subscribe to both if you need full wallet flow.
</Note>

<Note>
  `condition_id` is `null` only for the `conversion` event type (NegRisk conversions span multiple conditions). Clients with strict typed generators (`condition_id: string`) should widen to `string | null` if they want to consume conversion events. If you filter by `event_type` in `{"split", "merge", "redeem"}`, no change is needed.
</Note>

## split

A user deposits collateral (USDC) to mint outcome tokens for a market.

```json theme={null}
{
  "type": "event",
  "subscription_id": "sub_2f4b15b33798",
  "data": {
    "event_type": "split",
    "user": "0x6d38b759c90c3158fa7b4fa45b0145eefd58d910",
    "condition_id": "0x7fc83e5029c8e7b752f2fda61158f6cbc185c0a7b60d34d56231fcc09c62ce44",
    "collateral_token": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174",
    "amount": 100000000,
    "amount_normalized": 100,
    "payout": null,
    "payout_normalized": null,
    "tx_hash": "0x0708391d4276731737d14a388491afb8a9c2f5b133f597189993b3ebf9154c37",
    "log_index": "0x355",
    "block_number": "0x4ebcd4d",
    "timestamp": 1770244769,
    "title": "Bitcoin Up or Down - February 4, 5:45PM-6:00PM ET",
    "market_slug": "btc-updown-15m-1770245100",
    "market_id": "1329555",
    "image": "https://polymarket-upload.s3.us-east-2.amazonaws.com/BTC+fullsize.png",
    "tokens": [
      { "token_id": "3461486922...", "label": "Up" },
      { "token_id": "9291673453...", "label": "Down" }
    ]
  }
}
```

## merge

A user returns a full set of outcome tokens to redeem collateral (USDC) before market resolution.

```json theme={null}
{
  "type": "event",
  "subscription_id": "sub_2f4b15b33798",
  "data": {
    "event_type": "merge",
    "user": "0xe8dd7741ccb12350957ec71e9ee332e0d1e6ec86",
    "condition_id": "0x4dab1a074a9dbfc122f49b1b4e683d0b9960738107623d2dfd974eb98865a020",
    "collateral_token": null,
    "amount": 40980000,
    "amount_normalized": 40.98,
    "payout": null,
    "payout_normalized": null,
    "tx_hash": "0xd198bdd0226e5225a103aaaa01cf38aac4bc34891dd8ba31832f454cb7d65da1",
    "log_index": "0x54f",
    "block_number": "0x4ebcd51",
    "timestamp": 1770244777,
    "title": "Will \"NUEVAYOL\" be played first at the Super Bowl halftime show?",
    "market_slug": "will-nuevayol-be-played-first-at-the-super-bowl-halftime-show",
    "market_id": "811834",
    "image": "https://polymarket-upload.s3.us-east-2.amazonaws.com/...",
    "tokens": [
      { "token_id": "8405376573...", "label": "Yes" },
      { "token_id": "3675765791...", "label": "No" }
    ]
  }
}
```

## redeem

A user redeems winning outcome tokens for collateral (USDC) after a market has resolved.

```json theme={null}
{
  "type": "event",
  "subscription_id": "sub_2f4b15b33798",
  "data": {
    "event_type": "redeem",
    "user": "0x1f4c2a421a36e5da4e013c557dc29fdec7cb2e01",
    "condition_id": "0x6b6de56b0057be1b236ef4e52745ca1160497419789ffe3c6f0f95b12e195762",
    "collateral_token": null,
    "amount": 0,
    "amount_normalized": 0,
    "payout": 20000000,
    "payout_normalized": 20,
    "tx_hash": "0x8fbd25676f0b4d0a2af786716f406100f24492b1246bb16b580cb7a5aefd0931",
    "log_index": "0x26d",
    "block_number": "0x4ebcd4a",
    "timestamp": 1770244763,
    "title": "Will Sunderland AFC win on 2026-02-02?",
    "market_slug": "epl-sun-bur-2026-02-02-sun",
    "market_id": "1225150",
    "image": "https://polymarket-upload.s3.us-east-2.amazonaws.com/...",
    "tokens": [
      { "token_id": "3331904137...", "label": "Yes" },
      { "token_id": "9751235886...", "label": "No" }
    ]
  }
}
```

## conversion

A user converts "No" positions in a NegRisk event back to collateral. NegRisk conversions span multiple conditions, so `condition_id` is `null` - use `neg_risk_event_id` + `index_set` instead.

```json theme={null}
{
  "type": "event",
  "subscription_id": "sub_2f4b15b33798",
  "data": {
    "event_type": "conversion",
    "user": "0xbc5403011df159368c4bc716e07bcf858dfe2eec",
    "condition_id": null,
    "amount": 13074500,
    "amount_normalized": 13.0745,
    "tx_hash": "0xabc...",
    "log_index": "0x548",
    "block_number": "0x51e0002",
    "timestamp": 1776824366,
    "version": 2,
    "neg_risk_event_id": "0x6375f96fe3910d68...",
    "index_set": "320"
  }
}
```

* `neg_risk_event_id`: the NegRiskAdapter's `marketId` identifying a cluster of related binary questions (distinct from Polymarket's numeric `market_id`).
* `index_set`: bitmap of which question indices within that event were converted. Decimal string of a `uint256`. Interpret by bit position: `indexSet & (1 << i)` → question `i` was included. Example `"320"` = bits 6 & 8 set.
* Routes on `activity.user.*` and `activity.wildcard` only (no `activity.condition.*` route since there's no single condition).

## Field Reference

| Field               | Type                                                   | Description                                                       |
| ------------------- | ------------------------------------------------------ | ----------------------------------------------------------------- |
| `event_type`        | `"split"` \| `"merge"` \| `"redeem"` \| `"conversion"` |                                                                   |
| `user`              | string                                                 | User address                                                      |
| `condition_id`      | string \| null                                         | Market condition ID. **`null` only for `conversion` events.**     |
| `neg_risk_event_id` | string \| null                                         | NegRiskAdapter marketId (present on `conversion` only)            |
| `index_set`         | string \| null                                         | uint256 bitmap as decimal string (present on `conversion` only)   |
| `collateral_token`  | string \| null                                         | Collateral token contract address (USDC)                          |
| `amount`            | number                                                 | Collateral amount (raw, 6 decimal places)                         |
| `amount_normalized` | number                                                 | Human-readable collateral amount                                  |
| `payout`            | number \| null                                         | Payout amount in raw units (redeem only)                          |
| `payout_normalized` | number \| null                                         | Human-readable payout (redeem only)                               |
| `tokens`            | array \| null                                          | Outcome tokens for this market                                    |
| `title`             | string \| null                                         | Market title                                                      |
| `market_slug`       | string \| null                                         | Market URL slug                                                   |
| `market_id`         | string \| null                                         | Internal market ID                                                |
| `image`             | string \| null                                         | Market image URL                                                  |
| `tx_hash`           | string                                                 | Transaction hash                                                  |
| `log_index`         | string                                                 | Log index (hex)                                                   |
| `block_number`      | string                                                 | Block number (hex)                                                |
| `timestamp`         | number                                                 | Unix timestamp in seconds                                         |
| `version`           | number \| null                                         | `1` for V1 contracts, `2` for V2 contracts (currently always `1`) |

## Example: Tracking Redemptions

```javascript theme={null}
ws.onmessage = (event) => {
  const msg = JSON.parse(event.data);

  if (msg.type === 'event') {
    const data = msg.data;

    if (data.event_type === 'redeem') {
      console.log(`Redemption: $${data.payout_normalized}`);
      console.log(`Market: ${data.title}`);
      console.log(`Wallet: ${data.user}`);
    }
  }
};
```
