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 asscoreand has the following fields:- Stage Summary: Summary of the sleep stages. It is internally stored as
stage_summaryand 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.
- Total In-Bed Time: Total time spent in bed, measured in milliseconds. Internally stored as
- 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_neededand 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.
- Baseline Sleep Needed: Baseline sleep needed, measured in milliseconds. Internally stored as
- 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.
- Stage Summary: Summary of the sleep stages. It is internally stored as
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 asscoreand 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_durationand 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.
- Zone Zero: Time spent with a Heart Rate lower than Zone One [0-50%]. Internally stored as
- 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.
- 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
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 asscoreand 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.
- 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
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.
-
Go to the study homepage on the Avicenna app.
-
Click the Data Sources button at the bottom of the page to view the study’s data sources
-
Find the WHOOP data source(s) and tap the Grant Access button.
-
You will be redirected to the Polar official website to sign in and authorize Avicenna.
-
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.



