withings-family
Fetches health data from the Withings API for multiple family members including weight, body composition (fat, muscle.
Installation
npx clawhub@latest install withings-familyView the full skill documentation and source below.
Documentation
This skill allows you to interact with Withings accounts for multiple family members to retrieve comprehensive health metrics from Withings devices (smart scales, sleep analyzers, activity trackers, etc.).
Multi-User Support
This skill natively supports multiple users with per-user token files:
tokens-alice.json
tokens-bob.json
tokens-charlie.json
Each family member authenticates once via OAuth. Their tokens are stored separately and refreshed automatically. No token copying or switching required — just pass the user ID as the first argument.
python3 scripts/withings.py alice weight
python3 scripts/withings.py bob sleep
python3 scripts/withings.py charlie activity
When to Use This Skill
Use this skill when the user:
- Asks about their weight or weight history
- Wants to see their body composition (fat %, muscle mass, bone mass, hydration)
- Requests their daily activity (steps, distance, calories burned)
- Asks about their sleep data (duration, quality, deep sleep, REM)
- Mentions "Withings" or any Withings device (Body+, Sleep Analyzer, ScanWatch, etc.)
- Wants to track their or their family's health progress over time
Setup: Creating a Withings Developer App
Before using this skill, you need to create a free Withings developer application to get your API credentials.
Step 1: Create a Withings Developer Account
Step 2: Create Your Application
- Application Name: Choose a name (e.g., "My Clawdbot Health")
- Description: Brief description of your use case
- Contact Email: Your email address
- Callback URL:
(required for OAuth)
- **Application Type**: Select "Personal Use" or appropriate type
3. Submit the application
### Step 3: Get Your Credentials
Once your application is created:
1. Go to **My Apps** and select your application
2. You'll find:
- **Client ID** → Set as WITHINGS_CLIENT_ID environment variable
- **Client Secret** → Set as WITHINGS_CLIENT_SECRET environment variable
### Step 4: Configure Environment Variables
Add these to your Clawdbot environment:
__CODE_BLOCK_2__
Or create a .env file in ~/.clawdbot/withings-family/.env:
__CODE_BLOCK_3__
## Configuration
The skill provides two scripts (in scripts/):
- **scripts/withings_oauth_local.py** — Automatic OAuth with local callback server (recommended)
- **scripts/withings.py** — Main CLI + manual OAuth
**Credentials location:** ~/.clawdbot/withings-family/
- .env — Client ID/Secret (optional, can use ENV vars instead)
- tokens-.json — OAuth tokens per user (mode 600)
Before any data retrieval, check if the user is authenticated. If an error mentions "No token found", guide the user through the initial authentication process for that specific user.
## Authentication Methods
### Method A: Automatic OAuth (Recommended)
Uses a local callback server to capture the code automatically:
__CODE_BLOCK_4__
Example:
__CODE_BLOCK_5__
The script will:
1. Print the authorization URL
2. Start a local server on localhost:18081
3. Wait for the redirect
4. Automatically capture the code and exchange for tokens
5. Save tokens to tokens-.json
### Method B: Manual OAuth
Traditional two-step flow (see "Authentication" command below).
## Available Commands
All commands follow the format:
__CODE_BLOCK_6__
### 1. Authentication
First-time setup for a user — generates the OAuth URL:
__CODE_BLOCK_7__
After the user visits the URL and gets the authorization code:
__CODE_BLOCK_8__
Repeat for each family member who needs access.
### 2. Get Weight
Retrieve the latest weight measurements:
__CODE_BLOCK_9__
Returns the 5 most recent weight entries in JSON format.
**Example output:**
__CODE_BLOCK_10__
### 3. Get Body Composition
Retrieve comprehensive body metrics (fat, muscle, bone, water, BMI):
__CODE_BLOCK_11__
Returns the 5 most recent body composition measurements.
**Example output:**
__CODE_BLOCK_12__
### 4. Get Activity
Retrieve daily activity data (steps, distance, calories):
__CODE_BLOCK_13__
Optionally specify the number of days (default: 7):
__CODE_BLOCK_14__
**Example output:**
__CODE_BLOCK_15__
### 5. Get Sleep
Retrieve sleep data and quality:
__CODE_BLOCK_16__
Optionally specify the number of days (default: 7):
__CODE_BLOCK_17__
**Example output:**
__CODE_BLOCK_18__
## Error Handling
Common errors and how to resolve them:
| Error | Cause | Solution |
|-------|-------|----------|
| "No token found" | User not authenticated | Run python3 scripts/withings.py auth and follow the OAuth flow |
| "Failed to refresh token" | Token expired and refresh failed | Re-authenticate with python3 scripts/withings.py auth |
| "API Error Status: 401" | Invalid or expired credentials | Check your CLIENT_ID and CLIENT_SECRET, re-authenticate |
| "API Error Status: 503" | Withings API temporarily unavailable | Wait and retry later |
| Empty data | No measurements in the requested period | User needs to sync their Withings device |
## Notes
- **Multi-user:** Each family member has their own token file (tokens-{userId}.json)
- **Token refresh:** Tokens are automatically refreshed when they expire
- **Scopes:** Withings API scopes used: user.metrics, user.activity`- Device support: Data availability depends on which Withings devices the user owns
- Body composition: Requires a compatible smart scale (e.g., Body+, Body Comp)