Get the calendar day by day
/v1/athletes/{athlete_id}/daysrequires activities.readOne row per date, carrying everything Stride holds against that date rather than against a workout: the annotations on the athlete's calendar (races, holidays, illness, injury, rest days, notes), that day's wellness readings, the night's sleep, where the date falls in the menstrual cycle, and the sessions on it.
This is the endpoint for questions about context and readiness - why a session went the way it did, what the athlete had on around it, whether they were ill or away - where the activities endpoint shows only the training itself.
The cycle section requires the cycle.read scope and is omitted without it. The sleep section requires sleep.read, and annotations requires calendar.read; sections a token cannot see are left out rather than failing the request.
Path parameters
athlete_idstringrequiredThe athlete to act on. `me` is the athlete who authorized this token; any other ID must be an athlete they coach.
Query parameters
startstringStart of the window, as RFC 3339 or YYYY-MM-DD. May be in the future.
e.g. 2026-08-01
endstringEnd of the window, as RFC 3339 or YYYY-MM-DD. May be in the future, to include planned sessions.
e.g. 2026-09-01
datesstringComma-separated explicit dates (YYYY-MM-DD) instead of a continuous window, for cherry-picking days that are not adjacent.
includestringComma-separated sections to return, to keep the response small. Omit for all of them.
e.g. annotations,activities
Example
curl -X GET "https://api.stride.is/v1/athletes/{athlete_id}/days" \
-H "Authorization: Bearer $STRIDE_TOKEN"Response 200
Success.
daysobject[]always presentactivitiesobject[]ascent_metersintegerTotal climbing in metres.
avg_power_wattsintegerAverage power in watts, where a power meter was recording.
descriptionstringdistance_metersintegerDistance covered in metres.
duration_secondsintegerTotal elapsed time in seconds.
feelintegerHow the session felt to the athlete, 1 (terrible) to 5 (great).
idstringalways presentnamestringplanned_atstringWhen the session is planned for, in the athlete's local wall-clock time with a Z suffix, on the same terms as started_at. Absent for an unplanned session.
planned_distance_metersintegerPlanned distance in metres.
planned_duration_secondsintegerPlanned duration in seconds.
planned_intensitynumberPlanned intensity as a fraction of threshold, e.g. 0.75.
planned_pace_seconds_per_kmnumberPlanned pace in seconds per kilometre.
planned_training_scoreintegerPlanned training load for the session.
rpeintegerThe athlete's rate of perceived exertion, 1 (easy) to 10 (maximal).
sourcestringWhere the recording came from, e.g. GARMIN, WAHOO, STRIDE. STRIDE means the Stride app recorded it.
started_atstringWhen the session started, in the athlete's local wall-clock time with a Z suffix. This is NOT a UTC instant: read the athlete's timezone from the athlete endpoint to interpret it. Absent for a session that has not happened yet.
typestringalways presentThe sport, e.g. RIDE, RUN, SWIM.
weighted_heart_rateintegerHeart rate in bpm, weighted towards the harder parts of the session rather than a flat average.
annotationsobject[]all_daybooleanalways presentdescriptionstringend_datestringalways presentend_timestringevent_prioritystringevent_typestringidstringalways presentsourcestringstart_datestringalways presentstart_timestringtitlestringalways presenttypestringalways present
cycleobjectbasal_body_temp_celsiusnumbercervical_mucusstringcycle_lengthintegerday_in_cycleintegerflowstringin_fertile_windowbooleanin_periodbooleanis_period_startbooleanis_predicted_cyclebooleanis_pregnantbooleannotesstringovulation_teststringperiod_lengthintegerperiod_start_datestringphase_typestringsourcestringsymptomsstring[]
datestringalways presentmetricsobjectsleepobject[]average_heart_ratenumberaverage_hrvnumberawake_secondsintegerconsistency_percentagenumberdatestringalways presentdeep_sleep_secondsintegerdisturbancesintegerefficiency_percentagenumberend_timestringidstringalways presentis_napbooleanlight_sleep_secondsintegerlowest_heart_ratenumberperformance_percentagenumberrem_sleep_secondsintegerrespiratory_ratenumbersleep_cyclesintegersourcestringstart_timestringtotal_in_bed_secondsintegertotal_sleep_secondsinteger
Errors
Every error is an RFC 9457 problem document. Branch on its code, which is stable; detail is prose and may be reworded.
400The request was malformed: an unparseable date, an unknown enum value, or a parameter combination that cannot be satisfied.401No access token was supplied, or it is not valid for this API.402The Stride account the token belongs to has no active subscription or trial.403The token does not hold the scope this endpoint requires, or may not act on the athlete or team named.404No such resource, or it is not visible to this token. The two are deliberately indistinguishable.405The path exists but does not serve this method. The Allow header lists the ones it does.429A rate limit was exceeded. Retry after the period in the Retry-After header.500Something failed on Stride's side. The failure is logged with a trace ID.