Skip to content

VitaSync

One API to access health data from Fitbit, Garmin, WHOOP, Strava, and more.

VitaSync is an open-source platform that aggregates health and fitness data from wearable devices and fitness services. Instead of implementing OAuth flows, data normalization, and sync scheduling for each provider separately, you connect once to VitaSync and get a unified API.

Terminal window
# Query a user's last 7 days of health data across all connected devices
curl "https://api.yourdomain.com/v1/users/{userId}/health?from=2024-01-01&to=2024-01-07" \
-H "Authorization: Bearer vs_live_..."
{
"data": [
{
"id": "01HX...",
"metricType": "steps",
"value": 9842,
"unit": "steps",
"recordedAt": "2024-01-07T00:00:00.000Z",
"source": "fitbit"
},
{
"id": "01HX...",
"metricType": "resting_heart_rate",
"value": 52,
"unit": "bpm",
"recordedAt": "2024-01-07T00:00:00.000Z",
"source": "whoop"
}
],
"pagination": { "limit": 100, "offset": 0, "hasMore": true }
}

Unified Data Model

Every metric from every provider maps to the same normalized schema. Steps are steps whether they come from Fitbit or Garmin.

OAuth Managed

VitaSync handles the OAuth flows for each provider. Your app directs users to a single authorization URL and receives a webhook when the connection is established.

Automatic Sync

Connected providers are synced automatically on configurable schedules. Trigger a manual sync any time with a single API call.

Webhook Delivery

Subscribe to events like sync.completed, connection.created, and user.deleted. Receive real-time notifications with HMAC-verified payloads.

Multi-tenant

Built for platforms. Each API key belongs to a workspace and manages its own set of users, connections, and webhooks.

Self-hosted

Run anywhere with Docker Compose. You own your infrastructure and your users’ data never leaves your environment.

MCP Server

Expose health data and AI analytics to AI assistants (Claude, Cursor, Copilot) via the Model Context Protocol. 9 tools including LLM-ready context, anomaly alerts, and correlations.

AI & Analytics

Built-in correlation engine, anomaly detection (statistical + clinical thresholds), health scores, and LLM-ready context endpoints for AI-assisted health coaching.

Notification System

Modular multi-channel notifications — Discord, Slack, Teams, Email, Web Push, ntfy, Webhook. Define rules to route alerts by category and severity.

Grafana Dashboards

8 pre-built health dashboards — workouts, sleep, heart health, body metrics, personal records, daily activity, and provider health — provisioned automatically.

Goals & Achievements

Set measurable health goals tied to wearable metrics, track streaks and progress, and unlock tiered achievements automatically.

Health Tracking

Manual logging for mood, nutrition, medications, and symptoms — enriching AI analytics and correlation analysis beyond wearable data.

Challenges & Training Plans

Workspace-wide fitness challenges with leaderboards and AI-generated adaptive training plans tailored to user goals.

Reports & Data Export

Generate periodic health reports (weekly to annual) and export data in JSON, CSV, FHIR R4, or PDF for compliance and portability.

Sleep Analysis & Biometrics

Sleep debt tracking, rolling biometric baselines, composite health scores, periodic snapshots, and AI-generated insights.

ProviderAuthMetricsSync
FitbitOAuth 2.0 + PKCESteps, heart rate, sleep, body composition, SpO₂Every 15 min
GarminOAuth 1.0aSteps, GPS workouts, HRV, stress, body batteryPush (real-time)
WHOOPOAuth 2.0Recovery, strain, HRV, sleep performanceEvery 15 min
StravaOAuth 2.0Workouts, distance, calories, GPS routesOn-demand

See Supported Providers for a full metric-by-metric comparison.

  1. Deploydocker compose up -d
  2. Create an API keyPOST /v1/api-keys
  3. Create a userPOST /v1/users with your internal user ID
  4. Connect a device — redirect the user to GET /v1/oauth/{provider}/authorize?userId={id}
  5. Query dataGET /v1/users/{userId}/health

The Quickstart guide walks through each step in detail with copy-pasteable curl commands.

  • REST — standard HTTP verbs and status codes
  • Bearer token authAuthorization: Bearer vs_live_<key>
  • ULID identifiers — lexicographically sortable, globally unique
  • Cursor and offset pagination — both supported depending on the endpoint
  • ISO 8601 timestamps — all times in UTC
  • Versioned — all endpoints under /v1/