Skip to main content

WHOOP API

Download OpenAPI specification:Download

Authentication

OAuth

Security Scheme Type OAuth2
authorizationCode OAuth Flow
Authorization URL: https://api.prod.whoop.com/oauth/oauth2/auth
Token URL: https://api.prod.whoop.com/oauth/oauth2/token
Scopes:
  • read:recovery -

    Read Recovery data, including score, heart rate variability, and resting heart rate.

  • read:cycles -

    Read cycles data, including day Strain and average heart rate during a physiological cycle.

  • read:workout -

    Read workout data, including activity Strain and average heart rate.

  • read:sleep -

    Read sleep data, including performance % and duration per sleep stage.

  • read:profile -

    Read profile data, including name and email.

  • read:body_measurement -

    Read body measurements data, including height, weight, and max heart rate.

User

Endpoints for retrieving user profile and measurement data.

Get User Body Measurements

Retrieves the body measurements (height, weight, max heart rate) for the authenticated user.

Authorizations:
OAuth (
  • read:body_measurement
)

Responses

Response samples

Content type
application/json
{
  • "height_meter": 1.8288,
  • "weight_kilogram": 90.7185,
  • "max_heart_rate": 200
}

Get Basic User Profile

Retrieves the basic profile information (name, email) for the authenticated user.

Authorizations:
OAuth (
  • read:profile
)

Responses

Response samples

Content type
application/json
{
  • "user_id": 10129,
  • "email": "jsmith123@whoop.com",
  • "first_name": "John",
  • "last_name": "Smith"
}

Cycle

getCycleById

Get the cycle for the specified ID

Authorizations:
OAuth (
  • read:cycles
)
path Parameters
cycleId
required
integer <int64>

ID of the cycle to retrieve

Responses

Response samples

Content type
application/json
{
  • "id": 93845,
  • "user_id": 10129,
  • "created_at": "2022-04-24T11:25:44.774Z",
  • "updated_at": "2022-04-24T14:25:44.774Z",
  • "start": "2022-04-24T02:25:44.774Z",
  • "end": "2022-04-24T10:25:44.774Z",
  • "timezone_offset": "-05:00",
  • "score_state": "SCORED",
  • "score": {
    }
}

getCycleCollection

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

Authorizations:
OAuth (
  • read:cycles
)
query Parameters
limit
integer <int32> <= 25
Default: 10

Limit on the number of cycles returned

start
string <date-time>

Return cycles that occurred after or during (inclusive) this time. If not specified, the response will not filter cycles by a minimum time.

end
string <date-time>

Return cycles that intersect this time or ended before (exclusive) this time. If not specified, end will be set to now.

nextToken
string

Optional next token from the previous response to get the next page. If not provided, the first page in the collection is returned

Responses

Response samples

Content type
application/json
{
  • "records": [
    ],
  • "next_token": "MTIzOjEyMzEyMw"
}

getSleepForCycle

Get the sleep for the specified cycle ID

Authorizations:
OAuth (
  • read:sleep
)
path Parameters
cycleId
required
integer <int64>

ID of the cycle to retrieve sleep for

Responses

Response samples

Content type
application/json
{
  • "id": "ecfc6a15-4661-442f-a9a4-f160dd7afae8",
  • "v1_id": 93845,
  • "user_id": 10129,
  • "created_at": "2022-04-24T11:25:44.774Z",
  • "updated_at": "2022-04-24T14:25:44.774Z",
  • "start": "2022-04-24T02:25:44.774Z",
  • "end": "2022-04-24T10:25:44.774Z",
  • "timezone_offset": "-05:00",
  • "nap": false,
  • "score_state": "SCORED",
  • "score": {
    }
}

Recovery

getRecoveryCollection

Get all recoveries for a user, paginated. Results are sorted by start time of the related sleep in descending order.

Authorizations:
OAuth (
  • read:recovery
)
query Parameters
limit
integer <int32> <= 25
Default: 10

Limit on the number of recoveries returned

start
string <date-time>

Return recoveries that occurred after or during (inclusive) this time. If not specified, the response will not filter recoveries by a minimum time.

end
string <date-time>

Return recoveries that intersect this time or ended before (exclusive) this time. If not specified, end will be set to now.

nextToken
string

Optional next token from the previous response to get the next page. If not provided, the first page in the collection is returned

Responses

Response samples

Content type
application/json
{
  • "records": [
    ],
  • "next_token": "MTIzOjEyMzEyMw"
}

getRecoveryForCycle

Get the recovery for a cycle

Authorizations:
OAuth (
  • read:recovery
)
path Parameters
cycleId
required
integer <int64>

ID of the cycle to retrieve

Responses

Response samples

Content type
application/json
{
  • "cycle_id": 93845,
  • "sleep_id": "123e4567-e89b-12d3-a456-426614174000",
  • "user_id": 10129,
  • "created_at": "2022-04-24T11:25:44.774Z",
  • "updated_at": "2022-04-24T14:25:44.774Z",
  • "score_state": "SCORED",
  • "score": {
    }
}

Sleep

getSleepById

Get the sleep for the specified ID

Authorizations:
OAuth (
  • read:sleep
)
path Parameters
sleepId
required
string <uuid>

ID of the sleep to retrieve

Responses

Response samples

Content type
application/json
{
  • "id": "ecfc6a15-4661-442f-a9a4-f160dd7afae8",
  • "v1_id": 93845,
  • "user_id": 10129,
  • "created_at": "2022-04-24T11:25:44.774Z",
  • "updated_at": "2022-04-24T14:25:44.774Z",
  • "start": "2022-04-24T02:25:44.774Z",
  • "end": "2022-04-24T10:25:44.774Z",
  • "timezone_offset": "-05:00",
  • "nap": false,
  • "score_state": "SCORED",
  • "score": {
    }
}

getSleepCollection

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

Authorizations:
OAuth (
  • read:sleep
)
query Parameters
limit
integer <int32> <= 25
Default: 10

Limit on the number of sleeps returned

start
string <date-time>

Return sleeps that occurred after or during (inclusive) this time. If not specified, the response will not filter sleeps by a minimum time.

end
string <date-time>

Return sleeps that intersect this time or ended before (exclusive) this time. If not specified, end will be set to now.

nextToken
string

Optional next token from the previous response to get the next page. If not provided, the first page in the collection is returned

Responses

Response samples

Content type
application/json
{
  • "records": [
    ],
  • "next_token": "MTIzOjEyMzEyMw"
}

Workout

getWorkoutById

Get the workout for the specified ID

Authorizations:
OAuth (
  • read:workout
)
path Parameters
workoutId
required
string <uuid>

ID of the workout to retrieve

Responses

Response samples

Content type
application/json
{
  • "id": "ecfc6a15-4661-442f-a9a4-f160dd7afae8",
  • "v1_id": 1043,
  • "user_id": 9012,
  • "created_at": "2022-04-24T11:25:44.774Z",
  • "updated_at": "2022-04-24T14:25:44.774Z",
  • "start": "2022-04-24T02:25:44.774Z",
  • "end": "2022-04-24T10:25:44.774Z",
  • "timezone_offset": "-05:00",
  • "sport_name": "running",
  • "score_state": "SCORED",
  • "score": {
    },
  • "sport_id": 1
}

getWorkoutCollection

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

Authorizations:
OAuth (
  • read:workout
)
query Parameters
limit
integer <int32> <= 25
Default: 10

Limit on the number of workouts returned

start
string <date-time>

Return workouts that occurred after or during (inclusive) this time. If not specified, the response will not filter workouts by a minimum time.

end
string <date-time>

Return workouts that intersect this time or ended before (exclusive) this time. If not specified, end will be set to now.

nextToken
string

Optional next token from the previous response to get the next page. If not provided, the first page in the collection is returned

Responses

Response samples

Content type
application/json
{
  • "records": [
    ],
  • "next_token": "MTIzOjEyMzEyMw"
}