# GET /v2/series/{id}/standings

Group: Race sports

The championship table of a season: the drivers’ / riders’ (type=competitors, default) or the teams’ (type=teams) — points, wins, podiums, pole positions, fastest laps, races started and races with points.

Note: Cycling has no teams table (an empty array). team is null in the teams’ table. Columns the source does not keep are null. meta.figuresSource says where wins / podiums / polePositions / racesStarted / racesWithPoints come from: upstream (the source’s table) or computed — MotoGP, whose table has positions and points only: we count them from the main race of each finished round (win = 1st, podium = top 3, pole = grid 1; sprints not counted; a team counts each of its entries, one start per race). fastestLaps stays null for MotoGP.

## Parameters

| Name | In | Required | Description |
| --- | --- | --- | --- |
| `id` | path | yes | our numeric id (positive integer) |
| `season` | query | no | a season id from /v2/series/{id}/seasons (default: the newest) |
| `type` | query | no | competitors (default) \| teams |

## Response

- `data`: `SeriesStandingsRow[]`
- `meta`: season (the one used), type, count, figuresSource (upstream | computed)
- Objects: SeriesStandingsRow (https://sportsapi.app/markdown/en/reference.md#seriesstandingsrow)

## Errors

- 400 bad_request — invalid season, type not competitors|teams
- 403 history_not_in_plan — the season ended before your plan’s history
- 404 not_found — a season not in this series; 404 no_data — the series has no seasons

Plus the common errors (https://sportsapi.app/markdown/en/docs.md#errors).

## Request

cURL:

```bash
curl -H "Authorization: Bearer sk_live_…" \
    "https://api.sportsapi.app/v2/series/{id}/standings"
```

TypeScript:

```ts
const { data, meta } = await client.series.standings(id);
```

Python:

```python
res = client.series.standings(id)
```

Go:

```go
res, err := client.Series.Standings(ctx, id, &sportsapi.SeriesStandingsParams{})
```

CLI:

```bash
$ sportsapi series standings <id>
```

## Example response

```json
{ "data": [ { "position": 1, "competitor": { "id": 700003, "name": "Lando Norris", … }, "team": { "id": 700011, "name": "McLaren", … },
    "points": 357, "wins": 7, "podiums": 15, "polePositions": 6, "fastestLaps": 5, "racesStarted": 17, "racesWithPoints": 17 }, … ],
  "meta": { "season": 812301, "type": "competitors", "count": 21, "figuresSource": "upstream" } }

// MotoGP (figures counted by us from the season's main races):
{ "data": [ { "position": 1, "competitor": { "name": "Marc Márquez", … }, "team": { "name": "Ducati Lenovo Team", … },
    "points": 545, "wins": 11, "podiums": 15, "polePositions": 8, "fastestLaps": null, "racesStarted": 17, "racesWithPoints": 16 }, … ],
  "meta": { "season": 696722, "type": "competitors", "count": 32, "figuresSource": "computed" } }
```

---

Base URL: https://api.sportsapi.app. Send your API key as `Authorization: Bearer <key>` on every /v2 request; keys are created in the dashboard (https://sportsapi.app/dashboard).
HTML: https://sportsapi.app/docs/races/series-standings · All docs: https://sportsapi.app/markdown/en/docs.md
