StrideeStridee
50 founding slots

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.

Live today for connections and activities. Three days free, then $20 a month, flat — no per-athlete fee.

All integrations

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);

Deliveries

What you get when a Garmin workout finishes

An activity.created event carrying Garmin’s own summary, sealed to your public key. The FIT file isn’t in it — that is a pre-signed provider URL that expires, because re-hosting your athletes’ activity files is a retention decision rather than something to slip into a webhook payload.

  • 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

Garmin Connect Developer Program

The Garmin integration you’re not writing

Garmin gates its Activity and Health APIs behind an application, a review and a signed agreement — the part of a Garmin integration that costs weeks rather than days, and the part you skip entirely here.

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.

What replaces all of it

One POST /v1/connect naming garmin, and a webhook handler you write once for every provider. The registration is ours, the consent screen is ours, and the token refresh is ours.

Connecting 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);

Coverage

What Garmin does, and what it doesn’t yet

Nothing below is marked live unless an endpoint serves it today. Where Garmin doesn’t send something, the field is absent rather than estimated — a null you can branch on is worth more than a number nobody measured.

  • ConnectLive today
  • ActivitiesLive today
  • Daily summariesDesigned, not yet shipped
  • Workout pushDesigned, not yet shipped

Devices

Which Garmin devices are covered

The integration is with the athlete’s Garmin account rather than with a watch, so anything that syncs into it reaches you — including models released after you shipped, with no change on either side.

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

Flat, and not per athlete.

A unified wearable API normally costs hundreds of dollars a month and meters every connected user on top — so the moment your product works, your bill grows with it. This is $20 a month for the whole API, whatever you connect.

$20

per month, flat

Every provider and every endpoint. Three days free first, and cancelling is a button in the Stripe billing portal.

No per-athlete fee

connect as many as you like

The bill is the same at ten connected athletes and at ten thousand. There is no credit balance to watch and no overage to model.

No approval queue

checkout is the signup

You are not applying to Garmin Connect Developer Program. Paying creates the account and opens the console, automatically, in the seconds it takes Stripe to tell us.

Founding 50

Three days free. Then $20 a month.

The private beta is open, and checkout is the whole signup — pay and your account exists, with the console switched on, before you have finished reading the receipt. No waitlist, no sales call, and nobody approving you.

  • Keys the moment checkout finishes — no waitlist, no approval
  • Garmin, COROS, Polar and Wahoo behind one connect call
  • $20/month for the whole API — every provider, every endpoint
  • One of only 50 founding slots, and the price they keep
  • A private Discord channel with the engineers who wrote the integrations
  • A vote on what we build next — the founding 50 order the roadmap

Cancel in one click from the billing portal, at any point in the three days or any month after. If something goes wrong on our side, email hi@stridee.fit and we refund you. No forms, no conditions.

Founding slots

50

Only 50 founding slots exist. When they are gone, they are gone.

$20/month — after 3 free days

Card required, nothing charged for three days. Flat rate for the whole API, not per connected athlete.

Start building — free for 3 days

Stripe checkout · cancel any time · keys the moment it clears

What happens next

01

You pay

Stripe collects the card. Three days free first, then $20/month, and cancelling is a button in the same billing portal.

02

We create your account

Against the email you paid with, automatically, the moment Stripe confirms. Nobody reviews it.

03

You log in

platform.stridee.fit/login, same email, code in your inbox. Mint a signing key and your first call works.

Already bought and want the console? platform.stridee.fit/login

Not ready to claim?

Come talk to us in Discord first. We answer questions there before anywhere else.

Join the Discord

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.

Three days free, then $20 a month, flat — for the whole API, every provider and every endpoint, with no per-athlete metering. 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. Cancel from the Stripe billing portal whenever; 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. Daily summaries and structured workout push are designed and documented but not emitted yet — there is no endpoint serving them today, and nothing on this page counts them as live.

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

Other integrations

One integration, not six

Every provider below is the same connect call, the same event shape and the same $20 a month. Adding your second one is a string change.

Live today

COROSPolarWahoo
Garmin API integration — connect Garmin Connect data | Stridee