---
title: "HRV API: How to Get Heart Rate Variability Data"
canonical: "https://aifitnessapi.com/data/hrv-api"
cluster: "Health Data"
primary_query: "hrv api"
last_reviewed: "2026-07-24"
description: "Get HRV data from HealthKit, Health Connect, Oura, WHOOP, Garmin and more. Measured, but RMSSD vs SDNN and the timing window matter. Best pick inside."
publisher: "AIFitnessAPI — independent, not sponsored"
cite_as: "\"HRV API: How to Get Heart Rate Variability Data\", AIFitnessAPI, https://aifitnessapi.com/data/hrv-api"
---

# HRV API: How to Get Heart Rate Variability Data

> HRV is a measured metric from the timing between heartbeats. You read it on-device (Apple HealthKit stores SDNN via HKQuantityTypeIdentifierHeartRateVariabilitySDNN; Android Health Connect gives RMSSD via HeartRateVariabilityRmssdRecord) or from cloud wearable APIs (Oura, WHOOP, Garmin, Fitbit) after sync. It reflects parasympathetic activity, so treat it as a wellness signal, not a stress or recovery measurement. Best pick: Oura or WHOOP for ready-made recovery scoring, Health Connect for a raw RMSSD trend on Android, a chest strap for real-time.

- Canonical: https://aifitnessapi.com/data/hrv-api
- Last reviewed: 2026-07-24
- Publisher: AIFitnessAPI (https://aifitnessapi.com) — independent, not sponsored
- Cite as: "HRV API: How to Get Heart Rate Variability Data", AIFitnessAPI, https://aifitnessapi.com/data/hrv-api

---

For what HRV actually represents, see [what is HRV](/learn/what-is-hrv).

## Where you can get HRV

HRV needs a wearable — a phone alone cannot measure it. All provider-specific fields, statistics, and device coverage change often, so treat this table as a starting point and confirm against each vendor's live data dictionary (as of 2026, verify).

| Source | How you access it | Notes |
| --- | --- | --- |
| Apple HealthKit (iOS) | On-device read with per-type permission; no cloud pull | `HKQuantityTypeIdentifierHeartRateVariabilitySDNN`, stored as **SDNN** in ms. Raw beat series via `HKDataTypeIdentifierHeartbeatSeries` |
| Android Health Connect | On-device read with per-record permission; no cloud pull | `HeartRateVariabilityRmssdRecord` — **RMSSD** in ms |
| Oura API v2 | Cloud OAuth 2.0 (post-sync) | HRV in sleep data / derivable from `interbeat_interval`; readiness incorporates nighttime HRV |
| WHOOP API v2 | Cloud OAuth 2.0 (post-sync) | HRV is a component of the Recovery object (nocturnal) |
| Garmin Health API | Cloud OAuth 2.0 (post-sync) | HRV Summaries collected over the overnight sleep window; limited device coverage — verify the device list |
| Fitbit Web API | Cloud OAuth 2.0 (post-sync) | HRV endpoint returns daily **RMSSD measured during sleep**; intraday HRV needs approval |
| Chest straps (e.g. Polar) | Direct BLE / vendor SDK | Expose RR intervals for real-time HRV — verify the specific product/SDK |
| Aggregators (Terra, Junction, Rook) | One normalized schema over many providers | Terra lists HRV as a supported normalized type; see [wearable data APIs](/fitness-apis/wearable-data-apis) |

Strava does **not** expose HRV.

## Measured or estimated?

HRV is **measured** — the underlying beat-to-beat intervals are real timing data. What must be hedged is the interpretation. RMSSD **reflects parasympathetic (vagal) influence** on heart rate; it is a correlate, not a direct readout of "vagal tone," "stress," or "recovery." Do not present HRV as something that measures your nervous system or diagnoses anything. Readiness and recovery scores built on HRV (Oura, WHOOP, and others) are **proprietary vendor models**, so describe them as estimates, not clinical measures. Consumer HRV is a general wellness signal, not a medical diagnostic.

Two accuracy and comparability gotchas to design around:

- **RMSSD vs SDNN are different statistics** and are not directly comparable. Apple gives you SDNN; Health Connect, Fitbit, and most others give RMSSD. Label which one you are storing and never mix them in one trend line.
- **Measurement window matters.** Most consumer platforms compute HRV over a **nocturnal/overnight** window for comparability (Oura, WHOOP, Garmin, Fitbit-during-sleep); some apps instead use a guided **morning spot reading**. Night and morning values are not interchangeable — surface which window a reading came from. And because absolute HRV varies enormously between people, it is meant for **within-person trends**, not cross-person comparison. Verify which statistic and which time window each provider returns before you normalize.

## Which source should you pick?

- **Recovery/readiness scoring out of the box:** Oura or WHOOP — nightly HRV is already baked into their readiness/recovery models, so you consume a score rather than build one.
- **Raw RMSSD trend across Android devices:** Health Connect `HeartRateVariabilityRmssdRecord`, read on-device for privacy and no post-sync latency.
- **iOS-native app:** HealthKit `HKQuantityTypeIdentifierHeartRateVariabilitySDNN` — but remember it is SDNN, not RMSSD.
- **Real-time HRV (biofeedback):** a chest strap's RR intervals over BLE/SDK; cloud wearable data is latent and lands only after the device syncs.
- **Many brands at once:** an aggregator (Terra, Junction, Rook) hands you one normalized HRV schema instead of N integrations. If you are weighing rings against straps, see [Oura vs WHOOP](/compare/oura-vs-whoop).

## Before you ship

Field names, statistics (RMSSD vs SDNN), scopes, and device coverage are volatile — re-verify each against the vendor's current data dictionary as of 2026. Label the statistic and the measurement window on every stored value, and frame HRV as a within-person wellness signal that reflects vagal activity, not a diagnostic or a direct measure of stress or recovery.

## FAQ

### Is HRV measured or estimated?

The HRV value itself is measured from real beat-to-beat interval timing. What is not a direct measurement is the interpretation: RMSSD reflects parasympathetic (vagal) influence on heart rate, so it is a wellness signal, not a readout of stress, recovery, or nervous-system health. Recovery and readiness scores built on HRV are proprietary vendor models.

[Permalink](https://aifitnessapi.com/data/hrv-api#faq-1)

### What is the difference between RMSSD and SDNN in HRV APIs?

They are two different statistics computed from the same interbeat intervals and are not directly comparable. Apple HealthKit stores SDNN; Android Health Connect, Fitbit, and most other sources report RMSSD. Always label which one you store and never mix them in a single trend.

[Permalink](https://aifitnessapi.com/data/hrv-api#faq-2)

### Can I get HRV from a phone without a wearable?

No. HRV needs a device that captures beat-to-beat intervals, so it requires a wearable (ring, watch, band) or a chest strap. A phone alone cannot produce it. Verify each provider's device coverage in its live data dictionary, as coverage changes.

[Permalink](https://aifitnessapi.com/data/hrv-api#faq-3)

### Why do Oura and WHOOP HRV values differ from a morning app reading?

Most consumer platforms compute HRV over a nocturnal/overnight window for comparability, while some apps use a guided morning spot reading. The two windows are not interchangeable, and absolute HRV varies a lot between people, so HRV is meant for within-person trends. Surface which window each reading came from.

[Permalink](https://aifitnessapi.com/data/hrv-api#faq-4)

### Which API is best for HRV?

For recovery or readiness scoring out of the box, Oura or WHOOP, which bake nightly HRV into their models. For a raw RMSSD trend on Android, Health Connect. On iOS, HealthKit (SDNN). For real-time biofeedback, a chest strap's RR intervals over BLE. To combine many brands, an aggregator like Terra or Junction.

[Permalink](https://aifitnessapi.com/data/hrv-api#faq-5)
