Building with AI? Give your coding tool the whole reference in one file: https://soccer-data.co/llms.txt
SOCCER DATA Docs
Sign in Get API key
// Coverage

Data coverage per competition

Shows, for each competition, which kinds of data it has, which seasons are loaded and how many finished matches there are. Check it before you build a feature on a competition, or filter by data type to find every competition that has xG or lineups.

GET https://api.soccer-data.co/v1/coverage/leagues
  • Match counts only include finished matches.
  • seasons.first and seasons.last are not guaranteed to be the oldest and newest seasons. For the full season list, use /coverage/leagues/{competition_id}.
  • odds is an older name for closing_odds, kept so existing code keeps working. opening_odds is what fills the opening price on the match odds endpoint; closing_odds fills last_seen.
  • New data type keys can appear over time. Skip any you don't recognise.
  • Coverage changes slowly, so there's no need to call this often.
Query parameters
data_type string

Only competitions that have this kind of data.

fixturesteam_statsxgoddsopening_oddsclosing_oddslineupsplayer_statsstandings
search string

Part of the competition name, case-insensitive.

page integer default 1

Which page to return, starting at 1. meta.total_pages tells you how many there are.

per_page integer default 100

How many competitions per page, up to 200.

Response fields
data[].idstring

The competition's id.

data[].namestring

The competition's name.

data[].countrystring

Country name. Can be null.

data[].country_codestring

Country code. Can be null.

data[].seasons.countinteger

How many seasons have matches loaded.

data[].seasons.firstobject

One end of the loaded range, usually an early season but not always the oldest. Can be null.

data[].seasons.first.idstring

That season's id.

data[].seasons.first.yearstring

That season's label, such as 14/15. Can be null.

data[].seasons.lastobject

The other end of the loaded range, usually a recent season but not always the newest. Can be null.

data[].seasons.last.idstring

That season's id.

data[].seasons.last.yearstring

That season's label, such as 26/27. Can be null.

data[].data_types.{type}.availableboolean

Whether the competition has this kind of data. There is one key per type: fixtures, team_stats, xg, odds, opening_odds, closing_odds, lineups, player_stats and standings.

data[].latest_seasonobject

A summary of the newest season. Can be null.

data[].latest_season.idstring

That season's id.

data[].latest_season.yearstring

That season's label. Can be null.

data[].latest_season.statusstring

complete, in_progress or not_loaded, judged from the matches loaded so far.

data[].latest_season.finished_eventsinteger

Matches already played that season.

data[].latest_season.total_eventsinteger

All matches in that season, played or not.

data[].total_finished_eventsinteger

Finished matches across every season.

meta.pageinteger

The page you're on.

meta.per_pageinteger

Results per page.

meta.totalinteger

Matching competitions across all pages.

meta.total_pagesinteger

How many pages there are.

curl "https://api.soccer-data.co/v1/coverage/leagues" \
  -H "X-Api-Key: $SOCCER_DATA_KEY"
200 · Example response
{
    "data": [
        {
            "id": "competition_705uv6jm8myn",
            "name": "Premier League",
            "country": "England",
            "country_code": "GB",
            "seasons": {
                "count": 13,
                "first": {
                    "id": "season_yf8xfclqrgom",
                    "year": "14/15"
                },
                "last": {
                    "id": "season_hr1ie7yrsdmt",
                    "year": "26/27"
                }
            },
            "data_types": {
                "fixtures": {
                    "available": true
                },
                "team_stats": {
                    "available": true
                },
                "xg": {
                    "available": true
                },
                "odds": {
                    "available": true
                },
                "opening_odds": {
                    "available": true
                },
                "closing_odds": {
                    "available": true
                },
                "lineups": {
                    "available": true
                },
                "player_stats": {
                    "available": true
                },
                "standings": {
                    "available": true
                }
            },
            "latest_season": {
                "id": "season_hr1ie7yrsdmt",
                "year": "26/27",
                "status": "in_progress",
                "finished_events": 50,
                "total_events": 380
            },
            "total_finished_events": 4610
        }
    ],
    "meta": {
        "page": 1,
        "per_page": 100,
        "total": 204,
        "total_pages": 3
    }
}
Get a free key to try it