Blood Oxygen (SpO2) API: How to Get SpO2 Data
Updated July 24, 2026
Blood oxygen (SpO2) is the percentage of your blood's hemoglobin carrying oxygen, read on consumer devices by reflectance pulse oximetry — optical red/infrared sensors at the wrist or on a finger ring. It is a measured value, but on wrist wearables and rings it is a general-wellness signal, not an FDA-cleared diagnostic: these devices are marketed as "not intended for medical use," and you should never frame their SpO2 data as a substitute for a medical pulse oximeter. You can read SpO2 from the on-device stores (Apple HealthKit, Android Health Connect) or from cloud wearable APIs (Fitbit, Garmin, Oura, WHOOP), most of which report an overnight trend rather than continuous daytime readings. Best pick: for overnight SpO2 trends, pull Oura, Fitbit, or Garmin; for an on-demand spot check inside an iOS app, read HealthKit — subject to the availability caveat below.
If you are choosing between sources more broadly, see the wearable data APIs overview and the on-device vs cloud health data explainer.
Where you can get blood oxygen data
Field names, scopes, and device coverage change often. Treat every row as "as of 2026, verify in the provider's live data dictionary."
| Source | How you access it | Notes |
|---|---|---|
| Apple HealthKit (iOS) | On-device read of HKQuantityTypeIdentifierOxygenSaturation after user permission | On-device only, no cloud pull. US availability is unsettled — see caveat below. See the HealthKit integration guide. |
| Android Health Connect | On-device read of OxygenSaturationRecord (a single SpO2 reading) | On-device datastore other apps write into; you read with granted permission. |
| Fitbit Web API | Cloud OAuth 2.0; daily SpO2 (intraday with approval) | Commonly an overnight/estimated oxygen variation, not continuous daytime SpO2. |
| Garmin Health API | Cloud OAuth 2.0; Pulse Ox summaries | Device-dependent; verify coverage per model. |
| Oura API v2 | Cloud OAuth 2.0; daily_spo2 (overnight average), spo2 scope | Overnight average, not spot. |
| WHOOP API v2 | Cloud OAuth 2.0; SpO2 on supporting hardware | Contributes to Recovery on supporting devices — verify current device and field. |
| Aggregators (Terra, Junction, Rook) | One normalized schema + webhooks across the above | Normalize SpO2 where the underlying source provides it. See health data aggregator APIs. |
Access model in one line: HealthKit and Health Connect are on-device permissioned reads with no cloud endpoint; Fitbit, Garmin, Oura, and WHOOP are cloud OAuth where data lands only after the user's device syncs; aggregators sit on top and hand you one schema across many providers.
Measured or estimated?
SpO2 is measured by an optical sensor, not modeled — but two things need honest framing:
- Wellness signal, not diagnostic. Consumer SpO2 is a general fitness and wellness signal. These devices are not FDA-cleared diagnostics; Apple, for example, used the general-wellness regulatory pathway. Do not present the data as a way to detect or monitor hypoxemia or disease, and do not treat it as equivalent to a clinical pulse oximeter.
- Spot vs overnight. There are two capture modes: on-demand spot readings (the user initiates and must hold still) and overnight/background trend sampling. Many sources report an overnight average or oxygen variation rather than continuous daytime SpO2 — confirm which a given provider returns before you build UI around it.
Accuracy gotchas: motion, cold hands, fit, and skin factors all affect optical SpO2. Do not publish a fixed accuracy margin — none is sourced, and it varies by device and conditions.
Apple Watch US availability caveat (verify current status). Apple Watch's Blood Oxygen feature was disabled on new US units after a 2023 US ITC exclusion order in the Masimo patent dispute, then restored in the US around August 2025 via an iOS/watchOS update using a reworked flow that computes the reading on the paired iPhone. Litigation and ITC action were ongoing into late 2025. As of 2026, availability and behavior differ by watch model, region, and OS version — do not assume the HealthKit HKQuantityTypeIdentifierOxygenSaturation type is populated on a given US device. Verify current US availability before you rely on it.
Which source should you pick?
- Overnight SpO2 trend (sleep or altitude wellness): Oura
daily_spo2, Fitbit, or Garmin Pulse Ox — these are built around the overnight window. - On-demand spot check in an iOS app: HealthKit
HKQuantityTypeIdentifierOxygenSaturation, subject to the Apple Watch availability caveat above. - Android, single reading: Health Connect
OxygenSaturationRecord. - Many devices behind one integration: an aggregator (Terra, Junction, Rook) to normalize SpO2 across providers and avoid building each OAuth flow yourself.
Before you ship
Re-verify each provider's device coverage, whether values are spot or overnight, and the exact scope and field names against its current data dictionary — these are volatile. Keep the framing honest: consumer SpO2 is a general-wellness signal, not a medical diagnosis, and the Apple Watch US situation is still moving — check current availability rather than assuming.
Frequently asked questions
- Is consumer SpO2 data a medical measurement?
- No. SpO2 is genuinely measured by an optical sensor, but consumer wearables and rings are marketed as general fitness and wellness devices that are not intended for medical use and are not FDA-cleared diagnostics. Do not treat their SpO2 data as a substitute for a medical pulse oximeter or as a way to detect or monitor disease.
- Which platform data types expose blood oxygen?
- On iOS, Apple HealthKit exposes HKQuantityTypeIdentifierOxygenSaturation as an on-device permissioned read. On Android, Health Connect exposes OxygenSaturationRecord (a single reading). Cloud wearable APIs use OAuth: Oura returns daily_spo2, and Fitbit, Garmin, and WHOOP expose their own SpO2 fields. Verify exact field names and scopes in each provider's current data dictionary.
- Can I get an Apple Watch blood oxygen reading in the US?
- It depends and is unsettled. Apple Watch's Blood Oxygen feature was disabled on new US units after a 2023 ITC order, then restored around August 2025 via a reworked flow that computes the reading on the paired iPhone, with litigation ongoing into late 2025. As of 2026, availability differs by model, region, and OS version, so do not assume the HealthKit oxygenSaturation type is populated. Verify current US availability.
- Do wearables give continuous SpO2 or just overnight readings?
- Both modes exist, but they differ by source. On-demand spot readings require the user to initiate and hold still; overnight or background sampling produces a trend. Many providers report only an overnight average or oxygen variation rather than continuous daytime SpO2, so confirm which mode a given source returns before building around it.
- What is the easiest way to read SpO2 across many devices?
- Use an aggregator such as Terra, Junction, or Rook, which normalize SpO2 across providers behind one schema and webhooks where the underlying source supplies it. This avoids building a separate OAuth integration for each wearable, though coverage still depends on what each device and vendor expose.
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