Resolution delay, Polymarket vs Kalshi
How long from market close to final settlement: Polymarket measured onchain via UMA ProposePrice to QuestionResolved, Kalshi via settlement_ts minus close_time from the public REST API. Auto-generated multivariate parlays excluded from Kalshi data.
TL;DR. As of , Kalshi (All) and Kalshi (Sports) both post the lowest resolution delay, tied at 10.0 min (p50, 24h) across 7 ranked venues. Source: OpenChainBench, https://openchainbench.com/benchmarks/pm-resolution-delay.
Read this carefully
Polymarket delay is measured from the first onchain outcome proposal to resolution (UMA challenge window, minimum 2h by protocol). Kalshi delay is settlement_ts - close_time (exact from API), where close_time is the scheduled market close, not the real-world event end. Kalshi auto-generated parlay markets (Exotics) are excluded. Both anchors are lower bounds on total user wait from the real-world event ending.
The most asked question about prediction markets after "is it legal" is "how long until I get paid". The answer circulating on social media for Polymarket is that 93 percent of markets resolve within 2 hours. That number has no published methodology and cannot be reproduced from Polymarket's own Gamma API. This benchmark measures what can actually be observed: for Polymarket, the time from the first onchain outcome proposal on UMA's optimistic oracle to the onchain resolution, read directly from Polygon logs. For Kalshi, the time from a market's scheduled close_time to the first poll at which its result is non-null, measured every five minutes. Both venues are broken down by category so the comparison is apples to apples.
Methodology
Polymarket: a listener follows the UMA CTF adapters on Polygon (QuestionInitialized, QuestionResolved, QuestionReset) and the Optimistic Oracle they call (ProposePrice, DisputePrice). Delay = first ProposePrice block to QuestionResolved block, joined to Gamma for category tags. Kalshi: a poller hits the public /trade-api/v2/markets?status=settled endpoint every 5 minutes. Delay = settlement_ts - close_time (both from API, exact, no polling error). Categories resolved via /events/{event_ticker}. Auto-generated multivariate parlay markets (Kalshi "Exotics" category) are excluded: they settle algorithmically in seconds and are not prediction market questions. No auth required.
- Polymarket anchor: the first OO ProposePrice block timestamp, not Gamma fields. Verified live: Gamma closedTime equals the QuestionResolved block timestamp (circular by construction) and endDate is a scheduled buffer most markets beat.
- Polymarket sources: Polygon logs of the post-migration UMA CTF adapters (binary 0x65070BE9..., neg-risk 0x69c47De9...) and their Optimistic Oracle (0x2c0367a9...). Gamma supplies the market catalogue and category tags.
- Polymarket join: questionID = keccak256 of the proposal ancillary data, verified against QuestionInitialized events.
- Kalshi anchor: settlement_ts from the public markets API (exact timestamp, no polling error). Delay = settlement_ts - close_time. close_time is the scheduled market close, not the real-world event end.
- Kalshi scope: traditional prediction markets only. Exotics (auto-generated multivariate parlays) are excluded by design: they auto-settle so fast they never appear in status=closed, so the watchlist only contains real market questions. Categories from /events/{event_ticker} (lazy cache): Sports→sports, Politics/Elections→politics, Crypto/Financials→crypto, everything else→other.
- Anchor asymmetry: Polymarket's 2h UMA challenge window is protocol-enforced: no market can resolve in under 2h on the clean path. Kalshi has no such floor; traditional sports and politics markets settle in minutes to hours after close_time. The difference in distributions reflects both operational speed and architecture.
- Categories: sports, politics, crypto, other, consistent across venues. Per-category rows are the honest unit of comparison because market types run different resolution windows.
- Disputes (Polymarket only): a DisputePrice before resolution marks the market disputed. Disputed delays land in the disputed series and are excluded from the main category rows.
- Pending backlog (Polymarket only): markets past their scheduled endDate with no onchain resolution, polled from Gamma every cycle.
- Listener: 45s incremental Polygon log polling with a 7-day chunked backfill on restart. Kalshi poller ticks every 5 min. Both coexist in the same process.
Results: 7 venues ranked by Resolution delay (p50, 24h)
| № | Venues | p50 (median delay) | p90 | p99 | Success |
|---|---|---|---|---|---|
| 1 | Kalshi (All) | 10.0 min | 14.0 min | 14.9 min | 100% (n=1) |
| 2 | Kalshi (Sports) | 10.0 min | 14.0 min | 14.9 min | 100% (n=1) |
| 3 | Polymarket (Crypto) | 10.8 min | 22.2 min | 175.0 min | 100.00% (n=9595) |
| 4 | Polymarket (Sports) | 55.7 min | 213.9 min | 237.9 min | 100.00% (n=239290) |
| 5 | Polymarket (All) | 125.3 min | 217.7 min | 238.5 min | 100.00% (n=407078) |
| 6 | Polymarket (Other) | 148.3 min | 222.4 min | 239.0 min | 100.00% (n=154260) |
| 7 | Polymarket (Politics) | 180.3 min | 228.9 min | 239.8 min | 100.00% (n=3933) |
Frequently asked
How long does Polymarket take to pay out after a market ends?
Measured onchain, the median delay from the first outcome proposal to resolution is currently 125.3 min across all markets, and redemptions are claimable immediately after resolution. The full distribution matters: p99 is 238.5 min, and the per category rows show that sports, crypto and politics markets run on different verification windows. Add the time between the real world event ending and the first proposal, which is not measurable onchain.
How long does Kalshi take to resolve?
Kalshi resolves via its own internal process, not through an onchain oracle. The delay measured here is from a market's scheduled close_time to the first API poll (every 5 minutes) at which a result appears. The current median is 10.0 min. This reflects Kalshi's operational resolution speed, not an onchain settlement time.
Do 93 percent of Polymarket markets resolve within 2 hours?
We could not reproduce that figure. The fields in Polymarket's public Gamma API cannot produce it: closedTime is written at the moment of resolution (circular) and endDate is a scheduled buffer most markets beat. Measured from the first onchain outcome proposal, the within 2 hours share is in the table above and has been materially below 93 percent since this benchmark started.
What happens when a Polymarket market is disputed?
A dispute on UMA's optimistic oracle resets the question and routes it through UMA token holder voting, replacing the normal verification window with a voting period measured in days. The disputed label separates those markets so clean path percentiles stay honest.
Why is my Polymarket market still unresolved?
Three common reasons: the underlying event has not concluded despite the scheduled end date; no one has submitted a proposal yet (the clock only starts at first proposal); or the market is in a UMA dispute, which adds days. The pending backlog gauge counts all markets past their end date without onchain resolution.
Source code github.com/ChainBench/OpenChainBench/tree/main/harnesses/pm-resolution-delay