Strava API integration

Live

Your end users can connect this provider today.

Strava is the best-instrumented activity API in the consumer space and the only provider in the WearLink catalogue with a true push model — an activity upload triggers a webhook within seconds, not on a poll cycle. If your product cares about workouts rather than sleep or recovery, Strava is usually the fastest path to a working demo.

It is also the provider with the strictest rules about what you may do with the data. Strava's API agreement restricts displaying another athlete's data, prohibits certain kinds of aggregation and analysis, and requires attribution. Read the agreement before you design the feature, not after.

WearLink runs one webhook subscription per application and fans events out to your endpoint, so you get activity-level push delivery without operating the callback verification handshake yourself.

How the Strava integration works

Authentication
OAuth 2.0 authorisation code, short-lived access tokens
Sync model
Push. WearLink maintains an active Strava webhook subscription and reacts to activity events as they land.
API base
https://www.strava.com/api/v3
Integration type
Cloud OAuth

Strava data available through WearLink

Everything below arrives in the shared normalised schema. The same field names and units apply whether the record came from Strava or from any other provider, so your scoring, charting and storage code is written once.

  • Activities & workouts
  • GPS routes
  • Heart rate streams
  • Power & cadence
  • Elevation
  • Calories

Webhook events you can subscribe to

workout.createdworkout_metrics.createdactivity_timeseries.created

Connect a Strava user

Two calls: create a connect session for your end user, then read their normalised data. You never handle Strava OAuth credentials, token refresh or webhook registration.

# 1. Create a connect session for your end-user
curl -X POST https://wearlink.io/api/v1/connections/session \
  -H "Authorization: Bearer $WEARLINK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"user_id": "'"$USER_ID"'", "provider": "strava"}'

# → { "connect_url": "https://wearlink.io/widget/connect?token=..." }
# Redirect the user there; they authorise strava and land back on your redirect_uri.

# 2. Pull normalised data whenever you want
curl -H "Authorization: Bearer $WEARLINK_API_KEY" \
  "https://wearlink.io/api/v1/users/$USER_ID/summaries?provider=strava&days=7"

What makes the Strava API hard to integrate directly

These are the things that turn an estimated one-week integration into a one-month one. They are worth knowing whether you use WearLink or build it yourself.

The API agreement is unusually restrictive

Strava limits aggregate analysis, cross-athlete display, and use of the data to train models. Several products have been cut off retroactively. Confirm your use case is permitted before building on it.

Rate limits are low and shared

Limits apply per application, not per user, so a large user base hits them together. Streams are especially expensive — fetch them only when you actually need the trace.

Activities are editable and deletable

A user can change an activity's type, privacy or title after upload, or delete it entirely. If you never process update and delete events your copy drifts out of sync with what the athlete sees.

Strava API — frequently asked questions

Does Strava provide sleep or recovery data?
No. Strava is activity-only. If you need sleep or recovery alongside workouts, pair it with Oura, WHOOP, Garmin or Fitbit — WearLink merges them into one timeline per user.
How fast are Strava webhooks?
Typically within seconds of the activity being uploaded to Strava. This is the lowest-latency provider in the catalogue.
Can I use Strava data commercially?
Only within the terms of Strava's API agreement, which restricts several commercial and analytical uses. This is a legal question about your specific product, not a technical limit of the API.

Other integrations

Start with Strava — free for up to 3 users

No credit card. Create an account, add your provider credentials once, and your users connect through a hosted widget or our mobile SDK.