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

# Resolution + oracle tracker

> Follow a market from UMA oracle proposal to final settlement with the oracle and resolution channels.

Know the moment a market settles. The [`oracle`](/websockets/channels/oracle) channel streams the UMA lifecycle — question started, resolved, settled — and the [`resolution`](/websockets/channels/resolution) channel streams the on-chain settlement that pays out. Subscribe to both to track a market end to end.

## What you need

* An API key from [radion.app/dashboard](https://radion.app/dashboard).
* The market condition ids you want to watch (`bytes32` hex).

## The two feeds

* **`oracle`** — UMA reporting: `uma_optimistic_question_settled`, `uma_adapter_question_resolved`, plus pauses, disputes, and emergency overrides.
* **`resolution`** — the settlement itself: `condition_resolution` saves the final payout numerators that set how collateral splits.

Filter both channels by `market_ids`.

## Track a market

<CodeGroup>
  ```typescript TypeScript theme={null}
  import { Radion } from "@radion-app/sdk";

  const radion = new Radion({ apiKey: process.env.RADION_API_KEY });
  const markets = ["0xCONDITION_ID"];

  radion.realtime.onChannel("oracle", (event) => {
    const data = event.data;
    if (data.type === "uma_optimistic_question_settled") {
      console.log(`UMA settled ${data.questionID} at ${data.settledPrice}`);
    }
  });

  radion.realtime.onChannel("resolution", (event) => {
    const data = event.data;
    if (data.type === "condition_resolution") {
      console.log(
        `resolved ${data.conditionId} payouts ${data.payoutNumerators}`
      );
      // notify holders, close positions, redeem
    }
  });

  radion.realtime.subscribe({
    id: "oracle",
    channel: "oracle",
    filters: { market_ids: markets },
  });
  radion.realtime.subscribe({
    id: "resolution",
    channel: "resolution",
    filters: { market_ids: markets },
  });

  await radion.realtime.connect();
  ```

  ```python Python theme={null}
  import asyncio
  from radion import Radion, ChannelFilters, Subscription

  radion = Radion(api_key="YOUR_API_KEY")
  markets = ["0xCONDITION_ID"]

  @radion.realtime.on_channel("oracle")
  async def on_oracle(event):
      data = event.data
      if data["type"] == "uma_optimistic_question_settled":
          print(f"UMA settled {data['questionID']} at {data['settledPrice']}")

  @radion.realtime.on_channel("resolution")
  async def on_resolution(event):
      data = event.data
      if data["type"] == "condition_resolution":
          print(f"resolved {data['conditionId']} payouts {data['payoutNumerators']}")
          # notify holders, close positions, redeem

  async def main():
      await radion.realtime.subscribe(
          Subscription(id="oracle", channel="oracle", filters=ChannelFilters(market_ids=markets))
      )
      await radion.realtime.subscribe(
          Subscription(id="resolution", channel="resolution", filters=ChannelFilters(market_ids=markets))
      )
      await radion.realtime.connect()

  asyncio.run(main())
  ```
</CodeGroup>

## Reading the result

* `payoutNumerators` on `condition_resolution` sets the payout per outcome slot. `["0x1", "0x0"]` means the first outcome won.
* `settledPrice` on the UMA events is a signed value; `"-1"` marks a disputed or unresolved price.
* Watch `resolution_paused` / `resolver_paused` — settlement can stall before it finishes.

Both channels accept only `market_ids`. `wallets`, `token_ids`, and `min_usd` are ignored.

## Front-run the settlement

Subscribe to `oracle` or `resolution` with `confirmed: false` to see the resolving transaction while it is still pending. Pending frames are guesses — reconcile against the confirmed event by `transaction_hash`.

## Next steps

<Columns cols={2}>
  <Card title="oracle channel" icon="scale" href="/websockets/channels/oracle">
    Every UMA lifecycle event.
  </Card>

  <Card title="resolution channel" icon="flag-triangle-right" href="/websockets/channels/resolution">
    Settlement events and payout numerators.
  </Card>
</Columns>
