mirror of
https://github.com/hanzoskill/strava-cycling-coach.git
synced 2026-10-30 21:01:16 +00:00
2.8 KiB
2.8 KiB
Strava API Reference
Authentication
Strava uses OAuth 2.0 for authentication.
OAuth Flow
- Authorize: Direct user to authorization URL
- Exchange code: Trade authorization code for access/refresh tokens
- Refresh: Use refresh token to get new access token when expired
Tokens
- Access Token: Valid for 6 hours
- Refresh Token: Long-lived, use to get new access tokens
- Expires At: Unix timestamp when access token expires
Base URL
https://www.strava.com/api/v3
Key Endpoints
Get Athlete
GET /athlete
Returns the currently authenticated athlete.
List Activities
GET /athlete/activities
Parameters:
before- Seconds since epoch (filter activities before this date)after- Seconds since epoch (filter activities after this date)page- Page number (default 1)per_page- Number per page (default 30, max 200)
Get Activity
GET /activities/{id}
Returns detailed information about an activity.
Optional parameters:
include_all_efforts- Include segment efforts (boolean)
Activity Streams
GET /activities/{id}/streams
Get detailed time-series data for an activity.
Parameters:
keys- Comma-separated list: time, latlng, distance, altitude, velocity_smooth, heartrate, cadence, watts, temp, moving, grade_smoothkey_by_type- Boolean (default true)
Activity Object
Key fields:
id- Activity IDname- Activity nametype- Activity type (Ride, VirtualRide, Run, etc.)start_date- ISO 8601 timestampstart_date_local- Local timedistance- Metersmoving_time- Secondselapsed_time- Secondstotal_elevation_gain- Metersaverage_speed- m/smax_speed- m/saverage_watts- Watts (requires power meter)weighted_average_watts- Normalized Powermax_watts- Peak poweraverage_heartrate- BPMmax_heartrate- BPMaverage_cadence- RPMsuffer_score- Relative effort (proprietary)calories- Estimated caloriesdevice_watts- True if power from device (vs estimated)has_heartrate- Boolean
Segment Efforts
Included in activity detail:
segment_efforts- Array of segment effortsname- Segment nameelapsed_time- Time for segmentpr_rank- Personal record rank (1, 2, 3, null)kom_rank- KOM/QOM rank if applicable
Rate Limits
- Short-term: 100 requests per 15 minutes
- Daily: 1,000 requests per day
Monitor headers:
X-RateLimit-LimitX-RateLimit-Usage
Best Practices
- Cache data - Don't re-fetch unchanged activities
- Use webhooks - For real-time activity updates
- Respect limits - Handle 429 responses gracefully
- Refresh tokens - Check expiry before each request
Documentation
Full API docs: https://developers.strava.com/docs/reference/