Skip to content
AF
HealthKit reference

The 16 HealthKit Vital Sign Types

16 identifiers · read from Apple’s documentation on 2026-10-02

16 HealthKit vital sign identifiers: 12 quantity types (11 discrete, 1 Apple leaves undescribed), 4 category types, 4 verified Health Connect pairs.

Sixteen HealthKit identifiers are on this page, 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. Fourteen sit under Apple's vital signs headings. The other two, hypertensionEvent and heartRateVariabilityRMSSD, are filed by Apple under generic type-properties headings and placed here by this site, as the traps below explain. Twelve of the sixteen are quantity types and four are category types, and that division decides most of how you read them.

Eleven of the twelve quantity types state discrete aggregation. None state cumulative. The twelfth, heartRateVariabilityRMSSD, states nothing at all. With no cumulative type in the group, the usual sum-or-average question is unusually easy here: for the eleven that state an aggregation, 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 described quantity types spread across seven unit families: count, count/time, percent, percentage, pressure, temperature, and time (heartRateVariabilityRMSSD states none). 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; the resting heart rate API page covers how Apple produces and revises that value. 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, one to 26.2 and one to 27.0. The 12.2 cohort is the three heart event category types, the 16.0 pair is AFib burden and heart rate recovery, the single 26.2 arrival is hypertensionEvent, and the newest identifier in the group is heartRateVariabilityRMSSD, from iOS 27.0. Those last two are also the least documented things here, discussed in the traps below.

Four of the sixteen 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. heartRateVariabilityRMSSD shares its statistic's name with that Android record, but Apple has not described what it holds, so this site does not pair them. The remaining twelve, including both blood pressure types, heartRateVariabilityRMSSD 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-10-02. Heart rate specifically has more moving parts than one identifier suggests, and the heart rate API reference unpacks what each platform actually samples.

The 16 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

Type Properties 1

IdentifierWhat it isAggregateUnitiOSAndroid
heartRateVariabilityRMSSDHKQuantityTypeIdentifierHeartRateVariabilityRMSSDNo abstract published.not statednot stated27.0not verified

Vital Signs 3

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

Type Properties - generated 1

IdentifierWhat it isAggregateUnitiOSAndroid
hypertensionEventHKCategoryTypeIdentifierHypertensionEventNo abstract published.enum — unresolved—26.2not verified

One identifier at a time

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.

heartRateVariabilityRMSSD is a name and nothing more, so far. It arrived in iOS 27.0, and in the documentation read on 2026-10-02 Apple's page for it is a declaration only: no abstract, no discussion, no aggregation style and no unit family. Apple files it under a generic "Type Properties" heading rather than vital signs, so its place beside heartRateVariabilitySDNN on this page is this site's choice. Apple's SDNN page still says HealthKit uses SDNN and that the system records those samples on Apple Watch. Nothing Apple has published says what the RMSSD type measures, how it is computed, whether Apple Watch writes it, or whether it matches Health Connect's RMSSD. Do not build a chart or a baseline on it until Apple documents it.

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 that states a family is count/time or count.

Questions

How many vital sign types does HealthKit have?
Sixteen identifiers are on this page in the documentation parsed on 2026-10-02: fourteen under Apple's vital signs headings, plus hypertensionEvent and heartRateVariabilityRMSSD, which Apple files under generic type-properties headings. Twelve are quantity types and four are category types. Eleven of the twelve quantity types state discrete aggregation and none states cumulative; heartRateVariabilityRMSSD states nothing. The four category types hold enum values instead of a unit and an aggregation style, though for hypertensionEvent Apple does not say which enum.
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 sixteen. 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. heartRateVariabilityRMSSD is not paired with that record despite the shared name, because Apple has not described it. The other twelve are Apple-only until a mapping is verified.

All 16 identifiers above were read from Apple’s documentation on 2026-10-02. See the full 241-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