Provider guide
Strava: register your app
| Access | Self-serve at strava.com/settings/api [OFF] |
| Cost | Since 1 Jun 2026 the Standard tier requires the developer to hold a paid Strava subscription (new developers from 1 Jun, existing from 30 Jun 2026); Extended Access is exempt [2ND] |
| Account | A personal Strava athlete account: the app belongs to that athlete. One app per account [MEM] |
| Managed app | No: bring your own keys. Strava's 2026 terms refuse intermediaries |
| AI use | Forbidden. Strava data never reaches Latido's MCP |
| Latido slug | strava |
| Time | ~10 minutes |
Terms that matter (read before registering)
API Agreement effective 1 Jun 2026:
- A user's data can be displayed only to that user, never to other users, even if their activities are public [OFF].
- No sharing with third parties without explicit consent; no competing products; Strava may introduce fees [OFF].
- Apps that route data through third-party intermediary platforms are no
longer supported [2ND]. Latido is such a platform, which is why the catalog
marks Strava
custom_only: each customer registers their own app and answers to Strava for it. - The AI ban covers training and, reportedly, context-window ingestion, RAG, embeddings and running MCP servers or agents over Strava data; caching is limited to 7 days [2ND].
- A unified API that re-serves Strava data to B2B customers is very likely non-compliant. Get written confirmation from Strava before selling it.
Steps
Sign in to Strava with the account that will own the app and make sure it has an active subscription (see Cost).
Go to https://www.strava.com/settings/api and create an application [MEM: field names]:
- Application name and Category.
- Club: leave empty.
- Website: your company website.
- Application description.
- Authorization Callback Domain: the host only, no scheme or path:
api.getlatido.com. Strava then acceptshttps://api.getlatido.com/connect/callback/strava[OFF: callback is matched on domain]. - Upload an icon (required before the keys appear) [MEM].
Copy Client ID and Client Secret.
In Latido, Providers → Strava → Custom app: paste both. Set
webhookVerifyTokento a long random string. Save.Create the webhook subscription (one per app; Latido may do this for you when the app is saved; otherwise run it yourself). Latido answers the handshake: Strava calls the URL with
hub.challengeand needs the answer within 2 s [OFF].bashcurl -X POST https://www.strava.com/api/v3/push_subscriptions \ -F client_id="$STRAVA_CLIENT_ID" \ -F client_secret="$STRAVA_CLIENT_SECRET" \ -F callback_url="<webhook URL from the dashboard>" \ -F verify_token="<the webhookVerifyToken you set>"Check it with
GET /push_subscriptions?client_id=…&client_secret=….
Scopes
Requested in the authorize URL (comma-separated), not ticked in the portal
[OFF]: read,activity:read_all,profile:read_all. activity:read is the
minimum for activity webhooks. Members can untick scopes on the consent
screen; Latido reads the granted scope on the callback.
Going to production
- A new app starts with a small athlete capacity: Standard tier up to 10 connected athletes [OW docs]; Strava's own page may show 1 at first (UNVERIFIED). More requires the Extended Access review.
- Rate limits: Standard 200 req/15 min and 2,000/day; Extended 400 and 4,000 [OW docs].
Gotchas
- Refreshing may return a new refresh token and invalidate the old one at once [OFF].
- Webhooks carry ids only; Latido refetches. A member deauthorizing arrives as
object_type=athletewithupdates.authorized="false"[OFF]. - Strava documents no webhook signature [OFF], so the only checks available
are the unguessable URL and the event's
subscription_id. Whether theX-Strava-Signatureheader OW reads really exists is UNVERIFIED. - Use
/oauth/revoke(new from 1 Jun 2026);/oauth/deauthorizeis removed 1 Jun 2027 [OFF]. - No original FIT download: streams only [OFF].