Skip to main content
The oracle channel ("oracle") streams real-time UMA oracle resolution events for Polymarket markets. Track when outcomes are proposed, disputed, settled, or reset. Polymarket uses the UMA Optimistic Oracle to resolve markets. The process follows a propose-challenge-settle cycle: a proposer submits an outcome with a bond, a 2-hour challenge window opens, and if undisputed the outcome is accepted. Disputes escalate to UMA’s voting mechanism.

Subscribe

{
  "action": "subscribe",
  "platform": "polymarket",
  "version": 1,
  "type": "oracle",
  "filters": {
    "condition_ids": ["0x4c57..."]
  }
}

Filter Types

FilterDescriptionExample
condition_idsMarket condition IDs["0x4c57..."]
market_slugsMarket URL slugs["will-x-happen-by-april-7"]
Use ["*"] for the full firehose of all oracle events (in either filter).
users and token_ids filters are not supported on the oracle channel.

Event Types

proposal

Outcome proposed. A 2-hour liveness window starts, during which the proposal can be disputed. Frequency: ~6,800/day
{
  "type": "event",
  "subscription_id": "sub_xxx",
  "data": {
    "event_type": "proposal",
    "condition_id": "0x4c57...",
    "market_id": "123456",
    "title": "Will X happen by April 7?",
    "market_slug": "will-x-happen-by-april-7",
    "image": "https://...",
    "outcomes": ["Yes", "No"],
    "tokens": [{"token_id": "82855...", "label": "Yes"}, {"token_id": "55194...", "label": "No"}],
    "is_neg_risk": false,
    "proposer": "0xabc...",
    "proposed_price": "1",
    "expiration_timestamp": 1775204004,
    "request_timestamp": 1775196804,
    "timestamp": 1775196804
  }
}

settled

Oracle accepted the proposed answer. The market is resolving. Frequency: ~6,600/day
{
  "type": "event",
  "subscription_id": "sub_xxx",
  "data": {
    "event_type": "settled",
    "condition_id": "0x4c57...",
    "market_id": "123456",
    "title": "Will X happen by April 7?",
    "market_slug": "will-x-happen-by-april-7",
    "image": "https://...",
    "outcomes": ["Yes", "No"],
    "tokens": [{"token_id": "82855...", "label": "Yes"}, {"token_id": "55194...", "label": "No"}],
    "is_neg_risk": false,
    "proposer": "0xabc...",
    "disputer": null,
    "settled_price": "1",
    "payout": "752000000",
    "request_timestamp": 1775196804,
    "timestamp": 1775204005
  }
}

dispute

Proposal challenged. Rare but high signal. Frequency: ~15/day
{
  "type": "event",
  "subscription_id": "sub_xxx",
  "data": {
    "event_type": "dispute",
    "condition_id": "0x4c57...",
    "market_id": "123456",
    "title": "Will X happen by April 7?",
    "market_slug": "will-x-happen-by-april-7",
    "image": "https://...",
    "outcomes": ["Yes", "No"],
    "tokens": [{"token_id": "82855...", "label": "Yes"}, {"token_id": "55194...", "label": "No"}],
    "is_neg_risk": false,
    "proposer": "0xabc...",
    "disputer": "0xdef...",
    "proposed_price": "1",
    "request_timestamp": 1775196804,
    "timestamp": 1775200405
  }
}

reset

Dispute succeeded. The market re-enters the proposal phase. Frequency: ~15/day
{
  "type": "event",
  "subscription_id": "sub_xxx",
  "data": {
    "event_type": "reset",
    "condition_id": "0x4c57...",
    "question_id": "0x9f8e...",
    "title": "Will X happen by April 7?",
    "market_slug": "will-x-happen-by-april-7",
    "image": "https://...",
    "outcomes": ["Yes", "No"],
    "tokens": [{"token_id": "82855...", "label": "Yes"}, {"token_id": "55194...", "label": "No"}],
    "is_neg_risk": false,
    "request_timestamp": 1775196804,
    "timestamp": 1775200406
  }
}

Field Reference

Common Fields (all event types)

FieldTypeDescription
event_typestring"proposal", "settled", "dispute", or "reset"
condition_idstringMarket condition ID (hex)
titlestringMarket question text
market_slugstringMarket URL slug
imagestringMarket image URL
outcomesstring[]Outcome labels (e.g. ["Yes", "No"])
tokensobject[]Token IDs with labels (token_id, label)
is_neg_riskbooleanWhether the market uses neg-risk framework
timestampnumberWhen Predexon processed the event (Unix s)
request_timestampnumberWhen the original price request was made (Unix s)

Event-Specific Fields

FieldTypeEventsDescription
market_idstringproposal, dispute, settledPolymarket market ID
question_idstringresetUMA question ID
proposerstringproposal, dispute, settledAddress that proposed the outcome
disputerstring|nulldispute, settledAddress that disputed. Present but null in settled when undisputed.
proposed_pricestringproposal, disputeProposed outcome: "1" = Yes, "0" = No
settled_pricestringsettledFinal resolved outcome: "1" = Yes, "0" = No
expiration_timestampnumberproposal2-hour liveness window end (Unix s)
payoutstringsettledBond payout amount (uint256)

Unsubscribe

To stop receiving oracle events, send an unsubscribe with the subscription ID from the original ack:
{
  "action": "unsubscribe",
  "subscription_id": "sub_xxx"
}
See Subscriptions for full details on subscription management, including updating filters on an existing subscription.