September 3, 2026 · 5 min read

Heart rate

Which devices supply resting and sleeping heart rate, how the daily values are averaged, the personal-baseline readiness factor, and what to build.

What the heart rate biomarkers measure

BiomarkerWhat it is
heart_rate_restingThe day’s average of the device’s resting heart rate estimates
heart_rate_sleepThe average heart rate across the hours the user was in bed
Fieldheart_rate_resting, heart_rate_sleep
UnitBeats per minute
ReportedDaily average
WindowMidnight to midnight, profile local time
Wearable requiredYes
APIGET /api/v1/profile/biomarker/{externalId}?categories=vitals plus one types parameter per field and a date range
WebhookBiomarkerCreatedIntegrationEvent. Entries update in place, upsert on id.

Data sources

PlatformResting heart rateRaw heart rate (for sleeping heart rate)
iOS, HealthKitrestingHeartRate, computed by Apple Watch once a day from quiet periodsheartRate samples from Apple Watch
Android, Health ConnectRestingHeartRateRecord, written by Samsung Health, Fitbit, Garmin Connect, Pixel Watch and other appsHeartRateRecord samples from the same apps
Direct integrationsWHOOP and Oura report a nightly resting heart rate; Garmin reports a daily oneProvider-dependent
Phone onlyNoneNone

Each vendor defines resting heart rate differently. Apple samples quiet moments through the day. Oura and WHOOP take the overnight low or average. The values are not interchangeable across devices.

How Sahha calculates heart rate

  1. Pick one source for the day. Within the heart category, a source that reports resting heart rate outranks one that reports only raw heart rate. One source wins per day; values from different devices are never blended.
  2. Resting heart rate is the average of that source’s resting heart rate samples with an end time inside the local day. Most devices write one per day, so the average is usually that single value.
  3. Sleeping heart rate is built from raw heart rate samples. Each hour of the day in which the user was in bed for at least 45 minutes, according to sleep records, is averaged, and those hourly averages are averaged again. Hours before midnight belong to the previous calendar date.

Absence means the winning source supplied no samples of that kind that day.

Interpreting the value

Read it against the user’s own history. Resting heart rate varies far more between people than within one person. For a per-user benchmark use the heart_rate_resting comparison insight, which places the value against global, demographic, and personal-baseline groups and treats lower as better.

Sleeping heart rate is usually lower and steadier than resting. It excludes daytime stress, caffeine, and posture, so it moves less day to day and shows illness, alcohol, and late meals more clearly.

A night that spans midnight is split. The in-bed hour before midnight counts toward the earlier date. Sleeping heart rate for a date mostly reflects the early-morning hours.

Score factor. The Readiness Score carries a factor named resting_heart_rate, unit bpm, whose value is the day’s resting heart rate. Its goal is the user’s own 30-day average, excluding the current day. Credit is 1 at the average and falls in proportion to how far the day’s value sits from it, measured in multiples of the user’s own 30-day standard deviation, with a floor of 0.2. A user whose resting heart rate never varies has no standard deviation to scale by, and no factor until it does.

Trend. A resting_heart_rate trend is available on the factor score.

Comparison. A heart_rate_resting comparison is available on the raw value. None for sleeping heart rate.

Use cases

A “higher than your usual” flag. Compare today’s resting heart rate with the user’s own 30-day baseline from the comparison insight. A rise of several beats sustained over two or three days, with no change in training, is the classic early sign of illness or overreaching [1], and the readiness factor already encodes it.

GET /api/v1/profile/biomarker/{externalId}?categories=vitals&types=heart_rate_resting&types=heart_rate_sleep&startDateTime=2026-08-03&endDateTime=2026-09-02

A sleeping heart rate history. The seven-night line of sleeping heart rate is the single most legible recovery chart for users, and it needs only raw heart rate plus sleep records.

Limitations

  • Values differ by vendor. Do not compare resting heart rate across users on different devices, and expect a step change when a user switches.
  • Sleeping heart rate needs both heart rate samples and sleep records. A phone-estimated sleep window can supply the hours, but the heart rate still has to come from a worn device.
  • The 45-minute rule drops short in-bed hours. The hour the user went to bed or got up is often excluded.
  • Absence is not zero.

References

  1. Radin JM, Wineinger NE, Topol EJ, Steinhubl SR. Harnessing wearable device data to improve state-level real-time surveillance of influenza-like illness in the USA: a population-based study. The Lancet Digital Health. 2020;2(2):e85-e93. https://doi.org/10.1016/S2589-7500(19)30222-5

Related