The following table contains the full list of data types, with several columns to help you understand the representation of each type in the Google Health API, as well as the scope each is available under.
Data type fields
The Google Health API data types table includes several field columns to help you understand the representation and requirements of each data type. These columns are as follows:
| Field | Description |
|---|---|
dataType |
The identifier separated by hyphens (for example, active-minutes) used in endpoint URLs. |
filter parameter |
The identifier separated by underscores (for example, active_minutes) used as the value for the dataType filter parameter in daily rollup and rollup requests. |
| Record type | Indicates the structure and format of the recorded data. Under the hood, this aligns with the resource representation of the data points. The possible values are:
|
| Available operations | Lists the API methods supported for the data type (such as list, create, and rollUp). |
| Scope | The required OAuth scope(s) to access the data type. |
| Webhook support | Indicates that the data type supports real-time notifications using webhooks when new data is synced. |
| True zeros support | Indicates that the data type supports recording explicit zero values to differentiate between an active zero value (such as zero active minutes) versus missing or unrecorded data. |
| Compatible devices | An expandable list of physical devices that can record and sync this data type to the Google Health API (using the Fitbit app). |
| Data type | Available operations |
Scope |
|---|---|---|
|
Active Energy Burned
dataType:
active-energy-burnedfilter parameter: active_energy_burned
Record type: Interval
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Active Minutes
dataType:
active-minutesfilter parameter: active_minutes
Record type: Interval
Compatible devices
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Active Zone Minutes
dataType:
active-zone-minutesfilter parameter: active_zone_minutes
Record type: Interval
Compatible devices
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Activity Level
|
list, reconcile | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Altitude
dataType:
altitudefilter parameter: altitude
Record type: Interval
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Blood Glucose
dataType:
blood-glucosefilter parameter: blood_glucose
Record type: Sample
|
list, get, reconcile, rollup, dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Body Fat
dataType:
body-fatfilter parameter: body_fat
Record type: Sample
Compatible devices
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Calories In Heart Rate Zone
dataType:
calories-in-heart-rate-zonefilter parameter: calories_in_heart_rate_zone
Record type: Interval
|
rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Core Body Temperature
dataType:
core-body-temperaturefilter parameter: core_body_temperature
Record type: Sample
|
list, get, reconcile, rollup, dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Daily Heart Rate Variability
dataType:
daily-heart-rate-variabilityfilter parameter: daily_heart_rate_variability
Record type: Daily
Compatible devices
|
list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Daily Heart Rate Zones
dataType:
daily-heart-rate-zonesfilter parameter: daily_heart_rate_zones
Record type: Daily
|
list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Daily Oxygen Saturation
dataType:
daily-oxygen-saturationfilter parameter: daily_oxygen_saturation
Record type: Daily
Compatible devices
|
list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Daily Respiratory Rate
dataType:
daily-respiratory-ratefilter parameter: daily_respiratory_rate
Record type: Daily
Compatible devices
|
list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Daily Resting Heart Rate
dataType:
daily-resting-heart-ratefilter parameter: daily_resting_heart_rate
Record type: Daily
Compatible devices
|
list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Daily Sleep Temperature Derivations
dataType:
daily-sleep-temperature-derivationsfilter parameter: daily_sleep_temperature_derivations
Record type: Daily
Compatible devices
|
list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Daily VO2 Max
dataType:
daily-vo2-maxfilter parameter: daily_vo2_max
Record type: Daily
Compatible devices
|
list, reconcile | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Distance
dataType:
distancefilter parameter: distance
Record type: Interval
Compatible devices
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Electrocardiogram (ECG)
dataType:
electrocardiogramfilter parameter: electrocardiogram
Record type: Session
Compatible devices
|
list | .ecg.readonly |
|
Exercise
dataType:
exercisefilter parameter: exercise
Record type: Session
Compatible devices
|
list, get, reconcile, create, update, batchDelete | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Floors
|
reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Food
|
list, get | .nutrition.readonly.nutrition.writeonly |
|
Food Measurement Unit
dataType:
food-measurement-unitfilter parameter: food_measurement_unit
Record type: Food
Compatible devices
|
list, get | .nutrition.readonly.nutrition.writeonly |
|
Heart Rate
dataType:
heart-ratefilter parameter: heart_rate
Record type: Sample
Compatible devices
|
list, reconcile, rollup, dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Heart Rate Variability
dataType:
heart-rate-variabilityfilter parameter: heart_rate_variability
Record type: Sample
Compatible devices
|
list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Height
|
list, get, reconcile, create, update, batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Hydration Log
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .nutrition.readonly.nutrition.writeonly |
|
Irregular Rhythm Notification
dataType:
irregular-rhythm-notificationfilter parameter: irregular_rhythm_notification
Record type: Session
|
list | .irn.readonly |
|
Menstrual Period
dataType:
menstrual-periodfilter parameter: menstrual_period
Record type: Interval
|
create, update, batchDelete | .reproductive_health.writeonly |
|
Moods
|
create, update, batchDelete | .mindfulness.writeonly |
|
Nutrition Log
dataType:
nutrition-logfilter parameter: nutrition_log
Record type: Sample
Compatible devices
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .nutrition.readonly.nutrition.writeonly |
|
Ovulation Test
|
create, update, batchDelete | .reproductive_health.writeonly |
|
Oxygen Saturation
dataType:
oxygen-saturationfilter parameter: oxygen_saturation
Record type: Sample
Compatible devices
|
list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Respiratory Rate Sleep Summary
dataType:
respiratory-rate-sleep-summaryfilter parameter: respiratory_rate_sleep_summary
Record type: Sample
Compatible devices
|
list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Run VO2 Max
dataType:
run-vo2-maxfilter parameter: run_vo2_max
Record type: Sample
Compatible devices
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Sedentary Period
dataType:
sedentary-periodfilter parameter: sedentary_period
Record type: Interval
Compatible devices
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Sleep
dataType:
sleepfilter parameter: sleep
Record type: Session
Compatible devices
|
list, get, reconcile, create, update, batchDelete | .sleep.readonly.sleep.writeonly |
|
Steps
dataType:
stepsfilter parameter: steps
Record type: Interval
Compatible devices
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Swim Lengths Data
dataType:
swim-lengths-datafilter parameter: swim_lengths_data
Record type: Interval
Compatible devices
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Symptoms
|
create, update, batchDelete | .logged_symptoms.writeonly |
|
Time in Heart Rate Zone
dataType:
time-in-heart-rate-zonefilter parameter: time_in_heart_rate_zone
Record type: Interval
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Total Calories
dataType:
total-caloriesfilter parameter: total_calories
Record type: Interval
Compatible devices
|
rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
VO2 Max
dataType:
vo2-maxfilter parameter: vo2_max
Record type: Sample
Compatible devices
|
list, reconcile | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Weight
dataType:
weightfilter parameter: weight
Record type: Sample
Compatible devices
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
Query constraints
When querying data points, rollups, or daily rollups from the API, keep the following constraints in mind:
- Filter requirements: Some read-only derived data types, such as
total-calories, require a filter specifying an interval start time (using physical or civil time). - Query range limits: Rollup and daily rollup aggregation endpoints
enforce maximum query range limits based on the data type:
- A maximum query range of 14 days for
calories-in-heart-rate-zone,heart-rate,active-minutes, andtotal-calories. - A maximum query range of 90 days for all other data types.
- A maximum query range of 14 days for
Data availability
Updates to the user's data is only available after they sync their activity tracker or manually enter new data into the Fitbit mobile or web app. The Fitbit device and Fitbit mobile app can automatically sync every 15 minutes when the Fitbit app is open on the mobile device and the two have an active data connection and are within Bluetooth range. If the user is tracking activity using MobileTrack, MobileTrack syncs every hour as long as the app is open.
Querying historical data
One of the core benefits of the Google Health API is the ability to track a user's performance and monitor their health vitals over long periods of time. You can query a user's data as far back as it has been recorded; the API imposes no limitations or restrictions on the amount of historical data your application can consume.
However, querying historical data is still governed by standard rate limits. To manage system stability and prevent excessive payloads, the Google Health API uses automatic pagination with endpoint-specific page sizes. Note the following boundaries and behavior:
- Automatic pagination: If you query a long span of data, the
API will only return the first page of results up to the page size cap for that
endpoint, along with a
nextPageToken. You must use thenextPageTokento request subsequent pages. - Variable page sizes: Capping limits depend on the endpoint
and data type. For most data types, page sizes are capped at a maximum of 10,000.
However, for certain data types like
exerciseandsleep, the default and maximum page size is capped at 25. For example, if a client requests all sleep data for the past 10 years, the API will still return only 25 sleep sessions on the first page. - Rollup date range restrictions: For data rollup and aggregation endpoints
(such as
rollUpanddailyRollUp), query date ranges are restricted based on the data type:- A maximum range of 14 days for
calories-in-heart-rate-zone,heart-rate,active-minutes, andtotal-calories. - A maximum range of 90 days for all other rollup data types.
- A maximum range of 14 days for
Depending on the volume of historical data your application needs, retrieving the entire dataset will require paginating through the pages sequentially. Keep this in mind when designing your application's data synchronization process.
To ensure optimal performance and avoid API errors, follow these guidelines when querying historical data:
Phased data sync (hot versus cold load)
- Initial "hot" load: Fetch and render only the most recent 7–14 days of data during the primary load sequence. This ensures that users see data immediately without waiting for long-running queries.
- Background "cold" load: Delegate older historical data retrieval to an asynchronous, lower-priority queue or background process after the primary UI is rendered.
Query chunking for aggregation
- Because rollup and daily rollup endpoints enforce a maximum date range limit (14 or 90 days depending on the data type), you must break down large historical aggregation queries into smaller, sequential intervals within these limits.
- Batch or sequence these sub-queries safely to respect concurrency limits and maintain steady UI progress indicators.
Leverage pre-aggregated roll-ups
Restructure overview dashboards and trend charts to use pre-aggregated,
summary endpoints (such as DailyRollUpDataPoints). This will
drastically reduce compute overhead on the backend and network transfer time to
the client.
Resilient error handling (smart retries)
- Implement strict exponential backoff handling when encountering rate
limits (
429 Too Many Requests) and server gateway timeouts (504 Gateway Timeout). Never retry large, failed payloads immediately. Instant retries multiply backend congestion and compound system degradation.
Third-party access
Fitbit devices can't communicate directly with third-party applications or services. These devices are designed to communicate and synchronize exclusively with the Fitbit mobile app.
The device syncs data automatically throughout the day, whenever the Fitbit app is open, or every 15 minutes if Bluetooth is active and the app is running in the background. Once this synchronization process is complete, the data is then available for third-party services through the Google Health API.
Distance standards
Exercise distances, such as elevationGainMillimeters, are measured in
millimeters as the standard unit for the following reasons:
- Maintaining Data Precision: The most important reason for using millimeters is to ensure we don't lose any precision in the data we read and provide. Using a fine-grained unit like millimeters allows us to represent measurements with high accuracy.
- Standardization: Millimeters are the designed standardized unit across our services. This consistency helps ensure a uniform experience for developers interacting with different parts of the API.
- Broad Measurement System Support: Using a base unit like millimeters makes it straightforward for developers to convert to any other chosen unit, regardless of whether they are working with metric, imperial, or other measurement systems.
Variable day lengths
Time handling by the Health API prioritize the user's time to account for variable day lengths caused by Daylight Savings Time or travel. Every data point is stored with both a physical UTC timestamp and the UTC offset active at the time of the event. This allows the system to:
- Map the event to a precise physical instant.
- Correct the time to the user's local context for aggregation.
Daylight Savings Time
When Daylight Savings Time happens, a "fall back" results in a 25-hour civil day, and the rollup for that date will contain 25 hours of data. A "spring forward" results in a 23-hour civil day where the time moves back to Standard Time.
Travel
Travel across time zones can cause even more significant variations in the physical duration of a single civil day.
Use the dailyRollUp endpoint to reconcile time zone differences. It
automatically attributes data to the calendar day on which it was recorded
according to the user's local time, effectively "stitching" the day together
despite time zone shifts.