Route and terrain research
Use Strava endpoints to turn route and terrain research into repeatable API requests with documented inputs and JSON responses.
Turn public Strava pages into structured fitness-activity data — a route index by sport, country, and region, one route's full detail (distance, elevation, map), a club's public profile, and the current public challenge gallery, all as normalized JSON. Credential-free.
Get Strava's public route index and route detail, club profiles, and the public challenge gallery as structured JSON.
Endpoint families
3
Documented params
10
Examples
4
Live catalog snapshot
Active endpoints
4
Methods
GET
Required params
9
Schema refs
4
{
"platform": "Strava",
"endpoint": "strava-routes",
"method": "GET",
"path": "/strava/routes",
"auth": "apiKey"
}Use cases
Get Strava's public route index and route detail, club profiles, and the public challenge gallery as structured JSON.
Use Strava endpoints to turn route and terrain research into repeatable API requests with documented inputs and JSON responses.
Use Strava endpoints to turn club and community tracking into repeatable API requests with documented inputs and JSON responses.
Use Strava endpoints to turn fitness-challenge and campaign monitoring into repeatable API requests with documented inputs and JSON responses.
Managed execution
Every figure below is read from the live Strava endpoint catalog — 4 endpoints, 10 documented request parameters, and 4 published response schemas — the same catalog Docs and Playground run against.
4 documented Strava endpoints, grouped into 3 request families — Routes, Challenges and Clubs.
10 request parameters are documented across those Strava endpoints, 9 of them required — the full input contract is public before you write any integration code.
4 of the 4 Strava endpoints ship a recorded example response, and 4 carry a documented response schema — you can code against the real JSON before the first request.
Strava endpoints document their error responses (400, 404, 429, 500 and 503) alongside the success schema, so a block, a rate limit, or a missing record comes back as a typed error rather than silently empty data.
4 hosted MCP tools back the Strava endpoints, so an agent can call the same routes with the same parameters and the same JSON contract, with no custom glue.
Coverage map
These cards are generated from the active endpoint catalog, so the landing page reflects the same API surface used by Docs and Playground.
/strava/routes
/strava/challenges
/strava/clubs/{id}
Endpoint catalog
/strava/routesReturns a page of Strava's public route recommendations for a sport, country, and region (state, or state/city). `sport` values: `hiking`, `road-biking`, `mountain-biking`, `trail-running`, `gravel-biking`. Public data, sourced from Strava's own server-rendered route pages.
Response notes
- Each result's `path` is usable directly as the `path` query parameter to [`/strava/routes/detail`](strava-route-detail.md). - An unsupported `sport` returns `400` before any upstream request is made. - A page number past the last valid page, or an unlisted region, returns `404` rather than an empty `200` list. Example response: ```json { "code": 200, "msg": "OK", "data": { "sport": "hiking", "country": "usa", "region": "colorado", "title": "Top 318 hiking trails in Colorado", "page": 1, "total_pages": 16, "total_results": 318, "source_url": "https://www.strava.com/routes/hiking/usa/colorado", "routes": [ { "rank": 1, "name": "Mallory Cave via N.C.A.R. Trail", "path": "hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", "url": "https://www.strava.com/routes/hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", "difficulty": "Easy", "distance_raw": "1.46 mi", "elevation_gain_raw": "345 ft", "description": "The Mallory Cave hike takes you to the mouth of a beautiful cave...", "image_url": "https://dgtzuqphqg23d.cloudfront.net/8UruePMrrrQMdHGsELroGsOsTMWqh030g7159PMSue4-768x576.jpg" } ] } } ```
MCP tool strava_routes
/strava/routes/detailReturns a single Strava route's detail: type, difficulty, distance, elevation gain, estimated time, and summary. `path` is the relative route path returned by `/strava/routes` results (e.g. `hiking/usa/colorado/boulder/mallory-cave_5171952737974445730`). Public data, sourced from Strava's own server-rendered route pages.
Response notes
- `path` must start with a supported sport segment (`hiking`, `road-biking`, `mountain-biking`, `trail-running`, `gravel-biking`) and contain no path-traversal segments; otherwise `400` is returned before any upstream request is made. - A route that no longer exists returns `404`. Example response: ```json { "code": 200, "msg": "OK", "data": { "name": "Mallory Cave via N.C.A.R. Trail", "route_type": "Hiking Trail", "difficulty": "Easy", "distance_raw": "1.46 mi", "elevation_gain_raw": "345 ft", "estimated_time_raw": "33:48", "summary": "The Mallory Cave hike takes you to the mouth of a beautiful cave...", "path": "hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", "url": "https://www.strava.com/routes/hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", "source_url": "https://www.strava.com/routes/hiking/usa/colorado/boulder/mallory-cave_5171952737974445730" } } ```
MCP tool strava_route_detail
/strava/clubs/{id}Returns a Strava club's public profile: name, verified/private flags, location, description, member count, and cover/avatar images. Only the base public profile is returned -- discussion, leaderboard, member list, and recent-activity data require a logged-in Strava session and are not available. Public data, sourced from Strava's own server-rendered club page.
Response notes
- A club that doesn't exist, or `id` that isn't purely numeric, returns `400`/`404` respectively before or after the upstream request. - `private` reflects whether the club requires a join request to see full content; this endpoint still returns the public profile fields for private clubs. Example response: ```json { "code": 200, "msg": "OK", "data": { "id": "521703", "name": "Women of OZ NWA", "verified": false, "private": true, "location": "Bentonville, Arkansas", "country_code": "us", "description": "Founded in 2019 Women of OZ NWA is an inclusive, non-profit organization...", "member_count": 937, "cover_image_url": "https://dgalywyr863hv.cloudfront.net/pictures/clubs/521703/11986498/3/large.jpg", "avatar_image_url": "https://dgalywyr863hv.cloudfront.net/pictures/clubs/521703/11986503/2/large.jpg", "url": "https://www.strava.com/clubs/521703", "source_url": "https://www.strava.com/clubs/521703" } } ```
MCP tool strava_club
/strava/challengesReturns Strava's public challenge gallery: the currently promoted challenge plus every gallery section (partner challenges, and one section per sport such as run/ride), each with its challenges' goal, duration, and cover art. Public data, sourced from Strava's own challenge gallery.
Response notes
- `sections` is ordered with `partner` first, then the remaining sport categories alphabetically. - A challenge's `goal` is `null` for challenges measured by elapsed time rather than a fixed distance/duration target (e.g. "fastest mile ever"). Example response: ```json { "code": 200, "msg": "OK", "data": { "promoted_challenge": { "id": 6158, "name": "August Flexibility Challenge", "url": "https://www.strava.com/challenges/August-Flexibility-Challenge", "sponsored": false, "goal": 36000, "dimension": "moving_time", "icon": "yoga", "duration": "Aug 1, 2026 to Aug 31, 2026", "goal_description": "Complete 10 hours of yoga or workout activity this month." }, "sections": [ { "category": "partner", "title": "Partner Challenges", "challenges": [ { "id": 6156, "name": "Runna August Ten Days Active Challenge", "url": "https://www.strava.com/challenges/Runna-August-Ten-Days-Active-2026", "sponsored": true, "goal": 10, "dimension": "moving_time", "duration": "Aug 1, 2026 to Aug 31, 2026" } ] }, { "category": "run", "title": "Run Challenges", "challenges": [ { "id": 6162, "name": "August 10K Challenge", "url": "https://www.strava.com/challenges/August-10K-challenge-2026", "sponsored": false, "goal": 10000, "dimension": "avg_pace_min_distance", "duration": "Aug 1, 2026 to Aug 31, 2026", "goal_description": "Complete a 10 km (6.2 mi) run." } ] } ], "source_url": "https://www.strava.com/challenges" } } ```
MCP tool strava_challenges
Related APIs
Social & Creator Platforms
Build creator intelligence, video research, transcript, and audience-comment workflows without maintaining YouTube scrapers.
Social & Creator Platforms
Turn Twitch's public channel, stream, clip, and team data into structured JSON — live status and viewer counts, top games, clips, VODs, and team rosters — as normalized JSON. Credential-free.
Social & Creator Platforms
Track creator, content, hashtag, music, trend, and public ad creative signals from TikTok with production-ready API routes.
How to scrape Strava
Crawlora's Strava endpoints return route indexes, route detail, club profiles, and the challenge gallery as normalized JSON with one API key — no Strava account or auth token required.
/strava/routes requires sport, country and region, all three. sport must be one of hiking, road-biking, mountain-biking, trail-running or gravel-biking — note that plain "running" and "cycling" are not values, and an unsupported one returns a 400 naming the accepted list.
country and region are the slugs from Strava's own route-index URL path, and not every plausible pair exists — verified live, hiking in switzerland/bern returns a populated index while united-states/california returns a 404. Treat a 404 here as "Strava publishes no index for this combination" rather than an error in your call, and page through results with the page parameter.
Pass a route's path — the identifier from the index, not a bare numeric id — to /strava/routes/detail for distance, elevation and map data.
Pass a club id to /strava/clubs/{id} for that club's public profile.
/strava/challenges takes no parameters and returns Strava's current public challenge gallery, including the promoted challenge it is featuring.
FAQ
Call /strava/routes with all three of sport, country and region. sport must be one of hiking, road-biking, mountain-biking, trail-running or gravel-biking, and country and region are the slugs from Strava's own route-index URLs. You get a normalized route index back as structured JSON with no Strava account required.
Because Strava does not publish a route index for that country and region pair. The slugs must match pages Strava actually serves — verified live, hiking in switzerland/bern works while united-states/california 404s despite looking equally reasonable. A 404 is the honest signal that the combination does not exist upstream, not a fault in the request.
No Strava login or auth token is required from the caller — only your Crawlora API key.
Yes — /strava/clubs/{id} returns a club's public profile as structured JSON.