@@ -208,6 +208,9 @@ def __init__(
208208 self .garmin_connect_endurance_score_url = (
209209 "/metrics-service/metrics/endurancescore"
210210 )
211+ self .garmin_connect_running_tolerance_url = (
212+ "/metrics-service/metrics/runningtolerance/stats"
213+ )
211214 self .garmin_connect_menstrual_calendar_url = (
212215 "/periodichealth-service/menstrualcycle/calendar"
213216 )
@@ -1584,6 +1587,41 @@ def get_endurance_score(
15841587
15851588 return self .connectapi (url , params = params )
15861589
1590+ def get_running_tolerance (
1591+ self , startdate : str , enddate : str , aggregation : str = "weekly"
1592+ ) -> list [dict [str , Any ]]:
1593+ """Return running tolerance data for date range.
1594+
1595+ Args:
1596+ startdate: Start date in 'YYYY-MM-DD' format.
1597+ enddate: End date in 'YYYY-MM-DD' format.
1598+ aggregation: 'daily' or 'weekly' (default: 'weekly').
1599+
1600+ Returns:
1601+ List of running tolerance data points.
1602+
1603+ """
1604+ startdate = _validate_date_format (startdate , "startdate" )
1605+ enddate = _validate_date_format (enddate , "enddate" )
1606+ if aggregation not in ("daily" , "weekly" ):
1607+ raise ValueError (
1608+ f"Invalid aggregation '{ aggregation } '. Must be 'daily' or 'weekly'."
1609+ )
1610+ url = self .garmin_connect_running_tolerance_url
1611+ params = {
1612+ "startDate" : str (startdate ),
1613+ "endDate" : str (enddate ),
1614+ "aggregation" : aggregation ,
1615+ }
1616+ logger .debug (
1617+ "Requesting running tolerance data (%s) from %s to %s" ,
1618+ aggregation ,
1619+ startdate ,
1620+ enddate ,
1621+ )
1622+
1623+ return self .connectapi (url , params = params )
1624+
15871625 def get_race_predictions (
15881626 self ,
15891627 startdate : str | None = None ,
0 commit comments