WHOOP website screenshot

WHOOP

WHOOP is a wearable health and performance company whose wrist-worn strap (WHOOP 5.0 and medical-grade WHOOP MG) measures heart rate, HRV, respiratory rate, skin temperature, and SpO2 24/7 to compute daily Recovery, Strain, and Sleep Performance scores. The WHOOP Developer Platform exposes member fitness data through an OAuth-protected REST API (v2) covering physiological cycles, sleep, workouts, recovery, and body measurements, plus webhooks for resource updates and a Trusted Partner API for lab/diagnostics integrations.

2 APIs 21 Features
FitnessWearablesHealthRecoverySleepStrainHeart RateWorkoutBiometrics

APIs

WHOOP API

The WHOOP API exposes member fitness, strain, recovery, sleep, workout, and body measurement data captured by the WHOOP wrist-worn wearable. v2 endpoints return UUID-based resou...

WHOOP Trusted Partner API

The WHOOP Trusted Partner API enables lab and diagnostics partners to manage lab requisitions, service requests, appointments, and diagnostic report results for WHOOP members. I...

Collections

WHOOP API

OPEN

Pricing Plans

Whoop Co Plans Pricing

3 plans

PLANS

Rate Limits

Whoop Co Rate Limits

2 limits

RATE LIMITS

FinOps

Features

WHOOP 5.0 — fifth-generation wrist-worn strap with 14-day battery life and on-skin sensor improvements
WHOOP MG — medical-grade variant adding ECG and blood-pressure readings
Continuous 24/7 monitoring of heart rate, HRV, respiratory rate, skin temperature, and SpO2
Daily Recovery score based on HRV, resting heart rate, and sleep performance
Daily Strain score capturing cardiovascular load across all activities
Sleep coaching with stage-by-stage analysis (light, deep, REM) and Sleep Performance %
Workout auto-detection with heart-rate zone breakdowns
Stress Monitor and Daily Outlook AI coaching
Health Monitor with vitals trends and abnormality alerts
WHOOP Coach generative AI assistant for personalized insights
Three subscription tiers — ONE ($199/yr), PEAK ($239/yr), LIFE ($359/yr)
Developer Platform with OAuth 2.0 (authorization code) member-data API
Trusted Partner program with client-credentials OAuth for lab and diagnostics integrations
v2 REST API with UUID resource identifiers and pagination cursors
Webhooks for recovery, sleep, and workout updated/deleted events with HMAC SHA-256 signing
Six member-data scopes — read:recovery, read:cycles, read:workout, read:sleep, read:profile, read:body_measurement
Rate limits — 100 requests/minute and 10,000 requests/day per client, with X-RateLimit-* headers
v1-to-v2 activity-mapping endpoint for migration
Mobile apps for iOS, Android, and Wear OS / Apple Watch companion experience
Garmin, Strava, TrainingPeaks, Apple Health, and Google Health Connect integrations
Community SDKs (Python `hedgertronic/whoop`, MCP server `shashankswe2020-ux/whoop-mcp`)

Semantic Vocabularies

Whoop Co Context

0 classes · 6 properties

JSON-LD

API Governance Rules

WHOOP API Rules

6 rules · 2 errors 3 warnings 1 info

SPECTRAL

Example Payloads

Whoop Get Recovery Example

2 fields

EXAMPLE

Whoop List Sleep Example

2 fields

EXAMPLE

Whoop List Workouts Example

2 fields

EXAMPLE

Resources

🌐
Portal
Portal
🔗
Documentation
Documentation
🔗
Documentation
Documentation
🚀
GettingStarted
GettingStarted
🔑
Authentication
Authentication
🔗
RateLimits
RateLimits
🔗
Webhooks
Webhooks
💬
Support
Support
🔗
Migration
Migration
🔗
DeveloperDashboard
DeveloperDashboard
💰
Pricing
Pricing
💬
Support
Support
🔗
LinkedIn
LinkedIn
🔗
Twitter
Twitter
🔗
ContactUs
ContactUs
📜
PrivacyPolicy
PrivacyPolicy
📜
TermsOfService
TermsOfService
📜
APITerms
APITerms
🔗
Plans
Plans
🔗
RateLimits
RateLimits
🔗
FinOps
FinOps
🔗
Vocabulary
Vocabulary

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: WHOOP API
  version: 2.0.0
items:
- info:
    name: Activity ID Mapping
    type: folder
  items:
  - info:
      name: Get V2 UUID for V1 Activity ID
      type: http
    http:
      method: GET
      url: https://api.prod.whoop.com/developer/v1/activity-mapping/:activityV1Id
      params:
      - name: activityV1Id
        value: '12345678'
        type: path
        description: V1 Activity ID
    docs: Lookup the V2 UUID for a given V1 activity ID
- info:
    name: Cycle
    type: folder
  items:
  - info:
      name: Get Cycle
      type: http
    http:
      method: GET
      url: https://api.prod.whoop.com/developer/v2/cycle/:cycleId
      params:
      - name: cycleId
        value: ''
        type: path
        description: ID of the cycle to retrieve
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.prod.whoop.com/oauth/oauth2/auth
        accessTokenUrl: https://api.prod.whoop.com/oauth/oauth2/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Get the cycle for the specified ID
  - info:
      name: List Cycle
      type: http
    http:
      method: GET
      url: https://api.prod.whoop.com/developer/v2/cycle
      params:
      - name: limit
        value: ''
        type: query
        description: Limit on the number of cycles returned
      - name: start
        value: ''
        type: query
        description: Return cycles that occurred after or during (inclusive) this time. If not specified, the response will
          not filter cycles by a minimum time.
      - name: end
        value: ''
        type: query
        description: Return cycles that intersect this time or ended before (exclusive) this time. If not specified, `end`
          will be set to `now`.
      - name: nextToken
        value: ''
        type: query
        description: Optional next token from the previous response to get the next page. If not provided, the first page
          in the collection is returned
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.prod.whoop.com/oauth/oauth2/auth
        accessTokenUrl: https://api.prod.whoop.com/oauth/oauth2/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Get all physiological cycles for a user, paginated. Results are sorted by start time in descending order.
  - info:
      name: List Sleep
      type: http
    http:
      method: GET
      url: https://api.prod.whoop.com/developer/v2/cycle/:cycleId/sleep
      params:
      - name: cycleId
        value: ''
        type: path
        description: ID of the cycle to retrieve sleep for
    docs: Get the sleep for the specified cycle ID
- info:
    name: Partner
    type: folder
  items:
  - info:
      name: Generate Test Data for Partner Development
      type: http
    http:
      method: POST
      url: https://api.prod.whoop.com/developer/v2/partner/development/add-test-data
      auth:
        type: oauth2
        flow: client_credentials
        accessTokenUrl: https://api.prod.whoop.com/developer/v2/partner/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Generates test user and lab requisition data for partner integration testing. This endpoint is only available in
      non-production environments
  - info:
      name: Get a Lab Requisition by ID
      type: http
    http:
      method: GET
      url: https://api.prod.whoop.com/developer/v2/partner/requisition/:id
      params:
      - name: id
        value: ''
        type: path
        description: Unique identifier of the lab requisition
      auth:
        type: oauth2
        flow: client_credentials
        accessTokenUrl: https://api.prod.whoop.com/developer/v2/partner/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Retrieves a lab requisition with its associated service requests by its unique identifier. The requesting partner
      must be an owner of the lab requisition.
  - info:
      name: Get a Service Request by ID
      type: http
    http:
      method: GET
      url: https://api.prod.whoop.com/developer/v2/partner/service-request/:id
      params:
      - name: id
        value: ''
        type: path
        description: Unique identifier of the service request
      auth:
        type: oauth2
        flow: client_credentials
        accessTokenUrl: https://api.prod.whoop.com/developer/v2/partner/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Retrieves a service request by its unique identifier. The requesting partner must be an owner of the service request.
  - info:
      name: Request a Partner Client Token
      type: http
    http:
      method: POST
      url: https://api.prod.whoop.com/developer/v2/partner/token
      body:
        type: json
        data: '{}'
    docs: Exchanges partner client credentials for an access token.
  - info:
      name: Update Lab Requisition Service Request Statuses
      type: http
    http:
      method: PATCH
      url: https://api.prod.whoop.com/developer/v2/partner/requisition/:id/status
      params:
      - name: id
        value: ''
        type: path
        description: Unique identifier of the lab requisition
      body:
        type: json
        data: '{}'
      auth:
        type: oauth2
        flow: client_credentials
        accessTokenUrl: https://api.prod.whoop.com/developer/v2/partner/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Updates the task business status on all service requests belonging to the requisition. The requesting partner must
      be an owner.
  - info:
      name: Update Service Request Status
      type: http
    http:
      method: PATCH
      url: https://api.prod.whoop.com/developer/v2/partner/service-request/:id/status
      params:
      - name: id
        value: ''
        type: path
        description: Unique identifier of the service request
      body:
        type: json
        data: '{}'
      auth:
        type: oauth2
        flow: client_credentials
        accessTokenUrl: https://api.prod.whoop.com/developer/v2/partner/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Updates the business status of a service request task. The requesting partner must be an owner of the service request.
  - info:
      name: Create Diagnostic Report Results for a Service Request
      type: http
    http:
      method: POST
      url: https://api.prod.whoop.com/developer/v2/partner/service-request/:id/results
      params:
      - name: id
        value: ''
        type: path
        description: Unique identifier of the service request
      body:
        type: json
        data: '{}'
      auth:
        type: oauth2
        flow: client_credentials
        accessTokenUrl: https://api.prod.whoop.com/developer/v2/partner/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Creates a diagnostic report with results for a service request. The requesting partner must be an owner of the service
      request.
- info:
    name: Recovery
    type: folder
  items:
  - info:
      name: List Recovery
      type: http
    http:
      method: GET
      url: https://api.prod.whoop.com/developer/v2/recovery
      params:
      - name: limit
        value: ''
        type: query
        description: Limit on the number of recoveries returned
      - name: start
        value: ''
        type: query
        description: Return recoveries that occurred after or during (inclusive) this time. If not specified, the response
          will not filter recoveries by a minimum time.
      - name: end
        value: ''
        type: query
        description: Return recoveries that intersect this time or ended before (exclusive) this time. If not specified, `end`
          will be set to `now`.
      - name: nextToken
        value: ''
        type: query
        description: Optional next token from the previous response to get the next page. If not provided, the first page
          in the collection is returned
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.prod.whoop.com/oauth/oauth2/auth
        accessTokenUrl: https://api.prod.whoop.com/oauth/oauth2/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Get all recoveries for a user, paginated. Results are sorted by start time of the related sleep in descending order.
  - info:
      name: List Recovery
      type: http
    http:
      method: GET
      url: https://api.prod.whoop.com/developer/v2/cycle/:cycleId/recovery
      params:
      - name: cycleId
        value: ''
        type: path
        description: ID of the cycle to retrieve
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.prod.whoop.com/oauth/oauth2/auth
        accessTokenUrl: https://api.prod.whoop.com/oauth/oauth2/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Get the recovery for a cycle
- info:
    name: Sleep
    type: folder
  items:
  - info:
      name: Get Sleep
      type: http
    http:
      method: GET
      url: https://api.prod.whoop.com/developer/v2/activity/sleep/:sleepId
      params:
      - name: sleepId
        value: ''
        type: path
        description: ID of the sleep to retrieve
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.prod.whoop.com/oauth/oauth2/auth
        accessTokenUrl: https://api.prod.whoop.com/oauth/oauth2/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Get the sleep for the specified ID
  - info:
      name: List Sleep
      type: http
    http:
      method: GET
      url: https://api.prod.whoop.com/developer/v2/activity/sleep
      params:
      - name: limit
        value: ''
        type: query
        description: Limit on the number of sleeps returned
      - name: start
        value: ''
        type: query
        description: Return sleeps that occurred after or during (inclusive) this time. If not specified, the response will
          not filter sleeps by a minimum time.
      - name: end
        value: ''
        type: query
        description: Return sleeps that intersect this time or ended before (exclusive) this time. If not specified, `end`
          will be set to `now`.
      - name: nextToken
        value: ''
        type: query
        description: Optional next token from the previous response to get the next page. If not provided, the first page
          in the collection is returned
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.prod.whoop.com/oauth/oauth2/auth
        accessTokenUrl: https://api.prod.whoop.com/oauth/oauth2/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Get all sleeps for a user, paginated. Results are sorted by start time in descending order.
- info:
    name: User
    type: folder
  items:
  - info:
      name: Get User Body Measurements
      type: http
    http:
      method: GET
      url: https://api.prod.whoop.com/developer/v2/user/measurement/body
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.prod.whoop.com/oauth/oauth2/auth
        accessTokenUrl: https://api.prod.whoop.com/oauth/oauth2/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Retrieves the body measurements (height, weight, max heart rate) for the authenticated user.
  - info:
      name: Get Basic User Profile
      type: http
    http:
      method: GET
      url: https://api.prod.whoop.com/developer/v2/user/profile/basic
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.prod.whoop.com/oauth/oauth2/auth
        accessTokenUrl: https://api.prod.whoop.com/oauth/oauth2/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Retrieves the basic profile information (name, email) for the authenticated user.
  - info:
      name: Delete Access
      type: http
    http:
      method: DELETE
      url: https://api.prod.whoop.com/developer/v2/user/access
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.prod.whoop.com/oauth/oauth2/auth
        accessTokenUrl: https://api.prod.whoop.com/oauth/oauth2/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: 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.
- info:
    name: Workout
    type: folder
  items:
  - info:
      name: Get Workout
      type: http
    http:
      method: GET
      url: https://api.prod.whoop.com/developer/v2/activity/workout/:workoutId
      params:
      - name: workoutId
        value: ''
        type: path
        description: ID of the workout to retrieve
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.prod.whoop.com/oauth/oauth2/auth
        accessTokenUrl: https://api.prod.whoop.com/oauth/oauth2/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Get the workout for the specified ID
  - info:
      name: List Workout
      type: http
    http:
      method: GET
      url: https://api.prod.whoop.com/developer/v2/activity/workout
      params:
      - name: limit
        value: ''
        type: query
        description: Limit on the number of workouts returned
      - name: start
        value: ''
        type: query
        description: Return workouts that occurred after or during (inclusive) this time. If not specified, the response will
          not filter workouts by a minimum time.
      - name: end
        value: ''
        type: query
        description: Return workouts that intersect this time or ended before (exclusive) this time. If not specified, `end`
          will be set to `now`.
      - name: nextToken
        value: ''
        type: query
        description: Optional next token from the previous response to get the next page. If not provided, the first page
          in the collection is returned
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.prod.whoop.com/oauth/oauth2/auth
        accessTokenUrl: https://api.prod.whoop.com/oauth/oauth2/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Get all workouts for a user, paginated. Results are sorted by start time in descending order.
bundled: true