Skip to content
AF

HealthKit ↔ Health Connect type reference

aifitnessapi.com
Apple HealthKit and Android Health Connect type identifiers for 10 common health metrics
MetricApple HealthKit (iOS)Health Connect (Android)
Heart rateHKQuantityTypeIdentifier.heartRate, .restingHeartRateHeartRateRecord, RestingHeartRateRecordWatch out: Both expose samples plus a separate resting value — don't derive resting yourself.
HRVHKQuantityTypeIdentifier.heartRateVariabilitySDNNHeartRateVariabilityRmssdRecordWatch out: The big one: Apple stores SDNN, Health Connect stores RMSSD. They are different measures and are not interconvertible — do not normalize one into the other.
VO2 maxHKQuantityTypeIdentifier.vo2MaxVo2MaxRecordWatch out: An estimate on both platforms, not a lab measurement. Health Connect tags a measurement method.
Blood oxygenHKQuantityTypeIdentifier.oxygenSaturationOxygenSaturationRecordWatch out: The type existing doesn't mean data exists — SpO2 is device-gated, and Apple Watch availability in the US has been subject to litigation. Verify current status.
SleepHKCategoryTypeIdentifier.sleepAnalysis (values: inBed, awake, asleepCore, asleepDeep, asleepREM, asleepUnspecified)SleepSessionRecord (carries stages)Watch out: Stage vocabularies differ and stages are estimated, not measured. Apple's .asleep is deprecated in favour of the specific stages.
StepsHKQuantityTypeIdentifier.stepCount (CMPedometer for live counts)StepsRecord, StepsCadenceRecordWatch out: De-duplicate: phone and watch both write steps. On Android, from the June 2026 update on-device steps are attributed to a per-device Synthetic Package Name — read it via getCurrentDeviceDataSource(), never hardcode it.
WorkoutsHKWorkout (HKWorkoutBuilder)ExerciseSessionRecord, PlannedExerciseSessionRecordWatch out: Activity-type taxonomies differ between platforms — map them explicitly rather than by name.
GPS routeHKWorkoutRoute (array of CLLocation), HKWorkoutRouteQueryExerciseRoute with ExerciseRoute.LocationWatch out: Health Connect gates routes behind their own permission (READ_EXERCISE_ROUTES) and restricts background reads of other apps' routes.
CaloriesHKQuantityTypeIdentifier.activeEnergyBurned, .basalEnergyBurnedActiveCaloriesBurnedRecord, TotalCaloriesBurnedRecordWatch out: Modelled estimates, not measurements. Note the asymmetry: Apple splits active/basal, Android offers active and total — don't add active to total.
Body compositionHKQuantityTypeIdentifier.bodyMass, .bodyFatPercentage, .leanBodyMass, .bodyMassIndexWeightRecord, BodyFatRecord, LeanBodyMassRecord, BoneMassRecord, BodyWaterMassRecord, BasalMetabolicRateRecordWatch out: The store holds it, but something has to write it — usually a smart scale or manual entry. Body fat is a bioimpedance estimate.

Both stores are on-device — there is no server endpoint to call. Type identifiers change: confirm against Apple’s and Google’s live docs before you build.

Full reference, notes and sources on aifitnessapi.com/matrix — a free reference from AIFitnessAPI. This widget shows whatever the source page says today, so it changes when we update it.