---
title: "Which wearable APIs expose which metrics"
canonical: "https://aifitnessapi.com/tools/api-coverage-matrix"
markdown: "https://aifitnessapi.com/tools/api-coverage-matrix.md"
type: "tool"
last_reviewed: "2026-11-05"
description: "Which wearable and fitness APIs document heart rate, HRV, sleep, SpO2, glucose and more, at what resolution, how far back, and by webhook or pull. Sourced."
publisher: "AIFitnessAPI — funded by KinesteX; first-party pages disclose it"
cite_as: "\"Which wearable APIs expose which metrics\", AIFitnessAPI, https://aifitnessapi.com/tools/api-coverage-matrix"
---

# Which wearable APIs expose which metrics

> Which wearable and fitness APIs document which health metrics, at what data resolution, how far back you can read, and whether they push data by webhook: 14 vendors by 13 metrics, each mark linked to the vendor page that states it and quoted. 75 cells are documented, 2 are ones the vendor says it does not offer, and 105 are not stated in the pages read and shown as unknown rather than guessed. 12 of the 14 document a webhook or push. Sources were read between 2026-10-17 and 2026-11-05; filter by metric or vendor and share the view by URL.

- Canonical: https://aifitnessapi.com/tools/api-coverage-matrix
- Last reviewed: 2026-11-05
- Publisher: AIFitnessAPI (https://aifitnessapi.com)
- Cite as: "Which wearable APIs expose which metrics", AIFitnessAPI, https://aifitnessapi.com/tools/api-coverage-matrix

---

*[Interactive: filters by metric, vendor and webhook support, with the view kept in the URL, in the browser at https://aifitnessapi.com/tools/api-coverage-matrix; not reproduced in this mirror.]*

| Vendor | Heart rate | HRV or beat intervals | Sleep | Steps and daily activity | Workouts | GPS route | Blood oxygen (SpO2) | Respiration | Body or skin temperature | Weight and body composition | VO2 max | Glucose | Stress, recovery or readiness |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Oura (Cloud API) | ✓ 5-minute increments | ? | ✓ | ✓ Daily summary | ? | ? | ✓ Daily average | ? | ? | ✓ | ✓ | ? | ✓ Daily |
| WHOOP (Cloud API) | ✓ Average per cycle or workout | ✓ Per recovery | ✓ | ✓ Total per cycle | ✓ | ? | ? | ? | ? | ✓ | ? | ? | ✓ |
| Garmin (Cloud API) | ✓ | ✓ | ✓ | ✓ Epoch summaries (interval not stated) | ✓ | ? | ✓ | ✓ | ? | ✓ | ? | ? | ✓ |
| Polar AccessLink (Cloud API) | ✓ 5-minute intervals | ? | ✓ | ✓ Daily | ✓ | ✓ | ✓ | ? | ✓ | ? | ? | ? | ? |
| Withings (Cloud API) | ✓ | ? | ✓ | ✓ | ✓ | ? | ? | ? | ? | ✓ | ? | ✓ | ? |
| Strava (Cloud API) | ? | ? | ? | ? | ✓ | ? | ? | ? | ? | ? | ? | ? | ? |
| Suunto (Cloud API) | ✓ Per-sample in FIT (rate not stated) | ✓ | ✗ | ✓ Daily | ✓ | ✓ | ? | ? | ? | ✗ | ? | ? | ? |
| COROS (Cloud API) | ✓ Daily | ✓ Daily | ? | ✓ Daily | ✓ | ✓ | ? | ? | ? | ? | ✓ | ? | ✓ |
| Wahoo (Cloud API) | ? | ? | ? | ? | ✓ | ? | ? | ? | ? | ? | ? | ? | ? |
| Dexcom (Cloud API) | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ✓ | ? |
| Concept2 Logbook (Cloud API) | ? | ? | ? | ? | ✓ Stroke data per workout | ? | ? | ? | ? | ? | ? | ? | ? |
| Terra (Aggregator) | ? | ? | ✓ | ? | ✓ | ? | ? | ? | ? | ✓ | ? | ? | ? |
| Samsung Health Data SDK (On-device SDK) | ✓ | ? | ✓ | ✓ Aggregates by periods down to MINUTELY | ✓ | ✓ | ✓ | ? | ✓ | ✓ | ? | ✓ | ? |
| Google Health API (Cloud API) | ✓ Heart Rate: 1 second | ✓ Daily Heart Rate Variability: daily | ✓ | ✓ Steps: 1 minute | ✓ | ? | ✓ Oxygen Saturation: 1 minute; Daily Oxygen Saturation: daily | ✓ Daily Respiratory Rate: daily | ✓ | ✓ | ✓ | ✓ | ? |

✓ documented (links to the vendor page) · ✗ the vendor says it is not available · ? not stated in the pages read (links to our guide). Hover a mark for the vendor’s words.

### Oura

Cloud API · sources read 2026-10-17 · [guide](https://aifitnessapi.com/integrate/oura-api)

**Delivery**

- Webhook: Webhooks, which Oura calls the preferred way to consume its data — “Webhooks are the preferred way to consume Oura data” ([source](https://cloud.ouraring.com/v2/static/json/openapi-1.43.json))
- Pull: REST under /v2/usercollection/ — “curl -X GET https://api.ouraring.com/v2/usercollection/personal_info” ([source](https://cloud.ouraring.com/v2/static/json/openapi-1.43.json))

**History and backfill**

- One request for history when a user connects, then webhooks; depth not stated — “Make a single request for historical data when a user first connects, then use webhooks for ongoing updates” ([source](https://cloud.ouraring.com/v2/static/json/openapi-1.43.json))
- Fetch history in ranges of about 1 to 3 months — “Use date range queries with reasonable time spans (e.g., 1-3 months at a time)” ([source](https://cloud.ouraring.com/v2/static/json/openapi-1.43.json))

**Data resolution**

- Heart rate: 5-minute increments — “Heart rate is provided at 5-minute increments.” ([source](https://cloud.ouraring.com/v2/static/json/openapi-1.43.json))
- Steps and daily activity: Daily summary — “The Daily Activity scope includes daily activity summary values and detailed activity levels.” ([source](https://cloud.ouraring.com/v2/static/json/openapi-1.43.json))
- Blood oxygen (SpO2): Daily average — “The Daily SpO2 (blood oxygenation) routes include daily SpO2 average. Data will only be available for users with a Gen 3 Oura Ring” ([source](https://cloud.ouraring.com/v2/static/json/openapi-1.43.json))
- Stress, recovery or readiness: Daily — “The daily stress route includes a summary of the number of minutes the user spends in high stress and high recovery each day.” ([source](https://cloud.ouraring.com/v2/static/json/openapi-1.43.json))

**Metrics**

- Heart rate: Time-series heart rate — “Heart rate is provided at 5-minute increments.” ([source](https://cloud.ouraring.com/v2/static/json/openapi-1.43.json))
- Sleep: Sleep periods; a user can have several a day — “A user can have multiple sleep periods per day.” ([source](https://cloud.ouraring.com/v2/static/json/openapi-1.43.json))
- Steps and daily activity: Daily activity summary and activity levels — “The Daily Activity scope includes daily activity summary values and detailed activity levels.” ([source](https://cloud.ouraring.com/v2/static/json/openapi-1.43.json))
- Blood oxygen (SpO2): Daily SpO2 average, Gen 3 ring only — “The Daily SpO2 (blood oxygenation) routes include daily SpO2 average. Data will only be available for users with a Gen 3 Oura Ring” ([source](https://cloud.ouraring.com/v2/static/json/openapi-1.43.json))
- Weight and body composition: Weight and height in personal info — “The Personal Info scope includes personal information (e.g. age, email, weight, and height) about the user.” ([source](https://cloud.ouraring.com/v2/static/json/openapi-1.43.json))
- VO2 max: VO2 max route — “VO2 Max is a measure of the maximum volume of oxygen that an individual can use during intense exercise.” ([source](https://cloud.ouraring.com/v2/static/json/openapi-1.43.json))
- Stress, recovery or readiness: Daily minutes in high stress and high recovery — “The daily stress route includes a summary of the number of minutes the user spends in high stress and high recovery each day.” ([source](https://cloud.ouraring.com/v2/static/json/openapi-1.43.json))

### WHOOP

Cloud API · sources read 2026-10-17 · [guide](https://aifitnessapi.com/integrate/whoop-api)

**Delivery**

- Webhook: Webhooks for workout, sleep and recovery updates and deletes — “Enum : "workout.updated" "workout.deleted" "sleep.updated" "sleep.deleted" "recovery.updated" "recovery.deleted"” ([source](https://developer.whoop.com/docs/developing/webhooks/))
- Pull: No webhooks for day Strain, cycles or body measurements: fetch those — “Not at the moment; these data points should be retrieved by calling their respective APIs.” ([source](https://developer.whoop.com/docs/developing/webhooks/))

**History and backfill**

- Not stated in the pages read.

**Data resolution**

- Heart rate: Average per cycle or workout — “read:cycles - Read cycles data, including day Strain and average heart rate during a physiological cycle.” ([source](https://developer.whoop.com/api/))
- HRV or beat intervals: Per recovery — “read:recovery - Read Recovery data, including score, heart rate variability, and resting heart rate.” ([source](https://developer.whoop.com/api/))
- Steps and daily activity: Total per cycle — “Cycles now include the total number of steps taken during the cycle.” ([source](https://developer.whoop.com/docs/api-changelog/))

**Metrics**

- Heart rate: Average heart rate per cycle (and per workout) — “read:cycles - Read cycles data, including day Strain and average heart rate during a physiological cycle.” ([source](https://developer.whoop.com/api/))
- HRV or beat intervals: HRV and resting heart rate in Recovery — “read:recovery - Read Recovery data, including score, heart rate variability, and resting heart rate.” ([source](https://developer.whoop.com/api/))
- Sleep: Sleep performance and duration per stage — “read:sleep - Read sleep data, including performance % and duration per sleep stage.” ([source](https://developer.whoop.com/api/))
- Steps and daily activity: Total steps per cycle (since September 23, 2026) — “Cycles now include the total number of steps taken during the cycle.” ([source](https://developer.whoop.com/docs/api-changelog/))
- Workouts: Workouts with activity Strain and average heart rate — “read:workout - Read workout data, including activity Strain and average heart rate.” ([source](https://developer.whoop.com/api/))
- Weight and body composition: Height, weight and max heart rate — “read:body_measurement - Read body measurements data, including height, weight, and max heart rate.” ([source](https://developer.whoop.com/api/))
- Stress, recovery or readiness: Recovery score — “read:recovery - Read Recovery data, including score, heart rate variability, and resting heart rate.” ([source](https://developer.whoop.com/api/))

### Garmin

Cloud API · sources read 2026-10-22 · [guide](https://aifitnessapi.com/integrate/garmin-api)

**Delivery**

- Push: Starter: push only — “Push only Historical Data Not included User Capacity Limited” ([source](https://developer.garmin.com/gc-developer-program/overview/))
- Pull: Enterprise: push or ping/pull — “Golf API JSON Delivery Push or Ping/Pull Historical Data 1 month + User Capacity Unlimited Technical Support Included” ([source](https://developer.garmin.com/gc-developer-program/overview/))

**History and backfill**

- Starter: historical data not included — “Push only Historical Data Not included User Capacity Limited” ([source](https://developer.garmin.com/gc-developer-program/overview/))
- Enterprise: 1 month+ of historical data — “Golf API JSON Delivery Push or Ping/Pull Historical Data 1 month + User Capacity Unlimited Technical Support Included” ([source](https://developer.garmin.com/gc-developer-program/overview/))
- Backfill marked Enterprise-only — “Developer Web Tools: Easy on-boarding, sample data, *backfill user data, and auto-verification of your integration before production” ([source](https://developer.garmin.com/gc-developer-program/enterprise/health-api/))

**Data resolution**

- Steps and daily activity: Epoch summaries (interval not stated) — “Data includes heart rate, steps, calories, sleep, respiration, body composition as well as detailed stress, pulse-ox, and epoch summaries for all-day activities.” ([source](https://developer.garmin.com/gc-developer-program/enterprise/health-api/))

**Metrics**

- Heart rate: Health API all-day heart rate — “Steps Intensity Minutes Sleep Calories Heart Rate” ([source](https://developer.garmin.com/gc-developer-program/enterprise/health-api/))
- HRV or beat intervals: Enhanced beat-to-beat interval, asterisked as an Enterprise item — “Stress Pulse Ox Body Battery Body Composition Respiration Blood Pressure *Enhanced Beat-To-Beat Interval *” ([source](https://developer.garmin.com/gc-developer-program/enterprise/health-api/))
- Sleep: Health API sleep — “Steps Intensity Minutes Sleep Calories Heart Rate” ([source](https://developer.garmin.com/gc-developer-program/enterprise/health-api/))
- Steps and daily activity: Health API steps, with epoch summaries for all-day activities — “Data includes heart rate, steps, calories, sleep, respiration, body composition as well as detailed stress, pulse-ox, and epoch summaries for all-day activities.” ([source](https://developer.garmin.com/gc-developer-program/enterprise/health-api/))
- Workouts: Activity API: running, cycling, swimming, yoga, strength training — “Running Cycling Swimming Yoga Strength Training Activity Details” ([source](https://developer.garmin.com/gc-developer-program/enterprise/activity-api/))
- Blood oxygen (SpO2): Pulse Ox — “Stress Pulse Ox Body Battery Body Composition Respiration Blood Pressure *Enhanced Beat-To-Beat Interval *” ([source](https://developer.garmin.com/gc-developer-program/enterprise/health-api/))
- Respiration: Respiration — “Stress Pulse Ox Body Battery Body Composition Respiration Blood Pressure *Enhanced Beat-To-Beat Interval *” ([source](https://developer.garmin.com/gc-developer-program/enterprise/health-api/))
- Weight and body composition: Body composition — “Stress Pulse Ox Body Battery Body Composition Respiration Blood Pressure *Enhanced Beat-To-Beat Interval *” ([source](https://developer.garmin.com/gc-developer-program/enterprise/health-api/))
- Stress, recovery or readiness: Stress and Body Battery — “Stress Pulse Ox Body Battery Body Composition Respiration Blood Pressure *Enhanced Beat-To-Beat Interval *” ([source](https://developer.garmin.com/gc-developer-program/enterprise/health-api/))

### Polar AccessLink

Cloud API · sources read 2026-10-17 · [guide](https://aifitnessapi.com/integrate/polar-api)

**Delivery**

- Webhook: Webhook, which must answer Polar's ping when created — “When creating webhook the AccessLink sends a ping message to the url in request body. The ping message must be answered with 200 OK or otherwise the webhook is not created.” ([source](https://www.polar.com/accesslink-api/swagger.yaml))
- Pull: Notifications list available exercises and activities — “Get list of available exercises and activities for users” ([source](https://www.polar.com/accesslink-api/swagger.yaml))

**History and backfill**

- Exercises: last 30 days, and only after the user registered with your client — “Only Exercises uploaded to Flow in the last 30 days are returned. Only exercises that have been uploaded to Flow after the user is registered with your client will be returned.” ([source](https://www.polar.com/accesslink-api/swagger.yaml))
- Daily activity: last 28 days by default, from up to 365 days back, 28 days per request — “When no date range is given, activities from the last 28 days are returned. When `from` is given, activities for the specified date range are returned. From date cannot be older than 365 days from today and the maximum range between from and to is 28 days.” ([source](https://www.polar.com/accesslink-api/swagger.yaml))
- Sleep: last 28 days — “List sleep data of user for the last 28 days.” ([source](https://www.polar.com/accesslink-api/swagger.yaml))

**Data resolution**

- Heart rate: 5-minute intervals — “Samples are recording in 5 minute intervals. Heart rate samples from training sessions are not available through this resource.” ([source](https://www.polar.com/accesslink-api/swagger.yaml))
- Steps and daily activity: Daily — “When no date range is given, activities from the last 28 days are returned. When `from` is given, activities for the specified date range are returned. From date cannot be older than 365 days from today and the maximum range between from and to is 28 days.” ([source](https://www.polar.com/accesslink-api/swagger.yaml))

**Metrics**

- Heart rate: Continuous heart rate, excluding training sessions — “Samples are recording in 5 minute intervals. Heart rate samples from training sessions are not available through this resource.” ([source](https://www.polar.com/accesslink-api/swagger.yaml))
- Sleep: Sleep for the last 28 days — “List sleep data of user for the last 28 days.” ([source](https://www.polar.com/accesslink-api/swagger.yaml))
- Steps and daily activity: Daily activity — “When no date range is given, activities from the last 28 days are returned. When `from` is given, activities for the specified date range are returned. From date cannot be older than 365 days from today and the maximum range between from and to is 28 days.” ([source](https://www.polar.com/accesslink-api/swagger.yaml))
- Workouts: Exercises, with optional samples and zones — “Use samples and zones query parameters to return optional samples and zone information of the exercises.” ([source](https://www.polar.com/accesslink-api/swagger.yaml))
- GPS route: Route data for an exercise — “description: Return all route data for this exercise.” ([source](https://www.polar.com/accesslink-api/swagger.yaml))
- Blood oxygen (SpO2): SpO2 test reports (Elixir biosensing) — “Biosensing data consists of body temperature data, sleep skin temperature data, skin contacts data, wrist ECG test report data and SpO2 test report data.” ([source](https://www.polar.com/accesslink-api/swagger.yaml))
- Body or skin temperature: Body and sleep skin temperature (Elixir biosensing) — “Biosensing data consists of body temperature data, sleep skin temperature data, skin contacts data, wrist ECG test report data and SpO2 test report data.” ([source](https://www.polar.com/accesslink-api/swagger.yaml))

### Withings

Cloud API · sources read 2026-10-17 · [guide](https://aifitnessapi.com/integrate/withings-api)

**Delivery**

- Webhook: Notifications POSTed to your callback, then you fetch — “Withings POSTs to your callback URL the moment new measurements arrive, then your handler fetches the data via the Data API.” ([source](https://developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/data-api/notifications/notification-overview/))
- Pull: lastupdate returns everything created or modified since your last fetch — “For ongoing sync, we recommend lastupdate instead: pass the timestamp of your last successful fetch and the Data API returns everything created or modified since, including any updates you missed if a notification was lost.” ([source](https://developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/data-api/fetch-data-example/))

**History and backfill**

- All historical data the user's devices collected — “you will have access not only to new data but also to all historical health data collected by the devices” ([source](https://developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/get-access/oauth-web-flow/))

**Data resolution**

- Not stated in the pages read.

**Metrics**

- Heart rate: Heart rate with blood pressure measurements, when supported — “A new blood pressure measurement (and heart rate, when supported) was recorded.” ([source](https://developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/data-api/notifications/notification-content/))
- Sleep: Sleep summary: duration, deep/light (no REM), wakeups — “New sleep data is available — duration, sleep state, deep/light state duration (no REM), and wakeup counts.” ([source](https://developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/data-api/notifications/notification-content/))
- Steps and daily activity: Activity: steps, distance, calories, intensity — “New activity data is available — steps, distance, calories, intensity, or workouts.” ([source](https://developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/data-api/notifications/notification-content/))
- Workouts: Workouts in the activity category — “New activity data is available — steps, distance, calories, intensity, or workouts.” ([source](https://developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/data-api/notifications/notification-content/))
- Weight and body composition: Weight and body composition from Withings scales — “A new weight or body composition measurement was recorded by a Withings scale.” ([source](https://developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/data-api/notifications/notification-content/))
- Glucose: Glucose measurements — “A new glucose measurement was recorded.” ([source](https://developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/data-api/notifications/notification-content/))

### Strava

Cloud API · sources read 2026-10-17 · [guide](https://aifitnessapi.com/integrate/strava-api)

**Delivery**

- Webhook: One push subscription per app for activity and athlete events — “Each application may only have one subscription, but that single subscription will allow the application to receive webhook events for all supported changes to data owned by athletes that have authorized that application.” ([source](https://developers.strava.com/docs/webhooks/))
- Pull: Athlete activities filtered by before/after epoch timestamps — “An epoch timestamp to use for filtering activities that have taken place before a certain time.” ([source](https://developers.strava.com/swagger/swagger.json))

**History and backfill**

- Not stated in the pages read.

**Data resolution**

- Not stated in the pages read.

**Metrics**

- Workouts: Activities (with athletes, routes and gear) — “The Strava REST API includes data on athletes, activities, routes, and gear.” ([source](https://developers.strava.com/docs/getting-started/))

### Suunto

Cloud API · sources read 2026-10-17 · [guide](https://aifitnessapi.com/integrate/suunto-api)

**Delivery**

- Webhook: Webhook for new workouts — “Use the webhook method to get a notification about new workouts.” ([source](https://apizone.suunto.com/faq))
- Pull: No webhook for daily activity: fetch it, about once a day — “You can additionally fetch the daily activity for the user i.e. once a day, just in case user has synched their device with Suunto app wihout workouts.” ([source](https://apizone.suunto.com/faq))

**History and backfill**

- Workout list covers past history; depth not stated — “To get list of the workouts from the past history.” ([source](https://apizone.suunto.com/faq))

**Data resolution**

- Heart rate: Per-sample in FIT (rate not stated) — “These also have all the measured samples such as heart rate, r-r data, power data, altitude, temperature. These files also contain GPS tracks.” ([source](https://apizone.suunto.com/))
- Steps and daily activity: Daily — “This contains daily steps and calories.” ([source](https://apizone.suunto.com/faq))

**Metrics**

- Heart rate: Heart rate samples inside workout FIT files — “These also have all the measured samples such as heart rate, r-r data, power data, altitude, temperature. These files also contain GPS tracks.” ([source](https://apizone.suunto.com/))
- HRV or beat intervals: R-R data inside workout FIT files — “These also have all the measured samples such as heart rate, r-r data, power data, altitude, temperature. These files also contain GPS tracks.” ([source](https://apizone.suunto.com/))
- Sleep (not available): Suunto says the Cloud API does not yet support sleep — “The Suunto Cloud API doesn’t yet support the sleep data fetch/push.” ([source](https://apizone.suunto.com/faq))
- Steps and daily activity: Daily steps and calories — “This contains daily steps and calories.” ([source](https://apizone.suunto.com/faq))
- Workouts: Workouts as FIT files — “Application interface (API) provides you possibility to access the workout data tracked with Suunto devices. The API provides you the FIT files common in sports industry.” ([source](https://apizone.suunto.com/))
- GPS route: GPS tracks inside workout FIT files — “These also have all the measured samples such as heart rate, r-r data, power data, altitude, temperature. These files also contain GPS tracks.” ([source](https://apizone.suunto.com/))
- Weight and body composition (not available): Suunto says weight is not available yet — “Personal data such as weight data or heartrate zones are not available yet from Suunto Cloud API” ([source](https://apizone.suunto.com/faq))

### COROS

Cloud API · sources read 2026-10-17 · [guide](https://aifitnessapi.com/integrate/coros-api)

**Delivery**

- Webhook: Partner API: workout data pushed within about 5 minutes — “Webhook push notifications (workout data pushed to your endpoint within ~5 minutes)” ([source](https://support.coros.com/api/v2/help_center/en-us/sections/53180979524884/articles.json))
- Pull: MCP path: no webhooks, your app polls — “No webhook push notifications (your app polls the MCP)” ([source](https://support.coros.com/api/v2/help_center/en-us/sections/53180979524884/articles.json))

**History and backfill**

- getWorkoutRecords: 30 days per request, 3-month lookback — “getUserInfo, getWorkoutRecords (30-day max, 3-month lookback), getDailyData” ([source](https://support.coros.com/api/v2/help_center/en-us/sections/53180979524884/articles.json))

**Data resolution**

- Heart rate: Daily — “Daily heart rate, HRV, stress, Wellness Checks, and resting heart rate” ([source](https://support.coros.com/api/v2/help_center/en-us/sections/53180979524884/articles.json))
- HRV or beat intervals: Daily — “Daily heart rate, HRV, stress, Wellness Checks, and resting heart rate” ([source](https://support.coros.com/api/v2/help_center/en-us/sections/53180979524884/articles.json))
- Steps and daily activity: Daily — “Daily steps, calories, workout duration, and weekly Training Load” ([source](https://support.coros.com/api/v2/help_center/en-us/sections/53180979524884/articles.json))

**Metrics**

- Heart rate: Daily heart rate and resting heart rate (via the COROS MCP) — “Daily heart rate, HRV, stress, Wellness Checks, and resting heart rate” ([source](https://support.coros.com/api/v2/help_center/en-us/sections/53180979524884/articles.json))
- HRV or beat intervals: Daily HRV (via the COROS MCP) — “Daily heart rate, HRV, stress, Wellness Checks, and resting heart rate” ([source](https://support.coros.com/api/v2/help_center/en-us/sections/53180979524884/articles.json))
- Steps and daily activity: Daily steps and calories (via the COROS MCP) — “Daily steps, calories, workout duration, and weekly Training Load” ([source](https://support.coros.com/api/v2/help_center/en-us/sections/53180979524884/articles.json))
- Workouts: Workout records (getWorkoutRecords) — “getUserInfo, getWorkoutRecords (30-day max, 3-month lookback), getDailyData” ([source](https://support.coros.com/api/v2/help_center/en-us/sections/53180979524884/articles.json))
- GPS route: FIT files with GPS tracks, 50 file requests a day (via the COROS MCP) — “.FIT files, including GPS tracks (capped at 50 file requests per day)” ([source](https://support.coros.com/api/v2/help_center/en-us/sections/53180979524884/articles.json))
- VO2 max: VO2 Max (via the COROS MCP) — “VO2 Max, Running Fitness, race prediction times, and recovery status” ([source](https://support.coros.com/api/v2/help_center/en-us/sections/53180979524884/articles.json))
- Stress, recovery or readiness: Daily stress and recovery status (via the COROS MCP) — “Daily heart rate, HRV, stress, Wellness Checks, and resting heart rate” ([source](https://support.coros.com/api/v2/help_center/en-us/sections/53180979524884/articles.json))

### Wahoo

Cloud API · sources read 2026-10-17 · [guide](https://aifitnessapi.com/integrate/wahoo-api)

**Delivery**

- Webhook: workout_summary webhook (needs offline_data) — “Please make sure the offline_data scope is added and users have a valid access token with the scope to receive webhooks.” ([source](https://cloud-api.wahooligan.com/))
- Pull: Workout upload and download over the Cloud API — “The Cloud API allows you to connect Wahoo users directly to your mobile and web applications. Using the OAuth2.0 standard protocol, the API authorizes login/connection to Wahoo, and supports managing profile data, heart rate and power zones, and the upload/download of workout data to the cloud.” ([source](https://developers.wahooligan.com/cloud))

**History and backfill**

- Not stated in the pages read.

**Data resolution**

- Not stated in the pages read.

**Metrics**

- Workouts: Workout summaries: distance, duration, calories; not workouts from third-party apps — “The workout_summary contains the results of the workout, such as distance, duration, and calories burned.” ([source](https://cloud-api.wahooligan.com/))

### Dexcom

Cloud API · sources read 2026-10-17 · [guide](https://aifitnessapi.com/integrate/dexcom-api)

**Delivery**

- Pull: GET /v3/users/self/egvs and related endpoints — “GET /v3/users/self/egvs Estimated Glucose Values” ([source](https://developer.dexcom.com/docs/dexcomv3/endpoint-overview))

**History and backfill**

- At most 30 days per request window; longer returns 400 — “This window can be a maximum of 30 days, and any request with a time window greater than 30 days returns a 400 (Bad Request) error.” ([source](https://developer.dexcom.com/docs/dexcomv3/endpoint-overview))

**Data resolution**

- Not stated in the pages read.

**Metrics**

- Glucose: Estimated glucose values (EGVs) and events — “Using the Dexcom API, authorized Digital Health Partners can leverage Dexcom CGM data, such as estimated glucose values and events, to build or enhance their apps.” ([source](https://developer.dexcom.com/docs/))

### Concept2 Logbook

Cloud API · sources read 2026-10-17 · [guide](https://aifitnessapi.com/integrate/concept2-api)

**Delivery**

- Webhook: Webhook on result added, updated or deleted — “Through your self-service developer portal, you can register and manage a webhook that will fire when a relevant result is added, updated, or deleted.” ([source](https://log.concept2.com/developers/documentation/))
- Pull: GET /api/users/me/results — “fetches all the workouts for the authenticated user” ([source](https://log.concept2.com/developers/documentation/))

**History and backfill**

- Results filter by from, to, type and updated_after; depth not stated — “Fetches only results created or updated on or after this date.” ([source](https://log.concept2.com/developers/documentation/))

**Data resolution**

- Workouts: Stroke data per workout — “Fetches only results of this type. Must be one of rower skierg bike dynamic slides paddle water snow rollerski multierg” ([source](https://log.concept2.com/developers/documentation/))

**Metrics**

- Workouts: Results (rower, SkiErg, bike and more) — “Fetches only results of this type. Must be one of rower skierg bike dynamic slides paddle water snow rollerski multierg” ([source](https://log.concept2.com/developers/documentation/))

### Terra

Aggregator · sources read 2026-11-05 · [guide](https://aifitnessapi.com/integrate/terra-api)

**Delivery**

- Webhook: Webhooks, databases, cloud storage or queues as destinations — “Terra delivers to webhooks, SQL databases (Postgres and MySQL), Supabase, cloud storage (S3, GCS and Azure Blob), queueing services (SQS and Kafka), MongoDB and Firestore.” ([source](https://tryterra.co/))
- Pull: Requests over a month must use to_webhook and arrive asynchronously — “Time ranges longer than one month must use to_webhook=true , and Terra sends the data asynchronously .” ([source](https://docs.tryterra.co/unified-api/managing-user-health-data/requesting-historical-data))

**History and backfill**

- No single request may span more than five years — “your start_date / end_date window is wider than 5 years” ([source](https://docs.tryterra.co/reference/health-and-fitness-api/rate-limits))

**Data resolution**

- with_samples must be true for granular data — “must be set to true to receive granular data” ([source](https://docs.tryterra.co/unified-api/managing-user-health-data/requesting-historical-data))

**Metrics**

- Sleep: /sleep: sleep sessions — “summary: Retrieve sleep sessions” ([source](https://raw.githubusercontent.com/tryterra/openapi/master/dist/core/v2-bundled.yaml))
- Workouts: /activity: completed workout sessions — “Returns completed workout sessions, each with a defined start and end time and an activity type such as running or cycling.” ([source](https://raw.githubusercontent.com/tryterra/openapi/master/dist/core/v2-bundled.yaml))
- Weight and body composition: /body: body metrics (fields depend on the source) — “summary: Retrieve body metrics” ([source](https://raw.githubusercontent.com/tryterra/openapi/master/dist/core/v2-bundled.yaml))

### Samsung Health Data SDK

On-device SDK · sources read 2026-10-17 · [guide](https://aifitnessapi.com/integrate/samsung-health-api)

**Delivery**

- On-device: Reads Samsung Health on the phone; readChanges() returns what changed — “HealthDataStore.readChanges() and HealthDataStore.readChangesAsync() provide data change information for a given data type and a time filter.” ([source](https://developer.samsung.com/health/data/faq.html))

**History and backfill**

- Not stated in the pages read.

**Data resolution**

- Steps and daily activity: Aggregates by periods down to MINUTELY — “Activity summary Active calories burned goal Active time goal Blood glucose Blood oxygen Blood pressure Body composition Body temperature Energy score Exercise Exercise location Floors climbed Heart rate Irregular heart rhythm notification Nutrition Nutrition goal Skin temperature Sleep Sleep apnea Sleep goal Steps Step goal Water intake Water intake goal User profile” ([source](https://developer.samsung.com/health/data/overview.html))
- Aggregates group by periods such as MINUTELY, DAILY, WEEKLY, MONTHLY and YEARLY — “You can also group by other time periods such as MINUTELY , DAILY , WEEKLY , MONTHLY , and YEARLY .” ([source](https://developer.samsung.com/codelab/health/steps-data.html))

**Metrics**

- Heart rate: Heart rate — “Activity summary Active calories burned goal Active time goal Blood glucose Blood oxygen Blood pressure Body composition Body temperature Energy score Exercise Exercise location Floors climbed Heart rate Irregular heart rhythm notification Nutrition Nutrition goal Skin temperature Sleep Sleep apnea Sleep goal Steps Step goal Water intake Water intake goal User profile” ([source](https://developer.samsung.com/health/data/overview.html))
- Sleep: Sleep — “Activity summary Active calories burned goal Active time goal Blood glucose Blood oxygen Blood pressure Body composition Body temperature Energy score Exercise Exercise location Floors climbed Heart rate Irregular heart rhythm notification Nutrition Nutrition goal Skin temperature Sleep Sleep apnea Sleep goal Steps Step goal Water intake Water intake goal User profile” ([source](https://developer.samsung.com/health/data/overview.html))
- Steps and daily activity: Steps, aggregated across sources — “Activity summary Active calories burned goal Active time goal Blood glucose Blood oxygen Blood pressure Body composition Body temperature Energy score Exercise Exercise location Floors climbed Heart rate Irregular heart rhythm notification Nutrition Nutrition goal Skin temperature Sleep Sleep apnea Sleep goal Steps Step goal Water intake Water intake goal User profile” ([source](https://developer.samsung.com/health/data/overview.html))
- Workouts: Exercise — “Activity summary Active calories burned goal Active time goal Blood glucose Blood oxygen Blood pressure Body composition Body temperature Energy score Exercise Exercise location Floors climbed Heart rate Irregular heart rhythm notification Nutrition Nutrition goal Skin temperature Sleep Sleep apnea Sleep goal Steps Step goal Water intake Water intake goal User profile” ([source](https://developer.samsung.com/health/data/overview.html))
- GPS route: Exercise location — “Activity summary Active calories burned goal Active time goal Blood glucose Blood oxygen Blood pressure Body composition Body temperature Energy score Exercise Exercise location Floors climbed Heart rate Irregular heart rhythm notification Nutrition Nutrition goal Skin temperature Sleep Sleep apnea Sleep goal Steps Step goal Water intake Water intake goal User profile” ([source](https://developer.samsung.com/health/data/overview.html))
- Blood oxygen (SpO2): Blood oxygen — “Activity summary Active calories burned goal Active time goal Blood glucose Blood oxygen Blood pressure Body composition Body temperature Energy score Exercise Exercise location Floors climbed Heart rate Irregular heart rhythm notification Nutrition Nutrition goal Skin temperature Sleep Sleep apnea Sleep goal Steps Step goal Water intake Water intake goal User profile” ([source](https://developer.samsung.com/health/data/overview.html))
- Body or skin temperature: Body and skin temperature — “Activity summary Active calories burned goal Active time goal Blood glucose Blood oxygen Blood pressure Body composition Body temperature Energy score Exercise Exercise location Floors climbed Heart rate Irregular heart rhythm notification Nutrition Nutrition goal Skin temperature Sleep Sleep apnea Sleep goal Steps Step goal Water intake Water intake goal User profile” ([source](https://developer.samsung.com/health/data/overview.html))
- Weight and body composition: Body composition — “Activity summary Active calories burned goal Active time goal Blood glucose Blood oxygen Blood pressure Body composition Body temperature Energy score Exercise Exercise location Floors climbed Heart rate Irregular heart rhythm notification Nutrition Nutrition goal Skin temperature Sleep Sleep apnea Sleep goal Steps Step goal Water intake Water intake goal User profile” ([source](https://developer.samsung.com/health/data/overview.html))
- Glucose: Blood glucose — “Activity summary Active calories burned goal Active time goal Blood glucose Blood oxygen Blood pressure Body composition Body temperature Energy score Exercise Exercise location Floors climbed Heart rate Irregular heart rhythm notification Nutrition Nutrition goal Skin temperature Sleep Sleep apnea Sleep goal Steps Step goal Water intake Water intake goal User profile” ([source](https://developer.samsung.com/health/data/overview.html))

### Google Health API

Cloud API · sources read 2026-10-31 · [guide](https://aifitnessapi.com/google-health-api)

**Delivery**

- Webhook: Webhooks for 28 data types — “Indicates that the data type supports real-time notifications using webhooks when new data is synced.” ([source](https://developers.google.com/health/data-types))
- Pull: REST: list, roll up and reconcile data points per data type — “Lists the API methods supported for the data type (such as `list`, `create`, and `rollUp`).” ([source](https://developers.google.com/health/data-types))

**History and backfill**

- Backfill historical data after a user re-authenticates; depth not stated — “To backfill their data, once the user re-authenticates to the new endpoints, you can use our Google Health API to backfill their historical data. See Query historical data for guidance.” ([source](https://developers.google.com/health/migration))

**Data resolution**

- Heart rate: Heart Rate: 1 second — Google's table: Heart Rate · Sample · 1 second · webhook support ([source](https://developers.google.com/health/reference/rest/v4/users.dataTypes.dataPoints#heartrate))
- HRV or beat intervals: Daily Heart Rate Variability: daily — Google's table: Heart Rate Variability · Sample · webhook support | Daily Heart Rate Variability · Daily · webhook support ([source](https://developers.google.com/health/reference/rest/v4/users.dataTypes.dataPoints#heartratevariability))
- Steps and daily activity: Steps: 1 minute — Google's table: Steps · Interval · 1 minute · webhook support ([source](https://developers.google.com/health/reference/rest/v4/users.dataTypes.dataPoints#steps))
- Blood oxygen (SpO2): Oxygen Saturation: 1 minute; Daily Oxygen Saturation: daily — Google's table: Oxygen Saturation · Sample · 1 minute | Daily Oxygen Saturation · Daily · webhook support ([source](https://developers.google.com/health/reference/rest/v4/users.dataTypes.dataPoints#oxygensaturation))
- Respiration: Daily Respiratory Rate: daily — Google's table: Daily Respiratory Rate · Daily · webhook support | Respiratory Rate Sleep Summary · Sample · webhook support ([source](https://developers.google.com/health/reference/rest/v4/users.dataTypes.dataPoints#dailyrespiratoryrate))
- Each data type states a storage resolution where Google gives one — “The minimum recording or sampling interval at which data points are stored (for example, 1 minute for `steps`). For rollups, this represents the minimum recommended `windowSize` to ensure evenly distributed aggregation without sub-interval data artifacts.” ([source](https://developers.google.com/health/data-types))

**Metrics**

- Heart rate: Heart Rate; webhook support: yes — Google's table: Heart Rate · Sample · 1 second · webhook support ([source](https://developers.google.com/health/reference/rest/v4/users.dataTypes.dataPoints#heartrate))
- HRV or beat intervals: Heart Rate Variability, Daily Heart Rate Variability; webhook support: yes — Google's table: Heart Rate Variability · Sample · webhook support | Daily Heart Rate Variability · Daily · webhook support ([source](https://developers.google.com/health/reference/rest/v4/users.dataTypes.dataPoints#heartratevariability))
- Sleep: Sleep; webhook support: yes — Google's table: Sleep · Session · webhook support ([source](https://developers.google.com/health/reference/rest/v4/users.dataTypes.dataPoints#sleep))
- Steps and daily activity: Steps; webhook support: yes — Google's table: Steps · Interval · 1 minute · webhook support ([source](https://developers.google.com/health/reference/rest/v4/users.dataTypes.dataPoints#steps))
- Workouts: Exercise; webhook support: yes — Google's table: Exercise · Session · webhook support ([source](https://developers.google.com/health/reference/rest/v4/users.dataTypes.dataPoints#exercise))
- Blood oxygen (SpO2): Oxygen Saturation, Daily Oxygen Saturation; webhook support: Daily Oxygen Saturation — Google's table: Oxygen Saturation · Sample · 1 minute | Daily Oxygen Saturation · Daily · webhook support ([source](https://developers.google.com/health/reference/rest/v4/users.dataTypes.dataPoints#oxygensaturation))
- Respiration: Daily Respiratory Rate, Respiratory Rate Sleep Summary; webhook support: yes — Google's table: Daily Respiratory Rate · Daily · webhook support | Respiratory Rate Sleep Summary · Sample · webhook support ([source](https://developers.google.com/health/reference/rest/v4/users.dataTypes.dataPoints#dailyrespiratoryrate))
- Body or skin temperature: Core Body Temperature, Skin Temperature Sensors (v4beta); webhook support: no — Google's table: Core Body Temperature · Sample | Skin Temperature Sensors · Sample ([source](https://developers.google.com/health/reference/rest/v4/users.dataTypes.dataPoints#corebodytemperature))
- Weight and body composition: Weight, Body Fat; webhook support: yes — Google's table: Weight · Sample · webhook support | Body Fat · Sample · webhook support ([source](https://developers.google.com/health/reference/rest/v4/users.dataTypes.dataPoints#weight))
- VO2 max: Run VO2 Max; webhook support: yes — Google's table: Run VO2 Max · Sample · webhook support ([source](https://developers.google.com/health/reference/rest/v4/users.dataTypes.dataPoints#runvo2max))
- Glucose: Blood Glucose; webhook support: yes — Google's table: Blood Glucose · Sample · webhook support ([source](https://developers.google.com/health/reference/rest/v4/users.dataTypes.dataPoints#bloodglucose))

## How to read it

- A ✓ means the vendor’s own page names the metric; it links that page, and the vendor’s words are in the card below the table. It says nothing about which devices record it or which plan unlocks it: Oura’s SpO2 is Gen 3 only, Garmin’s beat-to-beat interval is an Enterprise item, and COROS’s daily metrics come through its MCP rather than the Partner API.
- A ? means none of the pages read for that vendor’s [integration guide](https://aifitnessapi.com/integrate) mentions it. The vendor may well offer it; this table will not say so until a page does.
- Resolution is shown only where the vendor states an interval or grouping, such as Oura’s and Polar’s 5-minute heart rate or the storage resolution in Google’s data-types table. A daily summary and a per-second stream are not interchangeable, so check the cell before you plan a chart.
- History is the most volatile column and the least documented: Polar returns 28 or 30 days, Garmin Starter none, COROS three months, Dexcom 30 days per request; several vendors state no depth at all.

## HealthKit and Health Connect

The two on-device stores are not columns here: your app reads them on the phone, and the question there is which type identifier to ask for, which is the [HealthKit ↔ Health Connect type reference](https://aifitnessapi.com/matrix). Each metric chip above maps to a row there where one exists. How hard you can call each cloud API is a separate question, answered by the [rate-limit calculator](https://aifitnessapi.com/tools/rate-limit-calculator).

## How this is built

- Every mark, delivery note and history note quotes a vendor page already cited by that vendor’s integration guide, copied from the guide’s evidence file. A test fails the build if a quote is not in that file under the same URL, and a weekly job re-checks the evidence against the live pages.
- The Google Health API column is built from Google’s data-types table as the site’s generator last fetched it, so its resolution and webhook flags are Google’s, row by row.
- The “sources read” date on each card is the date its guide was last verified. The Fitbit Web API is not listed: Google’s timeline sets its turn-off for November 2, 2026, with the Google Health API as its successor.

A free tool from AIFitnessAPI. Comparing two APIs on access and cost instead: [compare two fitness APIs side by side](https://aifitnessapi.com/compare-apis). More at [free tools for health-app builders](https://aifitnessapi.com/tools).

## The other 16 tools

- [Which error is this?](https://aifitnessapi.com/tools/error-diagnoser): Paste an error string and get the matching HKError.Code case in Apple's wording, plus the guide that covers it.
- [Sum it or average it?](https://aifitnessapi.com/tools/aggregation-checker): Whether Apple describes a quantity type as cumulative or discrete, with the sentence that says so.
- [Apple type, Android record](https://aifitnessapi.com/tools/identifier-translator): Two-way lookup between HealthKit identifiers and Health Connect records — verified pairs only.
- [HealthKit permission builder](https://aifitnessapi.com/tools/permission-builder): Pick the types your app touches: the Info.plist keys, the toShare/toRead Swift, and the Health Connect record names.
- [HealthKit query generator](https://aifitnessapi.com/tools/query-generator): Pick a quantity type and a window; get the HKStatisticsQuery with the aggregation option Apple's own prose states.
- [Fitness app stack generator](https://aifitnessapi.com/tools/stack-generator): Answer four questions and get the HealthKit types and APIs that survive them, with the exclusions shown.
- [Synthetic health data generator](https://aifitnessapi.com/tools/sample-data): Seeded synthetic HealthKit, Health Connect and Google Health API fixtures as JSON or CSV, with per-record UTC offsets.
- [Is this webhook real?](https://aifitnessapi.com/tools/webhook-verifier): Paste an Oura, WHOOP, Terra, Polar, Strava, Withings, Wahoo or Google Health API webhook: the vendor's documented check, run in your browser.
- [Wearable OAuth playground](https://aifitnessapi.com/tools/oauth-playground): Pick Oura, WHOOP, Strava, Polar, Withings, Wahoo, Dexcom, Suunto or Google Health: documented endpoints and scopes, an authorize URL, a PKCE pair and token curl. Sends nothing.
- [Starter scaffold generator](https://aifitnessapi.com/tools/starter-scaffold): Pick Express, Next.js or FastAPI and Oura, WHOOP, Polar, Strava or Wahoo: a tested project skeleton with OAuth routes, a token store and verified webhooks, as a .zip.
- [Pose keypoint playground](https://aifitnessapi.com/tools/keypoint-playground): Click a joint and see its index in BlazePose, COCO, OpenPose, ML Kit and Apple Vision, then copy an index map built from matching names only.
- [Exercise form rules](https://aifitnessapi.com/tools/exercise-form-rules): The joint-angle thresholds open-source exercise trackers use for squats, push-ups, lunges, planks, curls and presses, each quoted from its code; null where none says.
- [Exercise taxonomy crosswalk](https://aifitnessapi.com/tools/exercise-taxonomy-crosswalk): free-exercise-db, wger and ExerciseDB v1 categories, equipment and muscles against HealthKit and Health Connect workout types, matched by name only.
- [Health data schema converter](https://aifitnessapi.com/tools/schema-converter): Paste a HealthKit export row, Health Connect record or Google Health API data point and see it in one unified schema, each field traced to its source.
- [Fitbit to Google Health API map](https://aifitnessapi.com/tools/fitbit-to-google-health): Search every Fitbit Web API endpoint and see its Google Health API data type, method and scopes from Google's migration tables, or that none is listed.
- [Deprecation scanner](https://aifitnessapi.com/tools/deprecation-scanner): Paste code or a manifest and find Fitbit Web API, Google Fit and other retired fitness API calls, each with its replacement. Also a GitHub Action.

The planners and demos — the API picker, the cost planner, the side-by-side comparison, the day-boundary demo, the pose-model benchmark, the Bluetooth heart-rate lab and the step lab — are listed with these on [free tools for health-app builders](https://aifitnessapi.com/tools).

## Next step

Turning this into a choice of API:

- [The Best Wearable Fitness & Health-Data APIs (2026)](https://aifitnessapi.com/fitness-apis/wearable-data-apis)
- [The Best Wearable Health-Data Aggregator APIs (2026)](https://aifitnessapi.com/fitness-apis/health-data-aggregator-apis)
- [How Much Does a Fitness API Cost?](https://aifitnessapi.com/pricing/how-much-does-a-fitness-api-cost)
