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.
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.
Only competitions that have this kind of data.
fixturesteam_statsxgoddsopening_oddsclosing_oddslineupsplayer_statsstandingsPart of the competition name, case-insensitive.
Which page to return, starting at 1. meta.total_pages tells you how many there are.
How many competitions per page, up to 200.
The competition's id.
The competition's name.
Country name. Can be null.
Country code. Can be null.
How many seasons have matches loaded.
One end of the loaded range, usually an early season but not always the oldest. Can be null.
That season's id.
That season's label, such as 14/15. Can be null.
The other end of the loaded range, usually a recent season but not always the newest. Can be null.
That season's id.
That season's label, such as 26/27. Can be null.
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.
A summary of the newest season. Can be null.
That season's id.
That season's label. Can be null.
complete, in_progress or not_loaded, judged from the matches loaded so far.
Matches already played that season.
All matches in that season, played or not.
Finished matches across every season.
The page you're on.
Results per page.
Matching competitions across all pages.
How many pages there are.
curl "https://api.soccer-data.co/v1/coverage/leagues" \ -H "X-Api-Key: $SOCCER_DATA_KEY"
const res = await fetch("https://api.soccer-data.co/v1/coverage/leagues", {
headers: { "X-Api-Key": process.env.SOCCER_DATA_KEY },
});
const { data } = await res.json();
import os, requests
res = requests.get(
"https://api.soccer-data.co/v1/coverage/leagues",
headers={"X-Api-Key": os.environ["SOCCER_DATA_KEY"]},
)
data = res.json()["data"]
$data = Http::withHeaders(['X-Api-Key' => env('SOCCER_DATA_KEY')])
->get('https://api.soccer-data.co/v1/coverage/leagues')
->json('data');
{
"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 /coverage/leagues
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.
- 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, one of fixtures, team_stats, xg, odds, opening_odds, closing_odds, lineups, player_stats, standings): Only competitions that have this kind of data.
- `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[].id` (string): The competition's id.
- `data[].name` (string): The competition's name.
- `data[].country` (string): Country name. Can be null.
- `data[].country_code` (string): Country code. Can be null.
- `data[].seasons.count` (integer): How many seasons have matches loaded.
- `data[].seasons.first` (object): One end of the loaded range, usually an early season but not always the oldest. Can be null.
- `data[].seasons.first.id` (string): That season's id.
- `data[].seasons.first.year` (string): That season's label, such as 14/15. Can be null.
- `data[].seasons.last` (object): The other end of the loaded range, usually a recent season but not always the newest. Can be null.
- `data[].seasons.last.id` (string): That season's id.
- `data[].seasons.last.year` (string): That season's label, such as 26/27. Can be null.
- `data[].data_types.{type}.available` (boolean): 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_season` (object): A summary of the newest season. Can be null.
- `data[].latest_season.id` (string): That season's id.
- `data[].latest_season.year` (string): That season's label. Can be null.
- `data[].latest_season.status` (string): complete, in_progress or not_loaded, judged from the matches loaded so far.
- `data[].latest_season.finished_events` (integer): Matches already played that season.
- `data[].latest_season.total_events` (integer): All matches in that season, played or not.
- `data[].total_finished_events` (integer): Finished matches across every season.
- `meta.page` (integer): The page you're on.
- `meta.per_page` (integer): Results per page.
- `meta.total` (integer): Matching competitions across all pages.
- `meta.total_pages` (integer): How many pages there are.
Example: curl "https://api.soccer-data.co/v1/coverage/leagues" -H "X-Api-Key: $SOCCER_DATA_KEY"