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 stored as event_id.
  • Start Time: The start time of the sleep. Internally stored as start_time.
  • End Time: The end time of the sleep. Internally stored as end_time.
  • Update Time: The time this event was last updated in WHOOP. Internally stored as updated_at.
  • Timezone Offset: The participant’s timezone offset from UTC at the time the sleep was recorded. Internally stored as timezone_offset.
  • Nap: Indicates if the sleep is a nap. Internally stored as is_nap.
  • Score State: Indicates the scoring status of the sleep. Internally stored as score_state. Possible values:
    • SCORED: The sleep activity was scored and the measurement values will be present (see the next field).
    • PENDING_SCORE: WHOOP is currently evaluating the sleep activity.
    • UNSCORABLE: The sleep could not be scored for some reason, commonly because there is not enough participant metric data for the time range.
  • Score: WHOOP’s measurements and evaluation of the sleep activity. Only present if the Score State is SCORED. It is internally stored as score and has the following fields:
    • Stage Summary: Summary of the sleep stages. It is internally stored as stage_summary and includes:
      • Total In-Bed Time: Total time spent in bed, measured in milliseconds. Internally stored as total_in_bed_time_milli.
      • Total Awake Time: Total time spent awake, measured in milliseconds. Internally stored as total_awake_time_milli.
      • Total No Data Time: Total time with no data recorded, measured in milliseconds. Internally stored as total_no_data_time_milli.
      • Total Light Sleep Time: Total time spent in light sleep, measured in milliseconds. Internally stored as total_light_sleep_time_milli.
      • Total Slow Wave Sleep Time: Total time spent in slow wave sleep, measured in milliseconds. Internally stored as total_slow_wave_sleep_time_milli.
      • Total REM Sleep Time: Total time spent in REM sleep, measured in milliseconds. Internally stored as total_rem_sleep_time_milli.
      • Sleep Cycle Count: Number of sleep cycles. Internally stored as sleep_cycle_count.
      • Disturbance Count: Number of disturbances during sleep. Internally stored 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 stored as sleep_needed and includes:
      • Baseline Sleep Needed: Baseline sleep needed, measured in milliseconds. Internally stored as baseline_milli.
      • Sleep Needed from Sleep Debt: Sleep needed due to sleep debt, measured in milliseconds. Internally stored as need_from_sleep_debt_milli.
      • Sleep Needed from Recent Strain: Sleep needed due to a recent strain, measured in milliseconds. Internally stored as need_from_recent_strain_milli.
      • Sleep Needed from Recent Nap: Sleep needed due to a recent nap, measured in milliseconds. Internally stored as need_from_recent_nap_milli.
    • Respiratory Rate: Respiratory rate, in breaths per minute. Internally stored as respiratory_rate.
    • Sleep Performance Percentage: Internally stored as sleep_performance_percentage.
    • Sleep Consistency Percentage: Internally stored as sleep_consistency_percentage.
    • Sleep Efficiency Percentage: Internally stored 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 stored as event_id.
  • Updated At: The time the workout activity was last updated in WHOOP. Internally stored as updated_at.
  • Start Time: Start time bound of the workout. Internally stored as start_time.
  • End Time: End time bound of the workout. Internally stored as end_time.
  • Timezone Offset: The participant’s timezone offset from UTC at the time the workout was recorded. Internally stored as timezone_offset.
  • Sport ID: ID of the WHOOP Sport performed during the workout. Internally stored as sport_id. You can check WHOOP’s reference document for possible values.
  • Score State: Indicates the scoring status of the workout. Internally stored as score_state. Possible values:
    • SCORED: The workout activity was scored and the measurement values will be present (see the next field).
    • PENDING_SCORE: WHOOP is currently evaluating the workout activity.
    • UNSCORABLE: This activity could not be scored for some reason, commonly because there is not enough participant metric data for the time range.
  • 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 stored as strain.
    • Average Heart Rate: The participant’s average heart rate during the workout, in beats per minute. Internally stored as average_heart_rate.
    • Max Heart Rate: The participant’s max heart rate during the workout, in beats per minute. Internally stored as max_heart_rate.
    • Kilojoules: Kilojoules the participant expended during the workout. Internally stored as kilojoule.
    • Percent Recorded: Percentage of heart rate data WHOOP received during the workout. Internally stored as percent_recorded.
    • Zone Duration: Breakdown of time spent in each heart rate zone during the workout. It is internally stored as zone_duration and includes:
      • Zone Zero: Time spent with a Heart Rate lower than Zone One [0-50%]. Internally stored as zone_zero_milli.
      • Zone One: Time spent in Heart Rate Zone One [50-60%]. Internally stored as zone_one_milli.
      • Zone Two: Time spent in Heart Rate Zone Two [60-70%]. Internally stored as zone_two_milli.
      • Zone Three: Time spent in Heart Rate Zone Three [70-80%]. Internally stored as zone_three_milli.
      • Zone Four: Time spent in Heart Rate Zone Four [80-90%]. Internally stored as zone_four_milli.
      • Zone Five: Time spent in Heart Rate Zone Five [90-100%]. Internally stored as zone_five_milli.
    • Distance: The distance the participant traveled during the workout. Only present if the distance data is sent to WHOOP. Internally stored 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 stored 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 stored as event_id.
  • Sleep ID: ID of the sleep associated with the recovery. If no sleep is associated with the recovery, defaults to -1. Internally stored as sleep_id.
  • Updated At: The time the recovery was last updated in WHOOP. Internally stored as updated_at.
  • Score State: Indicates the scoring status of the recovery. Internally stored as score_state.
    • SCORED: The recovery was scored and the measurement values will be present (see the next field).
    • PENDING_SCORE: WHOOP is currently evaluating the cycle.
    • UNSCORABLE: This cycle could not be scored for some reason, commonly because there is not enough participant metric data for the time range.
  • Score: WHOOP’s measurements and evaluation of the recovery. Only present if the Score State is SCORED. It is internally stored 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 stored as recovery_score.
    • Resting Heart Rate: The participant’s resting heart rate. Internally stored 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 stored 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 stored 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 stored 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 stored 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 Adding Data Sources.

Monitoring and Exporting WHOOP Data

You can monitor and export WHOOP data using Kibana.

WHOOP Data Source in Participant App

After joining a study, participants must grant Avicenna access to collect their WHOOP data.

  1. Go to the study homepage on the Avicenna app.

  2. Click the Data Sources button at the bottom of the page to view the study’s data sources

  3. Find the WHOOP data source(s) and tap the Grant Access button.

  4. You will be redirected to the Polar official website to sign in and authorize Avicenna.

  5. Click Grant. You will be redirected back to the Avicenna app’s Data Sources page. Access has now been granted.

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