---
title: "Get User Menstrual Cycles"
method: GET
path: "/v2/summary/menstrual_cycle/{user_id}"
tags: ["summary"]
---

# Get User Menstrual Cycles

`GET /v2/summary/menstrual_cycle/{user_id}`

## Path parameters

- `user_id` string, uuid, required

## Query parameters

- `provider` string — Provider oura/strava etc
- `start_date` string, date, required — Start date in YYYY-MM-DD
- `end_date` string, date, nullable — End date (inclusive) in YYYY-MM-DD

## Response `200`

Successful Response

- MenstrualCycleResponse
  - `menstrual_cycle` ClientFacingMenstrualCycle[], required
    - `id` string, uuid, required
    - `period_start` string, date, required
    - `period_end` string, date, nullable
    - `cycle_end` string, date, nullable
    - `is_predicted` boolean
    - `menstrual_flow` MenstrualFlowEntry[]
      - `date` string, date, required
      - `flow` 'unspecified' | 'none' | 'light' | 'medium' | 'heavy', required — ℹ️ This enum is non-exhaustive.
    - `cervical_mucus` CervicalMucusEntry[]
      - `date` string, date, required
      - `quality` 'dry' | 'sticky' | 'creamy' | 'watery' | 'egg_white', required — ℹ️ This enum is non-exhaustive.
    - `intermenstrual_bleeding` IntermenstrualBleedingEntry[]
      - `date` string, date, required
    - `contraceptive` ContraceptiveEntry[]
      - `date` string, date, required
      - `type` 'unspecified' | 'implant' | 'injection' | 'iud' | 'intravaginal_ring' | 'oral' | 'patch', required — ℹ️ This enum is non-exhaustive.
    - `detected_deviations` DetectedDeviationEntry[]
      - `date` string, date, required
      - `deviation` 'persistent_intermenstrual_bleeding' | 'prolonged_menstrual_periods' | 'irregular_menstrual_cycles' | 'infrequent_menstrual_cycles', required — ℹ️ This enum is non-exhaustive.
    - `ovulation_test` OvulationTestEntry[]
      - `date` string, date, required
      - `test_result` 'negative' | 'positive' | 'luteinizing_hormone_surge' | 'estrogen_surge' | 'indeterminate', required — ℹ️ This enum is non-exhaustive.
    - `home_pregnancy_test` HomePregnancyTestEntry[]
      - `date` string, date, required
      - `test_result` 'negative' | 'positive' | 'indeterminate', required — ℹ️ This enum is non-exhaustive.
    - `home_progesterone_test` HomeProgesteroneTestEntry[]
      - `date` string, date, required
      - `test_result` 'negative' | 'positive' | 'indeterminate', required — ℹ️ This enum is non-exhaustive.
    - `sexual_activity` SexualActivityEntry[]
      - `date` string, date, required
      - `protection_used` boolean, nullable
    - `basal_body_temperature` BasalBodyTemperatureEntry[]
      - `date` string, date, required
      - `value` number, required
    - `source_provider` union, required — ℹ️ This enum is non-exhaustive.
      - 'oura' | 'fitbit' | 'garmin' | 'whoop' | 'strava' | 'renpho' | 'peloton' | 'wahoo' | 'zwift' | 'freestyle_libre' | 'abbott_libreview' | 'tandem_source' | 'freestyle_libre_ble' | 'eight_sleep' | 'withings' | 'apple_health_kit' | 'manual' | 'ihealth' | 'google_fit' | 'beurer_api' | 'beurer_ble' | 'omron' | 'omron_ble' | 'onetouch_ble' | 'accuchek_ble' | 'contour_ble' | 'dexcom' | 'dexcom_v3' | 'hammerhead' | 'my_fitness_pal' | 'health_connect' | 'samsung_health' | 'polar' | 'cronometer' | 'kardia' | 'whoop_v2' | 'ultrahuman' | 'my_fitness_pal_v2' | 'map_my_fitness' | 'runkeeper' | 'google_health' — ℹ️ This enum is non-exhaustive.
      - 'ayumetrix' | 'spiriplex' | 'ussl' | 'quest' | 'sonora_quest' | 'labcorp' | 'bioreference' | 'us_biotek' | 'manual' | 'sanocardio' | 'ihd' | 'nexus' | 'my_uti' | 'crl' | 'mtl' — ℹ️ This enum is non-exhaustive.
    - `source_type` 'unknown' | 'phone' | 'watch' | 'app' | 'multiple_sources' | 'fingerprick' | 'cuff' | 'manual_scan' | 'automatic' | 'insulin_pump' | 'scale' | 'chest_strap' | 'ring' | 'lab' | 'exercise_machine' | 'earphone', required — ℹ️ This enum is non-exhaustive.
    - `source_app_id` string, nullable
    - `source_device_id` string, uuid, nullable
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `user_id` string, uuid, required
    - `source` ClientFacingSource, required — Source summarizes where a sample or a summary is sourced from. At minimum, the source provider is always included.
      - `provider` string, required — Provider slug. e.g., `oura`, `fitbit`, `garmin`.
      - `type` string — The type of the data source (app or device) by which the summary or the timeseries data were recorded. This defaults to `unknown` when Vital cannot extract or infer that information
      - `app_id` string, nullable — The identifier of the app which recorded this summary. This is only applicable to multi-source providers like Apple Health and Android Health Connect.
      - `device_id` string, uuid, nullable — The identifier of the device which recorded this summary.
      - `sport` string, nullable — For workout stream timeseries, this is the standard sport slug of the workout with which the timeseries data are associated. For the `distance` timeseries, this is `wheelchair_pushing` if the user is a wheelchair user, or `null` otherwise. For all summary types and non-workout timeseries, this is always `null`.
      - `workout_id` string, uuid, nullable — For workout stream timeseries, this is the workout ID with which the timeseries data are associated. For all other types, this is always `null`.
      - `name` string — Deprecated. Subject to removal after 1 Jan 2024.
      - `slug` string — Deprecated. Use `provider` instead. Subject to removal after 1 Jan 2024.
      - `logo` string — Deprecated. Subject to removal after 1 Jan 2024.

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/tryvital/apis/junction-api.md) · [All operations](https://skmtc.net/tryvital/apis/junction-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/tryvital/junction-api/versions/d28f5cec7d79/schema)
