Skip to content

Unified health & wearables API

One API for every heartbeat.

Connect your users' Garmin, Polar, Suunto, COROS, Oura, WHOOP and Withings once. Get the same normalized workouts, sleep and daily health data from all of them, for your app and for your agents.

Start free

Copy this prompt into your coding agent

Works with
  • Claude Code
  • Cursor
  • Windsurf
  • VS Code
connect.tsHR 142 bpmHRV 48 msDIST 10.02 km
import { Latido } from "@latido/sdk";

const latido = new Latido({ apiKey: process.env.LATIDO_API_KEY });

const { data: session } = await latido.connect.sessions.create({
  externalUserId: "user_8421",
  redirectUrl: "https://yourapp.com/done",
});
// send your user to session.url
POST /your-webhookworkout.created
{
  "type": "workout.created",
  "data": {
    "externalUserId": "user_8421",
    "provider": "garmin",
    "record": {
      "sport": "running",
      "durationSeconds": 3020,
      "distanceMeters": 10020,
      "averageHeartRateBpm": 142
    }
  }
}
garmin · polar · oura · whoop → one row
normalizedsport: "running"distanceMeters: 10020averageHeartRateBpm: 142
  • HR 142 bpm
  • HRV 48 ms
  • DIST 10.02 km
  • SLEEP 7h 34m
  • ● 15 providers
  • ● 1 schema
  • ● EU-hosted
  • ● MCP-native

Providers

Every wearable your users already own.

One connect page, one schema. Each chip says honestly what the provider allows today, because provider policies changed a lot in 2026 and you should not plan a launch around a closed door.

  • GarminBring your keys

    Bring your own Garmin keys: the program reopened in Oct 2026 with Personal, Starter and Enterprise tiers.

    • Workouts
    • Daily summaries
    • Sleep
    • Body
    • Heart rate
    • Glucose (not available)
    ↧ plans · 90 d backfill
  • PolarLive

    Self-serve AccessLink. Managed app allowed.

    • Workouts
    • Daily summaries
    • Sleep
    • Body (not available)
    • Heart rate
    • Glucose (not available)
    30 d backfill
  • SuuntoLive

    Free partner program; Suunto reviews each app.

    • Workouts
    • Daily summaries
    • Sleep
    • Body (not available)
    • Heart rate (not available)
    • Glucose (not available)
    ↧ plans · 365 d backfill
  • COROSPartner

    Multi-user OAuth needs COROS' partner API.

    • Workouts
    • Daily summaries
    • Sleep
    • Body (not available)
    • Heart rate (not available)
    • Glucose (not available)
    ↧ plans · 30 d backfill
  • StravaBring your keys

    Your own app: Strava refuses intermediaries and AI use since June 2026.

    • Workouts
    • Daily summaries (not available)
    • Sleep (not available)
    • Body (not available)
    • Heart rate
    • Glucose (not available)
    365 d backfill
  • OuraBring your keys

    One registration per customer under Oura's 2026 terms.

    • Workouts
    • Daily summaries
    • Sleep
    • Body (not available)
    • Heart rate
    • Glucose (not available)
    365 d backfill
  • WHOOPBring your keys

    10 members until WHOOP approves your app.

    • Workouts
    • Daily summaries
    • Sleep
    • Body
    • Heart rate (not available)
    • Glucose (not available)
    365 d backfill
  • WithingsLive

    Self-serve Public API. Managed app allowed.

    • Workouts
    • Daily summaries
    • Sleep
    • Body
    • Heart rate
    • Glucose (not available)
    365 d backfill
  • WahooLive

    Sandbox first; Wahoo approves production.

    • Workouts
    • Daily summaries (not available)
    • Sleep (not available)
    • Body (not available)
    • Heart rate (not available)
    • Glucose (not available)
    ↧ plans · 365 d backfill
  • DexcomPartner

    Free sandbox; real data needs a Dexcom partnership.

    • Workouts (not available)
    • Daily summaries (not available)
    • Sleep (not available)
    • Body (not available)
    • Heart rate (not available)
    • Glucose
    90 d backfill
  • Huawei HealthLive

    Health Kit access after a company review.

    • Workouts
    • Daily summaries
    • Sleep
    • Body
    • Heart rate
    • Glucose (not available)
    30 d backfill
  • Google HealthPartner

    Fitbit's successor. Restricted scopes: Google verification and a yearly security review.

    • Workouts
    • Daily summaries
    • Sleep
    • Body
    • Heart rate
    • Glucose (not available)
    365 d backfill
  • FitbitSunset → Google Health

    Legacy Web API switches off on 2 Nov 2026.

    • Workouts
    • Daily summaries
    • Sleep
    • Body
    • Heart rate
    • Glucose (not available)
    365 d backfill
  • Apple HealthMobile SDK soon

    On-device: ingest API ready, iOS SDK coming soon.

    • Workouts
    • Daily summaries
    • Sleep
    • Body
    • Heart rate
    • Glucose
    365 d backfill
  • Health ConnectMobile SDK soon

    On-device: ingest API ready, Android SDK coming soon.

    • Workouts
    • Daily summaries
    • Sleep
    • Body
    • Heart rate
    • Glucose
    30 d backfill
  • Latido DemoTest mode

    A simulated wearable for test mode. Synthetic data, every flow.

    • Workouts
    • Daily summaries
    • Sleep
    • Body
    • Heart rate
    • Glucose (not available)
    ↧ plans · 90 d backfill
Live

Adapter shipped and the provider allows a shared app. Run it on your own keys today; Latido's managed app follows once the provider approves it.

Bring your keys

The provider requires your own developer app. Paste its keys in the dashboard; everything else is the same.

Partner

Adapter shipped, but the provider only opens real data to partners by contract.

Mobile SDK soon

Data lives on the phone. The ingest API is ready; the native SDKs are on the way.

W Workouts · D Daily summaries · S Sleep · B Body · H Heart rate · G Glucose · ↧ pushes planned workouts

The integration tax

Every provider is its own project.

Different OAuth flavours, different webhook handshakes, different units, different review queues. Each one is weeks of work before you show your users a single chart, and then they change.

  • Garmin

    Auth
    OAuth 2.0 PKCE (1.0a legacy)
    Webhook handshake
    Ping, then pull from a callback URL
    Units & quirks
    Summaries split by type; FIT files
    Access
    Reopened Oct 2026, tiered access
  • Strava

    Auth
    OAuth 2.0
    Webhook handshake
    Echo hub.challenge on subscribe
    Units & quirks
    Speed in m/s, 100 requests / 15 min
    Access
    Your own app only
  • Polar

    Auth
    OAuth 2.0
    Webhook handshake
    Signed events plus a test ping
    Units & quirks
    Durations as ISO 8601 (PT1H2M)
    Access
    Self-serve
  • Oura

    Auth
    OAuth 2.0
    Webhook handshake
    Verification token challenge
    Units & quirks
    Scores 0-100, per-day documents
    Access
    One registration per customer
  • WHOOP

    Auth
    OAuth 2.0
    Webhook handshake
    HMAC signature header
    Units & quirks
    Energy in kilojoules, times in ms
    Access
    10 members until approved
  • Withings

    Auth
    OAuth 2.0 + signed nonces
    Webhook handshake
    HEAD check on subscribe
    Units & quirks
    Value × 10^unit (weight -3)
    Access
    Self-serve
  • Fitbit

    Auth
    OAuth 2.0 PKCE
    Webhook handshake
    Verification code GET
    Units & quirks
    Units follow the Accept-Language header
    Access
    Switched off 2 Nov 2026

From each provider's public documentation, October 2026.

Latido: one schema.

We absorb the OAuth dances, the handshakes, the token refreshes and the unit conversions. You get one record shape per data family, with fixed units, whichever device recorded it.

A field the provider does not send is absent, never 0. No data and zero are different answers.

  • m

    distance

  • s

    duration

  • kg

    mass

  • bpm

    heart rate

  • ms

    HRV (RMSSD)

  • kcal

    energy

  • mg/dL

    glucose

  • UTC

    instants

How it works

Three calls from sign-up to data.

  1. 01

    Create a connect session

    Your backend asks for a short-lived link for one of your users, known by your own id. No sign-up for them.

    terminal
    curl https://api.getlatido.com/v1/connect/sessions \
      -H "Authorization: Bearer lat_test_…" \
      -H "Content-Type: application/json" \
      -d '{"externalUserId":"user_8421",
           "redirectUrl":"https://yourapp.com/done"}'
  2. 02

    Your user connects on our hosted page

    Like Plaid Link for wearables. They pick Garmin or Oura, approve the OAuth screen, and land back in your app.

  3. 03

    Receive webhooks or query the data

    Latido backfills history, then pushes signed events as new data arrives. Or read it whenever you like.

    webhook.ts
    app.post("/latido", async (req) => {
      const event = await Latido.webhooks.verify(
        await req.text(),
        req.headers.get("Latido-Signature"),
        SECRET,
      );
      if (event.type === "workout.created") {
        await saveWorkout(event.data);
      }
    });

Normalized data

The same shape, whatever the wrist.

Each record keeps the provider's raw payload next to the normalized fields, so you never lose a detail the schema does not model yet.

  • Sport types mapped to one list; the original kept in providerSport
  • FIT file downloadable when the provider gives one
GET /v1/members/mem_ana/workouts200 OK
{
  "type": "workout",
  "provider": "garmin",
  "sport": "running",
  "providerSport": "running",
  "startTime": "2026-10-25T07:42:10Z",
  "utcOffsetMinutes": 120,
  "durationSeconds": 3020,
  "distanceMeters": 10020,
  "elevationGainMeters": 86,
  "averageHeartRateBpm": 142,
  "maxHeartRateBpm": 171,
  "averageSpeedMps": 3.32,
  "activeKilocalories": 684,
  "heartRateZones": [{ "zone": 3, "seconds": 1490 }],
  "hasFile": true
}

Built for agents

Your agent can read a training log.

Latido ships an MCP server, so Claude, Cursor or any MCP client can query your members' health data with your permissions, and llms.txt so coding agents can wire it up for you.

  • list_members

    Members and their connections

  • list_workouts

    Workouts in a date range

  • list_sleep_sessions

    Sleep sessions and stages

  • list_daily_summaries

    Steps, HRV, readiness

  • get_trends

    Weekly load, HRV and sleep trends

  • create_connect_link

    A connect link to send a member

$ claude mcp add --transport http latido https://api.getlatido.com/mcp --header "Authorization: Bearer lat_test_…"
claude · latido mcp

> How did Ana sleep after her long run on Saturday?

  • latido · list_workouts(memberId: "mem_ana", from: "2026-10-24", sport: "running")
  • latido · list_sleep_sessions(memberId: "mem_ana", from: "2026-10-25")

Ana ran 21.1 km on Saturday (1h 52m, avg HR 151 bpm), her longest run in six weeks.

That night she slept 6h 48m, about 40 minutes under her 30-day average. Deep sleep was normal (1h 22m), but her overnight HRV dropped to 41 ms against a usual 58 ms and her lowest heart rate was 6 bpm higher.

That pattern is typical after a hard long effort. An easy day before her next session looks sensible.

>

Features

The parts you would build anyway.

  • /connect/{token}

    Hosted connect page

    A provider picker and the OAuth dance on one page you link to. Your user never signs up for anything.

  • managed · custom

    Your keys or ours

    Paste your own client id and secret today; Latido-managed apps follow where providers allow them. Credentials are encrypted with AES-256-GCM.

  • HMAC · retries · log

    Signed webhooks

    HMAC-SHA256 signatures, exponential retries and a delivery log you can replay from the dashboard.

  • ≤ 365 days

    Backfill on connect

    History arrives with the first connection: up to 365 days where the provider keeps it.

  • intervals → device

    Planned workouts to the watch

    Push a structured session to Garmin, Suunto, COROS or Wahoo and it shows up on the device.

  • raw + normalized

    Data explorer

    See each member's connections, records and raw payloads in the dashboard while you build.

  • EU · AES-256-GCM

    EU-hosted, GDPR-first

    Health data is special-category data. It is stored in the EU, provider tokens are encrypted, and deleting a member deletes their data.

  • lat_test_…

    Test mode

    The Latido Demo provider produces realistic synthetic data so you can build the whole flow before touching a real device.

Lifetime deal · coming to AppSumo

Pay once. Keep your heartbeat.

Unified wearable APIs typically start at $399 to $499 a month. Latido's launch deal will be a one-time payment, with every future update of your tier. Start on the free plan today and activate your licence on the same account when the deal opens.

  • Tier 1

    $49one-time

    • connected members100
    • API requests / month100K
    • projects2
    • webhook endpoints3
    • team seats2
    • data retention1 year
    Start free
  • Most popular

    Tier 2

    $129one-time

    • connected members500
    • API requests / month500K
    • projects5
    • webhook endpoints10
    • team seats5
    • data retention2 years
    Start free
  • Tier 3

    $279one-time

    • connected members2,000
    • API requests / month2M
    • projects15
    • webhook endpoints25
    • team seats15
    • data retention5 years
    Start free
  • Tier 4

    $399one-time

    • connected members10K
    • API requests / month10M
    • projects50
    • webhook endpoints100
    • team seats50
    • data retention10 years
    Start free

Free plan, available now

1 project, 10 connected members, 10K API requests a month, 1 webhook endpoint and 30 days of data. Test mode and every provider included. No card needed.

Create your account

Everything in every tier

  • REST API
  • Signed webhooks
  • MCP server
  • TypeScript SDK
  • Dashboard
  • All providers
  • Planned workouts
  • Test mode

Providers that require partner contracts (Garmin, Oura, WHOOP, Dexcom) run on your own keys on every tier. That keeps the deal honest: no provider can turn it into a monthly bill later.

Lifetime licences will be sold on AppSumo, with its 60-day refund window. Planned workouts need a lifetime tier.

Compare

Honest comparison.

Latido is new. Here is where it fits next to the alternatives you are probably weighing.

LatidoTerraOpen WearablesBuild in-house
PricingOne-time lifetime dealMonthly, from about $399Free, open sourceEngineering time
HostingManaged, EUManagedYou run itYou run it
Provider appsYour keys; managed apps where allowedManaged, broad catalogYour own keysYour own keys
Agents (MCP)Built inCheck vendorCheck projectBuild it
Planned workoutsGarmin, Suunto, COROS, WahooSome providersCheck projectBuild each
Provider changesWe absorb themThey absorb themCommunityOn your roadmap
MaturityNew, small teamEstablishedYoung projectYours

Based on public information, October 2026. Check each vendor for current details.

FAQ

Questions before you buy.

Is my users' data safe?

Health data is special-category data under GDPR, so we treat it that way: it is hosted in the EU, provider tokens and your own provider keys are encrypted with AES-256-GCM, API keys are stored only as hashes, and deleting a member removes their connections and records. Latido acts as your data processor.

Do I need my own Garmin or Strava app?

For some providers, yes. Garmin grants access per company through its tiered program, Strava refuses data routed through intermediaries, and Oura and WHOOP ask for registrations per customer, so those run on your own keys, which you paste once in the dashboard. Where a provider allows intermediaries (Polar, Withings, Suunto, Wahoo and others) Latido is applying for managed apps, so you will not need your own; until each one is approved, those run on your own keys too.

What happens when a provider changes its API?

We update the adapter and keep the normalized schema stable, so your code does not change. Every record also keeps the provider's raw payload, and status changes (a provider sunsetting, like Fitbit moving to Google Health) are announced in the dashboard before they bite.

Can I self-host?

Not today. Latido runs as a managed service in the EU. If self-hosting is a hard requirement for you, an open-source project like Open Wearables may fit better, and we would rather tell you that now.

What is a connected member?

One of your end users with at least one active connection to a provider. A member with Garmin and Oura connected counts once. Members who disconnect stop counting against your limit.

Can I get a refund?

Lifetime licences will be sold through AppSumo, which gives you 60 days from purchase to ask for a refund. The free plan needs no payment at all.

Where is the data stored, and who is responsible for it?

On servers in the EU (Germany). For your users' data Latido is your processor under GDPR article 28: you decide what is collected and obtain your users' consent; we process it only on your instructions. The privacy policy and the data processing terms say exactly how.

● HR 64 bpm · resting · all systems normal

Stop integrating wearables one by one.

Connect a demo device in test mode, watch the webhook come back, then bring your real users.

Start free

Copy this prompt into your coding agent