Skip to main content
This guide provides a comprehensive overview of data type support across all integrated wearable providers. Use this matrix to understand what data you can expect when integrating with specific devices.

Quick Overview

CapabilityAppleGarminPolarSuuntoOuraWhoopUltrahumanStrava
OAuthβŒβœ…βœ…βœ…βœ…βœ…βœ…βœ…
Workoutsβœ…βœ…βœ…βœ…βœ…βœ…βŒβœ…
Sleepβœ…βœ…βŒβœ…βœ…βœ…βœ…βŒ
24/7 Dataβœ…βœ…βŒβœ…βœ…β—βœ…βŒ
Timeseriesβœ…βœ…β—βœ…βœ…βŒβœ…βŒ
Health ScoresβŒβœ…βŒβŒβœ…βœ…βŒβŒ
  • βœ… 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 TypeUnitAppleGarminPolarSuuntoOuraWhoopUltrahumanStrava
heart_ratebpmβœ…βœ…β—βœ…βœ…βŒβœ…βŒ
resting_heart_ratebpmβœ…βœ…βŒβŒβŒβœ…πŸ”œβŒ
heart_rate_variability_sdnnmsβœ…βœ…β—βŒβŒβŒβœ…βŒ
heart_rate_variability_rmssdmsβŒβœ…βŒβœ…βŒβœ…βŒβŒ
heart_rate_recovery_one_minutebpmβœ…βŒβŒβŒβŒβŒβŒβŒ
walking_heart_rate_averagebpmβœ…βŒβŒβŒβŒβŒβŒβŒ
  • βœ… 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 TypeUnitAppleGarminPolarSuuntoOuraWhoopUltrahumanStrava
oxygen_saturation%βœ…βœ…βŒβœ…βœ…βœ…βŒβŒ
blood_glucosemg/dLβœ…βŒβŒβŒβŒβŒβŒβŒ
blood_pressure_systolicmmHgβœ…βœ…βŒβŒβŒβŒβŒβŒ
blood_pressure_diastolicmmHgβœ…βœ…βŒβŒβŒβŒβŒβŒ
respiratory_ratebrpmβœ…βœ…βŒβŒβŒπŸ”œβŒβŒ
sleeping_breathing_disturbancescount❌❌❌❌❌❌❌❌

Body Composition

Data TypeUnitAppleGarminPolarSuuntoOuraWhoopUltrahumanStrava
heightcmβœ…βŒπŸ”œβŒβœ…βœ…βŒβŒ
weightkgβœ…βœ…πŸ”œβŒβœ…βœ…βŒβŒ
body_fat_percentage%βœ…βœ…βŒβŒβŒβŒβŒβŒ
body_mass_indexkg/mΒ²βœ…βœ…βŒβŒβŒβŒβŒβŒ
lean_body_masskgβœ…βŒβŒβŒβŒβŒβŒβŒ
body_temperatureΒ°Cβœ…βŒβŒβŒβŒβœ…βœ…βŒ
skin_temperatureΒ°CβŒβœ…βŒβŒβŒβŒβŒβŒ
skin_temperature_deviationΒ°CβŒβŒβŒβŒβœ…βŒβŒβŒ
skin_temperature_trend_deviationΒ°CβŒβŒβŒβŒβœ…βŒβŒβŒ

Fitness Metrics

Data TypeUnitAppleGarminPolarSuuntoOuraWhoopUltrahumanStrava
vo2_maxmL/kg/minβœ…βœ…βŒβŒβœ…βŒβœ…βŒ
cardiovascular_ageyearsβŒβŒβŒβŒβœ…βŒβŒβŒ
six_minute_walk_test_distancemetersβœ…βŒβŒβŒβŒβŒβŒβŒ
recovery_scorescoreβŒβŒβŒβœ…βœ…βœ…βŒβŒ

Activity - Basic

Data TypeUnitAppleGarminPolarSuuntoOuraWhoopUltrahumanStrava
stepscountβœ…βœ…βŒβœ…βœ…βŒβœ…βŒ
energykcalβœ…βœ…β—βœ…βœ…βŒβŒβŒ
basal_energykcalβœ…βŒβŒβŒβŒβŒβŒβŒ
stand_timeminutesβœ…βŒβŒβŒβŒβŒβŒβŒ
exercise_timeminutesβœ…βŒβŒβŒβŒβŒβŒβŒ
physical_effortscoreβŒβŒβŒβŒβŒπŸ”œβŒβŒ
flights_climbedcountβœ…βœ…βŒβŒβŒβŒβŒβŒ

Activity - Distance

Data TypeUnitAppleGarminPolarSuuntoOuraWhoopUltrahumanStrava
distance_walking_runningmetersβœ…βœ…β—β—βœ…βŒβŒβŒ
distance_cyclingmetersβœ…βŒβ—β—βŒβŒβŒβŒ
distance_swimmingmetersβœ…βŒβ—β—βŒβŒβŒβŒ
distance_downhill_snow_sportsmetersβœ…βŒβ—β—βŒβŒβŒβŒ

Activity - Walking Metrics

Data TypeUnitAppleGarminPolarSuuntoOuraWhoopUltrahumanStrava
walking_step_lengthcmβœ…βŒβŒβŒβŒβŒβŒβŒ
walking_speedm/sβœ…βŒβŒβŒβŒβŒβŒβŒ
walking_double_support_percentage%βœ…βŒβŒβŒβŒβŒβŒβŒ
walking_asymmetry_percentage%βœ…βŒβŒβŒβŒβŒβŒβŒ
walking_steadiness%βœ…βŒβŒβŒβŒβŒβŒβŒ
stair_descent_speedm/sβœ…βŒβŒβŒβŒβŒβŒβŒ
stair_ascent_speedm/sβœ…βŒβŒβŒβŒβŒβŒβŒ

Activity - Running Metrics

Data TypeUnitAppleGarminPolarSuuntoOuraWhoopUltrahumanStrava
running_powerwattsβœ…βŒβ—β—βŒβŒβŒβŒ
running_speedm/sβœ…βŒβ—β—βŒβŒβŒβŒ
running_vertical_oscillationcmβœ…βŒβŒβŒβŒβŒβŒβŒ
running_ground_contact_timemsβœ…βŒβŒβŒβŒβŒβŒβŒ
running_stride_lengthcmβœ…βŒβŒβ—βŒβŒβŒβŒ

Activity - Other

Data TypeUnitAppleGarminPolarSuuntoOuraWhoopUltrahumanStrava
swimming_stroke_countcountβœ…βŒβ—β—βŒβŒβŒβŒ
cadencerpmβŒβŒβ—β—βŒβŒβŒβŒ
powerwattsβŒβŒβ—β—βŒβŒβŒβŒ

Provider-Specific Metrics

These metrics are unique to specific providers and don’t have a universal equivalent across devices.
Data TypeUnitProviderDescription
garmin_stress_levelscoreGarminStress score (1-100) based on HRV analysis
garmin_body_battery%GarminEnergy level indicator (0-100)
garmin_fitness_ageyearsGarminEstimated fitness age based on VO2 max and activity

Environmental

Data TypeUnitAppleGarminPolarSuuntoOuraWhoopUltrahumanStrava
environmental_audio_exposuredBβœ…βŒβŒβŒβŒβŒβŒβŒ
headphone_audio_exposuredBβœ…βŒβŒβŒβŒβŒβŒβŒ

Sleep Data Coverage

Sleep tracking varies significantly across providers. Here’s what each provider offers:
FeatureAppleGarminPolarSuuntoOuraWhoopUltrahumanStrava
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:
FeatureAppleGarminPolarSuuntoOuraWhoopUltrahumanStrava
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βŒπŸ”œπŸ”œπŸ”œβŒβŒβŒβŒ
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.
ScoreInternalAppleGarminPolarSuuntoOuraWhoopUltrahumanStrava
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:
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
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)
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
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
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_health OAuth 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_deviation and temperature_trend_deviation reflect skin temperature relative to baseline (not absolute body temperature)
  • Backfill defaults to 30 days when no date range is specified
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
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
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:
MetricUnit
Heart ratebpm
HRVms
Distancemeters
Weightkg
Heightcm
TemperatureΒ°C
Energykcal
Durationseconds
Speedm/s
Blood glucosemg/dL

Timestamp Handling

All timestamps are normalized to UTC with timezone information preserved when available:
{
  "timestamp": "2025-01-07T14:30:00Z",
  "type": "heart_rate",
  "value": 72,
  "unit": "bpm"
}

Checking User Data Availability

To see what data is available for a specific user, query the connections endpoint:
curl -X GET "https://api.openwearables.com/api/v1/users/{user_id}/connections" \
  -H "X-Open-Wearables-API-Key: YOUR_API_KEY"
Response shows which providers are connected:
[
  {
    "provider": "suunto",
    "status": "active",
    "last_synced_at": "2025-01-07T10:30:00Z"
  },
  {
    "provider": "apple",
    "status": "active",
    "last_synced_at": "2025-01-07T14:22:00Z"
  }
]
Then query the timeseries endpoint to see available data:
curl -X GET "https://api.openwearables.com/api/v1/users/{user_id}/timeseries\
?start_time=2025-01-01T00:00:00Z\
&end_time=2025-01-07T23:59:59Z" \
  -H "X-Open-Wearables-API-Key: YOUR_API_KEY"