---
title: "GET /v2/activity/workout"
method: GET
path: "/v2/activity/workout"
tags: ["Workout"]
---

# GET /v2/activity/workout

`GET /v2/activity/workout`

## Request

- Base URL: `https://api.prod.whoop.com/developer`
- URL: `https://api.prod.whoop.com/developer/v2/activity/workout`
- Auth: OAuth 2
  - Authorization code: `https://api.prod.whoop.com/oauth/oauth2/auth`
  - Token URL: `https://api.prod.whoop.com/oauth/oauth2/token` scopes: `read:workout`
- TypeScript: <https://skmtc.dev/whoop/apis/whoop-api/docs/v2/activity/workout/get.ts> (a function with typed inputs; its response is checked against the schema)

Get all workouts for a user, paginated. Results are sorted by start time in descending order.

## Query parameters

- `limit` integer
- `start` string, date-time
- `end` string, date-time
- `nextToken` string

## Response `200`

Successful request

- WorkoutCollection: Paginated collection of workout activities with next token for pagination
  - `records` WorkoutV2[]: The collection of records in this page.
    - `id` string, uuid, required: Unique identifier for the workout activity
    - `v1_id` integer: Previous generation identifier for the activity. Will not exist past 09/01/2025
    - `user_id` integer, required: The WHOOP User who performed the workout
    - `created_at` string, date-time, required: The time the workout activity was recorded in WHOOP
    - `updated_at` string, date-time, required: The time the workout activity was last updated in WHOOP
    - `start` string, date-time, required: Start time bound of the workout
    - `end` string, date-time, required: End time bound of the workout
    - `timezone_offset` string, required: The user's timezone offset at the time the workout was recorded. Follows format for Time Zone Designator (TZD) - '+hh:mm', '-hh:mm', or 'Z'.
    - `sport_name` string, required: Name of the WHOOP Sport performed during the workout
    - `score_state` 'SCORED' | 'PENDING_SCORE' | 'UNSCORABLE', required: `SCORED` means the workout activity was scored and the measurement values will be present. `PENDING_SCORE` means WHOOP is currently evaluating the workout activity. `UNSCORABLE` means this activity could not be scored for some reason - commonly because there is not enough user metric data for the time range.
    - `score` WorkoutScore: WHOOP's measurements and evaluation of the workout activity. Only present if the Workout State is `SCORED`
      - `strain` number, float, required: WHOOP metric of the cardiovascular load - the level of strain the workout had on the user's cardiovascular system based on the user's heart rate. Strain is scored on a scale from 0 to 21.
      - `average_heart_rate` integer, required: The user's average heart rate (beats per minute) during the workout.
      - `max_heart_rate` integer, required: The user's max heart rate (beats per minute) during the workout.
      - `kilojoule` number, float, required: Kilojoules the user expended during the workout.
      - `percent_recorded` number, float, required: Percentage (0-100%) of heart rate data WHOOP received during the workout.
      - `distance_meter` number, float: The distance the user travelled during the workout. Only present if distance data sent to WHOOP
      - `altitude_gain_meter` number, float: The altitude gained during the workout. This measurement does not account for downward travel - it is strictly a measure of altitude climbed. If a member climbed up and down a 1,000 meter mountain, ending at the same altitude, this measurement would be 1,000 meters. Only present if altitude data is included as part of the workout
      - `altitude_change_meter` number, float: The altitude difference between the start and end points of the workout. If a member climbed up and down a mountain, ending at the same altitude, this measurement would be 0. Only present if altitude data is included as part of the workout
      - `zone_durations` ZoneDurations, required: Breakdown of time spent in each heart rate zone during the workout.
        - `zone_zero_milli` integer, required: Duration in milliseconds spent in Zone 0 (very light activity)
        - `zone_one_milli` integer, required: Duration in milliseconds spent in Zone 1 (light activity)
        - `zone_two_milli` integer, required: Duration in milliseconds spent in Zone 2 (moderate activity)
        - `zone_three_milli` integer, required: Duration in milliseconds spent in Zone 3 (hard activity)
        - `zone_four_milli` integer, required: Duration in milliseconds spent in Zone 4 (very hard activity)
        - `zone_five_milli` integer, required: Duration in milliseconds spent in Zone 5 (maximum effort)
    - `sport_id` integer: ID of the WHOOP Sport performed during the workout. Will not exist past 09/01/2025
  - `next_token` string: A token that can be used on the next request to access the next page of records. If the token is not present, there are no more records in the collection.

## Other responses

- `400`: Client error constructing the request
- `401`: Invalid authorization
- `429`: Request rejected due to rate limiting
- `500`: Server error occurred while making request

## Changes

- **2025-07-14** `c00de65ac5e0`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/whoop/apis/whoop-api/changes/v2/activity/workout/get.md)

---

[API](https://skmtc.dev/whoop/apis/whoop-api.md) - [All operations](https://skmtc.dev/whoop/apis/whoop-api/llms.txt) - [OpenAPI document](https://skmtc.dev/whoop/apis/whoop-api/revisions/2add8c1207db?raw)
