Loading...
Loading...
Universal Strava API integration for fitness data management. Use when working with Strava activities, athlete profiles, segments, routes, clubs, or any fitness tracking data. Triggers on requests to get/create/update activities, analyze training stats, export routes, explore segments, or interact with Strava data programmatically.
npx skill4agent add kdoronin/claude_code_skills strava-api~/.strava/metadata.jsonpython3 scripts/strava_api.py athletehttp://localhostlocalhostpython3 scripts/setup_oauth.py~/.strava/metadata.jsonpython3 scripts/strava_api.py athlete# Get athlete profile
python3 scripts/strava_api.py athlete
# Get athlete stats
python3 scripts/strava_api.py stats
# List recent activities
python3 scripts/strava_api.py activities --limit 20
# Get specific activity
python3 scripts/strava_api.py activity 12345678
# Explore segments in area
python3 scripts/strava_api.py segments "37.7,-122.5,37.8,-122.4" --type running
# Raw API request
python3 scripts/strava_api.py raw GET /athlete/zones
python3 scripts/strava_api.py raw POST /activities --data '{"name":"Test","sport_type":"Run","start_date_local":"2024-01-15T10:00:00Z","elapsed_time":1800}'from scripts.strava_api import StravaClient
client = StravaClient() # Auto-loads from keychain, refreshes token if needed
# Get athlete
athlete = client.get_athlete()
# List activities
activities = client.list_activities(per_page=50)
# Create activity
new_activity = client.create_activity(
name="Morning Run",
sport_type="Run",
start_date_local="2024-01-15T07:30:00Z",
elapsed_time=1800,
distance=5000
)# Check token status
python3 scripts/refresh_token.py --status
# Force refresh
python3 scripts/refresh_token.py --forceUser Request
├── First time / "setup strava" → Run setup_oauth.py
├── "Get my profile/stats" → strava_api.py athlete/stats
├── "List my activities" → strava_api.py activities
├── "Get activity details" → strava_api.py activity {id}
├── "Create/log activity" → client.create_activity()
├── "Update activity" → client.update_activity()
├── "Get training data/streams" → client.get_activity_streams()
├── "Find segments nearby" → strava_api.py segments {bounds}
├── "Export route" → raw GET /routes/{id}/export_gpx
└── "Token expired" → Auto-handled by client| Item | Value |
|---|---|
| Secrets storage | System Keychain (secure) |
| Metadata location | |
| Base URL | |
| Rate limits | 100 req/15min, 1000 req/day |
| Token lifetime | 6 hours (auto-refresh) |
RunTrailRunVirtualRunRideMountainBikeRideGravelRideEBikeRideSwimWalkHikeWorkoutWeightTrainingYoga| Status | Meaning | Action |
|---|---|---|
| 401 | Token expired | Auto-handled by client |
| 403 | Insufficient scope | Re-run setup_oauth.py |
| 404 | Resource not found | Check ID |
| 429 | Rate limit | Wait 15 min |