The Google Health API tracks user vitals and physiological health metrics, such as heart rate, oxygen saturation, blood glucose, core body temperature, and daily sleep temperature derivations.
Understand how to read and request user authorization for vitals data in your application to deliver the best experience for your users.
Supported data types
The API supports the following data types for tracking vitals and health metrics:
Data typedataType
filter parameter |
Record type |
Available operations |
Scope | Webhook support |
True zeros support |
|---|---|---|---|---|---|
Blood Glucose
blood-glucoseblood_glucoseVitals guide |
Sample | list, get, reconcile, rollup, dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
||
Core Body Temperature
core-body-temperaturecore_body_temperatureVitals guide |
Sample | list, get, reconcile, rollup, dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
||
Daily Heart Rate Variability
daily-heart-rate-variabilitydaily_heart_rate_variabilityVitals guide Sleep guide Compatible devices
|
Daily | list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
||
Daily Heart Rate Zones
daily-heart-rate-zonesdaily_heart_rate_zonesVitals guide |
Daily | list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
||
Daily Oxygen Saturation
daily-oxygen-saturationdaily_oxygen_saturationVitals guide Sleep guide Compatible devices
|
Daily | list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
||
Daily Respiratory Rate
daily-respiratory-ratedaily_respiratory_rateVitals guide Sleep guide Compatible devices
|
Daily | list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
||
Daily Resting Heart Rate
daily-resting-heart-ratedaily_resting_heart_rateVitals guide Compatible devices
|
Daily | list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
||
Daily Sleep Temperature Derivations
daily-sleep-temperature-derivationsdaily_sleep_temperature_derivationsVitals guide Sleep guide Compatible devices
|
Daily | list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
||
Electrocardiogram (ECG)
electrocardiogramelectrocardiogramVitals guide Compatible devices
|
Session | list | .ecg.readonly |
||
Heart Rate
heart-rateheart_rateVitals guide Compatible devices
|
Sample | list, reconcile, rollup, dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
||
Heart Rate Variability
heart-rate-variabilityheart_rate_variabilityVitals guide Sleep guide Compatible devices
|
Sample | list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
||
Irregular Rhythm Notification
irregular-rhythm-notificationirregular_rhythm_notificationVitals guide |
Session | list | .irn.readonly |
||
Oxygen Saturation
oxygen-saturationoxygen_saturationVitals guide Sleep guide Compatible devices
|
Sample | list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
||
Respiratory Rate Sleep Summary
respiratory-rate-sleep-summaryrespiratory_rate_sleep_summaryVitals guide Sleep guide Compatible devices
|
Sample | list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
Read-only requirements
Physiological vitals data types are populated by device sync or manual log entries in the Fitbit mobile or web app, and are read-only through the REST API (they cannot be written to or modified directly through Google Health API endpoints).
The following sections provide technical details and REST representation formats for vitals data.
Heart rate and heart health
The API provides detailed intraday measurements and daily summary rollups for heart rate metrics:
- Heart Rate (
heart-rate): Point-in-time heart rate measurements containing abeatsPerMinutecount, along with the user'smotionContext(such asSEDENTARYorACTIVE) andsensorLocation(such asWRISTorCHEST). - Daily Resting Heart Rate (
daily-resting-heart-rate): A daily baseline resting heart rate value. - Heart Rate Variability (
heart-rate-variabilityanddaily-heart-rate-variability): Records root mean square of successive differences (rmssd) in milliseconds to represent HRV.
REST representation example
To query heart rate measurements, send a GET request to the list endpoint.
The following example shows a single heart-rate data point from the
returned list:
Request
GET https://health.googleapis.com/v4/users/me/dataTypes/heart-rate/dataPoints?startTime=2026-04-20T08:00:00Z&endTime=2026-04-20T08:05:00Z Authorization: Bearer access-token Accept: application/json
Response
{
"dataPoints": [
{
"name": "users/me/dataTypes/heart-rate/dataPoints/hr-123456789",
"dataSource": {
"recordingMethod": "ACTIVELY_MEASURED"
},
"heartRate": {
"sampleTime": {
"physicalTime": "2026-04-20T08:00:00Z",
"utcOffset": "0s"
},
"beatsPerMinute": "72",
"metadata": {
"motionContext": "SEDENTARY",
"sensorLocation": "WRIST"
}
}
}
]
}Blood glucose
The blood-glucose data type represents the user's blood sugar levels. Blood
glucose points hold the concentration in milligrams per deciliter (mg/dL),
the meal or timing context, and specimen info.
REST representation example
To query blood glucose measurements, send a GET request to the list
endpoint. The following example shows a single blood-glucose data point from
the returned list:
Request
GET https://health.googleapis.com/v4/users/me/dataTypes/blood-glucose/dataPoints?startTime=2026-04-20T08:00:00Z&endTime=2026-04-20T09:00:00Z Authorization: Bearer access-token Accept: application/json
Response
{
"dataPoints": [
{
"name": "users/me/dataTypes/blood-glucose/dataPoints/bg-987654321",
"dataSource": {
"recordingMethod": "MANUALLY_ENTERED"
},
"bloodGlucose": {
"sampleTime": {
"physicalTime": "2026-04-20T08:30:00Z",
"utcOffset": "-25200s"
},
"bloodGlucoseMilligramsPerDeciliter": 95.0,
"measurementSource": "SELF_MONITORING_BLOOD_GLUCOSE",
"mealType": "BREAKFAST",
"measurementTiming": "AFTER_MEAL",
"specimen": "CAPILLARY_BLOOD",
"notes": "Post-breakfast fingerstick reading"
}
}
]
}Oxygen saturation (SpO2)
The API tracks oxygen levels using oxygen-saturation (intraday sample values)
and daily-oxygen-saturation (daily summary statistics). The percent
concentration is expressed as a number from 0 to 100.
REST representation example
To query oxygen saturation measurements, send a GET request to the list
endpoint. The following example shows a single oxygen-saturation data point
from the returned list:
Request
GET https://health.googleapis.com/v4/users/me/dataTypes/oxygen-saturation/dataPoints?startTime=2026-04-20T03:00:00Z&endTime=2026-04-20T03:05:00Z Authorization: Bearer access-token Accept: application/json
Response
{
"dataPoints": [
{
"name": "users/me/dataTypes/oxygen-saturation/dataPoints/spo2-555555",
"dataSource": {
"recordingMethod": "ACTIVELY_MEASURED"
},
"oxygenSaturation": {
"sampleTime": {
"physicalTime": "2026-04-20T03:00:00Z",
"utcOffset": "0s"
},
"percentage": 98.2
}
}
]
}Temperature
Temperature tracking includes core body temperature metrics and overnight sleep skin temperature trends:
- Core Body Temperature (
core-body-temperature): Records internal organ temperature in Celsius, with the specific measurement site (such asARMPIT,EAR, orFOREHEAD). - Sleep Temperature Derivations (
daily-sleep-temperature-derivations): High-frequency skin temperature variances recorded overnight.
REST representation example
To query core body temperature measurements, send a GET request to the list
endpoint. The following example shows a single core-body-temperature data
point from the returned list:
Request
GET https://health.googleapis.com/v4/users/me/dataTypes/core-body-temperature/dataPoints?startTime=2026-04-20T22:00:00Z&endTime=2026-04-20T23:00:00Z Authorization: Bearer access-token Accept: application/json
Response
{
"dataPoints": [
{
"name": "users/me/dataTypes/core-body-temperature/dataPoints/cbt-666666",
"dataSource": {
"recordingMethod": "ACTIVELY_MEASURED"
},
"coreBodyTemperature": {
"sampleTime": {
"physicalTime": "2026-04-20T22:30:00Z",
"utcOffset": "-18000s"
},
"temperatureCelsius": 36.8,
"measurementLocation": "FOREHEAD"
}
}
]
}Electrocardiogram (ECG) and notifications
For devices with medical-grade sensors, the API exposes advanced heart health data types:
- Electrocardiogram (
electrocardiogram): Single-lead ECG session results, containing a classification (SINUS_RHYTHM,ATRIAL_FIBRILLATION,INCONCLUSIVE), average heart rate, sampling frequency, and raw waveform voltage samples. - Irregular Rhythm Notification (
irregular-rhythm-notification): Contextual alert events indicating signs of potential AFib detected during passive monitoring.
REST representation example
To query electrocardiogram session data, send a GET request to the list
endpoint. The following example shows a single electrocardiogram data point
from the returned list:
Request
GET https://health.googleapis.com/v4/users/me/dataTypes/electrocardiogram/dataPoints?startTime=2026-04-20T10:00:00Z&endTime=2026-04-20T10:05:00Z Authorization: Bearer access-token Accept: application/json
Response
{
"dataPoints": [
{
"name": "users/me/dataTypes/electrocardiogram/dataPoints/ecg-777777",
"dataSource": {
"recordingMethod": "ACTIVELY_MEASURED"
},
"electrocardiogram": {
"interval": {
"startTime": "2026-04-20T10:00:00Z",
"startUtcOffset": "0s",
"endTime": "2026-04-20T10:00:30Z",
"endUtcOffset": "0s"
},
"resultClassification": "SINUS_RHYTHM",
"beatsPerMinuteAvg": "70",
"samplingFrequencyHertz": 250,
"millivoltsScalingFactor": 1000,
"leadNumber": 1,
"waveformSamples": [
-12, -8, 4, 18, 30, 42, 50, 48, 32, 10
]
}
}
]
}Scopes and authorization
To use the vitals and heart health data feature, your app must request the following OAuth scopes:
- Read:
https://www.googleapis.com/auth/googlehealth.ecg.readonly - Read:
https://www.googleapis.com/auth/googlehealth.health_metrics_and_measurements.readonly - Write:
https://www.googleapis.com/auth/googlehealth.health_metrics_and_measurements.writeonly - Read:
https://www.googleapis.com/auth/googlehealth.irn.readonly
Guidelines
Use these guidelines when designing features with vitals and health metrics:
- Handle unit conversions: Temperature values are provided in Celsius. Convert to Fahrenheit in your frontend code based on the user's localized preferences.
- Manage webhook notifications: Subscribe to webhook alerts for vitals to trigger backend analysis immediately after a user syncs new readings (such as heart rate or blood glucose).
- Respect data sensitivity: Ensure that your product clearly explains to
users the clinical or wellness contexts for reading high-frequency
physiological vitals. Explain why scopes like
health_metrics_and_measurementsorecgare required before calling authorization prompts.