Resolution
Outcome { outcome: YES | NO | VOID | PENDING resolver: provider | admin | oracle | manual | api resolvedAt, proof (source URL), disputed, disputeReason}Every resolver path — venue auto-scan, admin force-resolve, /finalize, the oracle poller — scores through one choke point that claims the market’s outcome once, with provenance. The claim is the canonical record.
Resolution MUST
Section titled “Resolution MUST”- update the status of every signal on that market;
- trigger scoring, stamping
scoring_versionandscoring_verticalon every resolved signal; - produce a receipt-like record visible on the surface.
Endpoints
Section titled “Endpoints”GET /api/resolution/outcome?market=<id> public · the claim, or nullGET /api/resolution/markets?status=open&due=1 public · denpa- markets past cutoffPOST /api/resolution/finalize admin · { marketId, verdict: YES|NO|INVALID, resolver?, source?, proofUrl? }POST /api/resolution/dispute admin · { marketId, disputed?, reason? }A disputed market scores nothing further until cleared; existing scores stand. The outcome also rides on /api/network/market/[id] as market.resolution.
Provider notes
Section titled “Provider notes”Polymarket resolutions are detected from Gamma (resolved, outcomePrices). Weekly sports markets (EPL) auto-resolve. Kalshi and manual markets resolve through the same claim.