---
title: "Everything the athlete did, newest first"
method: GET
path: "/activities"
tags: ["Activities"]
---

# Everything the athlete did, newest first

`GET /activities`

## Request

- Base URL: `https://bodylab.lol/api/v1`
- URL: `https://bodylab.lol/api/v1/activities`
- Auth: HTTP bearer

Recorded and typed-in activities, plus logged strength sessions with no recording of their own (a linked session appears as its activity). 25 per page. `from` and `to` narrow it to a span of days, so a question about one week doesn't have to be paged back to.

## Query parameters

- `page` integer
- `type` string: Only this sport. strength_training also returns a session logged in Body Lab whose recording the watch typed as something else, which is most of them: a watch usually calls a lift cardio.
- `from` string, date: Only activities on or after this day, on the athlete's own calendar.
- `to` string, date: Only activities on or before this day, on the athlete's own calendar. Inclusive.

## Headers

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

## Response `200`

OK

- ActivityPage
  - `items` ActivityListItem[], required
    - `kind` 'activity' | 'strength', required: activity: a recorded or typed-in activity. strength: a logged strength session with no recording.
    - `id` string, required: Opaque identifier.
    - `startTime` string, date-time, required: An instant: ISO-8601 with offset, e.g. 2026-09-13T06:30:00Z.
    - `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".
    - `label` string, required: The activity's name, or its sport when it has none.
    - `typeLabel` string, required: The sport, for display.
    - `source` string, nullable, required: Where the activity came from. manual (typed in) and file (uploaded) are Body Lab's own; any other value is the service the athlete synced it from.
    - `durationS` number, nullable, required
    - `distanceM` number, nullable, required
    - `load` number, nullable, required: Training load on Body Lab's calibrated scale.
    - `loadSource` string, nullable, required: Which evidence an activity's load was derived from, best first. Known values: provider, stream_trimp, avg_hr_trimp, srpe, duration. Treat unknown values as "other".
    - `hasTrack` boolean, required
    - `hasStrengthLog` boolean, required
  - `page` integer, required
  - `hasMore` boolean, required

## 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)
