Health & FitnessDocumentedScanned

strava

Load and analyze Strava activities, stats, and workouts using the Strava API.

Share:

Installation

npx clawhub@latest install strava

View the full skill documentation and source below.

Documentation

Strava Skill

Interact with Strava to load activities, analyze workouts, and track fitness data.

Setup

1. Create a Strava API Application

  • Go to

  • Create an app (use as callback for testing) 3. Note your **Client ID** and **Client Secret** ### 2. Get Initial OAuth Tokens Visit this URL in your browser (replace CLIENT_ID): __CODE_BLOCK_0__ After authorizing, you'll be redirected to
  • Exchange the code for tokens:

    curl -X POST  \
      -d client_id=YOUR_CLIENT_ID \
      -d client_secret=YOUR_CLIENT_SECRET \
      -d code=AUTHORIZATION_CODE \
      -d grant_type=authorization_code

    This returns access_token and refresh_token.

    3. Configure Credentials

    Add to ~/.clawdbot/clawdbot.json:

    {
      "skills": {
        "entries": {
          "strava": {
            "enabled": true,
            "env": {
              "STRAVA_ACCESS_TOKEN": "your-access-token",
              "STRAVA_REFRESH_TOKEN": "your-refresh-token",
              "STRAVA_CLIENT_ID": "your-client-id",
              "STRAVA_CLIENT_SECRET": "your-client-secret"
            }
          }
        }
      }
    }

    Or use environment variables:

    export STRAVA_ACCESS_TOKEN="your-access-token"
    export STRAVA_REFRESH_TOKEN="your-refresh-token"
    export STRAVA_CLIENT_ID="your-client-id"
    export STRAVA_CLIENT_SECRET="your-client-secret"

    Usage

    List Recent Activities

    Get the last 30 activities:

    curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
      ""

    Get the last 10 activities:

    curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
      ""

    Filter Activities by Date

    Get activities after a specific date (Unix timestamp):

    # Activities after Jan 1, 2024
    curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
      ""

    Get activities in a date range:

    # Activities between Jan 1 - Jan 31, 2024
    curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
      ""

    Get Activity Details

    Get full details for a specific activity (replace ACTIVITY_ID):

    curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
      ""

    Get Athlete Profile

    Get the authenticated athlete's profile:

    curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
      ""

    Get Athlete Stats

    Get athlete statistics (replace ATHLETE_ID):

    curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
      ""

    Pagination

    Navigate through pages:

    # Page 1 (default)
    curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
      ""
    
    # Page 2
    curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
      ""

    Token Refresh

    Access tokens expire every 6 hours. Refresh using the helper script:

    bash {baseDir}/scripts/refresh_token.sh

    Or manually:

    curl -s -X POST  \
      -d client_id="${STRAVA_CLIENT_ID}" \
      -d client_secret="${STRAVA_CLIENT_SECRET}" \
      -d grant_type=refresh_token \
      -d refresh_token="${STRAVA_REFRESH_TOKEN}"

    The response includes a new access_token and refresh_token. Update your configuration with both tokens.

    Common Data Fields

    Activity objects include:

    • name — Activity title

    • distance — Distance in meters

    • moving_time — Moving time in seconds

    • elapsed_time — Total time in seconds

    • total_elevation_gain — Elevation gain in meters

    • type — Activity type (Run, Ride, Swim, etc.)

    • sport_type — Specific sport type

    • start_date — Start time (ISO 8601)

    • average_speed — Average speed in m/s

    • max_speed — Max speed in m/s

    • average_heartrate — Average heart rate (if available)

    • max_heartrate — Max heart rate (if available)

    • kudos_count — Number of kudos received


    Rate Limits

    • 200 requests per 15 minutes
    • 2,000 requests per day
    If you hit rate limits, responses will include X-RateLimit-* headers.

    Tips

    • Convert Unix timestamps: date -d @TIMESTAMP (Linux) or date -r TIMESTAMP (macOS)
    • Convert meters to km: divide by 1000
    • Convert meters to miles: divide by 1609.34
    • Convert m/s to km/h: multiply by 3.6
    • Convert m/s to mph: multiply by 2.237
    • Convert seconds to hours: divide by 3600
    • Parse JSON with jq if available, or use grep/sed for basic extraction

    Examples

    Get running activities from last week with distances:

    LAST_WEEK=$(date -d '7 days ago' +%s 2>/dev/null || date -v-7d +%s)
    curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
      "" \
      | grep -E '"name"|"distance"|"type"'

    Get total distance from recent activities:

    curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
      "" \
      | grep -o '"distance":[0-9.]*' | cut -d: -f2 | awk '{sum+=$1} END {print sum/1000 " km"}'

    Error Handling

    If you get a 401 Unauthorized error, your access token has expired. Run the token refresh command.

    If you get rate limit errors, wait until the limit window resets (check X-RateLimit-Usage header).