Skip to content
AF
HealthKit reference

HealthKit Body Measurements: 7 Types

7 identifiers · read from Apple’s documentation on 2026-08-28

7 HealthKit body measurement identifiers, all discrete quantity types, 4 with verified Health Connect mappings. Weight, BMI, body fat, lean mass, height.

Seven identifiers make up HealthKit's body measurements group, and all seven are quantity types. There is no category type here, no enum to decode, and no special value to interpret. Whatever else this group demands of you, parsing is not the hard part.

The seven are bodyMass, bodyMassIndex, bodyFatPercentage, leanBodyMass, height, waistCircumference, and appleSleepingWristTemperature. Five of them shipped with iOS 8.0, waistCircumference followed in 11.0, and appleSleepingWristTemperature in 16.0. So six of the seven predate iOS 16, and only the wrist temperature type is recent enough that a deployment target might exclude it.

Every one of the seven states discrete aggregation. Zero are cumulative. That single fact drives the two most common bugs in this area. A weight series is a sequence of readings, so the operations that mean anything are average, minimum, maximum, and latest. Sum it and you produce a number that grows with how often the user stepped on the scale. Chart the raw samples without smoothing and you show the user the noise of hydration and time of day rather than a trend, which is a display decision rather than an API one, but the discreteness is what makes it your decision. The general version of this argument lives in sum or average.

Unit families run across count, length, mass, percent, and temperature. bodyMass and leanBodyMass are mass, height and waistCircumference are length, bodyFatPercentage is percent, and appleSleepingWristTemperature is temperature. bodyMassIndex is filed under count, which is the dataset's way of saying it has no unit at all. BMI is stored as a bare number.

Documentation depth is lopsided in a way worth knowing before you plan research time. Six of the seven carry fifteen words of discussion text each, which is to say a one-line abstract and nothing more: Apple tells you bodyMass measures the user's weight and leaves it there. appleSleepingWristTemperature carries 238, by a wide margin the most in the group, because it records wrist temperature during sleep and Apple has more to say about how that value is produced and when it appears. If you are budgeting a spike, the six simple types need minutes and the temperature type needs an afternoon.

Four of the seven have Android counterparts verified in this site's cross-platform matrix: bodyMass, bodyMassIndex, bodyFatPercentage, and leanBodyMass. All four carry the same six Health Connect records against them, WeightRecord, BodyFatRecord, LeanBodyMassRecord, BoneMassRecord, BodyWaterMassRecord, and BasalMetabolicRateRecord, which tells you the verification was done at the level of body composition as a metric rather than field by field. Plan the mapping the same way: one composition sync rather than four independent ones. height, waistCircumference, and appleSleepingWristTemperature have no verified counterpart and are Apple-only until one exists. For what each platform exposes underneath, the body composition API reference goes deeper than a type list can.

One practical warning that the identifier list cannot show you. Nothing stops several sources writing to the same identifier, so one weigh-in can land in the store twice when a connected scale app and a manual entry both record it. That is a deduplication problem before it is a charting problem, and deduplicating health data is the place to solve it.

The counts, unit families, aggregation styles, and availability versions above were parsed from Apple's developer documentation on 2026-08-28, and the full table for every group is on the identifier reference.

The 7 identifiers in body measurements

Every field is joined from Apple’s documentation. Aggregation style and unit family are the two Apple states only in prose — where its wording does not state one, this table says so rather than guessing. Android names appear only where the mapping is verified on both platforms.

IdentifierWhat it isAggregateUnitiOSAndroid
appleSleepingWristTemperatureread-onlyHKQuantityTypeIdentifierAppleSleepingWristTemperatureA quantity sample type that records the wrist temperature during sleep..discreteAveragetemperature16.0not verified
bodyFatPercentageHKQuantityTypeIdentifierBodyFatPercentageA quantity sample type that measures the user’s body fat percentage..discreteAveragepercent8.0WeightRecord, BodyFatRecord, LeanBodyMassRecord, BoneMassRecord, BodyWaterMassRecord, BasalMetabolicRateRecord
bodyMassHKQuantityTypeIdentifierBodyMassA quantity sample type that measures the user’s weight..discreteAveragemass8.0WeightRecord, BodyFatRecord, LeanBodyMassRecord, BoneMassRecord, BodyWaterMassRecord, BasalMetabolicRateRecord
bodyMassIndexHKQuantityTypeIdentifierBodyMassIndexA quantity sample type that measures the user’s body mass index..discreteAveragecount8.0WeightRecord, BodyFatRecord, LeanBodyMassRecord, BoneMassRecord, BodyWaterMassRecord, BasalMetabolicRateRecord
heightHKQuantityTypeIdentifierHeightA quantity sample type that measures the user’s height..discreteAveragelength8.0not verified
leanBodyMassHKQuantityTypeIdentifierLeanBodyMassA quantity sample type that measures the user’s lean body mass..discreteAveragemass8.0WeightRecord, BodyFatRecord, LeanBodyMassRecord, BoneMassRecord, BodyWaterMassRecord, BasalMetabolicRateRecord
waistCircumferenceHKQuantityTypeIdentifierWaistCircumferenceA quantity sample type that measures the user’s waist circumference..discreteAveragelength11.0not verified

What will bite you

BMI has no unit. bodyMassIndex sits in the count unit family, which in this dataset means the value is a bare number. If your formatter appends kg/m2 next to it you are printing a label Apple's documentation does not supply, and if your unit-conversion layer treats count as a countable quantity you may end up rounding a BMI to an integer. It is also its own stored identifier, written by whichever app chose to write it, so it need not agree with any height and weight samples sitting beside it in the store.

Height is a series, not a profile field. It is a discrete sample type like the rest, which means the store can hold many height samples with different timestamps. Caching the first one you read as a fixed user attribute works right up until a growing user, a corrected entry, or a second data source makes it wrong. Read the most recent sample when you need it.

Six of the seven are documented in one line. bodyMass, bodyMassIndex, bodyFatPercentage, leanBodyMass, height, and waistCircumference each carry fifteen words of discussion. There is no documented guidance on write cadence, expected sources, or precision for any of them, so anything your team believes about how often these arrive is an assumption from observation rather than something Apple stated. Write down which it is before it becomes a requirement.

Questions

What body measurement types does HealthKit provide?
Seven, and all of them are quantity types: bodyMass, bodyMassIndex, bodyFatPercentage, leanBodyMass, height, waistCircumference, and appleSleepingWristTemperature. Five arrived in iOS 8.0, waist circumference in iOS 11.0, and sleeping wrist temperature in iOS 16.0. There are no category types in the group, so nothing here carries a value enum.
What unit does HealthKit use for body mass index?
None. In the documentation parsed on 2026-08-28, bodyMassIndex falls in the count unit family, meaning the value is stored as a bare number with no unit attached. Weight and lean body mass use mass units, height and waist circumference use length, and body fat is a percent.
Do HealthKit body measurements map to Health Connect?
Four of the seven do. Body mass, BMI, body fat percentage, and lean body mass are each verified against the same six Health Connect records, so the mapping was confirmed for body composition as a whole rather than one field at a time. Height, waist circumference, and sleeping wrist temperature have no verified counterpart.

All 7 identifiers above were read from Apple’s documentation on 2026-08-28. See the full 240-identifier table for every group at once, or the datasets for the same data as JSON and CSV. Apple’s abstracts are quoted for identification; the grouping, the aggregation split and the cross-platform mapping are AIFitnessAPI’s.

← All HealthKit groups