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. If disputed, the question resets and goes to UMA’s DVM for a token-holder vote
  6. Admins can flag, pause, or manually resolve markets in edge cases

Subscribe

{
  "action": "subscribe",
  "type": "oracle"
}

Oracle Event Types

Every oracle event has an oracle_type field indicating what happened:
initialization
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.
proposal
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.
dispute
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.
settled
string
Settled on UMA Optimistic Oracle V2 after the liveness period expires. The oracle has accepted the proposed answer. Includes resolved_price and proposer.
resolution
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.
reset
string
Question reset after a dispute. The market goes back to the proposal phase.
flag
string
Market flagged by admin. Something may be wrong with the resolution.
manual_resolution
string
Market manually resolved by admin, bypassing the normal oracle flow. Includes payouts array.

Resolution Event (real payload)

A tennis market resolved — Baena won the first set:
{
  "type": "oracle",
  "timestamp": 1773755193000,
  "data": {
    "adapter_address": "0x65070be91477460d8a7aeeb94ef92fe056c2f2a7",
    "block_number": 84317580,
    "condition_id": "0xb0b51e92993bf204c76f10a49bdaa595d817f1768a9ae79e546e83695f1cb142",
    "event_title": "Murcia: Nikolas Sanchez Izquierdo vs Roberto Carballes Baena",
    "event_type": "oracle",
    "log_index": 197,
    "market_image": "https://polymarket-upload.s3.us-east-2.amazonaws.com/atp-tour-b4390c4fb8.jpg",
    "market_slug": "atp-izquier-baena-2026-03-16-first-set-winner-Izquierdo-vs-Baena",
    "market_title": "Set 1 Winner: Izquierdo vs Baena",
    "neg_risk": false,
    "oracle_type": "resolution",
    "outcomes": ["Izquierdo", "Baena"],
    "payouts": [0, 1],
    "question_id": "0x34241c96d35a8ffbd4093f9a360e08f97c5691f66e9bfe29dd46e4763dae833e",
    "resolved_outcome": "Baena",
    "resolved_price": 0,
    "timestamp": 1773755193000,
    "token_ids": [
      "100092605222559788173670687007064638617594421724580870112622623059744413023416",
      "82111831612810431769649657775457339958533284370449876495200499593908955489467"
    ],
    "tokens": {
      "100092605222559788173670687007064638617594421724580870112622623059744413023416": "Izquierdo",
      "82111831612810431769649657775457339958533284370449876495200499593908955489467": "Baena"
    },
    "tx_hash": ""
  }
}

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:
{
  "type": "oracle",
  "timestamp": 1773755537000,
  "data": {
    "adapter_address": "0x65070be91477460d8a7aeeb94ef92fe056c2f2a7",
    "block_number": 84317752,
    "condition_id": "0xc9d0815d7f12e601ac3ce457de5b5d6f18ba5f48df5ffd246cec4c19a9254200",
    "event_title": "What price will XRP hit on March 17?",
    "event_type": "oracle",
    "expiration_timestamp": 1773762737000,
    "log_index": 372,
    "market_image": "https://polymarket-upload.s3.us-east-2.amazonaws.com/XRP-logo.png",
    "market_slug": "will-xrp-dip-to-1pt5-on-march-17",
    "market_title": "Will XRP dip to $1.50 on March 17?",
    "neg_risk": false,
    "oracle_type": "proposal",
    "outcomes": ["Yes", "No"],
    "proposed_price": 1,
    "proposer": "0xedc1e7a3a9275c512f669cb9236f1d03c2fc2e39",
    "question_id": "oo_v2:0x65070be91477460d8a7aeeb94ef92fe056c2f2a7:1773720049",
    "timestamp": 1773755537000,
    "token_ids": [
      "29532348047030596543075496892560093525999458628692812631919395372535371275514",
      "43096817250499798050326473461465682146308168398097552897166323529988349492396"
    ],
    "tokens": {
      "29532348047030596543075496892560093525999458628692812631919395372535371275514": "Yes",
      "43096817250499798050326473461465682146308168398097552897166323529988349492396": "No"
    },
    "tx_hash": ""
  }
}

Field Reference

Core Fields (all oracle events)

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

Proposal Fields (proposal only)

proposer
string
Address of the account that proposed the resolution.
proposed_price
number
The proposed answer. 1.0 = YES (first outcome), 0.0 = NO (second outcome).
expiration_timestamp
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)

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

Resolution Fields (resolution, settled, and manual_resolution)

resolved_price
number
The settled price from UMA. 1.0 = first outcome wins (usually YES), 0.0 = second outcome wins (usually NO), 0.5 = split/tie.
resolved_outcome
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].
payouts
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). Only present on resolution and manual_resolution.

Enrichment Fields (from Polymarket metadata)

These fields are populated automatically when the market’s metadata is available.
condition_id
string
Polymarket’s condition identifier for this market.
market_title
string
Human-readable market question (e.g. “Will Bitcoin reach $100K?”).
market_slug
string
URL slug for the market on polymarket.com.
event_title
string
Parent event name if this market is part of a group (e.g. “Dota 2: Pipsqueak+4 vs L1ga Team (BO3)”).
market_image
string
Market image URL from Polymarket.
outcomes
array
All outcome names for this market (e.g. ["Yes", "No"] or ["Pipsqueak+4", "L1ga Team"]).
token_ids
array
All conditional token IDs for this market.
tokens
object
Map of token ID to outcome name (e.g. {"2174263...": "Yes", "4839315...": "No"}).
neg_risk
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.
PeriodTypical Volume
Active sports hours200+ resolutions/hour, proposals flowing continuously
Quiet periods10-50 resolutions/hour
Proposals (ProposePrice)~30/hour, continuous flow
Settlements (Settle)~30/hour, fires after 2-hour liveness
DisputesA few per month (high signal)
Flags / Manual resolutionsVery rare

Trading Implications

EventWhat It MeansAction
initializationNew market registered on-chain.First signal of a new tradeable market
proposalAnswer proposed, 2-hour countdown started.Monitor for disputes, position accordingly
disputeProposed outcome challenged. Uncertainty returns.Watch for price swings, potential arb
settledOracle accepted the answer after liveness.Resolution imminent
resolutionMarket is settled. Winning positions can be redeemed.Close tracking, update portfolio
resetMarket re-enters proposal phase after dispute.Resolution delayed, reassess positions
flagAdmin flagged an issue. Market may be paused.Caution, reduce exposure
manual_resolutionAdmin override. Could be controversial.Check outcome, compare to expectations