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

# WebSockets Changelog

> Channel additions, breaking changes, and protocol updates for the Radion WebSocket API.

WebSocket-facing changes for Radion integrators. See the [WebSockets overview](/websockets/overview) for the current protocol.

<Warning>
  Entries tagged **Breaking** require changes to existing integrations.
</Warning>

<Update label="July 6, 2026" description="Pending feed via confirmed flag; richer mempool payload">
  The pending feed moved from a `mempool.` channel prefix to a `confirmed` boolean on the subscribe message, event frames are unified, and the decoded `call` now carries per-order detail.

  ### Changed (Breaking)

  The `mempool.` channel prefix is gone. Subscribe to the pending feed by setting `confirmed: false` (default `true`) with the bare channel name:

  ```json theme={null}
  { "action": "subscribe", "id": "pending", "channel": "trading", "confirmed": false }
  ```

  Event frames now carry `confirmed` on the envelope and always use the bare `channel` name for both feeds. Tell pending from confirmed by the `confirmed` flag, and route by your subscription `id`:

  ```json theme={null}
  { "type": "event", "id": "pending", "channel": "trading", "confirmed": false, "data": { … } }
  ```

  The pending `data` object dropped its inner `confirmed` field (now on the envelope), and the decoded `call` renames `usd` to `notional_usd`.

  ### Added

  * The decoded `call` gains an `orders` array for exchange trades — each with `maker`, `taker` (nullable), `token_id`, `side` (`buy`/`sell`), `maker_amount`, and `taker_amount`. Empty for non-trade calls. No derived price yet.
  * A `mempool_unavailable` warning frame follows a `confirmed: false` subscribe when the upstream node exposes no pending stream, so a pending subscription no longer sits silently empty.
</Update>

<Update label="July 5, 2026" description="Event payloads carry data.type; every event documented">
  Confirmed event payloads now match the documented shape, and every event has a full payload reference.

  ### Fixed (Breaking)

  Confirmed event frames now put the snake\_case discriminator inside `data.type`, with the event's fields alongside it — the shape the docs and SDKs always described:

  ```json theme={null}
  {
    "type": "event",
    "channel": "trading",
    "data": { "type": "order_filled_v2", "orderHash": "0x…" }
  }
  ```

  Before, the server sent an externally-tagged `data` (`{ "OrderFilledV2": { … } }`). If you parsed that raw shape, read `data.type` plus the sibling fields instead. The official SDKs already expect this.

  ### Docs

  Every channel page now documents **all** its events — each with a payload example and a full field table generated from the on-chain ABI (77 confirmed events across [`trading`](/websockets/channels/trading), [`fees`](/websockets/channels/fees), [`oracle`](/websockets/channels/oracle), [`resolution`](/websockets/channels/resolution), [`lifecycle`](/websockets/channels/lifecycle), [`positions`](/websockets/channels/positions), [`combos`](/websockets/channels/combos), [`transfers`](/websockets/channels/transfers), and [`accounts`](/websockets/channels/accounts)).

  <Note>
    The `clob.*` channels are unchanged: their `data` has no `type` discriminator, because each clob channel has one fixed payload shape.
  </Note>
</Update>

<Update label="July 4, 2026" description="Redesigned channel taxonomy">
  Channels were reworked into a clean topic taxonomy. Every decoded event now routes to exactly one topic channel. The `wallets` and `markets` filter channels still scope across all topics.

  ### Removed (Breaking)

  * `global` (and `mempool.global`) — it matched everything. Subscribe to each topic channel you need, or use `wallets` / `markets` to scope across topics.
  * `activity` — its events split into [`positions`](/websockets/channels/positions) (plain CTF splits, merges, redemptions) and [`combos`](/websockets/channels/combos) (module, neg-risk, conversion events).
  * `large_trades` — use [`trading`](/websockets/channels/trading) with a `min_usd` filter.
  * The derived `prices` channel (last-trade ticks). The unrelated CLOB `clob.prices` channel is unaffected.

  ### Renamed (Breaking)

  * `trades` → [`trading`](/websockets/channels/trading) (and `mempool.trades` → `mempool.trading`). Fees moved off it to the new `fees` channel.

  ### Added

  * Confirmed channels [`fees`](/websockets/channels/fees), [`resolution`](/websockets/channels/resolution), [`transfers`](/websockets/channels/transfers), [`accounts`](/websockets/channels/accounts), and [`positions`](/websockets/channels/positions), each with a `mempool.` twin.
  * Settlement events (resolutions, reported results, pauses) moved off `lifecycle` and `combos` onto `resolution`. ERC-1155 transfers moved off `combos` onto `transfers`.
  * `min_usd` now applies to `trading`; `market_ids` / `token_ids` apply across the topic channels that accept them. Filters combine **AND across axes, OR within an axis**. See [Filters](/websockets/filters).
</Update>

<Update label="June 29, 2026" description="Removed the collateral channel">
  Radion no longer watches the USDC.e and pUSD collateral token contracts. These ERC-20 transfers, approvals, and wraps fed no analytics, and the USDC.e filter matched every USDC.e transfer on Polygon, not just Polymarket ones.

  ### Removed (Breaking)

  * Confirmed channel `collateral` and its twin `mempool.collateral`. Subscribing now returns an `unknown channel` error.
  * Events `Transfer`, `Approval`, `Wrapped`, and `Unwrapped` are no longer decoded or streamed.
  * The `collateral` value is removed from `contract_kinds` on mempool frames. Collateral-adapter splits, merges, redemptions, and conversions are unaffected — they still stream on the `activity` channel.
</Update>

<Update label="June 22, 2026" description="WebSocket streams for confirmed events and mempool transactions">
  Radion WebSockets are live. Subscribe to decoded Polymarket contract events and speculative mempool transactions over one persistent connection.

  ### Added

  * Confirmed channels: `global`, `trades`, `oracle`, `lifecycle`, `activity`, `collateral`, `combos`, `wallets`, `markets`, `large_trades`, `prices`.
  * Mempool channels: the same set with a `mempool.` prefix.
  * Filters: `wallets`, `market_ids`, `token_ids`, `min_usd`. `wallets` narrows the `trades` channel to specific traders (matching a fill's maker or taker). All filters mirror to the `mempool.*` variants, matched against transaction calldata.
  * Control frames: `subscribe`, `unsubscribe`, `ping` / `pong`, and a `lagged` error with skipped event count.
  * Per-plan connection and subscription limits. See [Plan limits](/websockets/overview#plan-limits).
</Update>
