> For the complete documentation index, see [llms.txt](https://docs.sportmonks.com/v3/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sportmonks.com/v3/motorsport-api/tutorials-and-guides/guides/how-to-build-a-constructors-championship-standings-table.md).

# How to Build a Constructors' Championship Standings Table

> **✅ Included in All Plans**
>
> The standings endpoints are included at no additional cost.
>
> Plans differ only in leagues and API call limits.
>
> [Compare plans →](https://www.sportmonks.com/football-api/plans-pricing/)

This guide shows you how to retrieve team standings for a season and shape the response into a constructors' championship table.

### When to use this

Use the team standings endpoints when you want to:

* Display a constructors' championship table
* Show each team's total points and current position
* Build a side-by-side comparison of teams across a season

### How to retrieve the data

Use the `GET Team Standings by Season ID` endpoint:

```http
GET https://api.sportmonks.com/v3/motorsport/standings/teams/seasons/{season_id}
?api_token={your_token}
```

Add the `participant` include to get team name and logo directly on each standing object:

```http
GET https://api.sportmonks.com/v3/motorsport/standings/teams/seasons/{season_id}
?api_token={your_token}&include=participant
```

The maximum include depth on this endpoint is `2`.

### Working with the data

Each object in the `data` array represents one team's standing for the season:

```json
{
  "id": 253788,
  "participant_id": 276191,
  "sport_id": 2,
  "league_id": 3468,
  "season_id": 25273,
  "stage_id": 77476104,
  "position": 1,
  "points": 460,
  "participant": {
    "id": 276191,
    "name": "McLaren",
    "image_path": "https://cdn.sportmonks.com/..."
  }
}
```

Sort by `position` ascending and calculate the gap to the leader:

```javascript
const API_TOKEN = 'your_token';
const SEASON_ID = 25273;

const response = await fetch(
  `https://api.sportmonks.com/v3/motorsport/standings/teams/seasons/${SEASON_ID}?api_token=${API_TOKEN}&include=participant`
);
const { data } = await response.json();

const sorted = data.sort((a, b) => a.position - b.position);
const leaderPoints = sorted[0].points;

const table = sorted.map(entry => ({
  position: entry.position,
  team: entry.participant.name,
  logo: entry.participant.image_path,
  points: entry.points,
  gap: entry.points === leaderPoints ? '-' : `+${leaderPoints - entry.points}`
}));

console.table(table);
```

<figure><img src="/files/53g7NdeLWlQBfEWz2SJA" alt=""><figcaption></figcaption></figure>

### Common pitfalls

**Sort by `position`, not by array index.** The API does not guarantee the response array is ordered by position.

**`participant_id` here refers to a team, not a driver.** The team standings endpoints resolve `participant_id` to the Team entity. Do not mix up `participant_id` values between driver and team standing responses.

**`result`, `group_id`, `round_id`, and `standing_rule_id` are not used in the Motorsport API.** You can safely ignore these fields.

### Advanced usage

To display the constructors' standings alongside each team's two drivers, combine this endpoint with the race results endpoints. Fetch team standings for the season, then use `GET Race Results by Season and Team` to retrieve per-driver breakdown for each team.

### Common errors

| Status | Likely cause                                         |
| ------ | ---------------------------------------------------- |
| `401`  | Missing or invalid `api_token`                       |
| `404`  | The `season_id` does not exist in the Motorsport API |
| `429`  | Rate limit exceeded for your plan                    |

### See also

**Standings endpoints**

* [GET All Team Standings](https://docs.sportmonks.com/v3/motorsport-api/endpoints-and-entities/endpoints/standings/get-all-team-standings.md)
* [GET Team Standings by Season ID](https://docs.sportmonks.com/v3/motorsport-api/endpoints-and-entities/endpoints/standings/get-team-standings-by-season-id.md)

**Related entities**

* [Standing](https://docs.sportmonks.com/v3/motorsport-api/endpoints-and-entities/entities/standing.md)
* [Team](https://docs.sportmonks.com/v3/motorsport-api/endpoints-and-entities/entities/team.md)
* [Season](https://docs.sportmonks.com/v3/motorsport-api/endpoints-and-entities/entities/season.md)

**Related guides**

* [How to Build a Drivers' Championship Standings Table](https://docs.sportmonks.com/v3/motorsport-api/tutorials-and-guides/guides/how-to-build-a-drivers-championship-standings-table.md)
* [How to Retrieve Race Results for a Team Across a Season](https://docs.sportmonks.com/v3/motorsport-api/tutorials-and-guides/guides/how-to-retrieve-race-results-for-a-team-across-a-season.md)

### FAQ

**Can I retrieve standings for a single team only?** No. The standings endpoint returns all teams for the given season. Filter client-side by `participant_id` if you only need one team's entry.

**What is the difference between `GET All Team Standings` and `GET Team Standings by Season ID`?** `GET All Team Standings` returns standings across all seasons available in the API and requires pagination to traverse. `GET Team Standings by Season ID` scopes the response to a single season, which is what most applications need.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.sportmonks.com/v3/motorsport-api/tutorials-and-guides/guides/how-to-build-a-constructors-championship-standings-table.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
