HealthKit Sleep and Self-Care Types
7 identifiers · read from Apple’s documentation on 2026-08-28
Seven identifiers cover sleep, mindfulness, self care events and alcohol. Four are category types and three are quantity types, and the most consequential member of the group, sleepAnalysis, is one of the category types. Everything awkward about reading sleep out of HealthKit follows from that one fact.
sleepAnalysis has been there since iOS 8.0 and carries
HKCategoryValueSleepAnalysis. A record is one state, expressed as an enum
case, covering one interval. A night is therefore not a record. It is a run of
adjacent records, and the number your user thinks of as "hours slept" is
something you compute by measuring and combining intervals, not something you
read out of a value field. Anyone porting a sleep feature from a provider that
returns a nightly summary object hits this on day one. What are sleep
stages covers what the states describe, and the
sleep tracking API reference covers the shape you
get on each platform.
sleepAnalysis is also the only identifier in this group with a verified counterpart in the cross-platform matrix: Health Connect's SleepSessionRecord, which carries stages of its own. The other six are Apple only until a counterpart is verified, so a cross-platform self care feature will be thinner on Android than the iOS version unless you build the missing half yourself.
mindfulSession, from iOS 10.0, is the clearest case of a category type whose
value carries nothing. It holds a generic HKCategoryValue and Apple gives it
6 words of discussion. The meaningful content of a mindful session record is
its duration, which is to say its start and end. Write the interval, read the
interval, and do not look for an intensity that is not there.
The two self care events work the same way. toothbrushingEvent arrived in iOS
13.0 and handwashingEvent in iOS 14.0, both with a generic HKCategoryValue.
Handwashing is the better documented of the pair at 60 words of discussion
against 7 for toothbrushing. Both are occurrences with a duration, which makes
them countable per day and streakable, and makes averaging them meaningless.
The quantity types are where the numbers live, and two of the three are about alcohol and behave in opposite ways. numberOfAlcoholicBeverages, added in iOS 15.0, is cumulative and sits in the count unit family, so drinks add up over an evening exactly as you would expect. bloodAlcoholContent, one of the two identifiers here that date to iOS 8.0, is discrete and sits in the percent family, so it is a reading at a moment and summing it produces a number with no meaning at all. Two neighbouring types, one topic, opposite arithmetic. That is the trap the sum or average split exists to head off.
The third quantity type is appleSleepingBreathingDisturbances, dated iOS 18.0, and it is a hole in the documentation rather than a type you can build on. The parse found no abstract, no discussion at all, no aggregation style and no unit family for it. That is not a gap in this page; it is a gap in the source, and the silent identifiers explains what to do when you hit one.
Across versions the group is spread thin: two identifiers at iOS 8.0, one each at 10.0, 13.0, 14.0, 15.0 and 18.0. Sleep is also the group most likely to straddle midnight, which makes the day boundary problem a practical concern rather than a theoretical one when you decide which calendar day a night belongs to.
All identifier names, abstracts, availability versions and aggregation styles here were taken from a parse of Apple's developer documentation performed on 2026-08-28.
The 7 identifiers in sleep, mindfulness and self-care
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.
Mindfulness and Sleep 3
| Identifier | What it is | Aggregate | Unit | iOS | Android |
|---|---|---|---|---|---|
| appleSleepingBreathingDisturbancesHKQuantityTypeIdentifierAppleSleepingBreathingDisturbances | No abstract published. | not stated | — | 18.0 | not verified |
| mindfulSessionHKCategoryTypeIdentifierMindfulSession | A category sample type for recording a mindful session. | enum — HKCategoryValue | — | 10.0 | not verified |
| sleepAnalysisHKCategoryTypeIdentifierSleepAnalysis | A category sample type for sleep analysis information. | enum — HKCategoryValueSleepAnalysis | — | 8.0 | SleepSessionRecord (carries stages) |
Alcohol consumption 2
| Identifier | What it is | Aggregate | Unit | iOS | Android |
|---|---|---|---|---|---|
| bloodAlcoholContentHKQuantityTypeIdentifierBloodAlcoholContent | A quantity sample type that measures the user’s blood alcohol content. | .discreteAverage | percent | 8.0 | not verified |
| numberOfAlcoholicBeveragesHKQuantityTypeIdentifierNumberOfAlcoholicBeverages | A quantity sample type that measures the number of standard alcoholic drinks that the user has consumed. | .cumulativeSum | count | 15.0 | not verified |
Self Care 2
| Identifier | What it is | Aggregate | Unit | iOS | Android |
|---|---|---|---|---|---|
| handwashingEventHKCategoryTypeIdentifierHandwashingEvent | A category sample type for handwashing events. | enum — HKCategoryValue | — | 14.0 | not verified |
| toothbrushingEventHKCategoryTypeIdentifierToothbrushingEvent | A category sample type for toothbrushing events. | enum — HKCategoryValue | — | 13.0 | not verified |
What will bite you
appleSleepingBreathingDisturbances documents nothing. The parse found an empty abstract, zero words of discussion, no aggregation style and no unit family. It is a quantity type dated iOS 18.0 with no stated answer to what its values mean or whether they add up. Do not put it in a weekly rollup on the strength of its name. Show the raw samples, or measure the behaviour yourself and record what you observed.
One night is many sleepAnalysis records. Each is an enum case over an interval, so total sleep is the union of intervals, not a count of records and not a sum of values. Overlap makes it worse: if a phone and a watch both write for the same night, adding the intervals up double counts the hours. Resolve overlaps before you total anything.
mindfulSession and the two hygiene events have nothing in the value.
mindfulSession, toothbrushingEvent and handwashingEvent all carry a generic
HKCategoryValue. There is no quality, score or intensity hiding in there. If
your UI needs one, you are deriving it, and you should say so rather than
present it as platform data.
The alcohol pair pulls in opposite directions. numberOfAlcoholicBeverages is cumulative in the count family and bloodAlcoholContent is discrete in the percent family. They look like they belong in the same chart and they do not: one is a running total, the other a point reading. A single generic handler for "alcohol" is how the wrong aggregation gets applied to one of them.
Questions
- Why does one night of sleep produce many HealthKit records?
- Because sleepAnalysis is a category type. Each record holds a single case of HKCategoryValueSleepAnalysis attached to one interval, so a night is stored as a run of adjacent state records. Total sleep is something you compute from those intervals, and no field in any single record holds it for you.
- Does HealthKit's mindfulSession have a value?
- Not a useful one. mindfulSession carries a generic HKCategoryValue and Apple gives the identifier 6 words of discussion. The content of the record is the interval it covers, so a session's length is its start and end times. There is no intensity, quality or score to read out of it.
- Does HealthKit sleep data map to Android?
- sleepAnalysis is the one identifier in this group with a verified counterpart in our cross-platform matrix, Health Connect's SleepSessionRecord, which carries stages as well. The other six, including mindfulSession, the hygiene events and both alcohol types, are Apple only until a counterpart is verified.
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.