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.
| Field | vo2_max |
|---|---|
| Unit | mL/kg/min |
| Reported | Daily average, on days with a new estimate |
| Window | Midnight to midnight, profile local time |
| Wearable required | Yes |
| API | GET /api/v1/profile/biomarker/{externalId}?categories=vitals&types=vo2_max plus a date range |
| Webhook | BiomarkerCreatedIntegrationEvent. Entries update in place, upsert on id. |
Data sources
| Platform | Record | Notes |
|---|---|---|
| iOS, HealthKit | vo2Max | Apple Watch, estimated during outdoor walks, runs, and hikes with GPS and heart rate |
| Android, Health Connect | Vo2MaxRecord | Garmin Connect, Fitbit (as Cardio Fitness Score), Samsung Health and others |
| Direct integrations | Provider-dependent | Garmin reports its VO2 max estimate |
| Phone only | None |
How Sahha calculates vo2_max
- 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.
- 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.
Related scores and insights
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-02A 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.
Related guides
- Heart rate for resting heart rate, the other fitness-linked vital
- Activity intensity for the training load that moves VO2 max
- Data dictionary in the developer docs
References
- 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