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
Connected
Recovery, strain & sleep-need model
Contributes to
SleepRecovery & HRVCardio fitnessRespiratory & SpO₂Immune & early warning
Last sync: 4 hours agoReconnect
env: WHOOP_CLIENT_ID / _SECRET
Oura
Direct API
Connected
Sleep staging, nightly HRV curve, temperature
Contributes to
SleepRecovery & HRVStress & nervous systemCardio fitnessEnergy & metabolismRespiratory & SpO₂Immune & early warningCycle
Last sync: 1 hour agoReconnect
env: OURA_CLIENT_ID / _SECRET
Garmin
Via Junction
Disconnected
Body Battery, all-day stress, VO₂ max
Contributes to
SleepRecovery & HRVStress & nervous systemCardio fitnessEnergy & metabolismRespiratory & SpO₂Immune & early warningCycle
Last sync: neverConnect
env: JUNCTION_API_KEY
Apple Watch
iOS companion app
Pending
Sleep stages, HRV, wrist temperature, VO₂ max
Contributes to
SleepRecovery & HRVCardio fitnessEnergy & metabolismRespiratory & SpO₂Immune & early warningCycle
Last sync: neverConnect
env: JUNCTION_API_KEY
Google Health
Android companion app
Pending
Sleep stages, rMSSD HRV, steps, VO₂ max
Contributes to
SleepRecovery & HRVCardio fitnessEnergy & metabolismRespiratory & SpO₂Immune & early warningCycle
Last sync: neverConnect
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-health
Token
APPLE_HEALTH_EXPORT_TOKEN not set

Google 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, …])