September 3, 2026 · 3 min read

VO2 max

Which devices estimate it and when, how the daily value is averaged, the comparison insight it feeds, and what to build.

What vo2_max measures

vo2_max is the day’s average of the device’s estimates of maximal oxygen uptake, the standard measure of cardiorespiratory fitness, in millilitres of oxygen per kilogram of body weight per minute.

Fieldvo2_max
UnitmL/kg/min
ReportedDaily average, on days with a new estimate
WindowMidnight to midnight, profile local time
Wearable requiredYes
APIGET /api/v1/profile/biomarker/{externalId}?categories=vitals&types=vo2_max plus a date range
WebhookBiomarkerCreatedIntegrationEvent. Entries update in place, upsert on id.

Data sources

PlatformRecordNotes
iOS, HealthKitvo2MaxApple Watch, estimated during outdoor walks, runs, and hikes with GPS and heart rate
Android, Health ConnectVo2MaxRecordGarmin Connect, Fitbit (as Cardio Fitness Score), Samsung Health and others
Direct integrationsProvider-dependentGarmin reports its VO2 max estimate
Phone onlyNone

How Sahha calculates vo2_max

  1. Pick one source for the day within the oxygen category, which also covers respiratory rate and oxygen saturation. One source wins per day; values are never blended.
  2. Average that source’s estimates with an end time inside the local day. Usually there is one.

Absence means no new estimate that day, which is most days.

Interpreting the value

Use the comparison insight for context. The vo2_max comparison places the value against global, demographic, and personal-baseline groups and returns a percentile. Demographic is the one that matters: VO2 max falls with age and differs by sex [1], so a raw number without age and sex context is misleading.

It changes slowly. Meaningful improvement takes weeks of training. A month-to-month view is the right cadence; day to day is noise around a device estimate.

Vendors disagree. A user switching from Apple Watch to Garmin will see a step change unrelated to fitness.

VO2 max is not a score factor and has no trend insight. A vo2_max comparison is available.

Use cases

A fitness level card. Show the latest estimate, its date, and the demographic percentile from the comparison insight. “Higher than 68 percent of people your age” is the sentence users want.

GET /api/v1/profile/biomarker/{externalId}?categories=vitals&types=vo2_max&startDateTime=2026-06-04&endDateTime=2026-09-02

A training program outcome. The trailing 30-day average before and after a program is a defensible before-and-after, provided the device did not change.

Limitations

  • Sparse. Only on days with a qualifying workout on a supporting device.
  • Estimates, and vendor-specific. Do not compare across devices.
  • Absence is not zero.

References

  1. Kaminsky LA, Arena R, Myers J. Reference standards for cardiorespiratory fitness measured with cardiopulmonary exercise testing: data from the Fitness Registry and the Importance of Exercise National Database. Mayo Clinic Proceedings. 2015;90(11):1515-1523. https://doi.org/10.1016/j.mayocp.2015.07.026

Related