Need help with your Withings integration? Pop into our Discord if you have questions or want to discover how Open Wearables can solve your problems.
Overview
Withings provides access to body composition, blood pressure, activity, sleep, and workout data from Withings scales, blood pressure monitors, and watches through the Withings Public API. The integration uses OAuth 2.0 for authentication and supports both pull-based REST syncing and push notifications. Withings deviates from every other provider here in one important way: notification subscriptions are created per user, with that user’s own access token, rather than once for the whole application. There is no application-level webhook registration step to run before users connect.Supported data types
Everything Open Wearables currently imports from Withings, with the Withings API plan each item needs:
The Free plan column reflects Withings’ Basic Biomarker Pack. Metrics in the Total Biomarker Pack are not available on the free plan and require an Enterprise, Healthcare or Research plan (some as paid add-ons). See Available Health Data for the per-metric and per-device breakdown.
Not imported today: sleep stage timeline (hypnogram), sleep score, HRV, ECG, segmental body composition, visceral fat, nerve health scores.
Data delivery
Withings defaults to pull rather than webhooks, unlike Oura. Enabling webhooks (Enable webhooks (optional) below) requires a publicly reachable HTTPS callback URL up front - there’s no way to defer that requirement the way polling lets you.
What you need by the end
- App credentials: Client ID + Client Secret from a Withings Public API integration application
- Redirect URI registered with your Withings application
- Webhook token set (only if enabling webhooks) - a secret value Withings echoes back on your callback URL
Prerequisites
- A Withings account - the same one used by device owners. Withings recommends creating a dedicated account for your organization if you’re integrating on behalf of others, but a personal account works too.
- No partner approval process: Withings Public API access is free and self-serve.
- The free plan is capped at 1,000 active users per application and exposes only the basic biomarkers (activity, sleep, body, heart). Larger deployments need an Enterprise, Healthcare or Research plan, which lift the user cap and raise the rate limit - see Withings API plans and the Rate Limits section below.
Application walkthrough
1
Create a Withings application
Sign in to the Withings Developer Dashboard with your Withings account and select Create an application. Under application type, choose Public API integration, accept the terms, and continue.Fill in the application form:
- Application Name: The name shown to users on the consent screen (e.g. “Open Wearables”)
- Description: A short description of your application
- Registered URLs (Callback URI): Your OAuth callback URL. Open Wearables derives this from your
API_BASE_URLas{API_BASE_URL}/api/v1/oauth/withings/callback, so register that exact URL here. Withings rejectslocalhostand bare IP addresses in this field too - for local development, expose your backend with ngrok and register e.g.https://your-subdomain.ngrok-free.app/api/v1/oauth/withings/callback. In production use your public domain.
2
Configure credentials in Open Wearables
Add the following to your Configuration details:
.env file:3
Connect a user via OAuth
With credentials configured and your Open Wearables instance running, initiate the OAuth flow.1. Get the authorization URL:Response:2. Redirect the user to the You should see a connection with
authorization_url. They will log in to Withings and authorize your app.3. Withings redirects back to the callback URI derived from API_BASE_URL ({API_BASE_URL}/api/v1/oauth/withings/callback). Open Wearables automatically exchanges the authorization code for access and refresh tokens.4. Verify the connection:"provider": "withings" and "status": "active".The
redirect_uri parameter in the authorize call is where the user is sent after the flow completes (e.g., back to your app). This is separate from the server-side OAuth callback ({API_BASE_URL}/api/v1/oauth/withings/callback) that Withings sends the authorization code to.4
Enable webhooks (optional)
Withings subscriptions are per user: each one is created with that user’s own bearer token, so there’s nothing to register at the application level. Instead, you switch Withings’ live-sync mode to Webhook, and Open Wearables subscribes every active Withings connection using its own token; any user who connects afterward is subscribed automatically at connect time.Switch Withings to webhook mode from the dashboard:In your Open Wearables dashboard, go to Settings → Providers, find Withings, and switch its live-sync control from Periodic pull to Webhook.Open Wearables derives the callback URL from your
API_BASE_URL and WITHINGS_WEBHOOK_TOKEN as {API_BASE_URL}/api/v1/providers/withings/webhooks?token={WITHINGS_WEBHOOK_TOKEN}, and subscribes each user’s connection to it via Withings’ Notify API.Switching back to Periodic pull revokes the per-user subscriptions Open Wearables created; polling keeps working regardless of webhook state.
5
Sync data
An initial 90-day historical sync is triggered automatically after a successful OAuth connection. To manually sync or fetch historical data:You can also sync specific data types:
6
Verify the integration
Once data has synced, fetch it via the Open Wearables API:If data is returned, your Withings integration is working end-to-end.
API Details
OAuth Scopes Reference
The scopes requested by Open Wearables are controlled by
WITHINGS_DEFAULT_SCOPE, a comma-separated list - see the warning in the configuration step above.Rate Limits
Withings enforces the request limit once per registered application, not per user - calling an endpoint for two users counts as two requests against the same allowance. Open Wearables does not pace calls against it: in pull mode every periodic sync fetches measures, activity, sleep and workouts for every connected user in one burst, and calls that hit 429 are retried a few times and then dropped. Beyond a few dozen users this will exhaust the allowance on every tick, so switch Withings to webhook mode (see Enable webhooks (optional) above) - then Open Wearables only fetches data for users Withings has just notified about.
The user cap applies to the free plan only. Paid plans (Enterprise, Healthcare, Research) remove it and raise the request limit - see Withings API plans. Separately, an app that never registers a compliant webhook callback URL is capped at 10 linked users - see the webhook step above.
Next Steps
API Reference
Explore the Open Wearables API endpoints.
Coverage Matrix
See the full data coverage comparison.
Support
Need Help?
- Join our Discord and ask a question.
- Check GitHub Discussions.
- Check the Withings Developer Documentation.

