Skip to main content
Oracle events stream the full lifecycle of Polymarket’s UMA-based market resolution system. Every Polymarket market is resolved through UMA’s Optimistic Oracle, which uses a propose-challenge-resolve cycle on the Polygon blockchain. The only WebSocket stream of enriched UMA oracle events. Decoded from on-chain event logs, enriched with full market metadata (title, outcomes, images, token IDs), and pushed to your connection in real-time.

How Polymarket Resolution Works

  1. A market is initialized on-chain (QuestionInitialized on the UMA adapter)
  2. A proposer submits an answer (YES or NO) via ProposePrice on UMA’s Optimistic Oracle V2 and posts a USDC bond
  3. A 2-hour liveness window opens where anyone can dispute
  4. If no dispute, the oracle settles (Settle event on OO V2) and the market resolves (QuestionResolved on the adapter)
  5. For neg-risk markets (the majority), a second transaction calls resolveQuestion() on the NegRiskOperator, which triggers condition_resolution on the Conditional Tokens contract. Positions become redeemable at this point.
  6. If disputed, the question resets and goes to UMA’s DVM for a token-holder vote
  7. Admins can flag, pause, or manually resolve markets in edge cases

Subscribe

Oracle Event Types

Every oracle event has an oracle_type field indicating what happened:
string
Market initialized on-chain. The UMA adapter has registered a new question. This is the first on-chain event in a market’s lifecycle.
string
Resolution proposed on UMA Optimistic Oracle V2 (ProposePrice). A proposer has submitted an answer and posted a bond. The 2-hour liveness countdown begins. Includes proposer address, proposed_price (1.0 = YES, 0.0 = NO), and expiration_timestamp.
string
Resolution disputed on UMA Optimistic Oracle V2 (DisputePrice). Someone challenged the proposed outcome. The market re-enters the proposal phase or escalates to UMA’s DVM for a token-holder vote. High signal, rare event. Price swings are likely. Includes proposer, disputer, and proposed_price.
string
Settled on UMA Optimistic Oracle V2 after the liveness period expires. The oracle has accepted the proposed answer. Includes resolved_price and proposer.
string
Market officially resolved via UMA oracle (QuestionResolved on the adapter). The most common event type (~200+ per hour during active sports periods). Includes the final resolved_price, payouts array, and resolved_outcome.
string
Question reset after a dispute. The market goes back to the proposal phase.
string
Market flagged by admin. Something may be wrong with the resolution.
string
Market manually resolved by admin, bypassing the normal oracle flow. Includes payouts array.
string
Condition resolved on the Conditional Tokens contract (ConditionResolution event). This is the moment positions become redeemable. For neg-risk markets (the majority on Polymarket), this fires in a separate transaction ~2-3 minutes after resolution. For standard markets, it fires atomically with resolution. Includes resolved_price, payouts, condition_id, and full market metadata. Use this event to trigger redemption workflows.

Resolution Event (real payload)

A tennis market resolved — Baena won the first set:

Proposal Event (ProposePrice from OO V2)

A proposer submits YES for an XRP price market, with a 2-hour liveness window. Proposals include full market metadata:

Field Reference

Core Fields (all oracle events)

string
required
Type of oracle event: initialization, proposal, dispute, settled, resolution, condition_resolution, reset, flag, unflag, pause, unpause, manual_resolution.
string
required
UMA’s unique identifier for this market question.
string
required
Which UMA adapter contract this event relates to.
number
required
Polygon block number where the event was emitted.
number
required
Position of this event within the block’s logs.
number
required
Block timestamp in milliseconds.

Proposal Fields (proposal only)

string
Address of the account that proposed the resolution.
number
The proposed answer. 1.0 = YES (first outcome), 0.0 = NO (second outcome).
number
When the 2-hour liveness window expires (unix milliseconds). After this time, the proposal can be settled if not disputed.

Dispute Fields (dispute only)

string
Address of the account that disputed the proposal.
string
Address of the original proposer whose answer is being challenged.
number
The proposed answer that was disputed.

Resolution Fields (resolution, condition_resolution, settled, and manual_resolution)

number
The settled price from UMA. 1.0 = first outcome wins (usually YES), 0.0 = second outcome wins (usually NO), 0.5 = split/tie.
string
Human-readable winning outcome (e.g. “Yes”, “No”, “L1ga Team”). Derived from resolved_price + market metadata. Returns "Split" for voided markets where payouts are [1, 1].
array
Payout array from UMA. [1, 0] means the first outcome wins. [0, 1] means the second outcome wins. [1, 1] means a split (both outcomes pay out). Present on resolution, condition_resolution, and manual_resolution.

Enrichment Fields (from Polymarket metadata)

These fields are populated automatically when the market’s metadata is available.
string
Polymarket’s condition identifier for this market.
string
Human-readable market question (e.g. “Will Bitcoin reach $100K?”).
string
URL slug for the market on polymarket.com.
string
Parent event name if this market is part of a group (e.g. “Dota 2: Pipsqueak+4 vs L1ga Team (BO3)”).
string
Market image URL from Polymarket.
array
All outcome names for this market (e.g. ["Yes", "No"] or ["Pipsqueak+4", "L1ga Team"]).
array
All conditional token IDs for this market.
object
Map of token ID to outcome name (e.g. {"2174263...": "Yes", "4839315...": "No"}).
boolean
Whether this market uses the neg-risk framework (multi-outcome markets like elections).

Frequency

Oracle events are not evenly distributed. They come in bursts when UMA’s resolver bot processes batches of markets.

Trading Implications