Skip to content


Repository files navigation

Build Status Minimum PHP Version Packagist Packagist Downloads


The class simply houses methods to help send data to and receive data from the API. Please read the API documentation to see what endpoints are available.

There is no file upload support at this time.


With Composer

composer require iamstuartwilson/strava

Or add it manually to your composer.json:

    "require" : {
        "iamstuartwilson/strava" : "^1.4"


Copy StravaApi.php to your project and require it in your application as described in the next section.

Getting Started

Instantiate the class with your client_id and client_secret from your registered app:

require_once 'StravaApi.php';

$api = new Iamstuartwilson\StravaApi(

If you're just testing endpoints/methods you can skip the authentication flow and just use the access token from your settings page.

You will then need to authenticate your strava account by requesting an access code. You can generate a URL for authentication using the following method:

$api->authenticationUrl($redirect, $approvalPrompt = 'auto', $scope = null, $state = null);

When a code is returned you must then exchange it for an access token and a refresh token for the authenticated user:

$result = $api->tokenExchange($code);

The token exchange result contains among other data the tokens. You can access them as attributes of the result object:

$accessToken = $result->access_token;
$refreshToken = $result->refresh_token;
$expiresAt = $result->expires_at;

Before making any requests you must set the access and refresh tokens as returned from your token exchange result or via your own private token from Strava:

$api->setAccessToken($accessToken, $refreshToken, $expiresAt);

Example oAuth2 Authentication Flow

examples/oauth-flow.php demonstrates how the oAuth2 authentication flow works.

  1. Choose how to load the StravaApi.php – either via Composer autoloader or by manually requiring it.
  2. Replace the three config values CALLBACK_URL, STRAVA_API_ID, and STRAVA_API_SECRET at the top of the file
  3. Place the file on your server so that it's accessible at CALLBACK_URL
  4. Point your browser to CALLBACK_URL and start the authentication flow.

The scripts prints a lot of verbose information so you get an idea on how the Strava oAuth flow works.

Example Requests

Once successfully authenticated you're able to communicate with Strava's API.

All actions that change Strava contents (post, put, delete) will need the scope set to write in the authentication flow.

Get Athlete Stats


List Athlete Activities

Some API endpoints support GET parameters:

        'page' => 2,
        'per_page' => 10,

Post a new activity

        'name' => 'API Test',
        'type' => 'Ride',
        'start_date_local' => date('Y-m-d\TH:i:s\Z'),
        'elapsed_time' => 3600,

Update a athlete's weight

$api->put('athlete', ['weight' => 70]);