Provider guide
Withings: register your app
| Access | Self-serve, no partner review [OW] |
| Cost | Free up to 1,000 active users and the Basic Biomarker Pack; paid plans above that and for skin temperature, PWV, VO2max, sleep HRV and automatic SpO2 [OW docs] |
| Account | Any Withings account works; a company email is better because the app belongs to whoever creates it |
| Managed app | Allowed by the catalog |
| Latido slug | withings |
| Time | ~10 minutes |
Before you start
- Nothing on your side: Latido's API (
https://api.getlatido.com) is public HTTPS, which Withings requires (it refuseslocalhostand IP addresses for both the callback and notifications [OW]). - The provider app saved in Latido first, so you have its webhook URL.
Steps
- Go to the Withings developer portal, https://developer.withings.com, and sign in (or create a Withings account) [OFF].
- Open the developer dashboard and create a new application for the Public API (the standard OAuth integration, not "dropship" / user creation) [MEM: menu names may differ].
- Fill the form [MEM: field names approximate]:
- Application name: your product name, as members will see it on the consent screen.
- Description: one line on what you do with the data.
- Contact email: a monitored address.
- Callback URL(s): the redirect URI from the Latido dashboard,
https://api.getlatido.com/connect/callback/withings. HTTPS, public hostname. - Logo: optional but shown on the consent screen.
- Save. Copy the Client ID and Client Secret (Withings may call the secret "Consumer Secret").
- In Latido, open Providers → Withings, choose Custom app, paste client id and secret, and save.
- Settings to fill in Latido:
webhookSecret: any long random string (e.g.openssl rand -hex 32). Withings does not sign notifications, so Latido puts this secret in the notification URL query and rejects calls without it [OW].
- Nothing to paste for the webhook in the Withings portal: notifications are
per user. After each member connects, Latido calls
POST /notify action=subscribewith that member's token and the callback URLhttps://api.getlatido.com/providers/withings/webhook/{providerAppId}[OW]. Withings sends a HEAD request to the URL first; Latido answers it.
Scopes
Requested by Latido in the authorize URL, comma-separated [OW]:
user.info,user.metrics,user.activity and, for bed in/out events,
user.sleepevents. There is nothing to tick in the portal.
Going to production
- There is no separate review. The free plan is limited to 1,000 active users and 120 requests/minute app-wide; paid plans raise both (1,500+ req/min) [OW docs].
- An app with no compliant notification URL is capped at 10 linked users [OW docs]. Make sure the HEAD check succeeds.
Gotchas
- Every API response is an envelope
{status, body}.status != 0is an error even with HTTP 200 [OW]. - The member revoking access arrives as notification
appli=46withaction=delete|unlink[OW]; there is no separate deauthorization webhook. - Token lifetimes (~3 h access, ~1 year rotating refresh) are [MEM].
Sources
- https://developer.withings.com/developer-guide/v3/withings-solutions/withings-api-plans/
- https://developer.withings.com/api-reference/
- Open Wearables
backend/app/services/providers/withings/