Skip to content
AF
HealthKit reference

The 15 HealthKit Vital Sign Types

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

15 HealthKit vital sign identifiers: 11 discrete quantity types, 4 category types, 4 with verified Health Connect counterparts. Parsed 2026-08-28.

Fifteen HealthKit identifiers sit in Apple's vital signs grouping, and they are the closest thing the framework has to a clinical panel: heart rate and the statistics derived from it, blood pressure, respiratory rate, oxygen saturation, and body temperature. Eleven of the fifteen are quantity types and four are category types, and that division decides most of how you read them.

Every one of the eleven quantity types states discrete aggregation. None state cumulative. This is a group with no totals in it at all, which makes the usual sum-or-average question unusually easy here: the answer is always average, minimum, maximum, or latest, and a SUM() over any of these columns produces a number that grows with how long the watch was worn. The four category types carry no aggregation style and no unit, because those concepts do not apply to them.

The eleven quantity types spread across seven unit families: count, count/time, percent, percentage, pressure, temperature, and time. Two of those pairings are worth reading twice. oxygenSaturation is recorded under percent while atrialFibrillationBurden is recorded under percentage, which is the same dimension under two spellings. And heartRateVariabilitySDNN has a unit family of time, not count/time, because SDNN is the standard deviation of the intervals between heartbeats and an interval is a duration. If you have ever wondered why the number your app shows differs from the one a chest strap app shows, the storage definition is where that starts; we cover the SDNN and RMSSD difference separately.

Four identifiers reward a closer look. heartRateRecoveryOneMinute records the reduction in heart rate from the peak exercise rate to the rate one minute after exercise ended, and its unit family is count, not count/time, even though what it describes is a difference between two rates. atrialFibrillationBurden is an estimate of the percentage of time a person's heart shows signs of atrial fibrillation while wearing Apple Watch, so it is a proportion of a window rather than a reading at an instant, despite being stored as discrete. walkingHeartRateAverage and restingHeartRate are both separate identifiers from heartRate itself, so neither has to be derived by you. And bloodPressureDiastolic and bloodPressureSystolic are two independent quantity types: there is no single blood pressure identifier in the group, and assembling a reading from the pair is work your code does. The blood pressure API reference covers what both platforms hand over.

Arrival dates cluster. Six identifiers date to iOS 8.0, three to 11.0, three to 12.2, two to 16.0, and one to 26.2. The 12.2 cohort is the three heart event category types, the 16.0 pair is AFib burden and heart rate recovery, and the single 26.2 arrival is hypertensionEvent, which is the newest identifier in this group and the least documented thing in it, discussed in the traps below.

Four of the fifteen have Android counterparts verified in this site's cross-platform matrix. heartRate and restingHeartRate both map to HeartRateRecord and RestingHeartRateRecord; oxygenSaturation maps to OxygenSaturationRecord; and heartRateVariabilitySDNN maps to HeartRateVariabilityRmssdRecord, a name that tells you before you write a line of code that the two platforms are storing different statistics under the same feature. The remaining eleven, including both blood pressure types and all four category types, are Apple-only until verified, which is not the same as saying Health Connect lacks them. It means this site has not confirmed a mapping.

Every count, unit family, and availability version above comes from the identifier dataset, parsed from Apple's developer documentation on 2026-08-28. Heart rate specifically has more moving parts than one identifier suggests, and the heart rate API reference unpacks what each platform actually samples.

The 15 identifiers in vital signs

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.

Vital signs 11

IdentifierWhat it isAggregateUnitiOSAndroid
atrialFibrillationBurdenread-onlyHKQuantityTypeIdentifierAtrialFibrillationBurdenA quantity type that measures an estimate of the percentage of time a person’s heart shows signs of atrial fibrillation (AFib) while wearing Apple Watch..discreteAveragepercentage16.0not verified
bloodPressureDiastolicHKQuantityTypeIdentifierBloodPressureDiastolicA quantity sample type that measures the user’s diastolic blood pressure..discreteAveragepressure8.0not verified
bloodPressureSystolicHKQuantityTypeIdentifierBloodPressureSystolicA quantity sample type that measures the user’s systolic blood pressure..discreteAveragepressure8.0not verified
bodyTemperatureHKQuantityTypeIdentifierBodyTemperatureA quantity sample type that measures the user’s body temperature..discreteAveragetemperature8.0not verified
heartRateHKQuantityTypeIdentifierHeartRateA quantity sample type that measures the user’s heart rate..discreteAveragecount/time8.0HeartRateRecord, RestingHeartRateRecord
heartRateRecoveryOneMinuteHKQuantityTypeIdentifierHeartRateRecoveryOneMinuteA quantity sample that records the reduction in heart rate from the peak exercise rate to the rate one minute after exercising ended..discreteAveragecount16.0not verified
heartRateVariabilitySDNNHKQuantityTypeIdentifierHeartRateVariabilitySDNNA quantity sample type that measures the standard deviation of heartbeat intervals..discreteAveragetime11.0HeartRateVariabilityRmssdRecord
oxygenSaturationHKQuantityTypeIdentifierOxygenSaturationA quantity sample type that measures the user’s oxygen saturation..discreteAveragepercent8.0OxygenSaturationRecord
respiratoryRateHKQuantityTypeIdentifierRespiratoryRateA quantity sample type that measures the user’s respiratory rate..discreteAveragecount/time8.0not verified
restingHeartRateHKQuantityTypeIdentifierRestingHeartRateA quantity sample type that measures the user’s resting heart rate..discreteAveragecount/time11.0HeartRateRecord, RestingHeartRateRecord
walkingHeartRateAverageread-onlyHKQuantityTypeIdentifierWalkingHeartRateAverageA quantity sample type that measures the user’s heart rate while walking..discreteAveragecount/time11.0not verified

Vital Signs 3

IdentifierWhat it isAggregateUnitiOSAndroid
highHeartRateEventread-onlyHKCategoryTypeIdentifierHighHeartRateEventA category sample type for high heart rate events.enum — HKCategoryValue12.2not verified
irregularHeartRhythmEventread-onlyHKCategoryTypeIdentifierIrregularHeartRhythmEventA category sample type for irregular heart rhythm events.enum — HKCategoryValue12.2not verified
lowHeartRateEventread-onlyHKCategoryTypeIdentifierLowHeartRateEventA category sample type for low heart rate events.enum — HKCategoryValue12.2not verified

Type Properties - generated 1

IdentifierWhat it isAggregateUnitiOSAndroid
hypertensionEventHKCategoryTypeIdentifierHypertensionEventNo abstract published.enum — unresolved26.2not verified

What will bite you

hypertensionEvent is a blank entry. It arrived in iOS 26.2, and in the documentation we parsed it has no abstract, no discussion text at all, and no recorded value enum. Apple does not even file it under the vital signs heading; it appears under a generated type-properties section, which is why it shows up here editorially rather than by Apple's own grouping. You can request authorisation for it, but you cannot know from the docs what its values mean. Do not map it to a UI state on a guess.

Three category types look like heart rate and are not. highHeartRateEvent, lowHeartRateEvent, and irregularHeartRhythmEvent each carry HKCategoryValue as their value enum. Reading .value on one of those samples gives you an enum member, not beats per minute. Nothing else in the group stores the rate that triggered the event, so the sample is a flag rather than a measurement.

Two spellings, one dimension. The unit families in this group include both percent and percentage, applied to oxygenSaturation and atrialFibrillationBurden respectively. Any code that switches on the unit family string, rather than on the identifier, will fall through for one of them. The same caution applies to heartRateVariabilitySDNN, whose family is time while every other heart rate figure here is count/time or count.

Questions

How many vital sign types does HealthKit have?
Fifteen identifiers sit in this grouping in the documentation parsed on 2026-08-28. Eleven of them are quantity types and four are category types. Every one of the eleven quantity types states discrete aggregation, so none of them is a running total. The four category types carry a value enum instead of a unit and an aggregation style.
Does HealthKit store blood pressure as a single value?
No. bloodPressureSystolic and bloodPressureDiastolic are two separate quantity types, both discrete and both in the pressure unit family. There is no combined blood pressure identifier anywhere in this group, so pairing the two readings back into one displayable measurement is work your own code has to do.
Which HealthKit vital signs have verified Health Connect counterparts?
Four of the fifteen. heartRate and restingHeartRate both map to HeartRateRecord and RestingHeartRateRecord, oxygenSaturation maps to OxygenSaturationRecord, and heartRateVariabilitySDNN maps to HeartRateVariabilityRmssdRecord, which holds a different HRV statistic under a similar name. The other eleven are Apple-only until a mapping is verified.

All 15 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