League table
Returns the table for one season of a competition: one row per team, ordered by position. For tournaments with a group stage you get every group's table, or a single one with the group filter.
https://api.soccer-data.co/v1/competitions/{competition_id}/seasons/{season_id}/standings
Live
- Group-stage tournaments return all groups, sorted by group_label and then position.
- Knockout-only cups, such as the FA Cup, have no table and return an empty list.
- A season_id that belongs to a different competition returns 400 SEASON_COMPETITION_MISMATCH.
- The table can move while matches are in play. On the Free plan it is normally at most 5 minutes old; on paid plans, at most 15 seconds. If a fresh answer can't be fetched, you may get an older copy marked X-Cache: STALE instead: see When an answer is stale.
The competition's id, like competition_…. Find one with the ID guide.
The season's id, like season_…. Find one with the ID guide.
Return just this group's table, case-insensitive. Only meaningful for competitions with a group stage; a plain league gives an empty list.
ABCDEFGHIJKLThe team's id.
The team's name.
Place in the league or group, starting at 1. Null when not set yet, for example in group rows before a tournament begins.
Matches played.
Matches won.
Matches drawn.
Matches lost.
Goals scored.
Goals conceded.
goals_for minus goals_against.
Points earned.
The group letter, A to L, in group-stage tables. Null in an ordinary league table. You can pass it back as group.
curl "https://api.soccer-data.co/v1/competitions/competition_705uv6jm8myn/seasons/season_98l95mxugqs9/standings" \ -H "X-Api-Key: $SOCCER_DATA_KEY"
const res = await fetch("https://api.soccer-data.co/v1/competitions/competition_705uv6jm8myn/seasons/season_98l95mxugqs9/standings", {
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/competitions/competition_705uv6jm8myn/seasons/season_98l95mxugqs9/standings",
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/competitions/competition_705uv6jm8myn/seasons/season_98l95mxugqs9/standings')
->json('data');
{
"data": [
{
"team": {
"id": "team_f0ibhxdw7hs5",
"name": "Arsenal"
},
"position": 1,
"matches_played": 38,
"wins": 26,
"draws": 7,
"losses": 5,
"goals_for": 71,
"goals_against": 27,
"goal_difference": 44,
"points": 85,
"group_label": null
}
]
}
### GET /competitions/{competition_id}/seasons/{season_id}/standings
League table
Returns the table for one season of a competition: one row per team, ordered by position. For tournaments with a group stage you get every group's table, or a single one with the group filter.
- Group-stage tournaments return all groups, sorted by group_label and then position.
- Knockout-only cups, such as the FA Cup, have no table and return an empty list.
- A season_id that belongs to a different competition returns 400 SEASON_COMPETITION_MISMATCH.
- The table can move while matches are in play. On the Free plan it is normally at most 5 minutes old; on paid plans, at most 15 seconds. If a fresh answer can't be fetched, you may get an older copy marked X-Cache: STALE instead: see [When an answer is stale](/docs/concepts/rate-limits#when-an-answer-is-stale).
Query parameters:
- `group` (string, one of A, B, C, D, E, F, G, H, I, J, K, L): Return just this group's table, case-insensitive. Only meaningful for competitions with a group stage; a plain league gives an empty list.
Response fields:
- `data[].team.id` (string): The team's id.
- `data[].team.name` (string): The team's name.
- `data[].position` (integer): Place in the league or group, starting at 1. Null when not set yet, for example in group rows before a tournament begins.
- `data[].matches_played` (integer): Matches played.
- `data[].wins` (integer): Matches won.
- `data[].draws` (integer): Matches drawn.
- `data[].losses` (integer): Matches lost.
- `data[].goals_for` (integer): Goals scored.
- `data[].goals_against` (integer): Goals conceded.
- `data[].goal_difference` (integer): goals_for minus goals_against.
- `data[].points` (integer): Points earned.
- `data[].group_label` (string): The group letter, A to L, in group-stage tables. Null in an ordinary league table. You can pass it back as group.
Example: curl "https://api.soccer-data.co/v1/competitions/competition_705uv6jm8myn/seasons/season_98l95mxugqs9/standings" -H "X-Api-Key: $SOCCER_DATA_KEY"