All integrations

Garmin API integration

Your users connect the Forerunner or Fenix they already own, and every finished activity lands on your server. You never register with Garmin, never hold their client secret, and never write the callback.

From 32.50 € a month billed annually, no per-athlete fee, 30 days to change your mind.

link a garmin athlete — no garmin credential involved

// Your own id for your own user. You hold no garmin client secret.
const link = await stridee.post('/v1/connect', {
  provider: 'garmin',
  external_user_id: 'user_4821',
  return_uri: 'https://app.yourapp.com/settings/devices',
});

// Redirect their browser. Good for 30 minutes.
res.redirect(link.connect_url);

A Garmin workout finishes. An activity.created event carrying Garmin’s own summary, sealed to your public key.

  • Sport and sub-sport, as Garmin classified it
  • Start time, duration and the provider’s own activity id
  • The device the activity came off — “Forerunner 970”, not a model code
  • A pre-signed URL to Garmin’s own FIT file, which expires

The Garmin integration you’re not writing. The registration, the consent screen and the token refresh are ours.

01

Apply, wait, sign

A Garmin integration starts with the Connect Developer Program: an application describing your product, a review with no committed turnaround, and an agreement to sign before you get production keys. It is the longest lead time of any provider on this list, and it lands before you have written a line of code. Ours is already signed.

02

Then run the ping/push plumbing

Garmin notifies you by POSTing to an endpoint you host, and the notification is a pointer rather than the data — you go back and fetch. That means a public endpoint, a queue, a retry policy and a backfill path for the windows you were down, per environment, before a single activity reaches your database.

03

And keep the tokens alive

User-level OAuth tokens to refresh, revocations to notice, deregistrations to handle, and a summary format to map onto whatever your app actually stores. None of that is your product, and all of it is yours to operate forever once you have written it.

All of it is one POST /v1/connect naming garmin, and a webhook handler you write once for every provider.

Connect a device

link a garmin athlete — no garmin credential involved

// Your own id for your own user. You hold no garmin client secret.
const link = await stridee.post('/v1/connect', {
  provider: 'garmin',
  external_user_id: 'user_4821',
  return_uri: 'https://app.yourapp.com/settings/devices',
});

// Redirect their browser. Good for 30 minutes.
res.redirect(link.connect_url);

What Garmin covers. Nothing is marked live unless an endpoint serves it today.

  • ConnectLive today
  • ActivitiesLive today
  • WellnessLive today
  • Workout pushLive today

Every Garmin device. The link is with the athlete’s account, not a watch, so models released after you ship reach you unchanged.

Running & triathlon

  • Forerunner 165
  • Forerunner 265
  • Forerunner 570
  • Forerunner 970

Outdoor & multisport

  • fēnix 8
  • fēnix 7
  • epix
  • Enduro
  • Instinct

Cycling

  • Edge 540
  • Edge 840
  • Edge 1050

Everyday

  • Venu
  • vívoactive
  • Forerunner 55
Pricing

Two weeks free. Then from 32.50 € a month.

Checkout is the signup. No waitlist, no sales call.

  • Garmin, COROS, Polar, Wahoo, Zepp, Hammerhead and Fitbit behind one connect call
  • Every endpoint on every plan — never priced per athlete
  • 14 days free, and no card charged until they are up
  • 30-day money-back guarantee

Cancel any time from the Stripe billing portal, or email [email protected] within 30 days and we refund you.

Plans start at

32.50 €/month, billed annually

Or 39 €/month, month to month. Paying annually gets you two months free.

Hacker, Startup, Scale and Enterprise differ on one thing: how many of your users may connect a watch. Everything else is on every plan.

See the plans

14-day free trial · cancel any time

We create the account on the email you pay with, automatically. Sign in at platform.stridee.com/login. Nothing to wait for.

Garmin API questions

No. That is the point of the integration. We hold the Garmin Connect Developer Program registration, the client credentials and the redirect URI; you call POST /v1/connect with your own id for your own user and redirect their browser to the URL that comes back. There is no Garmin secret in your environment, no callback route in your router, and no approval queue between you and your first connected athlete.

Two weeks free, then from 32.50 € a month billed annually — or 39 € a month with no year to commit to — for the whole API, every provider and every endpoint, with no per-athlete metering. Plans differ on one thing: how many of your users may connect a watch. Hacker is 250, for a project and its first users; Startup covers up to 5,000 of them; Scale up to 250,000; Enterprise removes the ceiling; and none of them meters calls, activities or endpoints. The usual price for a unified wearable API starts in the hundreds of dollars a month and charges again for each connected user, which is a pricing model that punishes exactly the thing you are trying to do. There is a 30-day money-back guarantee on any charge, and cancelling is a button in the Stripe billing portal; access ends when the period does.

You get push, not polling. When an athlete finishes a workout, Garmin notifies us and we send you an activity.created delivery — sealed to your public key as a JWE and signed with a detached JWS you verify against our published JWKS. Latency is whatever Garmin takes to process the upload from the watch, which is theirs to own and typically a matter of minutes. You never write a polling loop and never hold a rate-limit budget.

There is no API key anywhere in this, in either direction. You authenticate to us with an Ed25519 signature over the request itself — RFC 9421 HTTP Message Signatures — using a private key that never leaves your machine, so there is no bearer token sitting in a log line, a CI variable or a backup. And we never hand you the provider's own credentials either.

No, and that is usually the reason people find this page. The programme application, the review and the signed agreement are ours and already done. You are calling our API, not Garmin’s, so there is nothing to apply for and nothing to wait on — checkout creates your account and the console opens in the seconds it takes Stripe to tell us.

Finished activities, pushed to you as they happen: sport, start time, duration, the device name and Garmin’s own activity id, plus a pre-signed link to Garmin’s FIT file. Structured workout push is live too — POST a session and it lands on the athlete’s watch. Wellness is live as well: sleep, daily activity, HRV, stress and VO₂max arrive as their own events, with the minute-by-minute series one call further in. What is still not live anywhere is laps, per-second streams and a canonical re-encoded FIT.

The full documentation is public and needs no account. Still have questions? Ask us in Discord

One integration, not seven. Same connect call, same event shape, same plan. Your second provider is a string change.

COROSPolarWahooZeppHammerheadFitbit