Skip to main content

Overview

Each wearable provider has different requirements and parameters for syncing data. This guide covers the specifics for each supported provider.
Provider names in API paths must be lowercase: garmin, polar, suunto, whoop, apple

Garmin

Garmin uses a webhook-only delivery model — there is no REST polling path. It implements two capability flags:
  • webhook_stream — Garmin pushes the complete data payload to your webhook endpoint in real time as the user syncs their device.
  • webhook_callback — For historical backfill, a backfill task is dispatched asynchronously; Garmin delivers the results to your webhook callback URL.
Because Garmin has no rest_pull capability, live_sync_configurable is false and live_sync_mode is fixed at "webhook".

Historical backfill

To trigger a historical backfill (up to 30 days), call the dedicated endpoint:
The server enqueues the backfill task and Garmin delivers the data asynchronously to your registered webhook endpoint — no time-range parameters are accepted or required.
Do not use the generic /sync REST endpoint for Garmin — Garmin has no server-side REST pull path. All data arrives via webhook push.

Polar

Polar uses the AccessLink API with simpler sync requirements.

Sync Parameters

Example

Enabling samples, zones, and route increases sync time but provides more detailed workout data.

Suunto

Suunto supports both workouts and 24/7 data (sleep, recovery, activity samples).

Sync Parameters

Data Types

Example


Whoop

Whoop uses OAuth 2.0 and supports both workouts and 24/7 data (sleep, recovery, body measurements).

Setup

  1. Create an application at developer.whoop.com
  2. Set your redirect URI to http://localhost:8000/api/v1/oauth/whoop/callback
  3. Configure environment variables:

Sync Parameters

Whoop does not require provider-specific query parameters. Use the standard data_type parameter to control what gets synced.
When no date range is specified, Whoop defaults to syncing the last 30 days of data.

Data Collected

Workouts: heart rate (avg/max), energy burned, distance, elevation gain, duration. Sleep (247): total duration, time in bed, efficiency score, sleep stages (deep, light, REM, awake), nap detection. Recovery (247): recovery score, resting heart rate, HRV (RMSSD), SpO2 percentage, skin temperature. Body measurements (247): height, weight.

Example


Apple Health

Apple Health data is imported via the mobile SDK rather than cloud API sync.
Apple Health requires the Open Wearables mobile SDK. Cloud sync is not available for Apple Health.

Checking Connection Status

Before syncing, verify the user has an active connection:
Response:
Connection status can be: active, revoked, or expired. If no connection exists for a provider, the user needs to complete OAuth first.

Available Providers

Check which providers are enabled in your instance:
Response:
icon_url is a relative URL (e.g., /static/provider-icons/garmin.svg). Resolve it against your API base URL to get the full path - for example, https://your-api.example.com/static/provider-icons/garmin.svg.