Workouts data from every wearable, in one schema

614 provider sport names collapsed into 90 unified workout types, with per-workout metrics and streams.

7 / 10

Providers connectable today

12

Webhook events in this family

SI — metres, seconds, watts, metres per second

Canonical units

What workouts looks like through one API

Workout data is where the cost of building your own integration layer shows up most concretely. Every provider has its own sport taxonomy, and they do not overlap cleanly: Strava uses PascalCase sport-type strings, Fitbit uses numeric activity IDs, WHOOP uses lowercase sport names, Garmin uses its own constants. There is no shared vocabulary and no published crosswalk.

WearLink maintains that crosswalk. 614 provider-specific sport identifiers are mapped into 90 unified workout types, per-provider, in code — so a "TrailRun" from Strava, activity ID 90009 from Fitbit and "running" from WHOOP all arrive as the same normalised type with the same field names. When a provider adds a sport, the mapping is updated once rather than in every downstream product.

Beyond the type, workouts carry duration, distance, energy, heart-rate summary and, where the device produces them, the running- and cycling-dynamics series: power, cadence, ground contact time, vertical oscillation, stroke count.

Where providers disagree

The part that costs you weeks if you build this yourself. None of the following is a WearLink limitation — it is how the underlying providers actually behave.

Sport taxonomies have no shared vocabulary

Providers disagree not just on naming but on granularity. One vendor has a single "Cycling" type; another distinguishes road, gravel, mountain, virtual and commute. Collapsing upward loses information; mapping downward invents it. WearLink maps to the unified type and preserves the original provider string so you can always recover the source label.

Distance and energy are computed differently

GPS-derived distance, accelerometer-derived distance and treadmill-reported distance are all reported in the same field by different providers, with materially different error characteristics. Calorie figures are estimates from proprietary models and are not comparable across vendors at all — treat them as within-device trends.

The same workout can arrive twice

A user with a Garmin watch connected to both Garmin and Strava will produce two records for one ride. Deduplication has to happen on time-overlap plus user, not on ID. WearLink flags likely duplicates across connected sources so you can decide the policy rather than discovering the double-count in a leaderboard.

Adapter depth varies

Not every provider adapter carries a full sport crosswalk today — the Polar and Suunto mappings are thin relative to Garmin, WHOOP and Apple. Unmapped sports fall through to a generic type with the original string preserved rather than being dropped.

Providers that supply workouts

Status is read from the same provider table the rest of the site uses, so nothing here can claim a provider is connectable when it is not. Coverage also varies by hardware generation within a brand.

ProviderCategoryStatus
StravaCloud OAuthLive
WHOOPCloud OAuthLive
FitbitCloud OAuthLive
GarminCloud OAuthOnboarding
PolarCloud OAuthOnboarding
SuuntoCloud OAuthOnboarding
OuraCloud OAuthLive
Apple HealthMobile SDKMobile SDK
Google Health ConnectMobile SDKMobile SDK
Samsung HealthMobile SDKMobile SDK

Webhook events for workouts

Subscribe to the summary event for settled records, and to the series streams when you need the underlying samples. Event names below are generated from the backend enum, so they cannot drift out of date relative to the API.

Summary object

workout.created

Series streams

series.power.createdseries.speed.createdseries.cadence.createdseries.distance_walking_running.createdseries.distance_cycling.createdseries.distance_swimming.createdseries.running_power.createdseries.running_ground_contact_time.createdseries.running_vertical_oscillation.createdseries.swimming_stroke_count.createdseries.workout_effort_score.created

Frequently asked questions

How many workout types does WearLink normalise to?
90 unified workout types, fed by 614 provider-specific sport identifiers across the Apple, Garmin, WHOOP, Oura, Strava, Fitbit and Suunto adapters.
What happens to a sport WearLink has not mapped?
It is delivered with a generic unified type and the original provider string intact. Nothing is silently dropped, and the unmapped value is visible so the crosswalk can be extended.
Do I get GPS routes?
Route and stream availability is provider-dependent and subject to each provider's terms — Strava in particular restricts what may be stored and displayed. Check the per-provider integration page for what that adapter exposes.
How do I avoid counting the same workout twice?
Deduplicate on user plus time overlap rather than provider ID. WearLink flags probable cross-source duplicates; the policy decision — prefer the richer source, prefer the first-seen, or surface both — stays yours.

Related data types

15 normalised data families in total — see them all or browse integrations by provider.