Get an activity's recorded series
/v1/activities/{activity_id}/streamsrequires activities.readThe session as time series: elapsed seconds, power and heart rate, every stream the same length and aligned to time, so you can zip them without checking.
A sensor the recording did not carry is absent rather than present and full of zeroes, which would be indistinguishable from an athlete freewheeling. Roughly 400 points - the same downsampling Stride's own charts draw from, which is enough to plot a session and reason about its shape.
For every sample the head unit recorded, fetch the file itself from /activities/{activity_id}/file: the original FIT carries the full resolution, and serving a decoded second-by-second stream over JSON would cost far more than handing over the file that already exists.
Path parameters
activity_idstringrequiredThe activity ID, e.g. `act_2f...`. The owner is resolved from it.
Query parameters
keysenumComma-separated streams to return. Omit for all of them. `time` is always included, since it is the index the others are read against.
time · power · heart_rate
e.g. time,power
Example
curl -X GET "https://api.stride.is/v1/activities/{activity_id}/streams" \
-H "Authorization: Bearer $STRIDE_TOKEN"Response 200
Success.
activity_idstringalways presentheart_rateinteger[]messagestringpointsintegeralways presentpowerinteger[]resolutionstringalways presenttimeinteger[]
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.