Connect a device
Connect a device
Umbral only uses official APIs. You can disconnect at any time and we delete cached data on request.
WHOOP
Direct API
Recovery, strain & sleep-need model
Contributes to
SleepRecovery & HRVCardio fitnessRespiratory & SpO₂Immune & early warning
Last sync: 4 hours ago
env: WHOOP_CLIENT_ID / _SECRET
Oura
Direct API
Sleep staging, nightly HRV curve, temperature
Contributes to
SleepRecovery & HRVStress & nervous systemCardio fitnessEnergy & metabolismRespiratory & SpO₂Immune & early warningCycle
Last sync: 1 hour ago
env: OURA_CLIENT_ID / _SECRET
Garmin
Via Junction
Body Battery, all-day stress, VO₂ max
Contributes to
SleepRecovery & HRVStress & nervous systemCardio fitnessEnergy & metabolismRespiratory & SpO₂Immune & early warningCycle
Last sync: never
env: JUNCTION_API_KEY
Apple Watch
iOS companion app
Sleep stages, HRV, wrist temperature, VO₂ max
Contributes to
SleepRecovery & HRVCardio fitnessEnergy & metabolismRespiratory & SpO₂Immune & early warningCycle
Last sync: never
env: JUNCTION_API_KEY
Google Health
Android companion app
Sleep stages, rMSSD HRV, steps, VO₂ max
Contributes to
SleepRecovery & HRVCardio fitnessEnergy & metabolismRespiratory & SpO₂Immune & early warningCycle
Last sync: never
env: GOOGLE_HEALTH_CLIENT_ID / _SECRET
Apple Watch
Apple Health lives on your iPhone. Choose how to sync:
Umbral iOS app (recommended)
Grants HealthKit permission once; syncs in the background via the Junction SDK.
POST https://umbral-health.vercel.app/api/junction/sign-in-token → VitalClient.signIn(withRawToken:) → VitalHealthKitClient.shared.ask(readPermissions: [.sleep, .vitals(.heartRateVariability), …])
Health Auto Export bridge
Install Health Auto Export, add a REST automation pointing to the URL below with your token.
Endpoint
https://umbral-health.vercel.app/api/webhooks/apple-healthToken
APPLE_HEALTH_EXPORT_TOKEN not setGoogle Health
Health Connect keeps your data on the phone, the same way Apple Health does. Sync it with:
Umbral Android app
Grants Health Connect permission once; syncs in the background via the Junction SDK. Reads whatever your watch or phone already writes there: Pixel Watch, Fitbit, Samsung Health and the rest.
POST https://umbral-health.vercel.app/api/junction/sign-in-token?provider=google_health → VitalClient.signIn(rawToken) → VitalHealthConnectManager.ask(readResources = [SLEEP, HEART_RATE, HEART_RATE_VARIABILITY, STEPS, …])