Stride

Search Documentation

Search for articles, guides, and more

Stride API

A REST API over an athlete's training: their activities and the analysis behind them, their planned sessions, thresholds and wellness metrics, training load, and the workout library. 31 endpoints, authorized by the athlete over OAuth.

Your first request

The quickest way in is a personal access token: create one under Settings → API, choose what it may read, and use it straight away. No app registration, no OAuth flow.

bash
curl "https://api.stride.is/v1/athlete" \
  -H "Authorization: Bearer $STRIDE_TOKEN"

That returns the athlete the token belongs to. Everything else hangs off it: /athletes/me/activities for their calendar, /activities/{id} for the full analysis of one session.

Building for other athletes

To act on behalf of people who are not you, register an app under Settings → API and send athletes through the OAuth flow. See Authentication.

Data synced from Garmin

Garmin's developer terms do not allow Stride to pass Garmin data on to other apps, so this API leaves it out. A session recorded through Garmin Connect is missing from activity lists, or reduced to its plan with recording_withheld set when it was planned in Stride. Its analysis, streams and file are refused with garmin_data_withheld. Garmin's wellness, sleep and cycle readings are left out too, and no webhook announces any of it.

A list that left something out carries a notice, so a quiet week is not mistaken for a week off. Training load and power curves are Stride's own analysis and still count those sessions. A ride recorded on a Garmin device but uploaded as a file did not come through Garmin Connect, and is served as normal.

Two things that will catch you out

Timestamps are local wall-clock time

An activity that started at nine in the morning is timestamped 09:00:00Z wherever the athlete was, and the Z does not mean UTC. Read timezone from GET /athlete and interpret every timestamp against it. Treating them as UTC instants puts sessions on the wrong day for anyone who is not on UTC.

Requests are charged by cost, not by count

A full activity analysis is worth many list calls, because it costs us many list calls. The X-RateLimit-Remaining header on every response tells you where you stand. See Errors and rate limits.

Units

SI throughout, with no per-athlete variation: metres, seconds, watts, kilograms, bpm, seconds per kilometre, degrees Celsius. The athlete's uses_metric_units preference describes how Stride's own apps display values to them; it does not change what this API returns.