---
title: "Blood Oxygen (SpO2) API: How to Get SpO2 Data"
canonical: "https://aifitnessapi.com/data/blood-oxygen-api"
cluster: "Health Data"
primary_query: "blood oxygen spo2 api"
last_reviewed: "2026-07-24"
description: "Get SpO2/blood oxygen data from HealthKit, Health Connect, Fitbit, Garmin, Oura, and WHOOP. Measured but wellness-grade, not a medical diagnostic."
publisher: "AIFitnessAPI — independent, not sponsored"
cite_as: "\"Blood Oxygen (SpO2) API: How to Get SpO2 Data\", AIFitnessAPI, https://aifitnessapi.com/data/blood-oxygen-api"
---

# Blood Oxygen (SpO2) API: How to Get SpO2 Data

> Blood oxygen (SpO2) is measured by optical pulse oximetry on wrist wearables and finger rings, but on consumer devices it is a general-wellness signal, not an FDA-cleared diagnostic. You can read it from on-device stores (HealthKit oxygenSaturation, Health Connect OxygenSaturationRecord) or cloud wearable APIs (Fitbit, Garmin, Oura, WHOOP), most of which report an overnight trend rather than continuous daytime readings. Best pick: Oura, Fitbit, or Garmin for overnight trends; HealthKit for an on-demand iOS spot check, subject to Apple Watch US availability caveats.

- Canonical: https://aifitnessapi.com/data/blood-oxygen-api
- Last reviewed: 2026-07-24
- Publisher: AIFitnessAPI (https://aifitnessapi.com) — independent, not sponsored
- Cite as: "Blood Oxygen (SpO2) API: How to Get SpO2 Data", AIFitnessAPI, https://aifitnessapi.com/data/blood-oxygen-api

---

If you are choosing between sources more broadly, see the [wearable data APIs](/fitness-apis/wearable-data-apis) overview and the [on-device vs cloud health data](/learn/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](/integrate/healthkit). |
| 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](/fitness-apis/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.

## FAQ

### 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.

[Permalink](https://aifitnessapi.com/data/blood-oxygen-api#faq-1)

### 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.

[Permalink](https://aifitnessapi.com/data/blood-oxygen-api#faq-2)

### 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.

[Permalink](https://aifitnessapi.com/data/blood-oxygen-api#faq-3)

### 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.

[Permalink](https://aifitnessapi.com/data/blood-oxygen-api#faq-4)

### 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.

[Permalink](https://aifitnessapi.com/data/blood-oxygen-api#faq-5)
