VO2 Max API: How to Get VO2 Max Data
Updated July 24, 2026
To get VO2 max into your app, you read it from an on-device store (Apple HealthKit HKQuantityTypeIdentifierVO2Max, Android Health Connect Vo2MaxRecord) or pull it from a cloud wearable API (Garmin User Metrics, Fitbit's Cardio Fitness Score, Oura). The one thing to be honest about before any of that: consumer VO2 max is estimated, not lab-measured — it is modeled from your heart-rate response versus pace or power during activity 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: read HKQuantityTypeIdentifierVO2Max in an Apple-centric app, use Garmin or Fitbit for a cross-device trend, and reach for an aggregator when you mix brands. 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."
| Source | How you access it | Notes |
|---|---|---|
| Apple HealthKit | On-device read of HKQuantityTypeIdentifierVO2Max | "Maximal oxygen consumption during exercise"; iOS-only, no server-to-server pull |
| Android Health Connect | On-device read of Vo2MaxRecord | Includes a measurementMethod field (e.g. metabolic-cart vs. estimated) — verify the exact enum values in the reference |
| Garmin Health API | Cloud OAuth 2.0; VO2 max under User Metrics summaries | Post-sync latency; device-dependent |
| Fitbit Web API | Cloud OAuth 2.0; Cardio Fitness Score endpoint (cardioscore) | Labeled "Cardio Fitness Score (VO2 Max)" |
| Oura API v2 | Cloud OAuth 2.0; daily VO2 max value | Verify the exact endpoint name in the live docs |
| WHOOP API | Cloud OAuth 2.0 | Not a headline field historically — verify against the current v2 data dictionary before claiming it |
| Strava | — | No VO2 max field; activity data only |
| Aggregators (Terra, Junction, Rook) | One normalized schema across many providers | Useful 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
HKQuantityTypeIdentifierVO2Maxfrom 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.0after 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
Vo2MaxRecordfrom Health Connect on-device; check itsmeasurementMethodso 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
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