Develop Vitals and Health Metrics Experiences with the Google Health API

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:

Table: Google Health API Vitals data types
Data type
  dataType
  filter parameter
Record
type
Available
operations
Scope Webhook
support
True zeros
support
Blood Glucose
  blood-glucose
  blood_glucose

  Vitals guide
Sample list, get, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Core Body Temperature
  core-body-temperature
  core_body_temperature

  Vitals guide
Sample list, get, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Daily Heart Rate Variability
  daily-heart-rate-variability
  daily_heart_rate_variability

  Vitals 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-zones
  daily_heart_rate_zones

  Vitals guide
Daily list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Daily Oxygen Saturation
  daily-oxygen-saturation
  daily_oxygen_saturation

  Vitals guide
  Sleep guide

Compatible devices

Daily list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Daily Respiratory Rate
  daily-respiratory-rate
  daily_respiratory_rate

  Vitals 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-rate
  daily_resting_heart_rate

  Vitals guide

Compatible devices

Daily list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Daily Sleep Temperature Derivations
  daily-sleep-temperature-derivations
  daily_sleep_temperature_derivations

  Vitals guide
  Sleep guide

Compatible devices

Daily list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Electrocardiogram (ECG)
  electrocardiogram
  electrocardiogram

  Vitals guide

Compatible devices

Session list .ecg.readonly
Heart Rate
  heart-rate
  heart_rate

  Vitals guide

Compatible devices

Sample list, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Heart Rate Variability
  heart-rate-variability
  heart_rate_variability

  Vitals guide
  Sleep guide

Compatible devices

Sample list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Irregular Rhythm Notification
  irregular-rhythm-notification
  irregular_rhythm_notification

  Vitals guide
Session list .irn.readonly
Oxygen Saturation
  oxygen-saturation
  oxygen_saturation

  Vitals 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-summary
  respiratory_rate_sleep_summary

  Vitals 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 a beatsPerMinute count, along with the user's motionContext (such as SEDENTARY or ACTIVE) and sensorLocation (such as WRIST or CHEST).
  • Daily Resting Heart Rate (daily-resting-heart-rate): A daily baseline resting heart rate value.
  • Heart Rate Variability (heart-rate-variability and daily-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 as ARMPIT, EAR, or FOREHEAD).
  • 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_measurements or ecg are required before calling authorization prompts.