League standings

Standings, also known as rankings, show the positions of the teams competing in a season. Standings show the total number of games played, won, lost, the number of goals for and against and the number of points they have accumulated.

So, how do you request all of this data yourself? We’re going to show you how! In this tutorial, we will first show you how to request standings for the English Premier League season 20/21 (season id: 17420 ).

Afterward, we’ll go more in-depth with an example about the Champions League’s standings. We’ll then show you how to request standings for groups and stages. And finally, how to request live standings!

Let’s get started.

Domestic league standings

The English Premier league is an example of a domestic league, similar to the Italian Serie A, German Bundesliga, etc.

Standings can easily be requested with the standings by season id endpoint.

In order to request the standings of the English Premier League, we need the following things:

  • A valid API token

  • Access to the English Premier League (league id: 8) in your paid plan

  • The season id of the English Premier League season 20/21 (season id: 17420 ).

This will result in the following request and response.

Request
Response
Field Description
Request
https://soccer.sportmonks.com/api/v2.0/standings/season/17420?api_token={API_TOKEN}
Response
{
"data": [
{
"id": 77448322,
"name": "Regular Season",
"league_id": 8,
"season_id": 17420,
"round_id": 201972,
"round_name": 10,
"type": "Group Stage",
"stage_id": 77448322,
"stage_name": "Regular Season",
"resource": "stage",
"standings": {
"data": [
{
"position": 1,
"team_id": 6,
"team_name": "Tottenham Hotspur",
"round_id": 201972,
"round_name": 10,
"group_id": null,
"group_name": null,
"overall": {
"games_played": 10,
"won": 6,
"draw": 3,
"lost": 1,
"goals_scored": 21,
"goals_against": 9
},
"home": {
"games_played": 5,
"won": 2,
"draw": 2,
"lost": 1,
"goals_scored": 8,
"goals_against": 6
},
"away": {
"games_played": 5,
"won": 4,
"draw": 1,
"lost": 0,
"goals_scored": 13,
"goals_against": 3
},
"total": {
"goal_difference": "12",
"points": 21
},
"result": "UEFA Champions League",
"points": 21,
"recent_form": "WWWWD",
"status": null
},
{
"position": 2,
"team_id": 8,
"team_name": "Liverpool",
"round_id": 201972,
"round_name": 10,
"group_id": null,
"group_name": null,
"overall": {
"games_played": 10,
"won": 6,
"draw": 3,
"lost": 1,
"goals_scored": 22,
"goals_against": 17
},
"home": {
"games_played": 5,
"won": 5,
"draw": 0,
"lost": 0,
"goals_scored": 14,
"goals_against": 6
},
"away": {
"games_played": 5,
"won": 1,
"draw": 3,
"lost": 1,
"goals_scored": 8,
"goals_against": 11
},
"total": {
"goal_difference": "5",
"points": 21
},
"result": "UEFA Champions League",
"points": 21,
"recent_form": "WWDWD",
"status": null
},
{
"position": 3,
"team_id": 18,
"team_name": "Chelsea",
"round_id": 201972,
"round_name": 10,
"group_id": null,
"group_name": null,
"overall": {
"games_played": 10,
"won": 5,
"draw": 4,
"lost": 1,
"goals_scored": 22,
"goals_against": 10
},
"home": {
"games_played": 5,
"won": 2,
"draw": 2,
"lost": 1,
"goals_scored": 11,
"goals_against": 6
},
"away": {
"games_played": 5,
"won": 3,
"draw": 2,
"lost": 0,
"goals_scored": 11,
"goals_against": 4
},
"total": {
"goal_difference": "12",
"points": 19
},
"result": "UEFA Champions League",
"points": 19,
"recent_form": "DWWWD",
"status": null
},
{
"position": 4,
"team_id": 42,
"team_name": "Leicester City",
"round_id": 201972,
"round_name": 10,
"group_id": null,
"group_name": null,
"overall": {
"games_played": 10,
"won": 6,
"draw": 0,
"lost": 4,
"goals_scored": 19,
"goals_against": 14
},
"home": {
"games_played": 5,
"won": 2,
"draw": 0,
"lost": 3,
"goals_scored": 6,
"goals_against": 8
},
"away": {
"games_played": 5,
"won": 4,
"draw": 0,
"lost": 1,
"goals_scored": 13,
"goals_against": 6
},
"total": {
"goal_difference": "5",
"points": 18
},
"result": "UEFA Champions League",
"points": 18,
"recent_form": "WWWLL",
"status": null
},
Field Description

Season Field Description

Field

Description

id

The unique id of the current stage

name

The name of the stage

league_id

The unique league id the stage belongs to

season_id

The unique id of the current season

round_id

The unique id of the current round

round_name

The name of the round

type

Indicates what kind of type this stage is

stage_id

The unique id of the current stage

stage_name

The name of the stage

Standings Field Description

Field

Description

position

The actual position in the rankings in the stage

team_id

The unique team id of the team in that position in the stage

team_name

The team name in that position in the stage

round_id

The unique id of the current round

round_name

The name of the round

group_id

The unique id of the group, in which the team participates in

group_name

The name of the group, in which the team participates in

overall

The overall results of the team, i.e., the number of games, points and goals

home

The home results of the team, i.e., the number of games, points and goals

away

The away results of the team, i.e., the number of games, points and goals

total

The total points of the team and their goal difference

results

The standing rules of the place the team is in

points

The accumulated number of points the team has

recent_form

The recent form of the team

status

Will be available in API 3.0: Indicates if the team moves up on down based on the last standings.

Most of the data speaks for itself. Just like in our other tutorials, we've added a field description overview in the third tab.

However, a field that needs some further explanation is result.

This field will contain the standing rules of a season. Each season has its own standing rules. The number one at the end of the season will be crowned champions and “earns” something.

For example, the winner of the English Premier League will earn the right to compete in a different competition, such as the Champions League or Europa League.

Or, in case of finishing last, the team will relegate to a lower division. You can find the possible outcomes in our API references.

Using includes

You can enrich your request with includes. But beware, the includes on our standings by season id endpoint requires additional action. Namely, you will need to prefix the include.

What is prefixing exactly? With nested includes, you add the additional information at the end of the include. i.e., lineup.player

With prefixing, it’s the other way around. You will need to prefix every available include with standings.

So, for example, if you want to have additional team information, you will need to prefix teams with standings like this: standings.team

Request
Response
Request
https://soccer.sportmonks.com/api/v2.0/standings/season/17420?api_token={API_TOKEN}&include=standings.team
Response
{
"data": [
{
"id": 77448322,
"name": "Regular Season",
"league_id": 8,
"season_id": 17420,
"round_id": 201972,
"round_name": 10,
"type": "Group Stage",
"stage_id": 77448322,
"stage_name": "Regular Season",
"resource": "stage",
"standings": {
"data": [
{
"position": 1,
"team_id": 6,
"team_name": "Tottenham Hotspur",
"round_id": 201972,
"round_name": 10,
"group_id": null,
"group_name": null,
"overall": {
"games_played": 10,
"won": 6,
"draw": 3,
"lost": 1,
"goals_scored": 21,
"goals_against": 9
},
"home": {
"games_played": 5,
"won": 2,
"draw": 2,
"lost": 1,
"goals_scored": 8,
"goals_against": 6
},
"away": {
"games_played": 5,
"won": 4,
"draw": 1,
"lost": 0,
"goals_scored": 13,
"goals_against": 3
},
"total": {
"goal_difference": "12",
"points": 21
},
"result": "UEFA Champions League",
"points": 21,
"recent_form": "WWWWD",
"status": null,
"team": {
"data": {
"id": 6,
"legacy_id": 148,
"name": "Tottenham Hotspur",
"short_code": "TOT",
"twitter": "@SpursOfficial",
"country_id": 462,
"national_team": false,
"founded": 1882,
"logo_path": "https://cdn.sportmonks.com/images//soccer/teams/6/6.png",
"venue_id": 281313,
"current_season_id": 17420
}
}
}

Cup standings

For ‘normal’ domestic Leagues, the response format is different compared to Cups.

If you have Cups and ‘normal’ leagues in your plan, make sure to check out the response correctly. Let’s look at one of the most requested leagues: the Champions League 2020/2021 season (league id: 2 and season id: 17299).

You can use the same endpoint as with a standard league. However, the response will be very different.

Request
Response
Field Description
Request
https://soccer.sportmonks.com/api/v2.0/standings/season/17299?api_token={API_TOKEN}
Response
{
"data": [
{
"id": 244365,
"name": "Group A",
"league_id": 2,
"season_id": 17299,
"round_id": 211702,
"round_name": 1,
"stage_id": 77448760,
"stage_name": "Group Stage",
"resource": "group",
"standings": {
"data": [
{
"position": 1,
"team_id": 503,
"team_name": "Bayern München",
"round_id": 211702,
"round_name": 1,
"group_id": 244365,
"group_name": "Group A",
"overall": {
"games_played": 1,
"won": 1,
"draw": 0,
"lost": 0,
"goals_scored": 4,
"goals_against": 0
},
"home": {
"games_played": 1,
"won": 1,
"draw": 0,
"lost": 0,
"goals_scored": 4,
"goals_against": 0
},
"away": {
"games_played": 0,
"won": 0,
"draw": 0,
"lost": 0,
"goals_scored": 0,
"goals_against": 0
},
"total": {
"goal_difference": "4",
"points": 3
},
"result": "8th Finals",
"points": 3,
"recent_form": "W",
"status": null
},
{
"position": 2,
"team_id": 490,
"team_name": "Lokomotiv Moskva",
"round_id": 211702,
"round_name": 1,
"group_id": 244365,
"group_name": "Group A",
"overall": {
"games_played": 1,
"won": 0,
"draw": 1,
"lost": 0,
"goals_scored": 2,
"goals_against": 2
},
"home": {
"games_played": 0,
"won": 0,
"draw": 0,
"lost": 0,
"goals_scored": 0,
"goals_against": 0
},
"away": {
"games_played": 1,
"won": 0,
"draw": 1,
"lost": 0,
"goals_scored": 2,
"goals_against": 2
},
"total": {
"goal_difference": "0",
"points": 1
},
"result": "8th Finals",
"points": 1,
"recent_form": "D",
"status": null
},
{
"position": 3,
"team_id": 49,
"team_name": "Salzburg",
"round_id": 211702,
"round_name": 1,
"group_id": 244365,
"group_name": "Group A",
"overall": {
"games_played": 1,
"won": 0,
"draw": 1,
"lost": 0,
"goals_scored": 2,
"goals_against": 2
},
"home": {
"games_played": 1,
"won": 0,
"draw": 1,
"lost": 0,
"goals_scored": 2,
"goals_against": 2
},
"away": {
"games_played": 0,
"won": 0,
"draw": 0,
"lost": 0,
"goals_scored": 0,
"goals_against": 0
},
"total": {
"goal_difference": "0",
"points": 1
},
"result": "UEFA Europa League",
"points": 1,
"recent_form": "D",
"status": null
},
{
"position": 4,
"team_id": 7980,
"team_name": "Atlético Madrid",
"round_id": 211702,
"round_name": 1,
"group_id": 244365,
"group_name": "Group A",
"overall": {
"games_played": 1,
"won": 0,
"draw": 0,
"lost": 1,
"goals_scored": 0,
"goals_against": 4
},
"home": {
"games_played": 0,
"won": 0,
"draw": 0,
"lost": 0,
"goals_scored": 0,
"goals_against": 0
},
"away": {
"games_played": 1,
"won": 0,
"draw": 0,
"lost": 1,
"goals_scored": 0,
"goals_against": 4
},
"total": {
"goal_difference": "-4",
"points": 0
},
"result": null,
"points": 0,
"recent_form": "L",
"status": null
}
]
}
},
{
"id": 244366,
"name": "Group B",
"league_id": 2,
"season_id": 17299,
"round_id": 211702,
"round_name": 1,
"stage_id": 77448760,
"stage_name": "Group Stage",
"resource": "group",
"standings": {
"data": [
{
"position": 1,
"team_id": 621,
"team_name": "Shakhtar Donetsk",
"round_id": 211702,
"round_name": 1,
"group_id": 244366,
"group_name": "Group B",
"overall": {
"games_played": 1,
"won": 1,
"draw": 0,
"lost": 0,
"goals_scored": 3,
"goals_against": 2
},
"home": {
"games_played": 0,
"won": 0,
"draw": 0,
"lost": 0,
"goals_scored": 0,
"goals_against": 0
},
"away": {
"games_played": 1,
"won": 1,
"draw": 0,
"lost": 0,
"goals_scored": 3,
"goals_against": 2
},
"total": {
"goal_difference": "1",
"points": 3
},
"result": "8th Finals",
"points": 3,
"recent_form": "W",
"status": null
},
{
"position": 2,
"team_id": 683,
"team_name": "Borussia M'gladbach",
"round_id": 211702,
"round_name": 1,
"group_id": 244366,
"group_name": "Group B",
"overall": {
"games_played": 1,
"won": 0,
"draw": 1,
"lost": 0,
"goals_scored": 2,
"goals_against": 2
},
"home": {
"games_played": 0,
"won": 0,
"draw": 0,
"lost": 0,
"goals_scored": 0,
"goals_against": 0
},
"away": {
"games_played": 1,
"won": 0,
"draw": 1,
"lost": 0,
"goals_scored": 2,
"goals_against": 2
},
"total": {
"goal_difference": "0",
"points": 1
},
"result": "8th Finals",
"points": 1,
"recent_form": "D",
"status": null
},
{
"position": 3,
"team_id": 2930,
"team_name": "Inter",
"round_id": 211702,
"round_name": 1,
"group_id": 244366,
"group_name": "Group B",
"overall": {
"games_played": 1,
"won": 0,
"draw": 1,
"lost": 0,
"goals_scored": 2,
"goals_against": 2
},
"home": {
"games_played": 1,
"won": 0,
"draw": 1,
"lost": 0,
"goals_scored": 2,
"goals_against": 2
},
"away": {
"games_played": 0,
"won": 0,
"draw": 0,
"lost": 0,
"goals_scored": 0,
"goals_against": 0
},
"total": {
"goal_difference": "0",
"points": 1
},
"result": "UEFA Europa League",
"points": 1,
"recent_form": "D",
"status": null
},
{
"position": 4,
"team_id": 3468,
"team_name": "Real Madrid",
"round_id": 211702,
"round_name": 1,
"group_id": 244366,
"group_name": "Group B",
"overall": {
"games_played": 1,
"won": 0,
"draw": 0,
"lost": 1,
"goals_scored": 2,
"goals_against": 3
},
"home": {
"games_played": 1,
"won": 0,
"draw": 0,
"lost": 1,
"goals_scored": 2,
"goals_against": 3
},
"away": {
"games_played": 0,
"won": 0,
"draw": 0,
"lost": 0,
"goals_scored": 0,
"goals_against": 0
},
"total": {
"goal_difference": "-1",
"points": 0
},
"result": null,
"points": 0,
"recent_form": "L",
"status": null
}
]
}
},
Field Description

Season Field Description

Field

Description

id

The unique id of the current group

name

The name of the group

league_id

The unique league id the stage belongs to

season_id

The unique id of the current season

round_id

The unique id of the current round

round_name

The name of the round

stage_id

The unique id of the current stage

stage_name

The name of the stage

Standings Field Description

Field

Description

position

The actual position in the rankings in the group

team_id

The unique team id of the team in that position in the group

team_name

The team name in that position in the group

round_id

The unique id of the current round

round_name

The name of the round

group_id

The unique id of the group, in which the team participates in

group_name

The name of the group, in which the team participates in

overall

The overall results of the team, i.e., the number of games, points and goals

home

The home results of the team, i.e., the number of games, points and goals

away

The away results of the team, i.e., the number of games, points and goals

total

The total points of the team and their goal difference

results

The standing rules of the place the team is in

points

The accumulated number of points the team has

recent_form

The recent form of the team

status

Will be available in API 3.0: Indicates if the team moves up on down based on the last standings.

As you can see, the standings are grouped by ... groups!

We can’t stress this enough. It’s paramount that you read the response correctly.

Due to our unique group ids, you can also request the specific groups you’re interested in with the group_ids parameter.

Let’s say you only want the standings of Group C. You can add the group_idsparameter with the group id of Group C (244367) to the request. You can also request multiple groups by separating them with a comma.

Request
Response
Request
https://soccer.sportmonks.com/api/v2.0/standings/season/17299?api_token={API_TOKEN}&group_ids=244367
Response
{
"data": [
{
"id": 244367,
"name": "Group C",
"league_id": 2,
"season_id": 17299,
"round_id": 211702,
"round_name": 1,
"stage_id": 77448760,
"stage_name": "Group Stage",
"resource": "group",
"standings": {
"data": [
{
"position": 1,
"team_id": 9,
"team_name": "Manchester City",
"round_id": 211702,
"round_name": 1,
"group_id": 244367,
"group_name": "Group C",
"overall": {
"games_played": 1,
"won": 1,
"draw": 0,
"lost": 0,
"goals_scored": 3,
"goals_against": 1
},
"home": {
"games_played": 1,
"won": 1,
"draw": 0,
"lost": 0,
"goals_scored": 3,
"goals_against": 1
},
"away": {
"games_played": 0,
"won": 0,
"draw": 0,
"lost": 0,
"goals_scored": 0,
"goals_against": 0
},
"total": {
"goal_difference": "2",
"points": 3
},
"result": "8th Finals",
"points": 3,
"recent_form": "W",
"status": null
},
{
"position": 2,
"team_id": 602,
"team_name": "Olympiakos Piraeus",
"round_id": 211702,
"round_name": 1,
"group_id": 244367,
"group_name": "Group C",
"overall": {
"games_played": 1,
"won": 1,
"draw": 0,
"lost": 0,
"goals_scored": 1,
"goals_against": 0
},
"home": {
"games_played": 1,
"won": 1,
"draw": 0,
"lost": 0,
"goals_scored": 1,
"goals_against": 0
},
"away": {
"games_played": 0,
"won": 0,
"draw": 0,
"lost": 0,
"goals_scored": 0,
"goals_against": 0
},
"total": {
"goal_difference": "1",
"points": 3
},
"result": "8th Finals",
"points": 3,
"recent_form": "W",
"status": null
},
{
"position": 3,
"team_id": 44,
"team_name": "Olympique Marseille",
"round_id": 211702,
"round_name": 1,
"group_id": 244367,
"group_name": "Group C",
"overall": {
"games_played": 1,
"won": 0,
"draw": 0,
"lost": 1,
"goals_scored": 0,
"goals_against": 1
},
"home": {
"games_played": 0,
"won": 0,
"draw": 0,
"lost": 0,
"goals_scored": 0,
"goals_against": 0
},
"away": {
"games_played": 1,
"won": 0,
"draw": 0,
"lost": 1,
"goals_scored": 0,
"goals_against": 1
},
"total": {
"goal_difference": "-1",
"points": 0
},
"result": "UEFA Europa League",
"points": 0,
"recent_form": "L",
"status": null
},
{
"position": 4,
"team_id": 652,
"team_name": "Porto",
"round_id": 211702,
"round_name": 1,
"group_id": 244367,
"group_name": "Group C",
"overall": {
"games_played": 1,
"won": 0,
"draw": 0,
"lost": 1,
"goals_scored": 1,
"goals_against": 3
},
"home": {
"games_played": 0,
"won": 0,
"draw": 0,
"lost": 0,
"goals_scored": 0,
"goals_against": 0
},
"away": {
"games_played": 1,
"won": 0,
"draw": 0,
"lost": 1,
"goals_scored": 1,
"goals_against": 3
},
"total": {
"goal_difference": "-2",
"points": 0
},
"result": null,
"points": 0,
"recent_form": "L",
"status": null
}
]
}

International cup standings

As mentioned multiple times before, it's really important to check the API response carefully. The standings response of a particular season can be different compared to another season.

For example, the EURO U21 tournament has another season structure compared to the UEFA Champions League. This will result in different structured API response when you request the standings.

Request
Response
Request
https://soccer.sportmonks.com/api/v2.0/standings/season/15717?api_token={API_TOKEN}
Response
{
"data": [
{
"id": 77442385,
"name": "Qualifying Round",
"league_id": 1327,
"season_id": 15717,
"round_id": 163461,
"round_name": 1,
"type": "Qualifying",
"stage_id": 77442385,
"stage_name": "Qualifying Round",
"resource": "stage",
"standings": {
"data": [
{
"id": 224954,
"name": "Group 1",
"league_id": 1327,
"season_id": 15717,
"round_id": 163461,
"round_name": 1,
"stage_id": 77442385,
"stage_name": "Qualifying Round",
"resource": "group",
"standings": {
"data": [
{
"position": 1,
"team_id": 60073,
"team_name": "Italy U21",
"round_id": 163461,
"round_name": 1,
"group_id": 224954,
"group_name": "Group 1",
"overall": {
"games_played": 10,
"won": 8,
"draw": 1,
"lost": 1,
"goals_scored": 27,
"goals_against": 5
},
"home": {
"games_played": 5,
"won": 5,
"draw": 0,
"lost": 0,
"goals_scored": 20,
"goals_against": 1
},
"away": {
"games_played": 5,
"won": 3,
"draw": 1,
"lost": 1,
"goals_scored": 7,
"goals_against": 4
},
"total": {
"goal_difference": "22",
"points": 25
},
"result": "Possible Final",
"points": 25,
"recent_form": "LWWWW",
"status": null
},
{
"position": 2,
"team_id": 75896,
"team_name": "Iceland U21",
"round_id": 163461,
"round_name": 1,
"group_id": 224954,
"group_name": "Group 1",
"overall": {
"games_played": 10,
"won": 7,
"draw": 0,
"lost": 3,
"goals_scored": 19,
"goals_against": 12
},
"home": {
"games_played": 5,
"won": 4,
"draw": 0,
"lost": 1,
"goals_scored": 12,
"goals_against": 3
},
"away": {
"games_played": 5,
"won": 3,
"draw": 0,
"lost": 2,
"goals_scored": 7,
"goals_against": 9
},
"total": {
"goal_difference": "7",
"points": 21
},
"result": "Possible Final Tournament",
"points": 21,
"recent_form": "WWLWW",
"status": null
},
{
"position": 3,
"team_id": 133374,
"team_name": "Republic of Ireland U21",
"round_id": 163461,
"round_name": 1,
"group_id": 224954,
"group_name": "Group 1",
"overall": {
"games_played": 10,
"won": 6,
"draw": 1,
"lost": 3,
"goals_scored": 15,
"goals_against": 8
},
"home": {
"games_played": 5,
"won": 3,
"draw": 1,
"lost": 1,
"goals_scored": 9,
"goals_against": 3
},
"away": {
"games_played": 5,
"won": 3,
"draw": 0,
"lost": 2,
"goals_scored": 6,
"goals_against": 5
},
"total": {
"goal_difference": "7",
"points": 19
},
"result": null,
"points": 19,
"recent_form": "WWLLW",
"status": null
},
{
"position": 4,
"team_id": 60052,
"team_name": "Sweden U21",
"round_id": 163461,
"round_name": 1,
"group_id": 224954,
"group_name": "Group 1",
"overall": {
"games_played": 10,
"won": 6,
"draw": 0,
"lost": 4,
"goals_scored": 31,
"goals_against": 12
},
"home": {
"games_played": 5,
"won": 4,
"draw": 0,
"lost": 1,
"goals_scored": 23,
"goals_against": 3
},
"away": {
"games_played": 5,
"won": 2,
"draw": 0,
"lost": 3,
"goals_scored": 8,
"goals_against": 9
},
"total": {
"goal_difference": "19",
"points": 18
},
"result": null,
"points": 18,
"recent_form": "WWWWL",
"status": null
},
{
"position": 5,
"team_id": 132967,
"team_name": "Luxembourg U21",
"round_id": 163461,
"round_name": 1,
"group_id": 224954,
"group_name": "Group 1",
"overall": {
"games_played": 10,
"won": 1,
"draw": 0,
"lost": 9,
"goals_scored": 3,
"goals_against": 29
},
"home":