All integrations

Suunto API integration

Race, Run, Vertical and Ocean, behind the same connect call as every other provider. Your users authorise once on a screen we host, and their workouts, sleep and recovery start arriving.

From 32.50 € a month billed annually, 30 days to change your mind.

your suunto user finishes a session — this is all you write

// decrypt() and stridee() are in /docs
export async function onStrideeEvent(rawBody, res) {
  const event = await decrypt(rawBody);

  if (event.type === 'activity.created' && event.data.file) {
    // event.data.device → "Suunto Race"

    // The original FIT file, from the device.
    const file = await stridee('GET', event.data.file.url);
    await saveActivity(event.user_id, file);
  }

  res.json({ nonce: event.nonce });
}

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

  • Sport as the Suunto app classified it, mapped onto one vocabulary
  • Start time, the workout’s name and the Suunto workout key
  • The device name — “Suunto Vertical”, straight from the notification
  • The Suunto FIT file, which we fetch and store, behind a URL that expires

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

01

Apply, sign and wait

The Suunto Cloud API sits behind the Suunto Partner Program: an application, an API agreement to sign, and up to two weeks before developer accounts are issued. One account holds exactly one app, so a staging environment is a second application under a second email. Through us it is a string in a connect call.

02

Carry two credentials on every call

Suunto’s API is fronted by a gateway, so each request needs the athlete’s bearer token and your subscription key, on a different host from the one that issued the token. Access tokens last a day. The athlete is identified by their Suunto username, which you read out of the token itself to match webhooks to people.

03

Turn ten-minute samples into a day

Suunto has no daily summary. Steps, energy and heart rate arrive as ten-minute samples, a sync at a time, and a day’s total is a sum you keep correct yourself as late samples land. We re-read the day and re-total it on every sync, and send you one record that updates.

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

Connect a device

your suunto user finishes a session — this is all you write

// decrypt() and stridee() are in /docs
export async function onStrideeEvent(rawBody, res) {
  const event = await decrypt(rawBody);

  if (event.type === 'activity.created' && event.data.file) {
    // event.data.device → "Suunto Race"

    // The original FIT file, from the device.
    const file = await stridee('GET', event.data.file.url);
    await saveActivity(event.user_id, file);
  }

  res.json({ nonce: event.nonce });
}

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

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

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

Performance

  • Suunto Race 2
  • Suunto Race
  • Suunto Race S

Running

  • Suunto Run

Adventure

  • Suunto Vertical 2
  • Suunto Vertical
  • Suunto 9 Peak Pro

Diving & everyday

  • Suunto Ocean
  • Suunto 5 Peak
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, Fitbit, Suunto and Apple Watch behind one integration
  • Every endpoint on every plan — never priced per call
  • 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 how many of your users may connect a watch. The API is the same 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.

Suunto API questions

No. That is the point of the integration. We hold the Suunto Cloud API 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 Suunto 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 charge for calls. What separates the plans is how many of your users may connect a watch. Hacker is up to 100, for a project and its first users; Startup covers up to 500; Scale includes 1,500 and bills the ones past that at a published per-user rate, with no ceiling; Enterprise is a contract with a better rate again; and none of them charges for 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, Suunto 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 Suunto 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.

Every watch that syncs to the Suunto app, because the integration is with the Suunto account rather than with a watch. Race, Run, Vertical, Ocean, the 9 and 5 families — and a model released next year works on the day it ships. Watches still on the retired Movescount service do not reach the Suunto Cloud API until their owner moves to the Suunto app.

Yes. Connecting lists the athlete’s workouts from the last five years and replays them into your event stream as ordinary deliveries, each with its FIT file, and replays a year of sleep, daily totals and recovery alongside. Suunto puts no deadline on that history, so there is no window to miss.

As a SuuntoPlus Guide. Suunto has no structured-workout API, so a workout you push becomes a guide: each step shows its target with a gauge and a countdown, starts a lap, and moves on by itself when its time or distance is done. The Suunto app syncs it to the watch, and the athlete picks it under SuuntoPlus before pressing start — unlike a Garmin workout, it does not appear on a calendar.

Sleep with its stages, score and heart rate; overnight HRV; a daily total of steps, active energy and heart rate; and a daily recovery record carrying Suunto’s body-resources balance. Suunto reports no resting heart rate, VO₂max or all-day stress curve through its API, so those fields are empty rather than estimated.

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

One integration, not eight. Same event shape, same handler, same plan. Your second provider is a string change — or, for Apple Watch, a Swift package.

GarminCOROSPolarWahooZeppHammerheadFitbitApple Watch