---
title: "Strava API v3 Reference | Apps for Strava"
canonical: https://appsforstrava.com/developers/api-reference
source: Markdown mirror of https://appsforstrava.com/developers/api-reference — the HTML page is canonical.
---

# API Reference

Complete reference for all Strava API v3 endpoints. All requests require authentication and are made to `https://www.strava.com/api/v3`.

## Heads up: API changes in 2026

Strava retired and restricted some endpoints in 2026. On September 1, 2026, the Club Activities, Club Members, and Club Admins endpoints were removed, and Explore Segments was restricted to developers with an approved Extended Access Tier. Strava has also added a deauthorization endpoint (`POST /oauth/revoke`) and surfaces your application's access tier in the API Settings Dashboard. Separately, a new base URL `https://api-v3.strava.com` becomes available starting January 4, 2027. Strava hasn't announced a shutdown date for the current URL. Always confirm against Strava's [official API changelog](https://developers.strava.com/docs/changelog/) and [reference docs](https://developers.strava.com/docs/reference/).

Base URL

`https://www.strava.com/api/v3`

New base URL https://api-v3.strava.com available from January 4, 2027.

## Activities

Activities are the core of Strava. These endpoints let you create, read, update, and analyze activities.

| Endpoint | Scope | Description |
| --- | --- | --- |
| **POST** `/activities` Create Activity  | `activity:write` | Creates a manual activity for an athlete |
| **GET** `/activities/{id}` Get Activity  | `activity:read` | Returns the given activity |
| **PUT** `/activities/{id}` Update Activity  | `activity:write` | Updates the given activity |
| **GET** `/athlete/activities` List Athlete Activities  | `activity:read` | Returns the activities of the authenticated athlete |
| **GET** `/activities/{id}/comments` List Activity Comments  | `activity:read` | Returns the comments on the given activity |
| **GET** `/activities/{id}/kudos` List Activity Kudoers  | `activity:read` | Returns the athletes who kudosed an activity |
| **GET** `/activities/{id}/laps` List Activity Laps  | `activity:read` | Returns the laps of an activity |
| **GET** `/activities/{id}/zones` Get Activity Zones  | `activity:read` | Returns heart rate and power zones (Summit) |
| **GET** `/activities/{id}/streams` Get Activity Streams  | `activity:read` | Returns the given activity's streams |

### Example: Get Athlete Activities

```
curl -X GET "https://www.strava.com/api/v3/athlete/activities?per_page=30" \
     -H "Authorization: Bearer ACCESS_TOKEN"
```

Use `before` and `after` params (epoch timestamps) to filter by date.

## Athletes

Access athlete profiles, statistics, and zones.

| Endpoint | Scope | Description |
| --- | --- | --- |
| **GET** `/athlete` Get Authenticated Athlete  | `read` | Returns the currently authenticated athlete (profile:read\_all for the detailed representation) |
| **PUT** `/athlete` Update Athlete  | `profile:write` | Update the currently authenticated athlete |
| **GET** `/athlete/zones` Get Athlete Zones  | `profile:read_all` | Returns the heart rate and power zones |
| **GET** `/athletes/{id}/stats` Get Athlete Stats  | `read` | Returns the activity stats of the authenticated athlete (Everyone-visibility activities only) |

### Example: Get Athlete Stats

```
// Response includes totals for rides, runs, and swims
{
  "all_ride_totals": {
    "count": 250,
    "distance": 15000000,  // meters
    "moving_time": 180000,  // seconds
    "elapsed_time": 200000,
    "elevation_gain": 150000  // meters
  },
  "all_run_totals": { ... },
  "all_swim_totals": { ... },
  "ytd_ride_totals": { ... },
  "recent_ride_totals": { ... }
}
```

## Clubs

Access club information. Strava removed the Club Members, Club Admins, and Club Activities endpoints on September 1, 2026, so only the two below remain.

| Endpoint | Scope | Description |
| --- | --- | --- |
| **GET** `/clubs/{id}` Get Club  | `read` | Returns a given club |
| **GET** `/athlete/clubs` List Athlete Clubs  | `read` | Returns a list of clubs the athlete is a member of |

## Gear

Retrieve information about bikes, shoes, and other equipment.

| Endpoint | Scope | Description |
| --- | --- | --- |
| **GET** `/gear/{id}` Get Equipment  | `read` | Returns an equipment (bike or shoe) |

## Routes

Access routes, including export to GPX/TCX formats for navigation devices. Private routes additionally require the `read_all` scope.

| Endpoint | Scope | Description |
| --- | --- | --- |
| **GET** `/routes/{id}` Get Route  | `read` | Returns a route |
| **GET** `/athletes/{id}/routes` List Athlete Routes  | `read` | Returns a list of routes created by the athlete |
| **GET** `/routes/{id}/export_gpx` Export Route GPX  | `read` | Returns a GPX file of the route |
| **GET** `/routes/{id}/export_tcx` Export Route TCX  | `read` | Returns a TCX file of the route |
| **GET** `/routes/{id}/streams` Get Route Streams  | `read` | Returns the given route's streams |

## Segments

Segments are specific sections of road or trail where athletes can compare times. Private segments and athlete-specific segment details additionally require the `read_all` scope; see the [permission scopes guide](https://appsforstrava.com/developers/authentication) for what each scope grants.

| Endpoint | Scope | Description |
| --- | --- | --- |
| **GET** `/segments/{id}` Get Segment  | `read` | Returns a segment |
| **GET** `/segments/starred` List Starred Segments  | `read` | Returns a list of starred segments |
| **PUT** `/segments/{id}/starred` Star Segment  | `profile:write` | Stars/unstars a segment |
| **GET** `/segments/explore` Explore Segments  | `read` | Returns the top 10 segments in a given region. Extended Access Tier only since September 1, 2026 |
| **GET** `/segments/{id}/streams` Get Segment Streams  | `read` | Returns the given segment's streams |

### Example: Explore Segments by Location (Extended Access Tier only)

```
// bounds format: sw_lat,sw_lng,ne_lat,ne_lng
curl -X GET "https://www.strava.com/api/v3/segments/explore?bounds=37.7,-122.5,37.8,-122.4&activity_type=riding" \
     -H "Authorization: Bearer ACCESS_TOKEN"
```

## Segment Efforts

Segment efforts represent an athlete's attempt on a segment during an activity.

| Endpoint | Scope | Description |
| --- | --- | --- |
| **GET** `/segment_efforts/{id}` Get Segment Effort  | `activity:read` | Returns a segment effort (requires Strava subscription) |
| **GET** `/segment_efforts` List Segment Efforts  | `activity:read` | Returns segment efforts for a given segment and athlete (requires Strava subscription) |
| **GET** `/segment_efforts/{id}/streams` Get Segment Effort Streams  | `read_all` | Returns streams for a segment effort completed by the authenticated athlete |

## Uploads

Upload activity files in FIT, TCX, or GPX format. The upload is processed asynchronously.

| Endpoint | Scope | Description |
| --- | --- | --- |
| **POST** `/uploads` Upload Activity  | `activity:write` | Uploads a new activity data file |
| **GET** `/uploads/{uploadId}` Get Upload  | `activity:write` | Returns the status of an upload |

### Example: Upload Activity File

```
curl -X POST "https://www.strava.com/api/v3/uploads" \
     -H "Authorization: Bearer ACCESS_TOKEN" \
     -F file=@activity.fit \
     -F data_type=fit \
     -F name="Morning Ride" \
     -F description="Great weather today!"
```

Check upload status with `GET /uploads/{uploadId}` until `activity_id` is returned.

## Activity Streams

Streams are detailed time-series data for activities, including GPS coordinates, elevation, heart rate, power, and more.

| Stream Type | Description |
| --- | --- |
| time | Time in seconds |
| distance | Distance in meters |
| latlng | GPS coordinates \[lat, lng\] |
| altitude | Elevation in meters |
| velocity\_smooth | Speed in meters/second |
| heartrate | Heart rate in BPM |
| cadence | Cadence in RPM |
| watts | Power in watts |
| temp | Temperature in Celsius |
| grade\_smooth | Grade/gradient percentage |

### Example: Get Activity Streams

```
curl -X GET "https://www.strava.com/api/v3/activities/12345/streams?keys=time,distance,latlng,altitude,heartrate,watts&key_by_type=true" \
     -H "Authorization: Bearer ACCESS_TOKEN"
```

## Next Steps

- [Authentication & Scopes](https://appsforstrava.com/developers/authentication): OAuth 2.0 flow and what each permission scope grants
- [Code Examples](https://appsforstrava.com/developers/examples): Working snippets for activities, streams, uploads, and webhooks
- [Webhooks](https://appsforstrava.com/developers/webhooks): Real-time events instead of polling these endpoints
- [Best Practices](https://appsforstrava.com/developers/best-practices): Rate limits, error handling, and compliance

### Official API Playground

Test API endpoints interactively with the [Strava API Playground](https://developers.strava.com/playground/).
