Releasesv0.1.0

Connectors

A connector teaches Open Health Sync one source. Each maps into the same canonical model.

There are two ways data arrives, and a connector can do both.

On-device: your app uploads

The data lives on the phone (HealthKit on iOS, Health Connect on Android). Your app reads it and posts it with a user token. The server never talks to the vendor.

Cloud: the server pulls

The user consents over OAuth, then the server pulls on a schedule and on the provider's notifications. You register your own developer app with the vendor.

Available today

Something differs from what you see with your account? Open an issue.

Garmin, Coros and more are planned. FreeStyle Libre has no public API; its readings arrive through Health Connect or Apple Health (notes). The sources page has the status, integration path and tracking issue of each one.

Turning a connector on

A device connector needs no keys and is always on. A cloud connector is on when its keys are set:

.env
OHS_<PROVIDER>_CLIENT_ID=...
OHS_<PROVIDER>_CLIENT_SECRET=...

Restart, then run ohs doctor: it reports each connector as ok, skip (no keys) or fail (only some keys), and prints the callback URL to register with the provider, <OHS_PUBLIC_URL>/oauth/<slug>/callback. GET /v1/providers lists what is enabled on an instance.

Give the keys to every process that pulls or deletes

The collect role pulls with them, and the etl role uses them to revoke grants when a user is deleted. If you split roles across processes, set the keys on both.

Build one

Connectors are self-contained packages under connectors/, and need no change to the core. Start with Write a connector, and pick a good first issue.

Edit on GitHub

On this page