---
title: "Upcoming Champions League matches with predictions"
method: GET
path: "/v1/predictions/champions/upcoming"
tags: ["predictions"]
---

# Upcoming Champions League matches with predictions

`GET /v1/predictions/champions/upcoming`

## 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/predictions/champions/upcoming`
- Auth: none declared

Upcoming UEFA Champions League matches inside the window ``[today, today + days]``, with 1X2 probabilities. **Scope: the tournament only** — the Swiss league phase, the knockout play-off and the round of 16 onwards. The July/August qualifying rounds are ingested and drive the European Elo ladder, but they are not predicted: the model's validated slice is the tournament, and a qualifying tie is dominated by clubs the ladder has seen a handful of times. **An empty list is the normal answer between late May and the league-phase draw in late August** — there is no eligible fixture in existence then, so render it as "no fixtures yet", not as an outage. Only 1X2 is published: totals, both-teams-score, Asian handicaps and exact score were all measured on this model's frozen protocol and held back. `expected_goals_*` are the model's own Poisson rates, published as context and never as a totals line.

## Query parameters

- `limit` integer
- `days` integer: Look-ahead horizon in days. Defines the upper bound of the inclusive window ``[today, today + days]``. Default 7, max 60. The pipeline publishes on a 7-day horizon, so a larger value widens the read, not the pipeline.

## Headers

- `authorization` string, nullable

## Response `200`

Successful Response

- ChampionsUpcomingResponse
  - `matches` ChampionsUpcomingMatch[], required
    - `match_id` string, required: Stable public id, e.g. `2026-09-16_arsenal_vs_bayern-munchen`. Use it as-is on `/v1/predictions/champions/{match_id}`.
    - `sport` 'champions'
    - `competition` string: UEFA competition code. `ucl` is the only one served.
    - `season` string, required: UEFA seasonYear, the season ENDING year: `2027` is the 2026-27 campaign.
    - `season_label` string, required: Readable form, e.g. "2026-27".
    - `match_date` string, date, required
    - `kickoff_utc` string, date-time, nullable: Scheduled kick-off in UTC.
    - `stage` string, nullable: UEFA stage code: GROUP_STANDINGS (league phase), FINAL_TOURNAMENT_PLAY_OFF (knockout play-off), ROUND_OF_16, QUARTER_FINALS, SEMIFINAL, FINAL.
    - `home_team` string, required
    - `away_team` string, required
    - `neutral_venue` boolean: True for the final, which is played at a venue assigned years in advance. The model switches its home-advantage term off on these matches, so home/away are administrative labels there.
    - `probability_home_win` number, nullable
    - `probability_draw` number, nullable
    - `probability_away_win` number, nullable
    - `predicted_result` string, nullable: Argmax of the triple: H, D or A.
    - `expected_goals_home` number, nullable: Model goal rate. Context, not a totals market.
    - `expected_goals_away` number, nullable: Model goal rate. Context, not a totals market.
    - `published_at` string, date-time, nullable: When this match's prediction was FIRST published. Predictions are re-scored daily until kick-off and then frozen; this timestamp does not move, so it is the publication lead against `kickoff_utc`.
  - `count` integer, required

## 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)
