Heart Rate data from every wearable, in one schema
Continuous, resting and workout heart rate from every major wearable, in one schema and one unit.
8 / 12
Providers connectable today
6
Webhook events in this family
beats per minute
Canonical units
What heart rate looks like through one API
Heart rate is the most widely available signal in connected health and the one where sampling density differs most dramatically between providers. The same nominal metric can arrive as one resting value per day, a reading every five minutes, or a full second-by-second stream during a workout — and the difference is not documented anywhere consistent.
WearLink separates the summary object from the high-resolution series so you can ask for what you need. heart_rate.created gives you the daily aggregate; series.heart_rate.created gives you the underlying samples where the provider exposes them. Resting heart rate, walking average and one-minute heart-rate recovery are distinct streams rather than fields buried in a daily blob, because products typically need one and not the others.
Everything is delivered in beats per minute with UTC timestamps and the originating device recorded, so a user who wears a chest strap for training and a ring overnight produces one coherent timeline rather than two incompatible ones.
Where providers disagree
The part that costs you weeks if you build this yourself. None of the following is a WearLink limitation — it is how the underlying providers actually behave.
Sampling density varies by orders of magnitude
A chest strap streams continuously during exercise; an optical wrist sensor may sample every few minutes at rest and densely only during a recorded workout; a ring typically samples on a fixed schedule overnight. Code that assumes evenly-spaced samples will produce misleading averages. Use the timestamps, not the index.
"Resting heart rate" is a computed figure, not a measurement
Each provider computes RHR with its own algorithm and window — lowest sustained value overnight, an average of the lowest N minutes, or a proprietary variant. Values differ by several bpm between devices for the same person on the same night. Use series.resting_heart_rate.created for trends within a device, not for cross-device comparison.
Optical sensors degrade under motion
Wrist-based optical readings during high-intensity or high-cadence activity are materially less accurate than a chest strap, and providers do not consistently flag when a reading is low-confidence. If your product does anything clinical or safety-adjacent with peak heart rate, prefer strap sources and record which device produced each sample.
Providers that supply heart rate
Status is read from the same provider table the rest of the site uses, so nothing here can claim a provider is connectable when it is not. Coverage also varies by hardware generation within a brand.
| Provider | Category | Status |
|---|---|---|
| Oura | Cloud OAuth | Live |
| WHOOP | Cloud OAuth | Live |
| Fitbit | Cloud OAuth | Live |
| Strava | Cloud OAuth | Live |
| Withings | Cloud OAuth | Live |
| Garmin | Cloud OAuth | Onboarding |
| Polar | Cloud OAuth | Onboarding |
| Suunto | Cloud OAuth | Onboarding |
| Ultrahuman | Cloud OAuth | Onboarding |
| Apple Health | Mobile SDK | Mobile SDK |
| Google Health Connect | Mobile SDK | Mobile SDK |
| Samsung Health | Mobile SDK | Mobile SDK |
Webhook events for heart rate
Subscribe to the summary event for settled records, and to the series streams when you need the underlying samples. Event names below are generated from the backend enum, so they cannot drift out of date relative to the API.
Summary object
heart_rate.created
Series streams
series.heart_rate.createdseries.resting_heart_rate.createdseries.walking_heart_rate_average.createdseries.heart_rate_recovery_one_minute.createdseries.atrial_fibrillation_burden.createdFrequently asked questions
- Can I get second-by-second heart rate during a workout?
- Where the provider exposes it, yes — via series.heart_rate.created alongside the workout record. Resolution is provider- and device-dependent; the samples carry their own timestamps so you can see the true spacing.
- Is resting heart rate comparable between Fitbit and Garmin?
- Not reliably. Both are computed values with different algorithms and windows. Trends within one device are dependable; a step change when a user switches devices is usually the algorithm, not the user.
- Does WearLink expose AFib burden?
- series.atrial_fibrillation_burden.created is in the normalised catalog for providers that report it. Note that this is a regulated feature on the device side and availability is restricted by hardware and region.
Related data types
15 normalised data families in total — see them all or browse integrations by provider.