---
title: "Mean-maximal running speed, recent and all-time"
method: GET
path: "/training/speed-curve"
tags: ["Training"]
---

# Mean-maximal running speed, recent and all-time

`GET /training/speed-curve`

## Request

- Base URL: `https://bodylab.lol/api/v1`
- URL: `https://bodylab.lol/api/v1/training/speed-curve`
- Auth: HTTP bearer

## Query parameters

- `days` integer: How many days back from today.

## Headers

- `X-Client-Platform` string
- `X-Client-Version` string

## Response `200`

OK

- object: Mean-maximal speed on runs, the running twin of the power curve: a record of what was run, not an estimate. Every run counts here, trail and treadmill included; critical speed is fitted from a stricter set (criticalSpeed).
  - `recent` object[], required
    - `durationS` integer, required
    - `speedMs` number, required: Metres per second: the fastest average held for at least durationS, on the raw odometer (not grade-adjusted, not corrected for altitude). Never lower than a longer duration's. A client shows it as pace in the athlete's units.
    - `heldForS` integer, required: How long the effort behind this figure lasted. Longer than durationS when a longer effort beat every one of exactly this length.
    - `achievedOn` string, date, required: A day on the athlete's own calendar: YYYY-MM-DD, no time zone.
    - `daysAgo` integer, required
    - `activityId` string, required: The run it came from.
    - `activityType` string, required: Sport, from the engine's vocabulary (packages/engine/src/sports.ts), e.g. road_biking, running, hiking, strength_training. Known values: road_biking, running, hiking, strength_training, other. Treat unknown values as "other".
  - `allTime` object[], required
    - `durationS` integer, required
    - `speedMs` number, required: Metres per second: the fastest average held for at least durationS, on the raw odometer (not grade-adjusted, not corrected for altitude). Never lower than a longer duration's. A client shows it as pace in the athlete's units.
    - `heldForS` integer, required: How long the effort behind this figure lasted. Longer than durationS when a longer effort beat every one of exactly this length.
    - `achievedOn` string, date, required: A day on the athlete's own calendar: YYYY-MM-DD, no time zone.
    - `daysAgo` integer, required
    - `activityId` string, required: The run it came from.
    - `activityType` string, required: Sport, from the engine's vocabulary (packages/engine/src/sports.ts), e.g. road_biking, running, hiking, strength_training. Known values: road_biking, running, hiking, strength_training, other. Treat unknown values as "other".

## Other responses

- `401`: Error: UNAUTHORIZED.

---

[API](https://skmtc.dev/bodylab/apis/body-lab-api.md) · [All operations](https://skmtc.dev/bodylab/apis/body-lab-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bodylab/apis/body-lab-api/revisions/544c201eaf88?raw)
