Body lens and Biometrics Overview
Each selected metric appears as a card in Body and in the dashboard’s Biometrics Overview widget. Tap any card to open a 90-day chart with statistics and a full reading history. Cards for metrics your device does not measure are hidden automatically. Metrics surfaced on the strip include:- HRV (RMSSD), resting heart rate, sleep score, readiness
- Activity and steps
- Weight, blood pressure, SpO₂, body-temperature delta
- Body composition (body fat %, fat mass, muscle mass, bone mass, lean mass, water, visceral fat)
- Vascular health (pulse wave velocity, vascular age, cardio fitness)
- Sleep architecture (deep, light, REM, awake durations; average HR; breathing rate; snoring; apnea-class disturbance)
Supported vendors
On the official app, Oura, Withings, Polar, and an existing legacy Fitbit connection use getbased’s dedicated compatibility relay for OAuth exchanges and provider fetches. Google Health, WHOOP, and Ultrahuman are self-hosted only and never fall back to the official relay.
How to connect a wearable
1
Open Settings
Click the gear icon to open Settings, then select Wearables.
2
Click Connect
Find the vendor row you want and click Connect.
3
Approve the hosted relay when applicable
Before an official hosted connection sends anything, review the provider-specific relay notice and approve it. If you decline, getbased sends nothing.
4
Authorize on the vendor's site
For OAuth-based vendors, you are redirected to the vendor’s authorization page. Approve access and you are redirected back automatically.
5
Wait for the initial sync
getbased fetches the last 90 days of data. Raw daily rows are stored in your browser’s local database; a compact summary populates the Body lens and Biometrics Overview widget.
WHOOP on a self-hosted deployment
WHOOP is a first-class self-host integration, not a hosted getbased connection. Your deployment owner registers and operates the WHOOP developer application, and your deployment’s same-origin/api/proxy handles confidential token exchange, refresh, and WHOOP API requests. No WHOOP request falls back to getbased’s operated compatibility relay.
Before authorization, getbased shows the requested read access and explains the data path, local storage, optional encrypted Sync and AI context, disconnection, and provider-side revocation. The requested scopes are:
read:profileread:cyclesread:recoveryread:sleepread:workoutoffline
Each self-host operator is the WHOOP application owner and is responsible for app approval, user support, consent/privacy disclosures, retention, security, and the current WHOOP API Terms of Use. See Self-hosting.
Apple Health setup
Apple Health uses a file export instead of OAuth.1
Export from your iPhone
Open the Health app → tap your profile photo (top right) → Export All Health Data.
2
Transfer the file
AirDrop or email the
export.zip to your computer.3
Import into getbased
In Settings → Wearables, drop the
.zip file onto the Apple Health row.Parsing runs entirely in your browser. The file is never sent to a server. Large exports (multi-year history) can take 30–60 seconds to parse.
Manual entry
You can log weight, blood pressure, and resting heart rate without any wearable. The Body lens and Biometrics Overview widget show empty cards for these metrics when no device provides them. To log a reading:1
Tap the empty card
Tap the card (for example, the
Weight – card with a + Log affordance at the bottom).2
Enter the value
Type the number into the inline input — weight in your configured kg or lb display unit, blood pressure as systolic/diastolic with optional pulse, resting HR in bpm. Weight is normalized to kg internally, so changing display units does not change the underlying reading.
3
Add context (optional)
Tap a context chip — resting, morning-fasted, post-workout, or stress — to help the AI interpret the reading correctly.
4
Save
Press Enter or tap Save. The card updates immediately with a via Manual badge.
Multi-vendor metric ownership
When two vendors report the same metric — for example, Oura HRV and Fitbit HRV — getbased displays the most recent non-null value by default and shows a via badge on the card. To switch sources:- Tap the via badge on a card.
- Select the source you want from the picker.
Sync controls
Each current supported vendor row in Settings → Wearables normally has two sync actions:- Update now — refetches the last 7 days. Use this when you’ve just synced your device and want the dashboard to update immediately.
- Import last 90 days — refetches the full 90-day window. Use this after returning from a trip, switching devices, or noticing a gap in the chart. This is slower; some vendors apply rate limits that add 30 seconds or more to the request.
Choosing dashboard metrics
Use Add metrics in the Biometrics Overview widget to choose which wearable and manual metrics appear on the dashboard. The full Body lens remains the dedicated workspace for sources, sync state, and metric history.Privacy
- Provider requests follow the connection boundary shown in Settings. On the official app, Oura, Withings, Polar, and legacy Fitbit credentials and responses pass transiently through the dedicated compatibility relay after consent. Self-hosted providers use the operator’s same-origin endpoint. Apple Health parsing remains entirely in the browser.
- Raw daily rows stay device-local after import. WHOOP and Google Health rows are always browser-device encrypted. WHOOP-specific connection metadata and derived profile values use the same device-only boundary. Other provider rows use passphrase encryption when Settings → Data → Security protection is enabled; without it, they remain readable inside the browser profile.
- Compact summary data syncs to your other devices via Evolu CRDT, which is end-to-end encrypted using your mnemonic identity.
- OAuth refresh tokens stay local and encrypted. They use the browser’s per-profile device vault and are excluded from sync and backups, so you reconnect each vendor on each device.
- AI chat context includes a compact wearable summary by default when Insight → Manage → Context → Data sources → Body → Wearable recovery context is on. Turn that source off to keep wearables out of in-app chat and Body-related score modifiers.
- Personal Agent (MCP) is controlled separately in Settings → Agent Access. When Agent Access is enabled, the agent receives the compact wearable summary; you can optionally push a daily time series there for richer time-series reasoning.
Self-hosting OAuth
If you self-host getbased, register your own OAuth app with each provider and set the corresponding environment variables. Official hosted credentials and redirect registrations are not reusable on a custom hostname.
Register your actual redirect URI (for example,
http://localhost:8000/app for local dev and your production hostname) in each provider’s developer portal. For a custom hostname that is not already listed, add the same URI to the provider’s oauth.redirectUris entry in js/wearable-adapters.js in your fork. Apple Health is file-import only and requires no credentials on any install.
When provider variables are set, the app picks them up at startup and uses your
client_id for authorization and token exchange. Google Health, WHOOP, and Ultrahuman stay disabled unless their *_ENABLED=true flag and both OAuth credential variables are present. The browser receives only public client IDs and availability flags; secrets stay behind /api/proxy.localhost, disabled self-host setup rows remain visible so an operator can discover the required variables. On other unconfigured hosted domains, WHOOP and Ultrahuman are hidden. A complete enabled configuration exposes Connect. If an operator later disables either provider, existing connections remain removable but sync and reconnect pause.
Google Health requests three restricted, read-only scopes: activity and fitness, health metrics and measurements, and sleep. The operator of each self-hosted OAuth project is responsible for Google’s consent-screen, verification, user-limit, and any security-assessment requirements. Personal testing can use Google’s testing mode; a public rollout may require verification and an annual Cloud App Security Assessment. Follow the Google Health setup guide for the current requirements.
Troubleshooting
'Polar connected — waiting on first device sync'
'Polar connected — waiting on first device sync'
The OAuth handshake succeeded, but Polar’s API uses a transactions model that returns no data until your device has uploaded a sync to Polar Flow. Open the Polar app on your phone, sync your watch, then click Update now in getbased.
'Needs reconnection' badge on a vendor row
'Needs reconnection' badge on a vendor row
The OAuth refresh token expired or was revoked. Click Reconnect on a current supported vendor row to re-authorize. Legacy Fitbit is the exception: its old authorization cannot be reconnected in getbased.
A vendor doesn't appear when picking a metric source
A vendor doesn't appear when picking a metric source
The vendor doesn’t expose that metric through their API. For example, WHOOP does not provide weight data, and Withings does not provide HRV (RMSSD). Only vendors that actually report a given metric appear in the source picker for that metric.
Apple Health import is slow
Apple Health import is slow
Large Apple Health exports can be 100 MB or more for multi-year history. Parsing runs entirely in your browser — no server is involved — so expect 30–60 seconds for large files.
Ultrahuman is not in the connect list
Ultrahuman is not in the connect list
Ultrahuman remains an experimental self-host integration and is hidden on an unconfigured hosted domain. Set
ULTRAHUMAN_ENABLED=true with ULTRAHUMAN_CLIENT_ID and ULTRAHUMAN_CLIENT_SECRET, then restart the deployment. localhost shows the disabled setup row before configuration.