Menstrual Cycle API: How to Get Cycle Tracking Data
Last verified August 12, 2026 · 7 min read
Covered here:Health ConnectHealthKitTerraOuraWHOOP
There is no sensor for menstruation. Every other page in this cluster opens with a signal some device picks up; this one opens with a text field. Menstrual flow, spotting, cervical mucus quality, ovulation test strips, and sexual activity are all things a person taps into an app, and the platform health stores exist to hold that log and hand it between apps under permission. A thin layer of genuinely sensor-derived data sits alongside it — overnight wrist temperature, basal body temperature, resting heart rate — but those are inputs a cycle model consumes, not the cycle itself.
Where you can get cycle data#
Identifier names, enum constants, and permission strings change; each row records where the claim came from and when it was checked, so you can re-verify rather than trust the table.
| Source | How you access it | What it exposes | Verified from |
|---|---|---|---|
| Apple HealthKit (iOS) | On-device read, per-type permission; no cloud pull | Reproductive Health category types: menstrualFlow, intermenstrualBleeding, infrequentMenstrualCycles, irregularMenstrualCycles, persistentIntermenstrualBleeding, prolongedMenstrualPeriods, cervicalMucusQuality, ovulationTestResult, progesteroneTestResult, sexualActivity, contraceptive, pregnancy, pregnancyTestResult, lactation, menopausalState, bleedingAfterMenopause | Apple HKCategoryTypeIdentifier reference, fetched 2026-08-12 |
| Apple HealthKit (quantity types) | On-device read, per-type permission | HKQuantityTypeIdentifierBasalBodyTemperature; HKQuantityTypeIdentifierAppleSleepingWristTemperature (read-only, cannot be written) | Apple HKQuantityTypeIdentifier and appleSleepingWristTemperature references, fetched 2026-08-12 |
| Android Health Connect | On-device read, per-record permission; no cloud pull | Cycle Tracking category: MenstruationFlowRecord, MenstruationPeriodRecord, CervicalMucusRecord, IntermenstrualBleedingRecord, OvulationTestRecord, SexualActivityRecord, BasalBodyTemperatureRecord | Android Health Connect data types page, fetched 2026-08-12 |
| Terra | One cloud API plus webhooks over many providers | A menstruation payload type and a /v2/menstruation REST endpoint; menstrual cycle is listed in its normalized schema | Our Terra API integration guide |
| Fitbit, Garmin, Oura, WHOOP | Cloud OAuth 2.0 | Menstrual cycle data is not documented on our pages for any of these — verify with the vendor before planning around it | — |
| Junction, Rook, Spike | One cloud API over many providers | A menstruation datatype is not documented on our pages for these aggregators — verify with the vendor | — |
The short version of that table: the log lives on the phone. Cloud coverage for cycle data is thin compared with heart rate or sleep, which pushes most builds toward the on-device stores.
Logged, not measured — and predictions are somebody's model#
Apple documents menstrualFlow samples as taking values from the HKCategoryValueMenstrualFlow enum — unspecified, none, light, medium, heavy — and requires every sample to carry HKMetadataKeyMenstrualCycleStart metadata. Two write patterns are documented. Record a whole period as one sample, with the period start as startDate, the period end as endDate, and the cycle-start metadata set to true. Or write several samples across the period, marking only the first with cycle-start true and the rest false, varying the flow value to capture how it changed.
Health Connect splits the same idea in two. MenstruationPeriodRecord is an interval record carrying startTime and endTime. MenstruationFlowRecord is instantaneous, with a flow field taking FLOW_LIGHT, FLOW_MEDIUM, FLOW_HEAVY, or FLOW_UNKNOWN. Both sit behind a single permission pair, android.permission.health.READ_MENSTRUATION and android.permission.health.WRITE_MENSTRUATION.
The sensor-derived slice is narrower than most product plans assume. Apple documents that Apple Watch Series 8 and Apple Watch Ultra sample wrist temperature every five seconds overnight during sleep and aggregate the night into one appleSleepingWristTemperature sample corrected for environmental bias, and that Cycle Tracking uses that data to provide a retrospective estimate of when the person likely ovulated, combined with heart rate and logged cycle data. Read that carefully: retrospective, not a forecast. Apple also documents the type as read-only, so you can request permission to read it but cannot save samples of it, and notes Health needs roughly five nights to build a baseline before it displays wrist temperature, even though the samples are readable from the first night.
So flow and period boundaries are logged, ovulation timing derived from temperature is estimated after the fact, and any future fertile window your UI draws is a prediction from a model — yours or a vendor's. Label it as one. This is wellness information, not contraception and not a diagnosis.
Enum mismatches and other traps#
- Flow scales do not line up. Apple offers five constants including an explicit
none; Health Connect offers four withFLOW_UNKNOWNin place of a "no flow" value. Merging the two means deciding what Apple'snonebecomes on Android, and writing that decision down. - Ovulation results line up even less. Apple's
HKCategoryValueOvulationTestResulthasnegative,luteinizingHormoneSurge,indeterminate,estrogenSurge, andpositive. Health Connect'sOvulationTestRecordhasRESULT_POSITIVE(documented as peak fertility, the LH surge, with ovulation expected in 10 to 36 hours),RESULT_HIGH(documented as a rise in estrogen or luteinizing hormone),RESULT_NEGATIVE, andRESULT_INCONCLUSIVE— and Google documents that any unknown value comes back as inconclusive. Apple separates an estrogen surge from an LH surge; Google folds both into one high-fertility constant. - Cervical mucus carries an extra dimension on Android. Apple's enum is
dry,sticky,creamy,watery,eggWhite. Health Connect has the same five appearances plusAPPEARANCE_UNUSUAL, described as an unusual kind worth attention, and a separatesensationfield with light, medium, and heavy values. An appearance-to-appearance mapping silently discards sensation. - Mandatory fields differ per record. Health Connect lists
protectionUsedamong the mandatory fields onSexualActivityRecord, whileIntermenstrualBleedingRecordrequires onlymetadataandtime. Check each record's required set rather than assuming a shared shape. - Coverage is broader than "period". Apple's Reproductive Health list reaches into pregnancy, lactation, contraceptive, and menopausal state. Request only the types your feature actually uses.
Sensitivity: the part you cannot treat as a normal metric#
Cycle data is the most exposed category in this cluster. Since the 2022 Dobbs decision in the United States, period and fertility logs have been treated by users, regulators, and journalists as data that can be subpoenaed or sold, and a breach here is materially worse than losing someone's step count. Handle it as an engineering problem with a privacy budget, not a compliance checkbox.
Practical guidance, none of it legal advice:
- Keep it on-device when you can. HealthKit and Health Connect are permissioned on-device reads with no server-to-server pull — see on-device vs cloud health data. If a feature can be computed on the phone, do not upload the log at all.
- Request the narrowest permission set that ships the feature. Google's Health Connect access guidance is explicit: only request permissions and data types that support the specific, user-facing health features you offer, and justify each one. Google lists period tracking as a declarable health feature in the Play Console.
- Design for silent denial. Apple documents that users grant or deny per data type and that your app is never told a read was denied — from your app's point of view, no data of that type exists. An empty cycle log must not accuse the user of anything.
- Respect Apple's HealthKit terms. Apple states you may not use HealthKit information for advertising or similar services, must not disclose it to a third party without express permission (and even then only to a party that also provides a health or fitness service), cannot sell it to advertising platforms, data brokers, or information resellers, and must provide a privacy policy.
- Get consent and storage right. Our guides on health-data user consent and storing health data securely cover the consent record, encryption, and deletion path this data needs.
Which should you pick?#
- iOS-only cycle logging: HealthKit's Reproductive Health category types, read and written on-device.
- Android: Health Connect's Cycle Tracking records, behind the per-record permissions above.
- Several brands behind one schema: Terra is the only source documented on our pages that normalizes a menstruation datatype. Verify current coverage in its docs.
- Temperature inputs to a cycle model:
appleSleepingWristTemperatureon iOS,BasalBodyTemperatureRecordorSkinTemperatureRecordon Android. Our Oura vs WHOOP comparison describes Oura's nightly temperature deviation from baseline as a useful cycle-tracking input, but our pages do not document an Oura menstrual-cycle datatype — verify with the vendor.
Before you ship#
Re-verify every identifier, enum constant, and permission string against Apple's and Google's live references, because these move. Write down your cross-platform enum mapping instead of leaving it implicit in code. Label predictions as predictions. And decide, deliberately, whether this data ever needs to leave the device — for cycle tracking, the cheapest privacy control is the data you never collected.
Frequently asked questions
- Which Health Connect records cover menstrual cycle tracking?
- Health Connect groups them under Cycle Tracking: MenstruationFlowRecord (instantaneous, with a flow field taking FLOW_LIGHT, FLOW_MEDIUM, FLOW_HEAVY or FLOW_UNKNOWN), MenstruationPeriodRecord (an interval with startTime and endTime), CervicalMucusRecord, IntermenstrualBleedingRecord, OvulationTestRecord, SexualActivityRecord, and BasalBodyTemperatureRecord. The two menstruation records share one permission pair, android.permission.health.READ_MENSTRUATION and WRITE_MENSTRUATION, while the others have their own. Verify the current record and permission list in Google's data types reference before you build.
- Does Apple HealthKit predict ovulation, or only store what was logged?
- HealthKit stores samples; the prediction lives in Apple's Cycle Tracking feature, not in a type you read. Apple documents that Cycle Tracking uses sleeping wrist temperature data to provide a retrospective estimate of when someone likely ovulated, combined with heart rate and logged cycle data. That is an estimate made after the fact, not a forecast, and the appleSleepingWristTemperature type is read-only, so you can request permission to read it but cannot write samples. Anything your app renders as a future fertile window is your own model's prediction and should be labelled as one.
- Can a wearable detect a period automatically, or must the user log it?
- Flow, spotting, cervical mucus quality, ovulation test results, and sexual activity are all logged by the person or written by another app; there is no sensor that detects them. The genuinely sensor-derived signals are adjacent, not equivalent: overnight wrist temperature, basal body temperature, and resting heart rate are inputs a cycle model consumes rather than the cycle itself. Design your empty states around a log that may simply not exist yet.
- What extra privacy obligations come with period-tracking data?
- Treat it as the most exposed category in consumer health. Google's Health Connect guidance is to request only the permissions and data types that support the specific user-facing features you offer, and to justify each one, with period tracking listed as a declarable health feature in the Play Console. Apple's HealthKit rules prohibit using the data for advertising, disclosing it to a third party without express permission (and even then only to a party that also provides a health or fitness service), and selling it to advertising platforms, data brokers, or information resellers, and require a privacy policy. Keep the log on-device where the feature allows, and make deletion real. This is engineering guidance, not legal advice.
- Which wearable cloud APIs return menstrual cycle data?
- Fewer than you would expect. Among the sources documented on our pages, Terra is the one that normalizes cycle data, with a menstruation payload type and a /v2/menstruation REST endpoint. Menstrual cycle data is not documented on our pages for Fitbit, Garmin, Oura, or WHOOP, nor for the Junction, Rook, or Spike aggregators, so verify with each vendor rather than assuming coverage. Oura's nightly temperature deviation is described on our pages as a useful input to cycle features, which is not the same as an API datatype for the cycle itself.
Keep reading
Menstrual cycle in Apple HealthKit
Read from Apple’s documentation on 2026-08-28. Not hand-written — regenerated with the dataset.
| Apple HealthKit | Aggregate with | Unit | iOS |
|---|---|---|---|
| menstrualFlow | n/a — HKCategoryValueMenstrualFlow | — | 9.0 |
- Android Health Connect
- Not verified. Health Connect very likely names an equivalent record type, but we could not confirm it against Google’s documentation, so we do not print one.
Full set: every HealthKit type identifier · every HealthKit error code
Elsewhere on the site
Pages that share this one’s concepts and sources, from other sections.
Next steps
Was this page useful?
Independent comparison, last reviewed August 12, 2026. Pricing, rate limits, and feature availability change often — confirm current details in each provider’s official documentation before you commit. Product and company names are trademarks of their respective owners; AIFitnessAPI is not affiliated with, endorsed by, or sponsored by any product listed here.
← All health data · by AIFitnessAPI