# Football Stats API for Fixtures and Results

Query football fixtures, results, match and player statistics, lineups, timelines, standings and squads through a stable JSON REST API with explicit coverage and freshness.

Canonical URL: https://stats-api.com/football-api

Football stats API

Query football fixtures, results, competitions, seasons, teams and match statistics — corners, shots, possession, cards and expected goals — through a stable JSON REST API. Every dataset and unavailable capability is described before you integrate.

[Start building →](https://stats-api.com/auth?mode=signup) [Explore endpoints](https://stats-api.com/docs)

What we cover

Ten categories, each stating its own availability. Expand any one for the exact endpoints.

- **Fixtures & results Available**

  Scheduled fixtures and full-time results for observed matches; coverage varies by competition and season. Each match says which details are stored.
  - `GET /football/matches`
  - `GET /football/matches/{match_id}`
- **Match statistics Available**

  Corners, shots on and off target, blocked shots, possession, fouls, cards, saves, passes and expected goals, per team.
  - `GET /football/matches/{match_id}/stats`
  - `GET /football/matches/{match_id}/live-stats`
- **Lineups & formations Available**

  Confirmed starting eleven, bench, formation and coach for each side.
  - `GET /football/matches/{match_id}/lineups`
- **Timeline & events Available**

  Ordered goals, cards, substitutions and VAR decisions, each with a sequence number, with the in-play twin cached briefly.
  - `GET /football/matches/{match_id}/timeline`
  - `GET /football/matches/{match_id}/live-timeline`
- **Player match statistics Available**

  Minutes, rating, started and played flags, and a canonical, provider-neutral per-player statistic set.
  - `GET /football/matches/{match_id}/player-stats`
- **Standings & tables Available**

  Ranked season tables with points, goal difference, form and qualification notes.
  - `GET /football/competitions/{competition_id}/seasons/{season_id}/standings`
  - `GET /football/teams/{team_id}/standings`
- **Players & squads Available**

  Player directory with search, plus current squads by shirt number and position.
  - `GET /football/players`
  - `GET /football/players/{player_id}`
  - `GET /football/teams/{team_id}/players`
- **Injuries & suspensions Partial coverage**

  Reported absences. Source coverage for this dataset is genuinely sparse — most competitions report none — so every response states whether an empty list means none reported or not covered.
  - `GET /football/teams/{team_id}/injuries-suspensions`
  - `GET /football/players/{player_id}/injuries-suspensions`
- **Odds Partial coverage**

  Locally collected prematch, live and supported prematch player markets, with explicit timestamps, suspension and stale states. Bookmaker and market coverage varies.
  - `GET /football/matches/{match_id}/odds`
  - `GET /football/matches/{match_id}/odds/live`
  - `GET /football/matches/{match_id}/odds/players`
- **Shotmaps & heatmaps Not available**

  Per-shot and per-player pitch coordinates. No source available to us supplies them, so these will not ship on the current data agreement. Stated here rather than left on a roadmap.
  - `GET /football/matches/{match_id}/shotmap`

Why Stats API

## Football data your product can query without guessing.

Stats API turns enabled sources into normalized competition, season, team, fixture, result, statistic, lineup, timeline, standing, and player resources. Search by a human name once, retain the stable Stats API IDs, and use those IDs in later filters and joins.

Statistics, lineups, timelines, standings, squads and injuries have explicit coverage or observation fields. Team and player season summaries preserve missing values and transfer splits. Odds responses include source and observation times plus availability and expiry. Heat maps and shot maps remain unavailable.

**01**

### Stable resource IDs

Competition, season, team, and match IDs stay inside the public contract instead of exposing source-specific identifiers.

**02**

### Fixture and result filters

Query matches by competition, season, team, status, or an inclusive UTC date window.

**03**

### Match and player statistics

Team match statistics with nullable expected goals, plus separate per-player appearance statistics.

**04**

### Coverage in the payload

Match statistics report coverage; season summaries report available and support_status. Read the documented timing fields where present.

**05**

### Inspectable JSON contract

OpenAPI 3.1, predictable errors, pagination, UTC timestamps, and copy-ready requests make integration behavior visible.

Current football data coverage

## Supported resources, with the gaps left visible.

Use the public contract and the availability fields of the requested resource. Match statistics have coverage flags; season summaries distinguish missing and explicitly empty observations. Timing fields describe stored observations and do not establish complete or current coverage.

**Available now**

32 of 35 endpoints

Competitions and seasons **✓** Search enabled competitions and list their seasons with stable IDs.

Teams and squads **✓** Normalised teams, rosters, and player records keyed by durable identifiers.

Fixtures and results **✓** Filter match records by competition, season, team, status, or date.

Match statistics **✓** Corners, possession, shots, cards and nullable expected goals per team, plus documented player appearance statistics.

Lineups and timelines **✓** Formations, starters, benches, and minute-stamped goals, cards and substitutions.

Standings and availability **✓** League tables, named season groups, referee assignments, injuries and suspensions.

Season statistics **✓** Provider season summaries with separate team rows after player transfers and null unknown fields.

Odds observations **✓** Prematch, live and supported prematch player markets with explicit availability and expiry.

Contract and provenance **✓** Pagination, UTC timestamps, errors, cache headers, and observed ingestion times.

**Not available today**

Requires another source

Predictions **—** No betting signals or model predictions.

Uniform odds coverage **—** Named bookmakers and player markets vary; live prices are unattributed.

Heat maps and shot maps **—** Positional and spatial data is not published.

Sub-minute streaming **—** In-play endpoints are polled on a schedule, not pushed. Read the observed time.

Football stats API example

## Discover stable IDs, then filter the match collection.

Search by a human competition name once. Store the returned Stats API ID, pass it to the matches endpoint, and paginate using the documented response metadata.

[Read the match endpoint guide →](https://stats-api.com/docs/endpoints/matches)

1 · Find a competition ID

```bash
curl --silent --show-error \
  "https://stats-api.com/api/v1/football/competitions?q=Premier%20League" \
  -H "Authorization: Bearer ${STATS_API_KEY}" \
  -H "Accept: application/json"
```

2 · Fetch its completed matches

```bash
curl --silent --show-error \
  "https://stats-api.com/api/v1/football/matches?competition_id=${COMPETITION_ID}&status=finished" \
  -H "Authorization: Bearer ${STATS_API_KEY}" \
  -H "Accept: application/json"
```

Competition APIs

## Start with a league *we actually cover.*

Each page documents one enabled historical beta dataset, its exact season and record scope, copy-ready discovery calls, and the fields that still require a licensed provider.

England

### [Premier League API](https://stats-api.com/football-api/premier-league)

2025/26 · 20 teams · 380 matches

Spain

### [La Liga API](https://stats-api.com/football-api/la-liga)

2025/26 · 20 teams · 380 matches

Germany

### [Bundesliga API](https://stats-api.com/football-api/bundesliga)

2025/26 · 18 teams · 306 matches

Italy

### [Serie A API](https://stats-api.com/football-api/serie-a)

2025/26 · 20 teams · 380 matches

France

### [Ligue 1 API](https://stats-api.com/football-api/ligue-1)

2025/26 · 18 teams · 306 matches

International

### [World Cup API](https://stats-api.com/football-api/world-cup)

2026 · 48 teams · 104 matches

Plan the integration

## Verify the contract before you build.

Use the endpoint reference, current coverage ledger, and an engineering-reviewed guide to make supported fields and durable identifiers explicit.

Endpoint reference

### [Match endpoint guide](https://stats-api.com/docs/endpoints/matches)

Review every supported match filter, status, response field, and error.

Availability

### [Current data coverage](https://stats-api.com/coverage)

Check enabled datasets, observed ingestion times, and freshness boundaries.

Engineering guide

### [Why stable football IDs matter](https://stats-api.com/blog/stable-football-ids-provider-replacement)

See how a public ID layer protects applications during source replacement.

Build with football data

## One key. One contract. A clearer path to production.

[View pricing →](https://stats-api.com/pricing)

---

Markdown version of https://stats-api.com/football-api. Site index: https://stats-api.com/llms.txt · Full documentation and OpenAPI contract: https://stats-api.com/llms-full.txt · AI usage policy: https://stats-api.com/ai.txt
