Wear OS Health Services data types
65 data types · 26 with a listed permissions · last fetched from Google’s reference on 2026-10-04
androidx.health.services.client.data.DataType defines 65 constants: 35 DeltaDataType (11 sample, 24 interval) and 30 AggregateDataType (20 cumulative, 10 statistical). Google’s permissions table assigns a permission to 26 of them — 23 ACTIVITY_RECOGNITION, 2 ACCESS_FINE_LOCATION and 1 READ_HEART_RATE — and names none for the other 39.
Which client delivers which types is introduced on Wear OS Health Services. The workout path is ExerciseClient in Kotlin, and the background and spot-reading paths are PassiveMonitoringClient and MeasureClient. The ExerciseType an exercise is configured with is a separate list: every Wear OS exercise type beside the Health Connect, HealthKit and Google Health API names.
DataType constants (65)
In the reference’s order (the page's footer says it was last updated 2026-08-06). Type is read from each constant’s declaration — the data-type class, then the data-point class — and the full declared type is printed under it. Descriptions are Google’s, verbatim. Permission is filled only where Google’s permissions table names the constant. The reference prints “Added in 1.0.0” for the class and no version for any individual constant, so there is no per-row version column.
25 of the 65 constants also have a page of their own — the linked names in the table. A constant gets one only when the generated data holds at least two facts specific to it: the permission Google’s table lists it under, a further paragraph of Google’s description, a quirk recorded in that table, or its delta or aggregate counterpart on the same reference. The other 40 stay rows here, without a page of their own.
| Constant | Type | Google’s description | Permission |
|---|---|---|---|
| ABSOLUTE_ELEVATIONGoogle’s entry | Delta · sampleDeltaDataType<Double, SampleDataPoint<Double>> | Absolute elevation at a specific point in time expressed in meters. | ACCESS_FINE_LOCATION |
| ABSOLUTE_ELEVATION_STATS | Aggregate · statisticalAggregateDataType<Double, StatisticalDataPoint<Double>> | Statistical information about the absolute elevation over the course of the active exercise expressed in meters. | Not in table |
| ACTIVE_EXERCISE_DURATION_TOTAL | Aggregate · cumulativeAggregateDataType<Long, CumulativeDataPoint<Long>> | The total time the Exercise was ExerciseState.ACTIVE in seconds.Note: this DataType is only intended to be used in conjunction with exercise goals. DataPoints will not be delivered for this DataType. If you want to query the active duration, you should use ExerciseUpdate.activeDuration which is available in every ExerciseUpdate. | Not in table |
| CALORIESGoogle’s entry | Delta · intervalDeltaDataType<Double, IntervalDataPoint<Double>> | Number of calories burned (including basal rate and activity) since the last update. | ACTIVITY_RECOGNITION |
| CALORIES_DAILYGoogle’s entry | Delta · intervalDeltaDataType<Double, IntervalDataPoint<Double>> | The total number of calories over a day (including both BMR and active calories), where the previous day ends and a new day begins at 12:00 AM local time. Each DataPoint of this type will cover the interval from the start of day to now. In the event of time-zone shifts, the interval might be greater than 24hrs. | ACTIVITY_RECOGNITION |
| CALORIES_TOTALGoogle’s entry | Aggregate · cumulativeAggregateDataType<Double, CumulativeDataPoint<Double>> | Total number of calories burned (including basal rate and activity) since the start of the current active exercise. | ACTIVITY_RECOGNITION |
| DECLINE_DISTANCEGoogle’s entry | Delta · intervalDeltaDataType<Double, IntervalDataPoint<Double>> | Distance traveled over declining ground between each reading expressed in meters. | ACTIVITY_RECOGNITION |
| DECLINE_DISTANCE_TOTAL | Aggregate · cumulativeAggregateDataType<Double, CumulativeDataPoint<Double>> | The total distance traveled over declining ground between each reading since the start of the active exercise expressed in meters. | Not in table |
| DECLINE_DURATION | Delta · intervalDeltaDataType<Long, IntervalDataPoint<Long>> | The amount of time the user spent traveling over declining ground since the last update, expressed in seconds. | Not in table |
| DECLINE_DURATION_TOTAL | Aggregate · cumulativeAggregateDataType<Long, CumulativeDataPoint<Long>> | Total duration the user spent traveling over declining ground since the start of the active exercise, expressed in seconds. | Not in table |
| DISTANCEGoogle’s entry | Delta · intervalDeltaDataType<Double, IntervalDataPoint<Double>> | A distance delta between each reading expressed in meters. | ACTIVITY_RECOGNITION |
| DISTANCE_DAILY | Delta · intervalDeltaDataType<Double, IntervalDataPoint<Double>> | The total distance over a day, where the previous day ends and a new day begins at 12:00 AM local time. Each DataPoint of this type will cover the interval from the start of day to now. In the event of time-zone shifts, the interval may be greater than 24hrs. | ACTIVITY_RECOGNITION |
| DISTANCE_TOTAL | Aggregate · cumulativeAggregateDataType<Double, CumulativeDataPoint<Double>> | Total distance since the start of the active exercise expressed in meters. | Not in table |
| ELEVATION_GAINGoogle’s entry | Delta · intervalDeltaDataType<Double, IntervalDataPoint<Double>> | A measure of the gain in elevation since the last update expressed in meters. Elevation losses are not counted in this metric (so it will only be positive or 0). | ACTIVITY_RECOGNITION |
| ELEVATION_GAIN_DAILY | Delta · intervalDeltaDataType<Double, IntervalDataPoint<Double>> | The total gain in elevation over a day expressed in meters in double format, where the previous day ends and a new day begins at 12:00 AM local time. Elevation losses are not counted in this metric (so it will only be positive or 0). Each DataPoint of this type will cover the interval from the start of day to now. In the event of time-zone shifts, the interval might be greater than 24hrs. | Not in table |
| ELEVATION_GAIN_TOTAL | Aggregate · cumulativeAggregateDataType<Double, CumulativeDataPoint<Double>> | A measure of the total gain in elevation since the start of an active exercise expressed in meters. Elevation losses are not counted in this metric (so it will only be positive or 0). | Not in table |
| ELEVATION_LOSSGoogle’s entry | Delta · intervalDeltaDataType<Double, IntervalDataPoint<Double>> | A measure of the loss in elevation since the last update expressed in meters. Elevation gains are not counted in this metric (so it will only be positive or 0). | ACTIVITY_RECOGNITION |
| ELEVATION_LOSS_TOTAL | Aggregate · cumulativeAggregateDataType<Double, CumulativeDataPoint<Double>> | A measure of the total loss in elevation since the start of an active exercise expressed in meters. Elevation gains are not counted in this metric (so it will only be positive or 0). | Not in table |
| FLAT_GROUND_DISTANCEGoogle’s entry | Delta · intervalDeltaDataType<Double, IntervalDataPoint<Double>> | The distance traveled over flat since the last update expressed in meters. | ACTIVITY_RECOGNITION |
| FLAT_GROUND_DISTANCE_TOTAL | Aggregate · cumulativeAggregateDataType<Double, CumulativeDataPoint<Double>> | The total distance traveled over flat ground since the start of the active exercise expressed in meters. | Not in table |
| FLAT_GROUND_DURATION | Delta · intervalDeltaDataType<Long, IntervalDataPoint<Long>> | The amount of time the user spent traveling over flat ground since the last update, expressed in seconds. | Not in table |
| FLAT_GROUND_DURATION_TOTAL | Aggregate · cumulativeAggregateDataType<Long, CumulativeDataPoint<Long>> | The total duration the user spent traveling over flat ground since the start of the active exercise, expressed in seconds. | Not in table |
| FLOORSGoogle’s entry | Delta · intervalDeltaDataType<Double, IntervalDataPoint<Double>> | Number of floors climbed since the last update. Note that partial floors are supported, so this is represented as a Double. | ACTIVITY_RECOGNITION |
| FLOORS_DAILY | Delta · intervalDeltaDataType<Double, IntervalDataPoint<Double>> | The total number floors climbed over a day, where the previous day ends and a new day begins at 12:00 AM local time. Each DataPoint of this type will cover the interval from the start of day to now. In the event of time-zone shifts, the interval may be greater than 24hrs. | ACTIVITY_RECOGNITION |
| FLOORS_TOTAL | Aggregate · cumulativeAggregateDataType<Double, CumulativeDataPoint<Double>> | Total number of floors climbed since the start of the active exercise. Note that partial floors are supported, so this is represented as a Double. | Not in table |
| GOLF_SHOT_COUNTGoogle’s entry | Delta · intervalDeltaDataType<Long, IntervalDataPoint<Long>> | The number of golf shots taken since the last update, where a golf shot consists of swinging the club and hitting the ball. | ACTIVITY_RECOGNITION |
| GOLF_SHOT_COUNT_TOTAL | Aggregate · cumulativeAggregateDataType<Long, CumulativeDataPoint<Long>> | The total number of golf shots taken since the start of the current active exercise, where a golf shot consists swinging the club and hitting the ball. | Not in table |
| GROUND_CONTACT_TIME | Delta · sampleDeltaDataType<Long, SampleDataPoint<Long>> | The amount of time during a single step that the runner's foot was in contact with the ground in milliseconds in long format. | Not in table |
| GROUND_CONTACT_TIME_STATS | Aggregate · statisticalAggregateDataType<Long, StatisticalDataPoint<Long>> | Statistics on the amount of time during a single step that the runner's foot was in contact with the ground in milliseconds in long format. | Not in table |
| HEART_RATE_BPMGoogle’s entry | Delta · sampleDeltaDataType<Double, SampleDataPoint<Double>> | Current heart rate, in beats per minute.Accuracy for a DataPoint of type DataType.HEART_RATE_BPM is represented by HeartRateAccuracy. | READ_HEART_RATE |
| HEART_RATE_BPM_STATS | Aggregate · statisticalAggregateDataType<Double, StatisticalDataPoint<Double>> | Statistics on heart rate since the start of the current exercise, expressed in beats per minute. | Not in table |
| INCLINE_DISTANCEGoogle’s entry | Delta · intervalDeltaDataType<Double, IntervalDataPoint<Double>> | The distance traveled over inclining ground since the last update expressed in meters. | ACTIVITY_RECOGNITION |
| INCLINE_DISTANCE_TOTAL | Aggregate · cumulativeAggregateDataType<Double, CumulativeDataPoint<Double>> | The total distance traveled over inclining since the start of the active exercise expressed in meters. | Not in table |
| INCLINE_DURATION | Delta · intervalDeltaDataType<Long, IntervalDataPoint<Long>> | The amount of time the user spent traveling over inclining ground since the last update, expressed in seconds. | Not in table |
| INCLINE_DURATION_TOTAL | Aggregate · cumulativeAggregateDataType<Long, CumulativeDataPoint<Long>> | Total amount of time the user spent traveling over inclining ground since the start of the active exercise, expressed in seconds. | Not in table |
| LOCATIONGoogle’s entry | Delta · sampleDeltaDataType<LocationData, SampleDataPoint<LocationData>> | Latitude, longitude and optionally, altitude and bearing at a specific point in time.Accuracy for a DataPoint of type LOCATION is represented by LocationAccuracy. | ACCESS_FINE_LOCATION |
| PACEGoogle’s entry | Delta · sampleDeltaDataType<Double, SampleDataPoint<Double>> | Pace at a specific point in time. Will be 0 if the user stops moving, otherwise the value will be in milliseconds/kilometer. | ACTIVITY_RECOGNITION |
| PACE_STATS | Aggregate · statisticalAggregateDataType<Double, StatisticalDataPoint<Double>> | Statistics on pace since the start of the current exercise. A value of 0 indicates the user stopped moving, otherwise the value will be in milliseconds/kilometer. | Not in table |
| REP_COUNTGoogle’s entry | Delta · intervalDeltaDataType<Long, IntervalDataPoint<Long>> | The number of repetitions of an exercise performed since the last update. | ACTIVITY_RECOGNITION |
| REP_COUNT_TOTAL | Aggregate · cumulativeAggregateDataType<Long, CumulativeDataPoint<Long>> | The number of repetitions of an exercise performed since the start of the current active exercise. | Not in table |
| RESTING_EXERCISE_DURATION | Delta · intervalDeltaDataType<Long, IntervalDataPoint<Long>> | The number of seconds the user has been resting during an exercise since the last update. | Not in table |
| RESTING_EXERCISE_DURATION_TOTAL | Aggregate · cumulativeAggregateDataType<Long, CumulativeDataPoint<Long>> | The total number of seconds the user has been resting during the active exercise. | Not in table |
| RUNNING_STEPSGoogle’s entry | Delta · intervalDeltaDataType<Long, IntervalDataPoint<Long>> | Number of steps taken while running since the last update. | ACTIVITY_RECOGNITION |
| RUNNING_STEPS_TOTAL | Aggregate · cumulativeAggregateDataType<Long, CumulativeDataPoint<Long>> | Number of steps taken while running since the start of the current active exercise. | Not in table |
| SPEEDGoogle’s entry | Delta · sampleDeltaDataType<Double, SampleDataPoint<Double>> | Speed at a specific point in time, expressed as meters/second. | ACTIVITY_RECOGNITION |
| SPEED_STATS | Aggregate · statisticalAggregateDataType<Double, StatisticalDataPoint<Double>> | Statistics on speed since the start of the active exercise, expressed in meters/second. | Not in table |
| STEPSGoogle’s entry | Delta · intervalDeltaDataType<Long, IntervalDataPoint<Long>> | Number of steps taken since the last update. | ACTIVITY_RECOGNITION |
| STEPS_DAILY | Delta · intervalDeltaDataType<Long, IntervalDataPoint<Long>> | The total step count over a day, where the previous day ends and a new day begins at 12:00 AM local time. Each DataPoint of this type will cover the interval from the start of day to now. In the event of time-zone shifts, the interval may be greater than 24hrs. | ACTIVITY_RECOGNITION |
| STEPS_PER_MINUTEGoogle’s entry | Delta · sampleDeltaDataType<Long, SampleDataPoint<Long>> | Step rate in steps/minute at a given point in time. | ACTIVITY_RECOGNITION |
| STEPS_PER_MINUTE_STATS | Aggregate · statisticalAggregateDataType<Long, StatisticalDataPoint<Long>> | Statistics on step rate in steps/minute since the beginning of the current active exercise. | Not in table |
| STEPS_TOTAL | Aggregate · cumulativeAggregateDataType<Long, CumulativeDataPoint<Long>> | Total steps taken since the start of the active exercise. | Not in table |
| STRIDE_LENGTH | Delta · sampleDeltaDataType<Double, SampleDataPoint<Double>> | Distance covered by a single step in meters in double format. | Not in table |
| STRIDE_LENGTH_STATS | Aggregate · statisticalAggregateDataType<Double, StatisticalDataPoint<Double>> | Statistics on distance covered by a single step in meters in double format. | Not in table |
| SWIMMING_LAP_COUNTGoogle’s entry | Delta · intervalDeltaDataType<Long, IntervalDataPoint<Long>> | Count of swimming laps since the last update. | ACTIVITY_RECOGNITION |
| SWIMMING_LAP_COUNT_TOTAL | Aggregate · cumulativeAggregateDataType<Long, CumulativeDataPoint<Long>> | Count of swimming laps since the start of the current active exercise. | Not in table |
| SWIMMING_STROKESGoogle’s entry | Delta · intervalDeltaDataType<Long, IntervalDataPoint<Long>> | Number of swimming strokes taken since the last update. | ACTIVITY_RECOGNITION |
| SWIMMING_STROKES_TOTAL | Aggregate · cumulativeAggregateDataType<Long, CumulativeDataPoint<Long>> | Total number of swimming strokes taken since the start of the current active exercise. | Not in table |
| VERTICAL_OSCILLATION | Delta · sampleDeltaDataType<Double, SampleDataPoint<Double>> | Distance the center of mass moves up-and-down with each step in centimeters in double format. | Not in table |
| VERTICAL_OSCILLATION_STATS | Aggregate · statisticalAggregateDataType<Double, StatisticalDataPoint<Double>> | Statistic on distance the center of mass moves up-and-down with each step in centimeters in double format. | Not in table |
| VERTICAL_RATIOGoogle’s entry | Delta · sampleDeltaDataType<Double, SampleDataPoint<Double>> | Vertical oscillation / stride length.For example, a vertical oscillation of 5.0cm and stride length .8m (80 cm) would have a vertical ratio of 0.625. | Not in table |
| VERTICAL_RATIO_STATSGoogle’s entry | Aggregate · statisticalAggregateDataType<Double, StatisticalDataPoint<Double>> | Statistics on vertical oscillation / stride length.For example, a vertical oscillation of 5.0cm and stride length .8m (80 cm) would have a vertical ratio of 0.625. | Not in table |
| VO2_MAX | Delta · sampleDeltaDataType<Double, SampleDataPoint<Double>> | Maximum rate of oxygen consumption measured at a specific point in time. Valid range 0f - 100f. | Not in table |
| VO2_MAX_STATS | Aggregate · statisticalAggregateDataType<Double, StatisticalDataPoint<Double>> | Statistics on maximum rate of oxygen consumption measured since the start of an exercise. Valid range 0f - 100f. | Not in table |
| WALKING_STEPSGoogle’s entry | Delta · intervalDeltaDataType<Long, IntervalDataPoint<Long>> | Number of steps taken while walking since the last update. | ACTIVITY_RECOGNITION |
| WALKING_STEPS_TOTAL | Aggregate · cumulativeAggregateDataType<Long, CumulativeDataPoint<Long>> | Total number of steps taken while walking since the start of the current active exercise. | Not in table |
Google’s permissions table
As printed on “Declare appropriate permissions” (last updated 2026-01-19). The table also lists UserActivityInfo and UserActivityState, which are classes rather than DataType constants. In the table, the CALORIES_DAILY link points to #DISTANCE_DAILY; this page goes by the name printed.
| Permission | Data types Google lists |
|---|---|
| ACTIVITY_RECOGNITION | CALORIES, CALORIES_DAILY, DISTANCE_DAILY, DECLINE_DISTANCE, DISTANCE, ELEVATION_GAIN, ELEVATION_LOSS, FLAT_GROUND_DISTANCE, FLOORS, FLOORS_DAILY, GOLF_SHOT_COUNT, INCLINE_DISTANCE, PACE, REP_COUNT, RUNNING_STEPS, SPEED, STEPS, STEPS_DAILY, STEPS_PER_MINUTE, SWIMMING_LAP_COUNT, SWIMMING_STROKES, CALORIES_TOTAL, WALKING_STEPS, UserActivityInfo, UserActivityState |
| READ_HEART_RATE | HEART_RATE_BPM |
| ACCESS_FINE_LOCATION | ABSOLUTE_ELEVATION, LOCATION |
Above the table, the same page lists the permissions Health Services uses, verbatim:
- READ_HEART_RATE for reading heart rate information.
- ACTIVITY_RECOGNITION
- ACCESS_FINE_LOCATION
- BODY_SENSORS on Wear OS 5.1 (API level 35) and lower
- BODY_SENSORS_BACKGROUND between Wear OS 4 (API level 33) and Wear OS 5.1 (API level 35), inclusive
What Google says a DataType is
“A data type is a representation of health data managed by Health Services.”
“A DataType specifies the type of the values inside of a DataPoint. Health Services defines data types for instantaneous observations (Samples / SampleDataPoint, e.g. heart rate) and data types for a change between readings (Intervals / IntervalDataPoint, e.g. distance).”
“Health services also allows specifying aggregated versions of many data types, which will allow the developer to get e.g. a running total of intervals (CumulativeDataPoint) or statistics like min/max/average on samples (StatisticalDataPoint).”
“Note: the data type defines only the representation and format of the data, and not how it's being collected, the sensor being used, or the parameters of the collection. As an example, DISTANCE may come from GPS location if available, or steps if not available.”
Value types across the 65 constants: 36 Double, 28 Long and 1 LocationData.
Questions
What is the difference between DeltaDataType and AggregateDataType on Wear OS?
Google's reference describes DeltaDataType as “DataType that represents a granular, non-aggregated point in time.” and AggregateDataType as “DataType that represents aggregated data.” Of the 65 constants on DataType as read on 2026-10-04, 35 are delta types (11 delivering SampleDataPoint, 24 IntervalDataPoint) and 30 are aggregate types (20 CumulativeDataPoint, 10 StatisticalDataPoint). The class is in the declaration of every constant, e.g. DeltaDataType<Double, SampleDataPoint<Double>>.
Which Android permission does each Health Services data type require?
Google's permissions table names 26 DataType constants: ACTIVITY_RECOGNITION for 23 of them, ACCESS_FINE_LOCATION for 2 of them, READ_HEART_RATE for HEART_RATE_BPM. It names no permission for the other 39, including 29 of the 30 aggregate types (it lists only CALORIES_TOTAL), so this reference leaves those blank rather than extending the table by analogy. The list above the table adds the BODY_SENSORS rules by Wear OS version: BODY_SENSORS on Wear OS 5.1 (API level 35) and lower; BODY_SENSORS_BACKGROUND between Wear OS 4 (API level 33) and Wear OS 5.1 (API level 35), inclusive.
Does every Wear OS delta data type have a _TOTAL or _STATS aggregate?
No. 29 of the 35 delta constants have an aggregate constant named NAME_TOTAL or NAME_STATS on the same reference. The 6 without one are CALORIES_DAILY, DISTANCE_DAILY, ELEVATION_GAIN_DAILY, FLOORS_DAILY, LOCATION and STEPS_DAILY.
Which Health Services data types count over a calendar day?
5 constants end in _DAILY: CALORIES_DAILY, DISTANCE_DAILY, ELEVATION_GAIN_DAILY, FLOORS_DAILY and STEPS_DAILY. All are DeltaDataType with IntervalDataPoint. Google's description of STEPS_DAILY: “The total step count over a day, where the previous day ends and a new day begins at 12:00 AM local time. Each DataPoint of this type will cover the interval from the start of day to now. In the event of time-zone shifts, the interval may be greater than 24hrs.”
Which Health Services library version added these data types?
Google's reference prints “Added in 1.0.0” for the DataType class in androidx.health:health-services-client. None of the 65 constants prints a version of its own, so the reference does not say whether any of them arrived after 1.0.0; the androidx health release notes are where that would be recorded.
Read on 2026-10-04 from Google’s DataType reference and Health Services permissions guide by scripts/fetch-health-services-data-types.mjs. Compiled by AIFitnessAPI; Google’s documentation remains the authority.