A Polymarket price is a live estimate of a probability, right up until it isn't. The Fed votes, the election gets called, the game ends - and the market has to turn that fact into a number every open position gets paid out against. Nobody at Polymarket flips that switch by hand: every market resolves through the same on-chain pipeline, whether the outcome is a coin flip or dead obvious the moment it happens. This blog has covered one resolution in the wild before; this post is the general mechanism, verified against Polymarket's own documentation and a market that resolved this month, as of 2026-09-25.
01The propose-and-challenge pipelineA bonded proposal, a 2-hour clock, and a fallback vote
Polymarket resolves markets with UMA's Optimistic Oracle - permissionless by design, so anyone can propose the winning outcome, not just Polymarket itself. A proposer picks the outcome and posts a bond, "typically $750 pUSD" per Polymarket's resolution docs. If nobody disputes it within a 2-hour challenge period, the proposal stands, the market resolves, and the proposer gets their bond back plus a reward. That is the entire mechanism for most markets: propose, wait two hours, done.
A dispute changes the shape of it. Disputing costs a matching counter-bond, and triggers a new proposal round; if that second proposal is also disputed, resolution escalates to UMA's DVM (Data Verification Mechanism), where UMA token holders vote on the correct outcome after a 24-48 hour debate window on UMA's Discord, with the vote itself taking roughly 48 hours. A disputed market therefore takes 4-6 days end to end against about 2 hours undisputed - and the bond design is what keeps the fast path honest: propose incorrectly, or before the event has actually concluded, and you lose the entire bond to whoever disputed you correctly. There is even a named outcome for a proposal that jumped the gun - "too early" - which pays the disputer exactly like a correct dispute would, and a rare "unknown/50-50" outcome for a genuinely ambiguous question, where every outcome token redeems for 50c instead of 0 or 100.
02A resolution nobody disputedEven an obvious outcome runs the same clock, per market
Polymarket's "Fed Decision in September?" event resolved this month on
the FOMC's 25bp hike, announced 2pm ET (18:00 UTC) September 16, 2026 - as
uncontested an outcome as exists, confirmed within minutes by the Fed's own
statement. Gamma's per-market data shows the pipeline ran anyway, and ran on
its own clock for each Yes/No question inside the event rather than once for
the event as a whole: the losing legs ("no change," both decrease
contracts, and the 50+ bps increase) all carry closedTime
2026-09-16 20:02:43 UTC - almost exactly the ~2-hour undisputed window the
docs describe, measured from the decision. The winning "increase 25 bps"
leg didn't close until 21:40:27 UTC, nearly two hours later still. Same
event, same real-world fact, five separate propose-and-resolve timers -
because on UMA each binary question is its own request, not a single switch
for the event.
RESOLUTION PATH DURATION
Propose (bond ~$750 pUSD) instant
Challenge period 2h
Debate period (if disputed) 24-48h
DVM token-holder vote (if any) ~48h
undisputed total ~2h · disputed total 4-6 days
03The listed end date is not a trading cutoff
The book stays open until the oracle actually finalizes
It is tempting to read a market's end date as when it stops trading -
it isn't. Gamma's endDate is the expected resolution time, not
a hard cutoff: acceptingOrders and closed only
flip once a resolution actually finalizes through the pipeline above, so a
market's book can keep trading, with real depth, well past the date printed
on the question. What actually governs the outcome is each market's
resolution rules - the source it resolves from, and how edge cases get
called - which can differ in ways the headline question doesn't hint at.
Polymarket can also publish an "Additional context" clarification after
trading starts if a genuine edge case needs spelling out, though it cannot
change what the question fundamentally asks. Reading those rules before you
trade, not just the title, is worth the ten seconds: press i on
any market page in polymarket-tui to open them.
A won position becomes a fixed $1 token, not a tick to sell into
Once a market's closed flag flips true, its
outcomePrices freeze at ["1", "0"] and the CLOB
book empties - a winning share stops being something you sell at a
fluctuating price and becomes a token redeemable for a fixed amount.
Redemption itself happens through the CTF collateral adapter on Polygon: it
burns your ERC1155 outcome tokens through the CTF contract, releases the
USDC.e collateral behind them, wraps it into pUSD, and returns it to your
wallet - 100 winning tokens redeem for $100 pUSD, always, regardless of
where the market last traded.
polymarket-tui doesn't perform that on-chain call itself - deposits,
withdrawals, and redemption are on-chain operations the app leaves to the
website. What it does do is track data-api's redeemable flag on
every position, and flag a winner everywhere it shows up rather than let it
look like a stale price:
POSITIONS
No change (Fed decision, Sept 2026) won - redeem on web
The order panel carries the same warning if you try to sell a won
position back into whatever book remains: "won - redeems at 100c on the
web; selling here takes the bid" - a reminder that redemption always pays
the full dollar, while a resting bid, if one still exists, might not.
redeemable alone doesn't mean you won, either: data-api keeps returning
losing shares as redeemable too, until you redeem them for nothing, and a
genuine 50/50 resolution prices at 50c and still pays out - so the app
checks redeemable together with price above 50c before it
calls a position a win. Pressing o on a won position opens it
on polymarket.com, where the actual redemption happens.
$ uv tool install polymarket-tui
$ polymarket-tui
No account is needed to browse markets, order books, and resolution rules. The install page has Homebrew and one-liner options.