Skip to main content

WHOOP

Health metrics from WHOOP wearables can offer detailed insights into individual performance, recovery, and sleep patterns, facilitating more precise health analyses and personalized care plans. This section explains how WHOOP integrates with Avicenna, making it easier for researchers to understand and use the performance-related data of their participants.

Supported WHOOP Metrics in Avicenna

In this section, we list the comprehensive range of WHOOP metrics that Avicenna supports.

WHOOP Sleep

Provides participant's sleep data. It is stored internally as whoop_sleep and includes the following fields:

  • Sleep ID: Unique identifier for the sleep record. Internally recorded as event_id.
  • Start Time: The start time of the sleep. Internally recorded as start_time.
  • End Time: The end time of the sleep. Internally recorded as end_time.
  • Update Time: The time this event was last updated in WHOOP. Internally recorded as updated_at.
  • Timezone Offset: The participant's timezone offset from UTC at the time the workout was recorded. Internally recorded as timezone_offset.
  • Nap: Indicates if the sleep is a nap. Internally recorded as is_nap.
  • Score State: SCORED means the sleep activity was scored and the measurement values will be present (see the next field). PENDING_SCORE means WHOOP is currently evaluating the sleep activity. UNSCORABLE means this activity could not be scored for some reason, commonly because there is not enough participant metric data for the time range. Internally recorded as score_state.
  • Score: WHOOP's measurements and evaluation of the sleep activity. Only present if the Score State is SCORED. It is internally recorded as score and has the following fields:
    • Stage Summary: Summary of the sleep stages. It is internally recorded as stage_summary and includes:
      • Total In-Bed Time: Total time spent in bed, measured in milliseconds. Internally recorded as total_in_bed_time_milli.
      • Total Awake Time: Total time spent awake, measured in milliseconds. Internally recorded as total_awake_time_milli.
      • Total No Data Time: Total time with no data recorded, measured in milliseconds. Internally recorded as total_no_data_time_milli.
      • Total Light Sleep Time: Total time spent in light sleep, measured in milliseconds. Internally recorded as total_light_sleep_time_milli.
      • Total Slow Wave Sleep Time: Total time spent in slow wave sleep, measured in milliseconds. Internally recorded as total_slow_wave_sleep_time_milli.
      • Total REM Sleep Time: Total time spent in REM sleep, measured in milliseconds. Internally recorded as total_rem_sleep_time_milli.
      • Sleep Cycle Count: Number of sleep cycles. Internally recorded as sleep_cycle_count.
      • Disturbance Count: Number of disturbances during sleep. Internally recorded as disturbance_count.
    • Sleep Needed: Breakdown of the amount of sleep a participant needed before the sleep activity. Summing all individual components results in the amount. Internally recorded as sleep_needed and includes:
      • Baseline Sleep Needed: Baseline sleep needed, measured in milliseconds. Internally recorded as baseline_milli.
      • Sleep Needed from Sleep Debt: Sleep needed due to sleep debt, measured in milliseconds. Internally recorded as need_from_sleep_debt_milli.
      • Sleep Needed from Recent Strain: Sleep needed due to a recent strain, measured in milliseconds. Internally recorded as need_from_recent_strain_milli.
      • Sleep Needed from Recent Nap: Sleep needed due to a recent nap, measured in milliseconds. Internally recorded as need_from_recent_nap_milli.
    • Respiratory Rate: Respiratory rate in breaths per minute. Internally recorded as respiratory_rate.
    • Sleep Performance Percentage: Internally recorded as sleep_performance_percentage.
    • Sleep Consistency Percentage: Internally recorded as sleep_consistency_percentage.
    • Sleep Efficiency Percentage: Internally recorded as sleep_efficiency_percentage.

WHOOP Workout

Provides a participant's workout data. It is stored internally as whoop_workout and includes the following fields:

  • Workout ID: Unique identifier for the workout activity. Internally recorded as event_id.
  • Updated At: The time the workout activity was last updated in WHOOP. Internally recorded as updated_at.
  • Start Time: Start time bound of the workout. Internally recorded as start_time.
  • End Time: End time bound of the workout. Internally recorded as end_time.
  • Timezone Offset: The participant's timezone offset from UTC at the time the workout was recorded. Internally recorded as timezone_offset.
  • Sport ID: ID of the WHOOP Sport performed during the workout. Internally recorded as sport_id. You can check WHOOP's reference document for possible values.
  • Score State: SCORED means the workout activity was scored and the measurement values will be present (see the next field). 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 participant metric data for the time range. Internally recorded as score_state.
  • Score: WHOOP's measurements and evaluation of the workout activity. Only present if the Score State is SCORED. It is internally recorded as score and has the following fields:
    • Strain: WHOOP metric of the cardiovascular load which is the level of strain the workout had on the participant's cardiovascular system based on the participant's heart rate. Strain is scored on a scale from 0 to 21. Internally recorded as strain.
    • Average Heart Rate: The participant's average heart rate (beats per minute) during the workout. Internally recorded as average_heart_rate.
    • Max Heart Rate: The participant's max heart rate (beats per minute) during the workout. Internally recorded as max_heart_rate.
    • Kilojoules: Kilojoules the participant expended during the workout. Internally recorded as kilojoule.
    • Percent Recorded: Percentage of heart rate data WHOOP received during the workout. Internally recorded as percent_recorded.
    • Zone Duration: Breakdown of time spent in each heart rate zone during the workout. It is internally recorded as zone_duration and includes:
      • Zone Zero: Time spent with a Heart Rate lower than Zone One [0-50%]. Internally recorded as zone_zero_milli.
      • Zone One: Time spent in Heart Rate Zone One [50-60%]. Internally recorded as zone_one_milli.
      • Zone Two: Time spent in Heart Rate Zone Two [60-70%]. Internally recorded as zone_two_milli.
      • Zone Three: Time spent in Heart Rate Zone Three [70-80%]. Internally recorded as zone_three_milli.
      • Zone Four: Time spent in Heart Rate Zone Four [80-90%]. Internally recorded as zone_four_milli.
      • Zone Five: Time spent in Heart Rate Zone Five [90-100%]. Internally recorded as zone_five_milli.
    • Distance: The distance the participant traveled during the workout. Only present if the distance data is sent to WHOOP. Internally recorded as distance_meter.
    • Altitude Gain: The altitude gained during the workout. This measurement does not account for downward travel; it is strictly a measure of altitude climbed. If a participant 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. Internally recorded as altitude_gain_meter.
    • Altitude Change: The altitude difference between the start and end points of the workout. If a participant 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. Internally recorded as altitude_change_meter.

WHOOP Recovery

Provides participant's recovery data. It is stored internally as whoop_recovery and includes the following fields:

  • Cycle ID: Unique identifier for the recovery cycle. Internally recorded as event_id.
  • Updated At: The time the recovery was last updated in WHOOP. Internally recorded as updated_at.
  • Score State: SCORED means the recovery was scored and the measurement values will be present (see the next field). PENDING_SCORE means WHOOP is currently evaluating the cycle. UNSCORABLE means this cycle could not be scored for some reason, commonly because there is not enough participant metric data for the time range. Internally recorded as score_state.
  • Score: WHOOP's measurements and evaluation of the recovery. Only present if the Score State is SCORED. It is internally recorded as score and has the following fields:
    • Recovery Score: Percentage that reflects how well prepared the participant's body is to take on strain. The recovery score is a measure of the participant's body's "return to baseline" after a stressor. Internally recorded as recovery_score.
    • Resting Heart Rate: The participant's resting heart rate. Internally recorded as resting_heart_rate.
    • HRV RMSSD: The participant's Heart Rate Variability measured using the Root Mean Square of Successive Differences (RMSSD), in milliseconds. Internally recorded as hrv_rmssd_milli.
    • SPO2 Percentage: The percentage of oxygen in the participant's blood. Only present if the participant is on WHOOP 4.0 or greater. Internally recorded as spo2_percentage.
    • Skin Temp Celsius: The participant's skin temperature, in Celsius. Only present if the participant is on WHOOP 4.0 or greater. Internally recorded as skin_temp_celsius.
    • User Calibrating: Indicates if the participant is still calibrating and not enough data is available in WHOOP to provide an accurate recovery. Internally recorded as user_calibrating.

Data Collection Behavior

Whenever there is new WHOOP data, the WHOOP's server will send the new data to Avicenna.

Adding WHOOP As a Data Source

See Accessing Data Sources.

Monitoring WHOOP Data

There are two ways to monitor and export WHOOP data: using the Data Export page and using Kibana.

WHOOP Data Source in Participant App

After a participant joins a study, they need to grant access to Avicenna to collect data. To do that, the participant needs to go to Settings on the Avicenna app and click on My Studies. Then they should choose the study that is collecting WHOOP data. On the study's page, clicking on the Data Sources will take them to the data sources page:

Study's Data Sources page in the Avicenna app

On this page, the participant will see all of the data sources that the study uses to collect data. Among these data sources, on the corner of the WHOOP data source(s), there is a Grant Access button:

Granting access to WHOOP on the Data Sources page

By clicking on the Grant Access button, the participant will be directed to the sign-in page of the WHOOP official website. Then, they can decide whether they want to share those data with Avicenna:

Granting access to WHOOP data

After clicking on Grant, the participant will be redirected to the Data Sources page of the study in the Avicenna app, and they have successfully granted access to Avicenna to gather WHOOP data.

The participants can stop sharing the data anytime by clicking on Revoke Access on the Data Sources page.

Revoking access to WHOOP data