Skip to content
AF
Health Data

VO2 Max API: How to Get VO2 Max Data

Last verified July 24, 2026 · 3 min read

You get VO2 max by reading an on-device store (Apple HealthKit HKQuantityTypeIdentifierVO2Max, Android Health Connect Vo2MaxRecord) or by pulling a cloud wearable API (Garmin User Metrics, Fitbit's Cardio Fitness Score, Oura) over OAuth 2.0. Be honest that consumer VO2 max is estimated, not lab-measured: it is modeled from heart-rate response versus pace or power plus demographics, so it is a fitness-trend signal, not a clinical value. Not every provider exposes it and coverage is device-dependent. Best pick: HealthKit for Apple apps, Garmin or Fitbit for a cross-device trend, and an aggregator when you mix brands.

Covered here:Health ConnectHealthKitFitbitGarminOura

For what the number actually represents, see what is VO2 max.

Where you can get VO2 max#

VO2 max shows up in two access models: on-device stores you read with the user's permission (no cloud pull), and cloud wearable APIs behind OAuth 2.0 that deliver data after the user's device syncs. Field names and device coverage change often, so treat everything below as "as of 2026, verify in the provider's data dictionary."

SourceHow you access itNotes
Apple HealthKitOn-device read of HKQuantityTypeIdentifierVO2Max"Maximal oxygen consumption during exercise"; iOS-only, no server-to-server pull
Android Health ConnectOn-device read of Vo2MaxRecordIncludes a measurementMethod field (e.g. metabolic-cart vs. estimated) — verify the exact enum values in the reference
Garmin Health APICloud OAuth 2.0; VO2 max under User Metrics summariesPost-sync latency; device-dependent
Fitbit Web APICloud OAuth 2.0; Cardio Fitness Score endpoint (cardioscore)Labeled "Cardio Fitness Score (VO2 Max)"
Oura API v2Cloud OAuth 2.0; daily VO2 max valueVerify the exact endpoint name in the live docs
WHOOP APICloud OAuth 2.0Not a headline field historically — verify against the current v2 data dictionary before claiming it
StravaNo VO2 max field; activity data only
Aggregators (Terra, Junction, Rook)One normalized schema across many providersUseful to reconcile differently-named "VO2 max" / "Cardio Fitness" fields

A key caveat: not all providers expose VO2 max, and where they do, estimating it often requires qualifying outdoor activities (GPS runs or walks with heart rate). Verify per provider and per device rather than assuming the field is populated.

Measured or estimated?#

Estimated — on every consumer device. True VO2 max is a lab measurement: a graded exercise test with a metabolic cart measuring the oxygen you actually consume at max effort. What a watch or ring reports is a model, derived from your heart-rate response relative to pace or power during activity, combined with profile data like age, weight, and sex. Two things follow from that:

  • Values update infrequently and can go stale. Many devices only refresh the estimate after qualifying outdoor activities with heart rate and pace or GPS. Indoor-only or low-activity users may see stale or absent values.
  • Numbers are not comparable across brands. Vendors label it differently ("VO2 max," "Cardio Fitness Score," "Cardio Fitness") and use different estimation models, so the same person can get different values on different devices. Treat it as a within-person trend, not a cross-brand or clinical figure.

Frame it in your UI as a general fitness and wellness signal, not a diagnostic. Do not publish a specific accuracy percentage or imply clinical validity — accuracy varies with device, fitness level, and activity type, and none of these are lab-grade.

Which should you pick?#

  • Apple ecosystem: read HKQuantityTypeIdentifierVO2Max from HealthKit on-device — the least-friction path for an iOS app, and it inherits whatever the Apple Watch estimated.
  • Cross-device trend: Garmin User Metrics VO2 max or Fitbit's Cardio Fitness Score, pulled server-side via OAuth 2.0 after the user's device syncs.
  • Mixing brands: normalize through an aggregator so you handle one schema instead of several differently-named fields. See wearable data APIs for that route.
  • Android: read Vo2MaxRecord from Health Connect on-device; check its measurementMethod so you know whether a given value is estimated or (rarely) from a metabolic cart.

If you are weighing the on-device stores against each other, Apple HealthKit vs Google Health Connect covers how the two permissioned-read models differ.

Before you ship#

Confirm which providers actually expose VO2 max and on which devices — coverage is uneven and volatile. Re-check field names, endpoints, and the Health Connect measurementMethod enum against each vendor's current data dictionary before you build. And keep the honest framing front and center: consumer VO2 max is an estimate and a wellness signal, not a lab measurement or a medical diagnostic.

Frequently asked questions

Is VO2 max from a watch accurate?
Consumer VO2 max is an estimate, not a lab measurement, so treat it as a fitness-trend signal rather than a precise value. Accuracy varies with device, fitness level, and activity type, and the estimate often only refreshes after qualifying outdoor activities with heart rate and pace or GPS. There is no single accuracy percentage to quote; verify each provider's method in its data dictionary.
Which APIs expose VO2 max data?
Apple HealthKit exposes HKQuantityTypeIdentifierVO2Max on-device, Android Health Connect exposes Vo2MaxRecord, and cloud wearable APIs include Garmin (User Metrics), Fitbit (Cardio Fitness Score), and Oura. WHOOP has not historically been a headline field, and Strava has no VO2 max field. Not all providers expose it and coverage is device-dependent, so verify per provider as of 2026.
Is consumer VO2 max measured or estimated?
Estimated on every consumer device. True VO2 max comes from a lab graded-exercise test with a metabolic cart. Watches and rings model it from your heart-rate response relative to pace or power during activity plus profile data like age, weight, and sex. Health Connect's Vo2MaxRecord even carries a measurementMethod field distinguishing estimated from metabolic-cart values.
Can I compare VO2 max across Garmin, Fitbit, and Apple?
Not directly. Vendors label it differently (VO2 max, Cardio Fitness Score, Cardio Fitness) and use different estimation models, so the same person can get different numbers on different devices. Use it as a within-person trend, and normalize through an aggregator if you need one consistent field across brands.
How do I read VO2 max in an iOS or Android app?
On iOS, request permission and read HKQuantityTypeIdentifierVO2Max from HealthKit on-device; there is no Apple cloud pull. On Android, read Vo2MaxRecord from Health Connect with the granted permission. Both are permissioned on-device reads, so verify the current type and field names in Apple's and Google's data dictionaries before you build.

Keep reading

VO2 max on the platform stores

Read from Apple’s documentation on 2026-08-28 and from our verified cross-platform reference. Not hand-written — regenerated with the dataset.

Apple HealthKitAggregate withUnitiOS
vo2Max.discreteAveragevolume/mass/time11.0
Android Health Connect
Vo2MaxRecord
Query shape
Discrete: average or take min/max. Summing these produces a meaningless number.

Watch out: An estimate on both platforms, not a lab measurement. Health Connect tags a measurement method.

Full set: every HealthKit type identifier · every HealthKit error code

Elsewhere on the site

Pages that share this one’s concepts and sources, from other sections.

Next steps

Was this page useful?

Independent comparison, last reviewed July 24, 2026. Pricing, rate limits, and feature availability change often — confirm current details in each provider’s official documentation before you commit. Product and company names are trademarks of their respective owners; AIFitnessAPI is not affiliated with, endorsed by, or sponsored by any product listed here.

← All health data · by AIFitnessAPI