Skip to main content

Garmin Integration

vitalera is the only Garmin Health partner focused exclusively on health and sports-grade data. We combine the official Garmin Health API and the Garmin Connect Mobile SDK to deliver raw, complete, and real-time data — without the gaps of generic aggregators.


Why Garmin with vitalera

Teams that rely on Health Connect or generic wearable aggregators to pull Garmin data usually run into the same limitations:

  • Distance and GPS metrics get rounded or downsampled, so the activity you see in your platform doesn't match what the athlete actually recorded on their watch.
  • Workouts arrive incomplete — missing laps, gaps in the heart rate trace, or interval structure stripped out.
  • Advanced metrics are simply not exposed: cadence, heart rate zones, SpO2, running power, training load, stress, body battery, and other native Garmin data sources stay out of reach.
  • No live streaming during an activity — you only get the session once it's finished and synced.
  • Sync latency of several minutes to hours, which makes real-time clinical alerts or in-race monitoring impossible.

vitalera connects directly to the Garmin Health API (server-to-server) and the Garmin Connect Mobile SDK (on-device), giving you the same data fidelity Garmin uses internally.

API vs SDK vs Health Connect

Recommended: Garmin Health API via vitalera — the fastest and most scalable way to connect Garmin devices for 99% of use cases (sports platforms, RPM, coaching, research). The SDK is only needed for sub-second live streaming.

CapabilityHealth ConnectGarmin Health API (via vitalera)Garmin SDK (via vitalera)
Recommended forDefault choiceBroadcast / live TV only
Workout completenessPartial, gaps commonFull session + lapsFull session + laps
Distance accuracyRounded / approximatedRaw, 2-decimal precisionRaw, 2-decimal precision
Heart rate zonesNoYesYes
Cadence & running powerNoYesYes
SpO2NoDaily + on-demandContinuous stream
Sleep stagesLimitedFull (light / deep / REM)Full
Historical backfillDaysUp to 90 daysLive only
User pairing UXManual per deviceOne-time OAuthRequires app install
Integration timeWeeks~15 minutes1–2 weeks
Scales to large user basesNoYes, production-testedEvent-based
Server-to-server (no app needed)NoYesNo (requires mobile SDK)
Real-time streaming (sub-second)NoNoYes

When to pick what

  • Garmin Health API (via vitalera) — 99% of cases. Sports platforms, RPM, coaching apps, research, insurance, corporate wellness. Server-to-server, no mobile SDK required, full historical data, one-time OAuth, scales to large user bases.
  • Garmin SDK (via vitalera) — Only when you need sub-second live streaming for broadcast overlays or emergency alerting during a live event. Requires a mobile app.
  • Health Connect — Not recommended for any clinical or sports-grade use case.

How user linking works

The Garmin Health API now uses OAuth 2.0 with PKCE (the legacy OAuth 1.0a flow has been retired). vitalera handles PKCE code verifier/challenge generation internally so partners never touch cryptographic primitives.

  1. The user taps Connect Garmin in your app.
  2. vitalera handles the OAuth 2.0 + PKCE flow and stores the link against your user_id.
  3. From that moment, push-based webhooks deliver 12+ summary types (daily, sleep, activity, epoch, stress, body composition, pulse ox, respiration, HRV, BP, skin temperature, user metrics) and data is available via the API.

No per-device pairing. No manual sync. No "please open the Garmin Connect app first."

Unified connected-accounts endpoints

Garmin is wired into the same generic endpoints that every other provider uses:

# Start OAuth (PKCE handled server-side)
curl -X POST https://api.vitalera.io/api/connected-accounts/garmin/oauth/initiate/ \
-H "Authorization: Bearer <user_token>"

# Disconnect
curl -X POST https://api.vitalera.io/api/connected-accounts/garmin/oauth/disconnect/ \
-H "Authorization: Bearer <user_token>"

# Status
curl https://api.vitalera.io/api/connected-accounts/garmin/status/ \
-H "Authorization: Bearer <user_token>"

Example: a running workout response

{
"user_id": "athlete_8421",
"source": "garmin",
"activity_id": "gar_2026_04_10_0731",
"type": "running",
"start_time": "2026-04-10T07:31:04Z",
"duration_seconds": 3284,
"distance_meters": 10043.22,
"calories_kcal": 612,
"avg_heart_rate_bpm": 154,
"max_heart_rate_bpm": 181,
"hr_zones": {
"z1": 124,
"z2": 612,
"z3": 1890,
"z4": 540,
"z5": 118
},
"avg_cadence_spm": 172,
"avg_pace_sec_per_km": 327,
"elevation_gain_m": 84,
"laps": [
{ "lap": 1, "distance_m": 1000, "duration_s": 318, "avg_hr": 148 },
{ "lap": 2, "distance_m": 1000, "duration_s": 322, "avg_hr": 152 }
],
"device": { "model": "Garmin Forerunner 965", "firmware": "22.19" }
}

distance_meters is 10 043.22 — raw from the watch, not a rounded or downsampled value.


Real-time streaming for live events

vitalera powers the live telemetry behind sports event platforms, streaming runner heart rate and SpO2 from Garmin watches to broadcast feeds in under one second.

vitalera.stream.subscribe({
user_id: 'athlete_8421',
metrics: ['heart_rate', 'spo2', 'cadence', 'pace'],
onData: (sample) => {
// sample = { ts, hr: 162, spo2: 96, cadence: 174, pace: 315 }
broadcastOverlay.update(sample);
},
});

Production-tested at scale in single-event deployments with large fields of concurrent athletes.


Sleep and daily wellness

In addition to workouts, the same integration provides:

  • Sleep sessions with stages (light, deep, REM, awake)
  • Resting heart rate and HRV (RMSSD)
  • Daily summaries — steps, calories, stress score, Body Battery
  • Pulse Ox overnight averages

All normalized to FHIR R5 Observation resources — see FHIR Resources.


Use cases

SegmentExample
Sports event platformsSync athletes, runners, triathletes, or cyclists at scale. Live leaderboards, post-race analytics, broadcast overlays.
Connected training & coachingRaw workout data feeds personalized training plans without losing fidelity.
Clinical cardiology & rehabThe same pipeline, already certified for RPM (CE Mark MDR, GDPR, ISO 27001).
Corporate wellnessAggregate Garmin health metrics for employee wellness programs with consent-based data sharing.
Insurance & riskContinuous heart rate, sleep, and activity data for underwriting models and incentive programs.
Research & clinical trialsLongitudinal wearable data collection with FHIR-standard export for research cohorts.

Get started in 15 minutes

  1. Request sandbox credentials at info@vitalera.io.
  2. Receive your API key and test users already linked to Garmin sandbox accounts.
  3. Call GET /v2/activities?user_id=demo_runner_01 and inspect the JSON above with real data.
  4. Subscribe to the activity.created webhook.
  5. Go live.

No NDA required to explore the sandbox. NDA only kicks in when you access production Garmin data (Garmin Health Partner requirement).


Compliance & data ownership

CertificationsCE Mark MDR, ISO 27001, ISO 13485
PrivacyGDPR compliant, HIPAA ready, ENS Alto
Data residencyEU by default (AWS eu-west-1). US region available.
Data ownershipYou own your users' data. vitalera is the processor, never the controller.

Next steps