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.
- Claude Code
- Cursor
- Windsurf
- VS Code
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{
"type": "workout.created",
"data": {
"externalUserId": "user_8421",
"provider": "garmin",
"record": {
"sport": "running",
"durationSeconds": 3020,
"distanceMeters": 10020,
"averageHeartRateBpm": 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)
- PolarLive
Self-serve AccessLink. Managed app allowed.
- Workouts
- Daily summaries
- Sleep
- Body (not available)
- Heart rate
- Glucose (not available)
- SuuntoLive
Free partner program; Suunto reviews each app.
- Workouts
- Daily summaries
- Sleep
- Body (not available)
- Heart rate (not available)
- Glucose (not available)
- COROSPartner
Multi-user OAuth needs COROS' partner API.
- Workouts
- Daily summaries
- Sleep
- Body (not available)
- Heart rate (not available)
- Glucose (not available)
- 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)
- OuraBring your keys
One registration per customer under Oura's 2026 terms.
- Workouts
- Daily summaries
- Sleep
- Body (not available)
- Heart rate
- Glucose (not available)
- WHOOPBring your keys
10 members until WHOOP approves your app.
- Workouts
- Daily summaries
- Sleep
- Body
- Heart rate (not available)
- Glucose (not available)
- WithingsLive
Self-serve Public API. Managed app allowed.
- Workouts
- Daily summaries
- Sleep
- Body
- Heart rate
- Glucose (not available)
- WahooLive
Sandbox first; Wahoo approves production.
- Workouts
- Daily summaries (not available)
- Sleep (not available)
- Body (not available)
- Heart rate (not available)
- Glucose (not available)
- 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
- Huawei HealthLive
Health Kit access after a company review.
- Workouts
- Daily summaries
- Sleep
- Body
- Heart rate
- Glucose (not available)
- Google HealthPartner
Fitbit's successor. Restricted scopes: Google verification and a yearly security review.
- Workouts
- Daily summaries
- Sleep
- Body
- Heart rate
- Glucose (not available)
- FitbitSunset → Google Health
Legacy Web API switches off on 2 Nov 2026.
- Workouts
- Daily summaries
- Sleep
- Body
- Heart rate
- Glucose (not available)
- Apple HealthMobile SDK soon
On-device: ingest API ready, iOS SDK coming soon.
- Workouts
- Daily summaries
- Sleep
- Body
- Heart rate
- Glucose
- Health ConnectMobile SDK soon
On-device: ingest API ready, Android SDK coming soon.
- Workouts
- Daily summaries
- Sleep
- Body
- Heart rate
- Glucose
- Latido DemoTest mode
A simulated wearable for test mode. Synthetic data, every flow.
- Workouts
- Daily summaries
- Sleep
- Body
- Heart rate
- Glucose (not available)
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.
The provider requires your own developer app. Paste its keys in the dashboard; everything else is the same.
Adapter shipped, but the provider only opens real data to partners by contract.
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.
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"}'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.
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
{
"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_…"> 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
- Most popular
Tier 2
$129one-time
- connected members500
- API requests / month500K
- projects5
- webhook endpoints10
- team seats5
- data retention2 years
Tier 3
$279one-time
- connected members2,000
- API requests / month2M
- projects15
- webhook endpoints25
- team seats15
- data retention5 years
Tier 4
$399one-time
- connected members10K
- API requests / month10M
- projects50
- webhook endpoints100
- team seats50
- data retention10 years
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.
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.
| Latido | Terra | Open Wearables | Build in-house | |
|---|---|---|---|---|
| Pricing | One-time lifetime deal | Monthly, from about $399 | Free, open source | Engineering time |
| Hosting | Managed, EU | Managed | You run it | You run it |
| Provider apps | Your keys; managed apps where allowed | Managed, broad catalog | Your own keys | Your own keys |
| Agents (MCP) | Built in | Check vendor | Check project | Build it |
| Planned workouts | Garmin, Suunto, COROS, Wahoo | Some providers | Check project | Build each |
| Provider changes | We absorb them | They absorb them | Community | On your roadmap |
| Maturity | New, small team | Established | Young project | Yours |
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.