Skip to main content

Documentation Index

Fetch the complete documentation index at: https://openwearables.io/docs/llms.txt

Use this file to discover all available pages before exploring further.

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 + webhook)
  • Data synced via periodic polling; real-time webhook notifications for exercise, sleep, activity, nightly recharge, and Sleepwise events
  • Webhooks are notify-only: Polar sends a lightweight event payload, Open Wearables acknowledges immediately and enqueues a targeted sync for the affected data type
  • Full sleep processing with stages (deep, light, REM, awake), duration, time in bed, and stage timestamps from hypnogram; sleep efficiency not available in the API
  • Sleep HR timeseries saved from per-night heart rate samples (not summarised avg/min on the sleep record)
  • Continuous 24/7 heart rate sampled at ~5-min intervals via range endpoint (90-day lookback)
  • Daily activity: steps, active calories, and walking/running distance from /v3/users/activities
  • Health scores: sleep score, Nightly Recharge (recovery), Cardio Load (strain)
  • Sleepwise Alertness and Circadian Bedtime scores require an active Polar Sleepwise subscription
  • Body temperature, sleep skin temperature, SpO2, and wrist ECG (HRV RMSSD) require a Polar Elixir device
  • HRV RMSSD available from Elixir SpO2 spot tests and wrist ECG measurements; not available from standard devices; SDNN not provided
  • 75+ workout type mappings to unified taxonomy
  • Exercises fetched from /v3/exercises (all exercises in Polar Flow for the connected user; no date filter)
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 + webhook)
  • Data synced via periodic polling (default: every hour) and real-time webhook notifications for workout, sleep, and recovery events
  • 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"