Stridee Developer Platform — one wearable data API for Garmin, COROS, Polar & Wahoo
One API for every wearable.Read and write.
Garmin, COROS, Polar, Wahoo, Apple Watch and Strava, normalized into one FIT file. Then push structured workouts back to the watch.
Get startedLive demo
ConnectEventHandler<br>link one of your users — no provider credential involved<br>// Your own id for your own user. No Stridee account needed.<br>const link = await stridee.post('/v1/connect', {<br>provider: 'coros',<br>external_user_id: 'user_4821',<br>return_uri: 'https://app.yourapp.com/settings/devices',<br>});
// Redirect their browser. Good for 30 minutes.<br>res.redirect(link.connect_url);
Your users can connect these today
One integration instead of 20+. Your users consent on a screen we host, and finished activities arrive at your endpoint, sealed to your key.<br>View developer docsAPI reference
normalize · encryptone FIT fileYour backendPOST /webhooksYour appGET /v1/activities
Founding 50Three days free. Then $20 a month.<br>Checkout is the signup. No waitlist, no sales call.<br>Garmin, COROS, Polar and Wahoo behind one connect call<br>Every endpoint included, and never priced per athlete<br>50 slots, at the price they keep<br>Private Discord, and a vote on what ships next<br>Cancel any time, or email hi@stridee.fit and we refund you.
Founding slots<br>50
Only 50 founding slots exist. When they are gone, they are gone.
$20/month — after 3 free days<br>Start buildingStripe checkout · cancel any time
We create the account on the email you pay with, automatically. Sign in at platform.stridee.fit/login. Nothing to wait for.
Before you claim
How do I get access?<br>Checkout is the signup. Pay on Stripe with whatever email you want the account under, and the console opens on it within seconds. Then sign in at /login with that address and the code we email you. There is no application to review.
What does it cost?<br>Three days free, then $20 a month for the whole API — every provider, every endpoint, not priced per connected athlete. No contract: cancel from the Stripe billing portal any time.
What can I actually build today?<br>Your users connect Garmin, COROS, Polar and Wahoo through a consent flow you did not build, and finished activities arrive as encrypted webhook deliveries. The console gives you signing keys, webhook endpoints, an event stream, connected accounts, and a log of every signed request including the ones we refused. Anything not live yet is called out in the answers below.
Which providers can my users connect today?<br>Garmin, COROS, Polar and Wahoo. Anything else in a POST /v1/connect call comes back a 400. Apple Watch and Strava sync inside the Stridee apps but have no connect path behind the API yet; both are on the roadmap, and founding partners decide the order.
Is there an API key to store?<br>No. Requests are signed with an Ed25519 key that never leaves your machine (RFC 9421). Each one names your key id, covers the method, the URL and a digest of the body, and carries a nonce we remember for five minutes, so a captured request cannot be replayed. GET /v1/whoami proves your client signs correctly before you call anything real.
What do I actually get when a workout finishes?<br>An activity.created event carrying the provider’s summary — sport, start time, device, activity id — sealed to your key, plus a URL the recording is behind. Miss one and GET /v1/activities lists everything you have been granted, newest first. What that URL gives you is the file the device wrote: there is no canonical re-encoded FIT today, and no laps or per-second stream endpoint yet.
Can I write structured workouts back to the watch?<br>Not yet. workout.pushed and workout.completed are designed and documented, but nothing emits them and no workouts endpoint has shipped. It is the thing we most want to get right, and the founding 50 are who we are building it with.
What does my handler have to do?<br>Four things, in order. Verify the detached JWS against our published JWKS before you parse anything. Check you have not seen the webhook-id before, since retries reuse it. Decrypt the JWE and confirm the user_id inside is yours. Then return a 2xx carrying the nonce you decrypted. Decrypt before you ack — you cannot enqueue the raw bytes and return 200 blind.
What happens if my endpoint is down?<br>Any 2xx is an ack. Non-2xx responses and timeouts retry with exponential backoff, and sustained failures mark the endpoint degraded and then failing in the console. Deliveries queue while you fix it rather than dropping. Events are kept 30 days, and each delivery records the key it was sealed to, so a replay after a rotation still decrypts.
The full documentation is public and needs no account. Still have questions? Ask us in Discord