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.

ProviderCategoryStatus
OuraCloud OAuthLive
WHOOPCloud OAuthLive
FitbitCloud OAuthLive
StravaCloud OAuthLive
WithingsCloud OAuthLive
GarminCloud OAuthOnboarding
PolarCloud OAuthOnboarding
SuuntoCloud OAuthOnboarding
UltrahumanCloud OAuthOnboarding
Apple HealthMobile SDKMobile SDK
Google Health ConnectMobile SDKMobile SDK
Samsung HealthMobile SDKMobile 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.created

Frequently 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.