---
title: "How well the football models track one club"
method: GET
path: "/v1/clubs/football/{club}/prediction-performance"
tags: ["clubs"]
---

# How well the football models track one club

`GET /v1/clubs/football/{club}/prediction-performance`

## Request

- Base URL: `https://api.predixsport.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.predixsport.com/v1/clubs/football/{club}/prediction-performance`
- Auth: none declared

Per-club reconciliation of our as-published match predictions against realized results, across all 12 covered leagues. `club` accepts the stored short name ("Man United"), the display name ("Manchester United") or the slug ("manchester-united"). Returns the club's predictability (multiclass Brier score of the 1X2 probabilities vs the league average, with an 'on_script'/'in_line'/'chaos' tier), per-market accuracy (match result, under/over 2.5, both-teams-to-score) next to the league baseline, and the most recent reconciled matches with the pre-match probabilities. `source` distinguishes the frozen as-published record ('production') from a league's first covered season reconstructed at launch ('backtest'). `season_is_current` is False when an earlier season is served — explicitly requested, or because the current one has no or too few reconciled matches yet (early season). Per-club accuracies and the tier need 15 reconciled matches and are null below that. Typical use: judge how much to trust today's prediction for a club by checking how the model has tracked it this season.

## Path parameters

- `club` string, required

## Query parameters

- `season` string, nullable: Season key, e.g. 2025_2026. Omitted = the club's latest covered season.
- `last` integer: How many recent reconciled matches to return

## Headers

- `authorization` string, nullable

## Response `200`

Successful Response

- FootballClubPerformanceResponse
  - `club` string, required: Stored club name — the join key across the API
  - `display_name` string, required
  - `slug` string, required
  - `league` string, required: Customer-facing league code, e.g. 'serie_a'
  - `league_name` string, required
  - `season` string, required: Season key, e.g. '2025_2026'
  - `season_label` string, required
  - `season_is_current` boolean, required: True when `season` is the latest covered season. False means the numbers belong to an earlier season — either because you asked for one, or because the current season has no or too few reconciled matches yet (early season, five-matchday warm-up) and the club's previous full record is served instead. Do not present a False payload as the club's current-season form.
  - `source` string, required: 'production' = predictions as originally published before each match (frozen record); 'backtest' = a league's first covered season, reconstructed at launch
  - `matches` integer, required: Reconciled matches behind the numbers
  - `predictability` ClubPredictability, required
    - `brier` number, nullable: Mean multiclass Brier score of our as-published 1X2 probabilities over the club's reconciled matches. Lower = the club's results were easier to call.
    - `league_brier` number, nullable: Same average over every reconciled match in the league
    - `delta_pct` number, nullable: How much easier (+) or harder (-) the club was to call than its league average, as a percentage of the league Brier.
    - `tier` string, nullable: 'on_script' (clearly easier than the league), 'in_line', or 'chaos' (clearly harder). Null below 15 reconciled matches.
  - `markets` ClubMarketAccuracy[], required
    - `market` string, required: 'match_result' (1X2), 'under_over_2_5' or 'btts'
    - `club_accuracy` number, nullable: % of the club's matches the as-published prediction called correctly
    - `league_accuracy` number, nullable: League-wide % over the same season and source
  - `recent_matches` ClubRecentMatch[], required: Most recent reconciled matches first
    - `match_id` string, required: Prediction file_name — join key across the API
    - `date` string, nullable
    - `opponent` string, required
    - `is_home` boolean, required
    - `club_win_probability` number, nullable: As-published win probability for THIS club (%)
    - `draw_probability` number, nullable
    - `predicted` string, nullable: Predicted outcome from the club's perspective: W / D / L
    - `result` string, required: Realized outcome from the club's perspective
    - `prediction_correct` boolean, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/predixsport/apis/predixsport-api.md) · [All operations](https://skmtc.dev/predixsport/apis/predixsport-api/llms.txt) · [OpenAPI document](https://skmtc.dev/predixsport/apis/predixsport-api/revisions/02014aee733d?raw)
