---
title: "GET /v2/cycle/{cycleId}"
method: GET
path: "/v2/cycle/{cycleId}"
tags: ["Cycle"]
---

# GET /v2/cycle/{cycleId}

`GET /v2/cycle/{cycleId}`

## Request

- Base URL: `https://api.prod.whoop.com/developer`
- URL: `https://api.prod.whoop.com/developer/v2/cycle/{cycleId}`
- 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:cycles`
- TypeScript: <https://skmtc.dev/whoop/apis/whoop-api/docs/v2/cycle/:cycleId/get.ts> (a function with typed inputs; its response is checked against the schema)

Get the cycle for the specified ID

## Path parameters

- `cycleId` integer, required

## Response `200`

Successful request

- Cycle: The collection of records in this page.
  - `id` integer, required: Unique identifier for the physiological cycle
  - `user_id` integer, required: The WHOOP User for the physiological cycle
  - `created_at` string, date-time, required: The time the cycle was recorded in WHOOP
  - `updated_at` string, date-time, required: The time the cycle was last updated in WHOOP
  - `start` string, date-time, required: Start time bound of the cycle
  - `end` string, date-time: End time bound of the cycle. If not present, the user is currently in this cycle
  - `timezone_offset` string, required: The user's timezone offset at the time the cycle was recorded. Follows format for Time Zone Designator (TZD) - '+hh:mm', '-hh:mm', or 'Z'.
  - `score_state` 'SCORED' | 'PENDING_SCORE' | 'UNSCORABLE', required: `SCORED` means the cycle was scored and the measurement values will be present. `PENDING_SCORE` means WHOOP is currently evaluating the cycle. `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` CycleScore: WHOOP's measurements and evaluation of the cycle. Only present if the score state is `SCORED`
    - `strain` number, float, required: WHOOP metric of the cardiovascular load - the level of strain on the user's cardiovascular system based on the user's heart rate during the cycle. Strain is scored on a scale from 0 to 21.
    - `kilojoule` number, float, required: Kilojoules the user expended during the cycle.
    - `average_heart_rate` integer, required: The user's average heart rate during the cycle.
    - `max_heart_rate` integer, required: The user's max heart rate during the cycle.
  - `step_count` integer, nullable: Total number of steps taken during the cycle. Null when no step data exists for the cycle (e.g. the device was not worn for the full cycle).

## Other responses

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

## Changes

- **2026-11-07** `2add8c1207db`: 1 info
  - added the optional property `step_count` to the response with the `200` status
- **2025-07-14** `c00de65ac5e0`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/whoop/apis/whoop-api/changes/v2/cycle/:cycleId/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)
