Quick Overview
| Capability | Apple | Garmin | Polar | Suunto | Oura | Whoop | Ultrahuman | Strava |
|---|---|---|---|---|---|---|---|---|
| OAuth | β | β | β | β | β | β | β | β |
| Workouts | β | β | β | β | β | β | β | β |
| Sleep | β | β | β | β | β | β | β | β |
| 24/7 Data | β | β | β | β | β | β | β | β |
| Timeseries | β | β | β | β | β | β | β | β |
| Health Scores | β | β | β | β | β | β | β | β |
Legend
Legend
- β Full support β Fully implemented and collecting data
- β Partial β Limited data or only during certain contexts (e.g., workouts only)
- π Coming soon β Provider API supports this, processing not yet implemented
- β Not available β Provider doesnβt support this or not applicable
Timeseries = Granular, timestamped data points (heart rate samples, step counts, HRV readings) available via the
/timeseries API endpoint.24/7 Data = Continuous health monitoring throughout the day (not just during workouts), including resting heart rate, HRV during sleep, SpO2 spot checks, and daily activity samples.Detailed Coverage Matrix
Heart & Cardiovascular
| Data Type | Unit | Apple | Garmin | Polar | Suunto | Oura | Whoop | Ultrahuman | Strava |
|---|---|---|---|---|---|---|---|---|---|
heart_rate | bpm | β | β | β | β | β | β | β | β |
resting_heart_rate | bpm | β | β | β | β | β | β | π | β |
heart_rate_variability_sdnn | ms | β | β | β | β | β | β | β | β |
heart_rate_variability_rmssd | ms | β | β | β | β | β | β | β | β |
heart_rate_recovery_one_minute | bpm | β | β | β | β | β | β | β | β |
walking_heart_rate_average | bpm | β | β | β | β | β | β | β | β |
Legend
Legend
- β Full support β Available as time series data
- β Partial β Currently available only within workout/activity context
- π Coming soon β Provider API supports this, processing not yet implemented
- β Not available β Provider does not offer this data type
Blood & Respiratory
| Data Type | Unit | Apple | Garmin | Polar | Suunto | Oura | Whoop | Ultrahuman | Strava |
|---|---|---|---|---|---|---|---|---|---|
oxygen_saturation | % | β | β | β | β | β | β | β | β |
blood_glucose | mg/dL | β | β | β | β | β | β | β | β |
blood_pressure_systolic | mmHg | β | β | β | β | β | β | β | β |
blood_pressure_diastolic | mmHg | β | β | β | β | β | β | β | β |
respiratory_rate | brpm | β | β | β | β | β | π | β | β |
sleeping_breathing_disturbances | count | β | β | β | β | β | β | β | β |
Body Composition
| Data Type | Unit | Apple | Garmin | Polar | Suunto | Oura | Whoop | Ultrahuman | Strava |
|---|---|---|---|---|---|---|---|---|---|
height | cm | β | β | π | β | β | β | β | β |
weight | kg | β | β | π | β | β | β | β | β |
body_fat_percentage | % | β | β | β | β | β | β | β | β |
body_mass_index | kg/mΒ² | β | β | β | β | β | β | β | β |
lean_body_mass | kg | β | β | β | β | β | β | β | β |
body_temperature | Β°C | β | β | β | β | β | β | β | β |
skin_temperature | Β°C | β | β | β | β | β | β | β | β |
skin_temperature_deviation | Β°C | β | β | β | β | β | β | β | β |
skin_temperature_trend_deviation | Β°C | β | β | β | β | β | β | β | β |
Fitness Metrics
| Data Type | Unit | Apple | Garmin | Polar | Suunto | Oura | Whoop | Ultrahuman | Strava |
|---|---|---|---|---|---|---|---|---|---|
vo2_max | mL/kg/min | β | β | β | β | β | β | β | β |
cardiovascular_age | years | β | β | β | β | β | β | β | β |
six_minute_walk_test_distance | meters | β | β | β | β | β | β | β | β |
recovery_score | score | β | β | β | β | β | β | β | β |
Activity - Basic
| Data Type | Unit | Apple | Garmin | Polar | Suunto | Oura | Whoop | Ultrahuman | Strava |
|---|---|---|---|---|---|---|---|---|---|
steps | count | β | β | β | β | β | β | β | β |
energy | kcal | β | β | β | β | β | β | β | β |
basal_energy | kcal | β | β | β | β | β | β | β | β |
stand_time | minutes | β | β | β | β | β | β | β | β |
exercise_time | minutes | β | β | β | β | β | β | β | β |
physical_effort | score | β | β | β | β | β | π | β | β |
flights_climbed | count | β | β | β | β | β | β | β | β |
Activity - Distance
| Data Type | Unit | Apple | Garmin | Polar | Suunto | Oura | Whoop | Ultrahuman | Strava |
|---|---|---|---|---|---|---|---|---|---|
distance_walking_running | meters | β | β | β | β | β | β | β | β |
distance_cycling | meters | β | β | β | β | β | β | β | β |
distance_swimming | meters | β | β | β | β | β | β | β | β |
distance_downhill_snow_sports | meters | β | β | β | β | β | β | β | β |
Activity - Walking Metrics
| Data Type | Unit | Apple | Garmin | Polar | Suunto | Oura | Whoop | Ultrahuman | Strava |
|---|---|---|---|---|---|---|---|---|---|
walking_step_length | cm | β | β | β | β | β | β | β | β |
walking_speed | m/s | β | β | β | β | β | β | β | β |
walking_double_support_percentage | % | β | β | β | β | β | β | β | β |
walking_asymmetry_percentage | % | β | β | β | β | β | β | β | β |
walking_steadiness | % | β | β | β | β | β | β | β | β |
stair_descent_speed | m/s | β | β | β | β | β | β | β | β |
stair_ascent_speed | m/s | β | β | β | β | β | β | β | β |
Activity - Running Metrics
| Data Type | Unit | Apple | Garmin | Polar | Suunto | Oura | Whoop | Ultrahuman | Strava |
|---|---|---|---|---|---|---|---|---|---|
running_power | watts | β | β | β | β | β | β | β | β |
running_speed | m/s | β | β | β | β | β | β | β | β |
running_vertical_oscillation | cm | β | β | β | β | β | β | β | β |
running_ground_contact_time | ms | β | β | β | β | β | β | β | β |
running_stride_length | cm | β | β | β | β | β | β | β | β |
Activity - Other
| Data Type | Unit | Apple | Garmin | Polar | Suunto | Oura | Whoop | Ultrahuman | Strava |
|---|---|---|---|---|---|---|---|---|---|
swimming_stroke_count | count | β | β | β | β | β | β | β | β |
cadence | rpm | β | β | β | β | β | β | β | β |
power | watts | β | β | β | β | β | β | β | β |
Provider-Specific Metrics
These metrics are unique to specific providers and donβt have a universal equivalent across devices.| Data Type | Unit | Provider | Description |
|---|---|---|---|
garmin_stress_level | score | Garmin | Stress score (1-100) based on HRV analysis |
garmin_body_battery | % | Garmin | Energy level indicator (0-100) |
garmin_fitness_age | years | Garmin | Estimated fitness age based on VO2 max and activity |
Environmental
| Data Type | Unit | Apple | Garmin | Polar | Suunto | Oura | Whoop | Ultrahuman | Strava |
|---|---|---|---|---|---|---|---|---|---|
environmental_audio_exposure | dB | β | β | β | β | β | β | β | β |
headphone_audio_exposure | dB | β | β | β | β | β | β | β | β |
Sleep Data Coverage
Sleep tracking varies significantly across providers. Hereβs what each provider offers:| Feature | Apple | Garmin | Polar | Suunto | Oura | Whoop | Ultrahuman | Strava |
|---|---|---|---|---|---|---|---|---|
| Sleep sessions | β | β | π | β | β | β | β | β |
| Total duration | β | β | π | β | β | β | β | β |
| Time in bed | β | β | π | β | β | β | β | β |
| Sleep efficiency | π | β | π | β | β | β | β | β |
| Sleep Stages | ||||||||
| Stage timestamps | β | β | π | β | β | π | π | β |
| Deep sleep | β | β | π | β | β | β | β | β |
| Light sleep | β | β | π | β | β | β | β | β |
| REM sleep | β | β | π | β | β | β | β | β |
| Awake time | β | β | π | β | β | β | β | β |
| Biometrics During Sleep | ||||||||
| Average heart rate | π | β | π | β | π | β | β | β |
| Min heart rate | π | β | π | β | π | β | β | β |
| Average HRV | π | π | β | β | π | β | β | β |
| SpO2 | π | π | β | β | β | β | β | β |
| Respiration rate | π | π | β | β | β | β | β | β |
| Nap detection | π | π | β | β | β | β | β | β |
π = Data available from provider API/SDK but processing not yet implemented in Open Wearables.
Workout Data Coverage
All providers that support workouts provide these common fields:| Feature | Apple | Garmin | Polar | Suunto | Oura | Whoop | Ultrahuman | Strava |
|---|---|---|---|---|---|---|---|---|
| Workout sessions | β | β | β | β | β | β | β | β |
| Duration | β | β | β | β | β | β | β | β |
| Start/end time | β | β | β | β | β | β | β | β |
| Workout type | β | β | β | β | β | β | β | β |
| Device name | β | β | β | β | β | β | β | β |
| Heart Rate | ||||||||
| Avg heart rate | β | β | β | β | β | β | β | β |
| Max heart rate | β | β | β | β | β | β | β | β |
| Min heart rate | β | π | β | β | β | β | β | β |
| Activity Metrics | ||||||||
| Calories burned | β | β | β | β | β | β | β | β |
| Distance | β | β | β | β | β | β | β | β |
| Steps | β | β | β | β | β | β | β | β |
| Moving time | π | π | π | β | β | β | β | β |
| Speed & Power | ||||||||
| Average speed | β | β | π | β | β | β | β | β |
| Max speed | β | π | π | β | β | β | β | β |
| Average watts | β | π | π | β | β | β | β | β |
| Max watts | π | π | π | β | β | β | β | β |
| Elevation | ||||||||
| Total elevation gain | β | β | π | β | β | β | β | β |
| Elevation high | β | π | π | β | β | β | β | β |
| Elevation low | β | π | π | β | β | β | β | β |
| Other | ||||||||
| GPS route | β | π | π | π | β | β | β | β |
Apple Workout Data Note
Apple Workout Data Note
Most workout metrics are supported via HealthKit SDK (heart rate, calories, distance, steps, speed, power, elevation). Moving time and max watts are not yet implemented.
Workout types are normalized to a unified taxonomy. See Data Types for the full list of supported workout types.
Health Scores Coverage
Health scores are composite metrics that summarize a specific aspect of health into a single number. Open Wearables persists scores natively reported by providers and additionally calculates its own provider-independent scores from raw data.| Score | Internal | Apple | Garmin | Polar | Suunto | Oura | Whoop | Ultrahuman | Strava |
|---|---|---|---|---|---|---|---|---|---|
| Sleep score | π | β | β | β | β | β | β | β | β |
| Readiness score | β | β | β | β | β | β | β | β | β |
| Activity score | β | β | β | β | β | β | β | β | β |
| Recovery score | β | β | β | β | β | β | β | β | β |
| Resilience score | π | β | β | β | β | β | β | β | β |
| Stress score | β | β | β | β | β | β | β | β | β |
| Body battery | β | β | β | β | β | β | β | β | β |
| Strain score | β | β | β | β | β | β | β | β | β |
Internal scores are calculated by Open Wearables from raw data, independent of any provider. They are available for any provider that reports the required underlying data.
π = Coming soon. For provider columns: score is exposed in the provider API but ingestion is not yet implemented. For the Internal column: Open Wearables-calculated score is planned but not yet implemented.
Provider Quirks
Key differences and limitations to be aware of when working with each provider:Apple Health
Apple Health
Integration Method: Push-based via SDK (no OAuth)
- Data arrives via client SDK push, not server-to-server sync
- Workouts (most metrics), sleep (stages, duration), and 100+ health record types via HealthKit SDK
- Most comprehensive data coverage (100+ metric types)
- Full sleep processing with stages (deep, light, REM, awake), duration, and time in bed
- Sleep biometrics (HR, HRV, SpO2 during sleep) not yet extracted as part of sleep records
- Some walking metrics require iPhone in pocket during activity
- HRV is measured as SDNN, typically during sleep or rest periods
Garmin
Garmin
Integration Method: OAuth 2.0 + Webhooks
- Webhooks push data for 16 data types: activities, sleep, dailies, epochs, body composition, HRV, stress, respiration, pulse ox, blood pressure, user metrics, skin temperature, health snapshots, activity details, Move IQ, and menstrual cycle tracking
- Full sleep processing with stages (deep, light, REM, awake), duration, efficiency score, and heart rate biometrics
- Continuous 24/7 timeseries data: heart rate, steps, energy, HRV (RMSSD, overnight sleep window), stress levels, body battery, respiratory rate, SpO2, and more
- Body composition from Garmin Index scale: weight, body fat %, BMI
- Garmin-specific metrics: stress level, body battery, fitness age, skin temperature
- 135+ workout type mappings to unified taxonomy
- Workout details include distance, calories, avg/max heart rate, elevation gain, and average speed
- Backfill orchestration for historical data retrieval (up to 5 years)
Polar
Polar
Integration Method: OAuth 2.0 (pull-based)
- No webhooks or 24/7 continuous data β workouts only
- βSleepβ in API is activity zone detection (lying down), not sleep stage analysis
- RR interval (HRV) data requires Polar H6, H7, H9, or H10 chest strap sensors
- Calories and distance extracted from exercise data
- 75+ workout type mappings to unified taxonomy
Suunto
Suunto
Integration Method: OAuth 2.0 + 24/7 Data API
- Most complete cloud-based provider (workouts + sleep + continuous data)
- Full sleep analysis with stages and biometrics (HR, HRV, SpO2)
- Activity samples include heart rate, steps, SpO2, energy, and HRV
- HRV measured as RMSSD, available during activity and sleep
- Daily activity statistics for aggregated steps and energy
- 121+ workout type mappings to unified taxonomy
- Recovery data: Balance score (0-100) mapped to recovery_score
Oura
Oura
Integration Method: OAuth 2.0 + Webhooks
- Webhooks push real-time notifications for: daily activity, daily readiness, daily sleep, daily SpO2, and workouts
- Full sleep processing with stages (deep, light, REM, awake), duration, time in bed, efficiency score, stage timestamps, and nap detection
- Sleep biometrics (average HR, lowest HR, average HRV) are available from the API but not yet persisted per sleep record
- Continuous 24/7 timeseries: heart rate (5-min intervals), daily SpO2, steps, active calories, walking distance
- Recovery data from daily readiness: recovery score, skin temperature deviation, and skin temperature trend deviation
- Fitness metrics: VO2 max (daily estimate) and cardiovascular age β both require the
heart_healthOAuth scope - Personal info sync: height and weight from user profile
- Oura does not expose heart rate data during workouts via API; workout records include only duration, type, calories, and distance
temperature_deviationandtemperature_trend_deviationreflect skin temperature relative to baseline (not absolute body temperature)- Backfill defaults to 30 days when no date range is specified
Whoop
Whoop
Integration Method: OAuth 2.0 (pull-based polling)
- Data synced via periodic polling (default: every hour); Whoop supports webhooks but handler not yet implemented
- Full workout support with 145+ workout type mappings to unified taxonomy
- Workout metrics include: avg/max heart rate, calories, distance, elevation gain, moving time
- Continuous heart rate data is not available via API (only during workouts)
- Does not track steps (device limitation)
- Sleep data fully implemented with all stages and efficiency
- Recovery data fully implemented: recovery score, resting heart rate, HRV (RMSSD), SpO2, skin temperature
- Body measurements (height, weight) synced from user profile
- Strain scores available but not yet implemented
Ultrahuman
Ultrahuman
Integration Method: OAuth 2.0 (pull-based polling)
- Data synced via periodic polling (default: every hour); Ultrahuman does not support webhooks
- Daily metrics endpoint returns all data types for a single day: sleep, HR, HRV, skin temperature, steps, VO2 max, recovery indices
- Full sleep processing with stages (deep, light, REM, awake), duration, time in bed, and efficiency score
- Continuous 24/7 timeseries: heart rate, HRV (SDNN), skin temperature, steps
- VO2 max as a daily aggregate value
- Recovery metrics (recovery index, movement index, metabolic score) are normalized but not yet persisted
- No workout/activity data available via the Partnership API
- Skin temperature values are typically lower than core body temperature (~29-37Β°C)
- Backfill defaults to 30 days when no date range is specified
Strava
Strava
Integration Method: OAuth 2.0 + Webhooks
- Activity/workout platform only β no sleep, HRV, or continuous health data
- Real-time webhook notifications for new and updated activities
- 50+ sport type mappings to unified taxonomy (SportType) plus legacy ActivityType support
- Workout metrics include: avg/max heart rate, distance, avg/max speed, avg/max watts, elevation (gain/high/low), calories, moving time, device name
- Calories fall back to kilojoules when calorie data is not available from the API
- Only one webhook subscription allowed per application
- Webhook must respond with HTTP 200 within 2 seconds; retries up to 3 times on failure
Data Normalization
Open Wearables normalizes all incoming data to consistent units and formats:Unit Standardization
All data is normalized to these canonical units:| Metric | Unit |
|---|---|
| Heart rate | bpm |
| HRV | ms |
| Distance | meters |
| Weight | kg |
| Height | cm |
| Temperature | Β°C |
| Energy | kcal |
| Duration | seconds |
| Speed | m/s |
| Blood glucose | mg/dL |

