HealthKit Reproductive Health Types
17 identifiers · read from Apple’s documentation on 2026-08-28
Apple's reproductive health documentation covers 17 type identifiers, and 16 of them are category types. Only one is a quantity type. That ratio is the most important thing to know before you design a table for this data, because a category sample carries no number at all. Its payload is an enum case and a date range, so a reproductive health history is a sequence of dated states rather than a series you can plot and average.
The single exception is basalBodyTemperature, available since iOS 9.0. It is the group's only quantity type, its stated aggregation style is discrete, and temperature is the only unit family that appears anywhere in these 17 entries. Discrete means each value is a reading taken at a moment, so average, minimum, maximum and latest are the operations that mean something, and a sum is not one of them. Sum or average explains why choosing wrong here raises no error and fails no test.
The remaining 16 differ mainly in whether Apple gave them a named value enum.
menstrualFlow carries HKCategoryValueMenstrualFlow and is by far the most
thoroughly written up entry in the group, with 128 words of discussion behind
its one line abstract. cervicalMucusQuality and ovulationTestResult, both also
from iOS 9.0, have dedicated enums too but only 7 words of discussion each.
pregnancyTestResult and progesteroneTestResult arrived together in iOS 15.0,
each representing the outcome of a home test through its own enum, which means
gaps between records are normal rather than a sync fault. Where no named enum
exists, including lactation, pregnancy and sexualActivity, the record is a
generic HKCategoryValue, and the value tells you nothing that the date range
does not already say.
Six of the 17 go back to iOS 9.0. Three landed in iOS 14.3: contraceptive,
lactation and pregnancy. Four more landed in iOS 16.0 as a coherent set of
cycle deviation flags, namely infrequentMenstrualCycles,
irregularMenstrualCycles, persistentIntermenstrualBleeding and
prolongedMenstrualPeriods. Each of those four carries 73 words of discussion,
more than most of the older members, and each carries the generic
HKCategoryValue. Two more are dated iOS 27.0: bleedingAfterMenopause and
menopausalState, and both are flagged beta in the dataset, so their shape can
still move before release.
None of the 17 has a verified Android counterpart in this site's cross-platform matrix. Treat the whole group as Apple only until a counterpart is verified, and if you also ship on Android, plan a separate schema for reproductive records rather than a field by field mapping you will have to unpick later. The menstrual cycle API reference covers what each platform exposes today.
Two design consequences follow from all of this. The first is that your UI is a timeline, not a chart. Sixteen of these identifiers produce rows that are readable only as dated entries, and the one that does produce numbers produces a handful of readings a week at most. The second is that consent copy carries more weight here than anywhere else in HealthKit. Ask only for the identifiers your feature actually uses, name them in plain language in the request, and keep the data on the device unless something genuinely needs it elsewhere. Health data user consent covers what the request has to say, and on-device versus cloud covers what changes the moment a record leaves the phone.
Identifier names, abstracts, aggregation styles and availability versions on this page were parsed from Apple's developer documentation on 2026-08-28 and are published in full in the HealthKit identifier reference.
The 17 identifiers in reproductive health
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.
Reproductive health 1
| Identifier | What it is | Aggregate | Unit | iOS | Android |
|---|---|---|---|---|---|
| basalBodyTemperatureHKQuantityTypeIdentifierBasalBodyTemperature | A quantity sample type that records the user’s basal body temperature. | .discreteAverage | temperature | 9.0 | not verified |
Reproductive Health 16
| Identifier | What it is | Aggregate | Unit | iOS | Android |
|---|---|---|---|---|---|
| bleedingAfterMenopauseHKCategoryTypeIdentifierBleedingAfterMenopause | An identifier for samples that record bleeding after menopause. | enum — unresolved | — | 27.0 (beta) | not verified |
| cervicalMucusQualityHKCategoryTypeIdentifierCervicalMucusQuality | A category sample type that records the quality of the user’s cervical mucus. | enum — HKCategoryValueCervicalMucusQuality | — | 9.0 | not verified |
| contraceptiveHKCategoryTypeIdentifierContraceptive | A category sample type that records the use of contraceptives. | enum — HKCategoryValueContraceptive | — | 14.3 | not verified |
| infrequentMenstrualCyclesread-onlyHKCategoryTypeIdentifierInfrequentMenstrualCycles | A category sample that indicates an infrequent menstrual cycle. | enum — HKCategoryValue | — | 16.0 | not verified |
| intermenstrualBleedingHKCategoryTypeIdentifierIntermenstrualBleeding | A category sample type that records spotting outside the normal menstruation period. | enum — HKCategoryValue | — | 9.0 | not verified |
| irregularMenstrualCyclesread-onlyHKCategoryTypeIdentifierIrregularMenstrualCycles | A category sample that indicates an irregular menstrual cycle. | enum — HKCategoryValue | — | 16.0 | not verified |
| lactationHKCategoryTypeIdentifierLactation | A category type that records lactation. | enum — HKCategoryValue | — | 14.3 | not verified |
| menopausalStateHKCategoryTypeIdentifierMenopausalState | An identifier for samples that record a person’s menopausal state. | enum — HKCategoryValueMenopausalState | — | 27.0 (beta) | not verified |
| menstrualFlowHKCategoryTypeIdentifierMenstrualFlow | A category sample type that records menstrual cycles. | enum — HKCategoryValueMenstrualFlow | — | 9.0 | not verified |
| ovulationTestResultHKCategoryTypeIdentifierOvulationTestResult | A category sample type that records the result of an ovulation home test. | enum — HKCategoryValueOvulationTestResult | — | 9.0 | not verified |
| persistentIntermenstrualBleedingread-onlyHKCategoryTypeIdentifierPersistentIntermenstrualBleeding | A category sample that indicates persistent intermenstrual bleeding. | enum — HKCategoryValue | — | 16.0 | not verified |
| pregnancyHKCategoryTypeIdentifierPregnancy | A category type that records pregnancy. | enum — HKCategoryValue | — | 14.3 | not verified |
| pregnancyTestResultHKCategoryTypeIdentifierPregnancyTestResult | A category type that represents the results from a home pregnancy test. | enum — HKCategoryValuePregnancyTestResult | — | 15.0 | not verified |
| progesteroneTestResultHKCategoryTypeIdentifierProgesteroneTestResult | A category type that represents the results from a home progesterone test. | enum — HKCategoryValueProgesteroneTestResult | — | 15.0 | not verified |
| prolongedMenstrualPeriodsread-onlyHKCategoryTypeIdentifierProlongedMenstrualPeriods | A category sample that indicates a prolonged menstrual cycle. | enum — HKCategoryValue | — | 16.0 | not verified |
| sexualActivityHKCategoryTypeIdentifierSexualActivity | A category sample type that records sexual activity. | enum — HKCategoryValue | — | 9.0 | not verified |
What will bite you
bleedingAfterMenopause and menopausalState are beta. Both are dated iOS 27.0 and both are flagged beta in the dataset. Beta means the identifier, the values it can carry and its availability can all still change, so anything you write against them is provisional. Feature flag them, and do not let a beta identifier become a required column.
Sixteen of the 17 have no aggregation style and no unit. That is correct
rather than missing: only the quantity type carries those fields. It becomes a
bug when a generic ingestion pipeline assumes every HealthKit sample has a
numeric value and a unit, then coerces an enum case into a number. Once
HKCategoryValueMenstrualFlow is stored as an integer in your own table,
nothing downstream remembers that averaging it is nonsense.
A generic value means presence, not detail. lactation, pregnancy,
sexualActivity, intermenstrualBleeding and the four iOS 16.0 cycle deviation
identifiers carry a plain HKCategoryValue rather than a named enum. The
record says an event was logged over an interval. If your feature needs
anything more specific than that, this data cannot supply it, and inventing a
severity or a confidence from it invents information the user never entered.
The documentation is thin where it matters. intermenstrualBleeding has 6 words of discussion, cervicalMucusQuality and ovulationTestResult 7 each, lactation and pregnancy 8 each. The abstract really is all Apple wrote. Where the docs are silent about what a value means, do not close the gap with an assumption in your interpretation layer, and do not present a derived conclusion to the user as though the platform provided it.
Questions
- How many HealthKit reproductive health types are there?
- Apple's documentation lists 17 identifiers in this group as of the parse on 2026-08-28. Sixteen are category types, which record a state or an event as an enum case over a date range. Exactly one, basalBodyTemperature, is a quantity type, and it is the only member of the group that produces a number.
- Does menstrualFlow have a numeric value I can average?
- No. menstrualFlow is a category type carrying HKCategoryValueMenstrualFlow, so each record is one enum case attached to a date range. There is no unit and no stated aggregation style, because those fields apply to quantity types only. Count records or lay them out on a timeline instead of averaging them.
- Which reproductive health identifiers are newest?
- Two are dated iOS 27.0, bleedingAfterMenopause and menopausalState, and both are flagged beta in the dataset, so treat them as provisional. Before them, four arrived in iOS 16.0: infrequentMenstrualCycles, irregularMenstrualCycles, persistentIntermenstrualBleeding and prolongedMenstrualPeriods. Two came in iOS 15.0, three in iOS 14.3, and six of the 17 date back to iOS 9.0.
All 17 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.