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.

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"
}

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": 10235,
  • "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
integer <int64>

ID of the sleep 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",
  • "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"
}

User

getBodyMeasurement

Get the user's body measurements

Authorizations:
OAuth (
  • read:body_measurement
)

Responses

Response samples

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

getProfileBasic

Get the user's Basic Profile

Authorizations:
OAuth (
  • read:profile
)

Responses

Response samples

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

revokeUserOAuthAccess

Revoke the access token granted by the user. If the associated OAuth client is configured to receive webhooks, it will no longer receive them for this user.

Authorizations:

Responses

Workout

getWorkoutById

Get the workout for the specified ID

Authorizations:
OAuth (
  • read:workout
)
path Parameters
workoutId
required
integer <int64>

ID of the workout to retrieve

Responses

Response samples

Content type
application/json
{
  • "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_id": 1,
  • "score_state": "SCORED",
  • "score": {
    }
}

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"
}