GET

/api/public/performance

Retrospective Quotient forecast performance context

Free, refreshable context derived from q-trade-analysis/forecast_performance.py. Every summary carries a basis: resolved counts markets explicitly flagged closed/resolved plus markets whose end date has passed (report's UTC day or earlier) at terminal odds; projected additionally counts every terminal-odds market (YES odds strictly below 1% or above 99%) regardless of end date, scored as the price points — a projected view. reporting leads with the last-60-day geopolitics/global-elections resolved cohort because those are Quotient's most consistently forecasted categories (primaryProjected is its projected counterpart), then includes the unfiltered full book and the same two cohorts all time; every cohort carries two per-market sampling views on both bases — mean_per_market (the primary; each market votes once) and its one_random_per_market robustness check — and every summary pairs its Brier comparison with winning-side directional accuracy (qAccuracy, marketAccuracy). accuracy remains the complete flat array. It also reports calibration bins and hypothetical seven-day/resolution returns per basis.

Auth none (free)

Parameters

None.

Responses

200: Thirty-minute-cached forecast performance snapshot
FieldTypeDescription
version
required
4
calculationVersion
required
string
generatedAt
required
string

Format: date-time

refreshTtlHours
required
number

Minimum: 0

methodology
required
objectMachine-readable definitions for the resolved and projected bases, outcome mapping, Brier comparison, benchmark, hypothetical returns, scopes, periods, and sampling methods.
population
required
object[]
population fields
FieldTypeDescription
scope"all_markets" | "geopolitics_global_elections"
forecastsintegerFull terminal-odds population — everything the projected basis scores.

Minimum: 0

marketsinteger

Minimum: 0

resolvedForecastsinteger

Minimum: 0

resolvedMarketsinteger

Minimum: 0

firstForecastAtstring | null

Format: date-time

lastForecastAtstring | null

Format: date-time

reporting
required
objectCanonical reporting hierarchy. Read primary for the headline resolved-basis score and primaryProjected for its projected counterpart, then periods in returned order for the requested with/without-category-filter comparison and sampling breakdowns.
reporting fields
FieldTypeDescription
context
required
string
primary
required
PerformanceScoreSummary
primary fields
FieldTypeDescription
scope
required
"all_markets" | "geopolitics_global_elections"
period
required
"all_time" | "last_60_days"
sample
required
"mean_per_market" | "one_random_per_market"Both views weight each market once. mean_per_market (the primary) scores a market on the mean Brier of every eligible forecast on it — its forecasts field stays the underlying forecast count while markets is the observation count. one_random_per_market is the reproducibly sampled robustness check.
basis
required
"resolved" | "projected"resolved = explicitly flagged closed/resolved, or ended (end date on/before the report's UTC day) with terminal odds. projected = every terminal-odds market, still-open ones included, scored as the price points.
qBrier
required
number | null
marketBrier
required
number | null
qAdvantage
required
number | nullmarketBrier minus qBrier; positive favors Quotient.
actualYesRate
required
number | null
qAccuracy
required
number | nullShare of observations where the resolved outcome matches the side favored by Quotient's probability. Exactly 50% counts as incorrect. Compare qAccuracy with marketAccuracy and the Brier scores; directional accuracy does not measure probability calibration.
marketAccuracy
required
number | nullSame winning-side rule applied to the market-at-forecast price.
forecasts
required
integer

Minimum: 0

markets
required
integer

Minimum: 0

primaryProjected
required
PerformanceScoreSummary
primaryProjected fields
FieldTypeDescription
scope
required
"all_markets" | "geopolitics_global_elections"
period
required
"all_time" | "last_60_days"
sample
required
"mean_per_market" | "one_random_per_market"Both views weight each market once. mean_per_market (the primary) scores a market on the mean Brier of every eligible forecast on it — its forecasts field stays the underlying forecast count while markets is the observation count. one_random_per_market is the reproducibly sampled robustness check.
basis
required
"resolved" | "projected"resolved = explicitly flagged closed/resolved, or ended (end date on/before the report's UTC day) with terminal odds. projected = every terminal-odds market, still-open ones included, scored as the price points.
qBrier
required
number | null
marketBrier
required
number | null
qAdvantage
required
number | nullmarketBrier minus qBrier; positive favors Quotient.
actualYesRate
required
number | null
qAccuracy
required
number | nullShare of observations where the resolved outcome matches the side favored by Quotient's probability. Exactly 50% counts as incorrect. Compare qAccuracy with marketAccuracy and the Brier scores; directional accuracy does not measure probability calibration.
marketAccuracy
required
number | nullSame winning-side rule applied to the market-at-forecast price.
forecasts
required
integer

Minimum: 0

markets
required
integer

Minimum: 0

periods
required
object[]

Minimum items: 2; Maximum items: 2

periods fields
FieldTypeDescription
period
required
"last_60_days" | "all_time"
label
required
string
context
required
string
cohorts
required
object[]Geopolitics/global elections first as the consistent core cohort, then all markets without that category filter.

Minimum items: 2; Maximum items: 2

cohorts fields
FieldTypeDescription
scope
required
"geopolitics_global_elections" | "all_markets"
label
required
string
context
required
string
samples
required
PerformanceScoreSummary[]Resolved-basis per-market views: mean per market (primary), then one random per market.

Minimum items: 2; Maximum items: 2

samples fields
FieldTypeDescription
scope
required
"all_markets" | "geopolitics_global_elections"
period
required
"all_time" | "last_60_days"
sample
required
"mean_per_market" | "one_random_per_market"Both views weight each market once. mean_per_market (the primary) scores a market on the mean Brier of every eligible forecast on it — its forecasts field stays the underlying forecast count while markets is the observation count. one_random_per_market is the reproducibly sampled robustness check.
basis
required
"resolved" | "projected"resolved = explicitly flagged closed/resolved, or ended (end date on/before the report's UTC day) with terminal odds. projected = every terminal-odds market, still-open ones included, scored as the price points.
qBrier
required
number | null
marketBrier
required
number | null
qAdvantage
required
number | nullmarketBrier minus qBrier; positive favors Quotient.
actualYesRate
required
number | null
qAccuracy
required
number | nullShare of observations where the resolved outcome matches the side favored by Quotient's probability. Exactly 50% counts as incorrect. Compare qAccuracy with marketAccuracy and the Brier scores; directional accuracy does not measure probability calibration.
marketAccuracy
required
number | nullSame winning-side rule applied to the market-at-forecast price.
forecasts
required
integer

Minimum: 0

markets
required
integer

Minimum: 0

projected
required
PerformanceScoreSummary[]The same sampling views on the projected basis (every terminal-odds market, still-open ones included).

Minimum items: 2; Maximum items: 2

projected fields
FieldTypeDescription
scope
required
"all_markets" | "geopolitics_global_elections"
period
required
"all_time" | "last_60_days"
sample
required
"mean_per_market" | "one_random_per_market"Both views weight each market once. mean_per_market (the primary) scores a market on the mean Brier of every eligible forecast on it — its forecasts field stays the underlying forecast count while markets is the observation count. one_random_per_market is the reproducibly sampled robustness check.
basis
required
"resolved" | "projected"resolved = explicitly flagged closed/resolved, or ended (end date on/before the report's UTC day) with terminal odds. projected = every terminal-odds market, still-open ones included, scored as the price points.
qBrier
required
number | null
marketBrier
required
number | null
qAdvantage
required
number | nullmarketBrier minus qBrier; positive favors Quotient.
actualYesRate
required
number | null
qAccuracy
required
number | nullShare of observations where the resolved outcome matches the side favored by Quotient's probability. Exactly 50% counts as incorrect. Compare qAccuracy with marketAccuracy and the Brier scores; directional accuracy does not measure probability calibration.
marketAccuracy
required
number | nullSame winning-side rule applied to the market-at-forecast price.
forecasts
required
integer

Minimum: 0

markets
required
integer

Minimum: 0

accuracy
required
PerformanceScoreSummary[]Complete flat Brier comparisons for every basis × scope × period × sampling method. Prefer reporting for presentation order and context.
accuracy fields
FieldTypeDescription
scope
required
"all_markets" | "geopolitics_global_elections"
period
required
"all_time" | "last_60_days"
sample
required
"mean_per_market" | "one_random_per_market"Both views weight each market once. mean_per_market (the primary) scores a market on the mean Brier of every eligible forecast on it — its forecasts field stays the underlying forecast count while markets is the observation count. one_random_per_market is the reproducibly sampled robustness check.
basis
required
"resolved" | "projected"resolved = explicitly flagged closed/resolved, or ended (end date on/before the report's UTC day) with terminal odds. projected = every terminal-odds market, still-open ones included, scored as the price points.
qBrier
required
number | null
marketBrier
required
number | null
qAdvantage
required
number | nullmarketBrier minus qBrier; positive favors Quotient.
actualYesRate
required
number | null
qAccuracy
required
number | nullShare of observations where the resolved outcome matches the side favored by Quotient's probability. Exactly 50% counts as incorrect. Compare qAccuracy with marketAccuracy and the Brier scores; directional accuracy does not measure probability calibration.
marketAccuracy
required
number | nullSame winning-side rule applied to the market-at-forecast price.
forecasts
required
integer

Minimum: 0

markets
required
integer

Minimum: 0

calibration
required
object[]Ten-point probability-bin calibration context for Quotient and the market-at-forecast benchmark, per basis.
hypotheticalReturns
required
object[]Uncosted hypothetical returns for buying the side Quotient considered underpriced at 5, 10, and 15 percentage-point disagreement thresholds, per basis; projected rows presume the outcome the market price points to.
hypotheticalReturns fields
FieldTypeDescription
scopestring
periodstring
basis"resolved" | "projected"
minimumSpreadPpnumber
horizon"seven_days" | "resolution"
side"all" | "YES" | "NO"
meanReturnPctnumber | null
medianReturnPctnumber | null
positiveSharenumber | null
forecastsinteger

Minimum: 0

marketsinteger

Minimum: 0

caveats
required
string[]
503: Performance snapshot temporarily unavailable
FieldTypeDescription
error
required
stringError code
message
required
stringHuman-readable message
retry_afterintegerSeconds to wait (only on 429)
retryAfterintegerSeconds to wait for owner-scoped forecast-request quota errors.
limit_scopestringQuota scope that rejected the request, such as standard or x_research.
quotaScopestringStable forecast-request quota scope, such as venue_market_daily.
limitintegerConfigured bound for the forecast-request quota that was exceeded.

Set QUOTIENT_API_KEY in your shell and replace example identifiers with returned IDs before running a request.

curl
curl --request GET \
  'https://quotient-api-gateway.onrender.com/api/public/performance'
200 · application/json
{
  "version": 4,
  "calculationVersion": "example",
  "generatedAt": "2027-01-01T00:00:00Z",
  "refreshTtlHours": 0,
  "methodology": {},
  "population": [
    {
      "scope": "all_markets",
      "forecasts": 0,
      "markets": 0,
      "resolvedForecasts": 0,
      "resolvedMarkets": 0,
      "firstForecastAt": null,
      "lastForecastAt": null
    }
  ],
  "reporting": {
    "context": "example",
    "primary": {
      "scope": "all_markets",
      "period": "all_time",
      "sample": "mean_per_market",
      "basis": "resolved",
      "qBrier": null,
      "marketBrier": null,
      "qAdvantage": null,
      "actualYesRate": null,
      "qAccuracy": null,
      "marketAccuracy": null,
      "forecasts": 0,
      "markets": 0
    },
    "primaryProjected": {
      "scope": "all_markets",
      "period": "all_time",
      "sample": "mean_per_market",
      "basis": "resolved",
      "qBrier": null,
      "marketBrier": null,
      "qAdvantage": null,
      "actualYesRate": null,
      "qAccuracy": null,
      "marketAccuracy": null,
      "forecasts": 0,
      "markets": 0
    },
    "periods": [
      {
        "period": "last_60_days",
        "label": "example",
        "context": "example",
        "cohorts": [
          {
            "scope": "geopolitics_global_elections",
            "label": "example",
            "context": "example",
            "samples": [
              null
            ],
            "projected": [
              null
            ]
          }
        ]
      }
    ]
  },
  "accuracy": [
    {
      "scope": "all_markets",
      "period": "all_time",
      "sample": "mean_per_market",
      "basis": "resolved",
      "qBrier": null,
      "marketBrier": null,
      "qAdvantage": null,
      "actualYesRate": null,
      "qAccuracy": null,
      "marketAccuracy": null,
      "forecasts": 0,
      "markets": 0
    }
  ],
  "calibration": [
    {}
  ],
  "hypotheticalReturns": [
    {
      "scope": "example",
      "period": "example",
      "basis": "resolved",
      "minimumSpreadPp": 0,
      "horizon": "seven_days",
      "side": "all",
      "meanReturnPct": null,
      "medianReturnPct": null,
      "positiveShare": null,
      "forecasts": 0,
      "markets": 0
    }
  ],
  "caveats": [
    "example"
  ]
}