Withings integration

Withings API body composition and blood pressure, in your own cloud

Scales, blood pressure monitors and watches from Withings, connected through the official Public API and returned in the same schema as every other source. Self-hosted in your own cloud, under an MIT licence.

Built on Open Wearables

  • Heart Monitor logo
  • Hundred logo
  • JustGains logo
  • Lifelong logo
  • MoveTogether logo
  • Suna logo
  • Yoboo logo

Data coverage

Withings data we support

Withings covers the measurements a watch cannot take, and everything below arrives in the same schema as the rest of your sources.

  • Body composition

    Weight, fat, lean and muscle mass, water and bone.

  • Blood pressure

    Systolic and diastolic, with heart rate alongside.

  • Vascular and metabolic

    Pulse wave velocity, cardiovascular and metabolic age, VO2 max.

  • Vitals

    SpO2, body and skin temperature, blood glucose.

  • Sleep

    Stage timeline, efficiency, time in bed and naps.

  • Daily activity

    Steps, distance, active and basal energy.

  • Workouts

    Duration, heart rate range, steps, energy and distance.

  • Time series

    Timestamped samples in the user's own time zone.

  • Measured, not imported

    Activity other apps pushed into Withings is left out.

What working with Open Wearables gives you

Two views of the same deployment. One for the people wiring it in, one for the people signing it off.

  • One schema, including what a wrist cannot take

    Scale and blood pressure readings arrive in the same shape as every other source, joined to the same user as their watch data, so your code carries no Withings-specific branches.


    • Body composition
    • Blood pressure
    • One schema
  • Webhooks per user, nothing to register up front

    Withings creates subscriptions with each user's own token rather than once for your application. Open Wearables subscribes every active connection, and every new one at connect time.


    • Webhooks
    • Per-user subscriptions
  • Local days that are actually local

    Withings sends the user's time zone by name, not just an offset, so a daily total lands on the day they lived, daylight saving included, before the data reaches your schema.


    • IANA time zones
    • DST handled
  • Pull or push, switched from the dashboard

    Polling works with nothing but OAuth, and tokens refresh before they expire. Webhooks are a setting rather than a rewrite, and switching back revokes the subscriptions cleanly.


    • Polling
    • Webhooks
    • OAuth 2.0

How it works

From nothing to your first Withings query

  1. 01

    Bring it up

    Clone the repository and run it with Docker Compose. First API call in five minutes, before any provider is connected.

    Terminal

    git clone https://github.com/the-momentum/open-wearables.git
    cd open-wearables && docker compose up -d
  2. 02

    Create your Withings application

    Register a Public API integration in the Withings Partner Hub and bring the client ID and secret. A free Withings account is enough to start, and the credentials stay in your name.

    Withings Partner Hub
  3. 03

    Connect a user

    Your user authorises through Withings' own consent screen. Open Wearables handles the flow and the token lifecycle, and subscribes their connection for notifications when webhooks are on.

  4. 04

    Query the user, not the provider

    Withings data arrives in the same schema as every other source, in your own database, so your application code carries no Withings-specific branches.

    Withings API setup guide

The honest comparison

Hosted SaaS API, in-house build, or self-hosted

Where each one actually wins. If a hosted API fits your situation, use one.

Hosted SaaS APIBuild in-houseOpen Wearables, self-hosted
[01] Withings credentialsTheirs, already approvedYours to obtainYours, in your own name
[02] Webhook subscriptionsThey host themPer-user work you buildSubscribed per user, handled for you
[03] Where Withings data sitsTheir cloud, their regionsYoursYour cloud account, your region
[04] The data modelTheirs, you build against their schemaYoursYours, in your database
[05] Time zone handlingWhatever they normalise toYours to get rightLocal days resolved from the user's zone
[06] Withings API changesThey absorb themYour team tracks and adaptsFixed in a release you pull
[07] Cost shapeScales with monthly active usersSalaries and infrastructureFixed, flattens as you grow

What stays yours

The deployment, the data and what you build on it stay in your account, whoever runs it

Sovereignty

Withings data goes straight to your cloud, with no aggregator in between.

Residency

It stays in the region you chose, provable by pointing at an account.

Control

What you build on top of Open Wearables is yours, and the schema and the data are in your account.

Your own reasons

No regulator forcing it. You want the data in your own account anyway.

Withings is one integration in the same API

You query a user rather than a provider, so somebody who steps on a Withings scale in the morning and wears a different watch all day comes back in one shape. Adding either later does not change your code.

Browse all integrations

Deploy Open Wearables in your own cloud

The repository is public and the deployment is yours from the first commit. Start from the source, or bring us in to stand it up in your account with Withings connected and validated on real accounts.

FAQ

Do you have more questions?

Do we need our own Withings credentials?

Yes. You register a Public API integration in the Withings Partner Hub and bring the client ID and secret. A free Withings account is enough to create one, and the data relationship stays between you and Withings.

What does Withings give us that a watch does not?

Body composition and blood pressure. A scale measures fat mass, lean mass, water and bone, and a blood pressure monitor measures what no wrist device reports. Joined to the same user record as their watch data, that is a fuller picture than either source alone.

Does it support webhooks?

Yes, and Withings does them differently from everyone else. Subscriptions are created per user with that user's own token rather than once for your whole application, so there is no registration step blocking your first connection. Open Wearables subscribes each active connection, and anyone who connects later is subscribed automatically.

Can we start without webhooks?

Yes, polling is the default and needs nothing beyond OAuth, so you can have data flowing before you have a public callback. Withings limits an application with no webhook callback to ten linked users, though, so production runs with webhooks on. They are a switch in the dashboard, and switching back revokes the subscriptions cleanly.

What do we need before turning webhooks on?

A publicly reachable HTTPS callback on the standard port. Withings checks the endpoint before it creates any subscription, so it has to be live first. The setup guide in the docs covers the local development path.

How is sleep reported?

As the night's stage timeline, with minutes in deep, light, REM and awake, plus total duration, time in bed, efficiency and whether it was a nap. The night's lowest heart rate is kept as resting heart rate.

Which activity types does it recognise?

Withings' own categories, mapped to the same taxonomy your other providers use, so a swim from a Withings watch and a swim from another source group together in your queries.

Does it handle time zones properly?

Yes, and Withings makes that easier than most. It sends the time zone by name rather than as a bare offset, so a daily total can be placed on the day the user actually lived, including across daylight saving changes. That happens before the data reaches your schema.

Why is some of the user's activity missing?

A Withings account can hold daily activity that other apps pushed in. Those rows are left out, so the activity that lands in your schema came off a Withings device rather than being copied from elsewhere.

Can we combine Withings with other sources?

Yes, and it is one of the more useful combinations. Withings covers body composition and blood pressure, a watch or a ring covers activity and recovery, and you query the user rather than each provider.

We already have Withings credentials. What changes?

Very little. Bring the client ID and secret, point the deployment at your callback, and the connection flow works from there.