September 3, 2026 · 3 min read

Respiratory rate

Which devices supply breaths per minute, how the two values are averaged, and what to build.

What the respiratory rate biomarkers measure

BiomarkerWhat it is
respiratory_rateThe day’s average breaths per minute across all samples
respiratory_rate_sleepThe average across the hours the user was in bed
Fieldrespiratory_rate, respiratory_rate_sleep
UnitBreaths 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

PlatformRecordNotes
iOS, HealthKitrespiratoryRateApple Watch, during sleep only
Android, Health ConnectRespiratoryRateRecordFitbit, Garmin Connect, Pixel Watch, Oura and other writers, mostly overnight
Direct integrationsProvider-dependentGarmin and Oura report overnight respiration
Phone onlyNone

How Sahha calculates respiratory rate

  1. Pick one source for the day within the oxygen category, which also covers oxygen saturation and VO2 max. One source wins per day; values are never blended.
  2. Daily is the average of that source’s samples with an end time inside the local day.
  3. Sleep averages each hour in which the user was in bed for at least 45 minutes, according to sleep records, then averages those hours. Hours before midnight belong to the previous calendar date.

Absence means no samples from the winning source that day.

Interpreting the value

The signal is the change, not the level. Overnight respiratory rate is remarkably stable for an individual. A rise of one to two breaths per minute against the user’s own recent average, sustained over consecutive nights, is a well-documented early marker of respiratory illness, and it tends to precede symptoms [1].

Most users’ two values are the same number. Because consumer devices measure breathing during sleep, the daily and sleep averages usually coincide. The pair only diverges for devices that also sample during the day.

Respiratory rate is not a score factor and has no trend or comparison insight.

Use cases

A “breathing rate above your usual” flag. Keep a 14-night rolling average and flag two consecutive nights more than 1.5 breaths per minute above it. Because there is no comparison insight for this field, the baseline is yours to compute from the biomarker history.

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

Pair it with resting heart rate and sleeping heart rate. A rise in all three on the same nights is a stronger signal than any one of them.

Limitations

  • Wearable only, and mostly overnight. Daytime respiratory rate is rare on consumer devices.
  • A night that spans midnight is split across two dates by the calendar-day window.
  • Absence is not zero.

References

  1. Miller DJ, Capodilupo JV, Lastella M, et al. Analyzing changes in respiratory rate to predict the risk of COVID-19 infection. PLoS ONE. 2020;15(12):e0243693. https://doi.org/10.1371/journal.pone.0243693

Related