Skip to content

Resolution

GET /api/resolution/outcome?market=<id>
public · { marketId, outcome: null | { outcome, resolver, source, proofUrl, resolvedAt,
disputed, disputeReason, disputedAt } }
(also on /api/network/market/[id] as market.resolution)
GET /api/resolution/markets?status=open&due=1
public · denpa- markets; due=1 = open + cutoff passed
POST /api/resolution/finalize
admin · { marketId (denpa- only), verdict: YES|NO|INVALID, reason?, finalizedBy?,
resolver?: admin|oracle|manual, source?, proofUrl? }
POST /api/resolution/dispute
admin · { marketId, disputed?: true, reason? }
a disputed market scores nothing further until cleared; existing scores stand
POST /api/admin/resolve-signals
admin · no body = venue auto-scan; { marketId, outcome } = force-resolve (resolver: "admin")

Every resolver path scores through one choke point that claims the outcome once. Resolution updates every signal on the market, triggers scoring (stamped scoring_version + scoring_vertical), and produces the receipt-like record shown on the surface.