You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
New menstrual-cycle write methods: update_menstrual_daily_log(), update_menstrual_calendar(), init_menstrual_cycle_setup(), confirm_menstrual_period_start(), and update_menstrual_settings() — previously only reads (dayview/calendar/pregnancy snapshots) were supported; recording a daily log, editing period dates, running first-time cycle setup, or changing tracking settings required going through Garmin Connect's own UI. Payload shapes were checked against live requests where practical; init_menstrual_cycle_setup()/confirm_menstrual_period_start() request shapes come from the frontend and haven't been exercised live on an already-configured account, so treat those two with extra care. Writes are full snapshots, not field-level merges — see each method's docstring for exactly what gets cleared vs. preserved when a field is omitted.
New read methods alongside the writes: get_menstrual_last_confirmed(), get_menstrual_cycle_summary(), get_menstrual_reports().
demo.py: interactive menu entries for all of the above (Hydration & Wellness category), consistent with every other write in the demo — no extra confirmation step beyond the normal input prompts.
Fixed
get_goals() silently returned [] (HTTP 200, no error) for newer goal types — custom accumulation goals with a date range, created via the current Garmin Connect UI. Root cause: goal-service/goal/goals requires a Sec-Fetch-Site: same-origin header for these goal types; browsers always send it on a same-origin request, but this client didn't send any Sec-Fetch-* headers before. (#431, #434)
update_menstrual_settings() could clobber fields the caller didn't pass — it now GETs the current profile and merges the caller's keys onto the existing userMenstrualCycleSettings before the PUT, so omitted tracking flags are preserved.
Two formatting-only nits from the menstrual-writes change (an unnecessary line wrap in a demo error message and in get_menstrual_reports()'s URL construction).
Docs
README method/category counts updated to 154+ across 14 categories (Hydration & Wellness now 20 methods, up from 12).
Thanks
@TSHOGX for the menstrual-cycle write methods (#432) — payload shapes checked against live requests, not guessed.
@skweeker for reporting the get_goals() regression (#431) and isolating the root cause via curl — narrowing it down to one missing header made the fix straightforward.