Errors and rate limits
Errors are RFC 9457 problem documents. Rate limits are charged by what a request costs us, not by how many you made.
Error responses
Every failure is application/problem+json. Branch on code, which is stable across wording changes; detail is prose and may be reworded.
{
"type": "https://stride.is/docs/api/errors#insufficient_scope",
"title": "Insufficient scope",
"status": 403,
"detail": "This endpoint requires the metrics.read scope, which this token does not hold.",
"code": "insufficient_scope"
}What each status means
400invalid_requestA malformed date, an unknown enum value, or an unrecognised field in the body. We reject unknown fields rather than ignoring them, so a misspelled key is reported instead of silently doing nothing.
401unauthenticatedNo token, an expired one, or one minted for a different resource. An MCP token is not accepted here and vice versa.
402subscription_requiredThe Stride account the token belongs to has no active subscription or trial.
403insufficient_scope / forbiddenThe token lacks the scope, or may not act on the athlete or team named.
404not_foundNo such resource, or it is not visible to this token. The two are deliberately indistinguishable so the ID space cannot be probed.
405method_not_allowedThe path exists but not for that verb. The Allow header lists the ones it serves.
422unprocessableUnderstood but impossible to carry out, most often an upload that produced no activity.
429rate_limitedA limit was exceeded. Retry after the period in the Retry-After header.
Rate limits
Two windows, a short one and a daily one, applied per app and again per app-and-athlete. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (seconds), so you can back off before you are refused rather than discovering the limit by hitting it.
Cost, not count
Requests are charged by what they cost to serve. A full activity analysis is worth roughly twelve list calls, and a power curve about seven. If you are scanning a season, ask for detail=summary - it is an order of magnitude cheaper and still carries the shape of every session.