How to Integrate the Withings API (2026)
Last verified October 17, 2026 · 7 min read
Sources checked (13) · October 17, 2026
- developer.withings.com/ — Withings+ requirement from October 12, 2026, Public API scope, quickstart, EU and US clouds
- developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/developer-account/create-your-accesses-no-medical-cloud/ — free access with no prerequisites, application credentials, team roles
- developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/get-access/oauth-web-flow/ — access to historical data, 30-second code exchange
- developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/get-access/oauth-authorization-url/ — authorization URL, state, scopes, demo user
- developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/get-access/sign-your-requests/ — HMAC SHA-256 request signing with a nonce
- developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/get-access/access-and-refresh-tokens-no-recover/ — token lifetimes and the requesttoken call
- developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/data-api/notifications/notification-overview/ — 120 requests per minute, retries, escalation, delivery times, securing notifications
- developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/data-api/notifications/notification-subscribe/ — callback URL requirements and restricted mode
- developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/data-api/notifications/notification-content/ — notification categories and payload fields
- developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/data-api/fetch-data-example/ — fetching after a notification, lastupdate
- developer.withings.com/developer-guide/v3/data-api/all-available-health-data/ — biomarker catalogue and the Advanced Biomarkers plan
- developer.withings.com/developer-guide/v3/maintain-your-integration/understand-our-timeline-for-notice/ — notice periods for changes
- developer.withings.com/developer-guide/v3/maintain-your-integration/track-changes-on-our-services/ — developer updates portal and mailing list
Withings makes scales, blood pressure monitors, sleep sensors, trackers and thermometers, and its cloud API returns what those devices measure. This guide covers the Public API, which Withings describes as "designed for individuals and partners without a formal contract", from Withings' developer site as read on October 17, 2026. Withings' other solutions (Cellular, Withings RPM and Logistics Services) are out of scope here.
One change dominates 2026 planning. Withings' developer home page, as the Internet Archive captured it on October 16, 2026, said Withings+ becomes required on the Start for Free API plan from October 12, 2026: Withings accounts created after that date need a membership to share health data with a free-plan app, including apps that are already live. Accounts created before that date are unaffected, and Withings said Enterprise lifts the requirement for specific use cases. That notice was no longer on the home page when we read it on October 22, 2026, and Withings' plans page did not render for us, so we could not confirm whether the requirement still stands; ask Withings before you plan around it. If you are still choosing a provider, start with wearable data APIs.
Access and approval#
| Question | What Withings' pages say |
|---|---|
| What does it cost to start? | "There are no prerequisites, and free access is provided" on the EU Medical Cloud |
| Is there a review? | None is described for the Public API: you create an application and get a client_id and client_secret |
| What do users need? | A Withings device set up in the Withings app; Withings announced that from October 12, 2026 new accounts need Withings+ to share with a free-plan app (see above) |
| Any limits on a new app? | An app whose callback URL misses Withings' requirements stays in restricted mode, limited to 10 linked users |
| Where does data live? | The EU Medical Cloud in France by default; a US Medical Cloud for HIPAA-covered entities, by request |
Withings recommends creating the developer account with a shared professional email rather than a personal Withings account. Its developer dashboard has teams with three roles: Admin, Developer and Support Agent, and only an Admin can manage production applications. The cloud is fixed for good: Withings says your cloud is set when your access contract is created and cannot be switched afterwards.
Auth and scopes#
Withings uses OAuth 2.0 with the authorization-code flow. Send the user to its authorization URL:
GET https://account.withings.com/oauth2_user/authorize2
?response_type=code
&client_id=YOUR_CLIENT_ID
&scope=user.info,user.metrics,user.activity
&redirect_uri=https://yourapp.example.com/callback
&state=RANDOM_ANTI_CSRF_STRING
Scopes are comma-separated:
| Scope | What Withings says it allows |
|---|---|
user.activity | Physical activity and sleep data; also required for notification management |
user.metrics | Health measurements, heart recordings, stethoscope data and goals; also required for notification management |
user.info | Account information, linked devices and goals, and device linking |
user.sleepevents | Notifications when sleep events happen: bed in, bed out, inflate done |
Two details are unusual. First, the authorization code is only valid for 30 seconds, so exchange it in the callback handler, not in a queue. Second, Withings signs some requests: you call getnonce on the signature service with an HMAC SHA-256 signature keyed by your client secret, then sign the token request with that nonce. The exchange itself is the requesttoken action on https://wbsapi.withings.net/v2/oauth2, sent with your client_id, redirect_uri, the code, grant_type=authorization_code, the nonce and the signature.
Token lifetimes are short at the front and long at the back:
| Token | Lifetime Withings documents |
|---|---|
access_token | 3 hours |
refresh_token | 1 year |
The previous refresh_token | 8 hours after a new one is issued, or once the new access token is used |
Every refresh returns a new refresh token, and Withings warns that failing to store it can lose you access once the old one expires. For testing, add mode=demo to the authorization request to log in as Withings' demo user.
Data: measures, activity, sleep and heart#
Withings says that once a user authorizes your application, "you will have access not only to new data but also to all historical health data collected by the devices", so a new connection can backfill the user's history. Calls are POST requests to https://wbsapi.withings.net services with an action parameter:
| Service and action | Returns |
|---|---|
Measure getmeas | Measures by meastype, for example weight (1), fat ratio (6) and bone mass (88); blood pressure, SpO2, temperature, glucose and more |
Measure v2 getactivity, getintradayactivity, getworkouts | Daily activity, intraday activity and workouts |
Sleep v2 get, getsummary | Sleep data and nightly summaries |
Heart v2 list, get | ECG recordings |
User v2 getdevice | The user's linked devices |
curl -s -X POST "https://wbsapi.withings.net/measure" \
-H "Authorization: Bearer USER_ACCESS_TOKEN" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "action=getmeas" \
-d "meastypes=1,6,88" \
-d "lastupdate=1760000000"
Use lastupdate for ongoing sync: Withings says it returns everything created or modified since that timestamp, including updates you missed if a notification was lost. Withings' catalogue lists 96 biomarkers across 9 device families, and marks some as requiring the Advanced Biomarkers plan, so check the catalogue before you promise a metric.
Webhooks: data notifications#
Withings pushes notifications rather than data. Subscribe a callback URL to a category (appli) with the subscribe action on the notify service, using the user's access token. Categories include 1 (weight and body composition), 4 (blood pressure and heart rate), 16 (activity), 44 (sleep summary) and 54 (ECG); the notification carries userid, appli and a startdate and enddate window, and you fetch the data yourself.
Withings' rules for the callback URL are strict:
- HTTPS only, a domain name rather than an IP address or localhost, ports 80 or 443 only, and at most 255 characters.
- It must answer HTTP
HEADwith a 2xx, because Withings checks the URL before registering it. - A URL that misses these leaves the app in restricted mode, limited to 10 linked users, which Withings intends for development only.
Reliability is documented in detail. If your endpoint does not answer with a status below 400, Withings retries on a schedule of 10 seconds, 1 minute, 1 hour and 4 hours, two attempts per cycle and 10 in total. After 4 failed notifications in a row it sends a warning email for each, and after 20 days of unresolved failures it cancels the subscription. Missed notifications are not redelivered, so backfill with lastupdate once you are back. Typical delivery is under 2 minutes, with no real-time commitment on the standard plan.
To secure the endpoint, Withings publishes its notification IP ranges as DNS TXT records (ipblock-notify.withings.net for the EU cloud) and suggests adding a secret query parameter to the callback URL that you check on every request.
Rate limits#
Withings says the standard API enforces a limit of 120 requests per minute across your application, and that polling hits it quickly, which is why it points everyone to notifications. The Enterprise plan unlocks higher limits and dedicated support; Withings' plans page did not render for us, so this guide does not quote its prices.
What changed recently#
| When | Change (Withings' pages) |
|---|---|
| October 12, 2026 | Withings+ required on the Start for Free API plan for accounts created after that date, including for apps already live, per a home-page notice captured October 16, 2026 and gone by October 22, 2026 |
| Standing policy | Major changes get one month's notice, up to three months for business-critical ones; emergency changes up to two weeks or none; normal changes without notice |
Withings publishes breaking changes and deprecations on a developer updates portal and a mailing list, and adds the contact email of every developer application to that list automatically.
Gotchas and production notes#
- The 30-second code. Exchange the authorization code immediately; a slow callback fails silently from the user's point of view.
- Sign before you ask. Token requests need a fresh nonce and an HMAC signature; every request needs a new nonce.
- Store the newest refresh token every time. The previous one dies 8 hours after a new one is issued.
- Budget for Withings+. Withings announced that users who create a Withings account after October 12, 2026 need a membership to share data with a free-plan app; confirm it still applies, since the notice had left the developer home page by October 22, 2026.
- Pick the cloud once. EU or US is fixed when your access contract is created.
- Notifications are pointers. Fetch the data after each notification, answer within a few seconds, and reconcile with
lastupdateafter any outage.
The withings-api Python package is reviewed at withings-api. The rest of the cluster is at how to integrate a fitness or health API.
Frequently asked questions
- Is the Withings API free?
- Getting started is. Withings' setup page says there are no prerequisites and free access is provided on its EU Medical Cloud. Withings also announced that accounts created after October 12, 2026 need a Withings+ membership to share data with an app on the Start for Free plan, with Enterprise lifting that requirement for specific use cases; that notice was no longer on its developer home page on October 22, 2026, so confirm it with Withings.
- How does Withings OAuth work?
- Send the user to https://account.withings.com/oauth2_user/authorize2 with your client_id, scopes such as user.metrics and user.activity, a redirect_uri and a state value. The code that comes back is valid for only 30 seconds; exchange it with the requesttoken action, signed with HMAC SHA-256 and a fresh nonce from Withings' signature service.
- How long do Withings access tokens last?
- Withings documents 3 hours for an access token and 1 year for a refresh token. Every refresh issues a new refresh token, and the previous one expires 8 hours later or as soon as the new access token is used, so store the newest pair every time or you can lose access.
- Does the Withings API have webhooks?
- Yes, as data notifications. You subscribe an HTTPS callback URL per category, such as weight or sleep, and Withings POSTs the user ID, category and time window, typically within 2 minutes. It retries failed deliveries for about 5 hours, cancels a subscription after 20 days of failures, and never redelivers a missed notification.
- What is the Withings API rate limit?
- Withings says the standard API enforces 120 requests per minute across your application, which is why it recommends notifications over polling. The Enterprise plan unlocks higher limits and dedicated support; Withings' plans page did not render when we read the site, so we do not quote its prices.
Keep reading
Elsewhere on the site
Pages that share this one’s concepts and sources, from other sections.
Next steps
Was this page useful?
Independent comparison, last reviewed October 17, 2026. Pricing, rate limits, and feature availability change often — confirm current details in each provider’s official documentation before you commit. Product and company names are trademarks of their respective owners; AIFitnessAPI is not affiliated with, endorsed by, or sponsored by any product listed here.
← All integration guides · by AIFitnessAPI