Skip to content
AF

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.

ConstantTypeGoogle’s descriptionPermission
ABSOLUTE_ELEVATIONGoogle’s entryDelta · sampleDeltaDataType<Double, SampleDataPoint<Double>>Absolute elevation at a specific point in time expressed in meters.ACCESS_FINE_LOCATION
ABSOLUTE_ELEVATION_STATSAggregate · 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_TOTALAggregate · 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 entryDelta · intervalDeltaDataType<Double, IntervalDataPoint<Double>>Number of calories burned (including basal rate and activity) since the last update.ACTIVITY_RECOGNITION
CALORIES_DAILYGoogle’s entryDelta · 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 entryAggregate · 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 entryDelta · intervalDeltaDataType<Double, IntervalDataPoint<Double>>Distance traveled over declining ground between each reading expressed in meters.ACTIVITY_RECOGNITION
DECLINE_DISTANCE_TOTALAggregate · 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_DURATIONDelta · 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_TOTALAggregate · 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 entryDelta · intervalDeltaDataType<Double, IntervalDataPoint<Double>>A distance delta between each reading expressed in meters.ACTIVITY_RECOGNITION
DISTANCE_DAILYDelta · 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_TOTALAggregate · cumulativeAggregateDataType<Double, CumulativeDataPoint<Double>>Total distance since the start of the active exercise expressed in meters.Not in table
ELEVATION_GAINGoogle’s entryDelta · 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_DAILYDelta · 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_TOTALAggregate · 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 entryDelta · 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_TOTALAggregate · 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 entryDelta · intervalDeltaDataType<Double, IntervalDataPoint<Double>>The distance traveled over flat since the last update expressed in meters.ACTIVITY_RECOGNITION
FLAT_GROUND_DISTANCE_TOTALAggregate · 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_DURATIONDelta · 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_TOTALAggregate · 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 entryDelta · 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_DAILYDelta · 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_TOTALAggregate · 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 entryDelta · 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_TOTALAggregate · 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_TIMEDelta · 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_STATSAggregate · 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 entryDelta · 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_STATSAggregate · 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 entryDelta · intervalDeltaDataType<Double, IntervalDataPoint<Double>>The distance traveled over inclining ground since the last update expressed in meters.ACTIVITY_RECOGNITION
INCLINE_DISTANCE_TOTALAggregate · cumulativeAggregateDataType<Double, CumulativeDataPoint<Double>>The total distance traveled over inclining since the start of the active exercise expressed in meters.Not in table
INCLINE_DURATIONDelta · 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_TOTALAggregate · 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 entryDelta · 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 entryDelta · 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_STATSAggregate · 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 entryDelta · intervalDeltaDataType<Long, IntervalDataPoint<Long>>The number of repetitions of an exercise performed since the last update.ACTIVITY_RECOGNITION
REP_COUNT_TOTALAggregate · 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_DURATIONDelta · 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_TOTALAggregate · cumulativeAggregateDataType<Long, CumulativeDataPoint<Long>>The total number of seconds the user has been resting during the active exercise.Not in table
RUNNING_STEPSGoogle’s entryDelta · intervalDeltaDataType<Long, IntervalDataPoint<Long>>Number of steps taken while running since the last update.ACTIVITY_RECOGNITION
RUNNING_STEPS_TOTALAggregate · cumulativeAggregateDataType<Long, CumulativeDataPoint<Long>>Number of steps taken while running since the start of the current active exercise.Not in table
SPEEDGoogle’s entryDelta · sampleDeltaDataType<Double, SampleDataPoint<Double>>Speed at a specific point in time, expressed as meters/second.ACTIVITY_RECOGNITION
SPEED_STATSAggregate · statisticalAggregateDataType<Double, StatisticalDataPoint<Double>>Statistics on speed since the start of the active exercise, expressed in meters/second.Not in table
STEPSGoogle’s entryDelta · intervalDeltaDataType<Long, IntervalDataPoint<Long>>Number of steps taken since the last update.ACTIVITY_RECOGNITION
STEPS_DAILYDelta · 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 entryDelta · sampleDeltaDataType<Long, SampleDataPoint<Long>>Step rate in steps/minute at a given point in time.ACTIVITY_RECOGNITION
STEPS_PER_MINUTE_STATSAggregate · statisticalAggregateDataType<Long, StatisticalDataPoint<Long>>Statistics on step rate in steps/minute since the beginning of the current active exercise.Not in table
STEPS_TOTALAggregate · cumulativeAggregateDataType<Long, CumulativeDataPoint<Long>>Total steps taken since the start of the active exercise.Not in table
STRIDE_LENGTHDelta · sampleDeltaDataType<Double, SampleDataPoint<Double>>Distance covered by a single step in meters in double format.Not in table
STRIDE_LENGTH_STATSAggregate · statisticalAggregateDataType<Double, StatisticalDataPoint<Double>>Statistics on distance covered by a single step in meters in double format.Not in table
SWIMMING_LAP_COUNTGoogle’s entryDelta · intervalDeltaDataType<Long, IntervalDataPoint<Long>>Count of swimming laps since the last update.ACTIVITY_RECOGNITION
SWIMMING_LAP_COUNT_TOTALAggregate · cumulativeAggregateDataType<Long, CumulativeDataPoint<Long>>Count of swimming laps since the start of the current active exercise.Not in table
SWIMMING_STROKESGoogle’s entryDelta · intervalDeltaDataType<Long, IntervalDataPoint<Long>>Number of swimming strokes taken since the last update.ACTIVITY_RECOGNITION
SWIMMING_STROKES_TOTALAggregate · cumulativeAggregateDataType<Long, CumulativeDataPoint<Long>>Total number of swimming strokes taken since the start of the current active exercise.Not in table
VERTICAL_OSCILLATIONDelta · 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_STATSAggregate · 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 entryDelta · 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 entryAggregate · 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_MAXDelta · 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_STATSAggregate · 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 entryDelta · intervalDeltaDataType<Long, IntervalDataPoint<Long>>Number of steps taken while walking since the last update.ACTIVITY_RECOGNITION
WALKING_STEPS_TOTALAggregate · 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.

PermissionData types Google lists
ACTIVITY_RECOGNITIONCALORIES, 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_RATEHEART_RATE_BPM
ACCESS_FINE_LOCATIONABSOLUTE_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.