# GET /v2/races/{id}/laps

Group: Race sports

A race session’s lap-by-lap flow: each driver’s place at the end of every lap (lap 0 = the starting grid), the tyre compound, pit stops (on the in-lap) and the lap he dropped out. Pro and Business plans.

Plans: Pro + Business only (other plans get 403 endpoint_not_in_plan).

Note: Formula 1 race sessions (checked on the 2026 Mexico GP); an empty list for sessions and series the source has no lap chart for (qualifying, practice, MotoGP). No lap times or gaps — the classification with times is /results.

## Parameters

| Name | In | Required | Description |
| --- | --- | --- | --- |
| `id` | path | yes | our numeric id (positive integer) |
| `session` | query | no | a session id from /v2/races/{id}; default the main race session |

## Response

- `data`: `RaceCompetitorLaps[]`
- `meta`: race, session (the one read), count
- Objects: RaceCompetitorLaps (https://sportsapi.app/markdown/en/reference.md#racecompetitorlaps)

## Errors

- 403 history_not_in_plan — the race started before your plan’s history
- 404 not_found — not a race id, or a session of another race

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/races/{id}/laps"
```

TypeScript:

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

Python:

```python
res = client.races.laps(id)
```

Go:

```go
res, err := client.Races.Laps(ctx, id, &sportsapi.RacesLapsParams{})
```

CLI:

```bash
$ sportsapi races laps <id>
```

## Example response

```json
{ "data": [ { "competitor": { "id": 700001, "name": "Max Verstappen", "code": "VER", … }, "team": { "id": 700010, "name": "Red Bull Racing", … }, "number": 3,
      "laps": [ { "lap": 0, "position": 5, "tyre": "medium", "pitStop": false, "retired": false },
                { "lap": 27, "position": 2, "tyre": "medium", "pitStop": true, "retired": false },
                { "lap": 28, "position": 5, "tyre": "soft", "pitStop": false, "retired": false }, …,
                { "lap": 71, "position": 1, "tyre": "soft", "pitStop": false, "retired": false } ] },
    { "competitor": { "name": "Fernando Alonso", … }, …, "laps": [ …, { "lap": 6, "position": null, "tyre": "soft", "pitStop": false, "retired": true } ] }, … ],
  "meta": { "race": 812345, "session": 812350, "count": 22 } }
```

---

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/laps · All docs: https://sportsapi.app/markdown/en/docs.md
