# Withings API

## Token expiry

When the access token expires, HTTP status `200 OK` is returned, but the response body is as follows:

```json
{
    "status": 401,
    "body": {},
    "error": "XRequestID: Not provided invalid_token: The access token provided is invalid"
}
```

## Fetching health data

Health records can be fetched via GET request as follows:

```http
https://wbsapi.withings.net/measure?action=getmeas&meastypes=9,10,54,71,11
```

The type of vitals measurement is mapped as follows:

| Code | Type                     | Unit |
|------|--------------------------|------|
| 9    | Diastolic Blood Pressure | mmHg |
| 10   | Systolic Blood Pressure  | mmHg |
| 11   | Heart Rate               | bpm  |
| 54   | SP02                     | %    |
| 71   | Body Temperature         | °C   |

Note the `unit`-field in the response.
For body temperature, the `unit`-field has the value `-3`.
This means that to get the body temperature in °C, you must multiply the `value` by `10^(-3)`.

The time of measurement can be parsed from the `measuregrps`'s `date` field.

A successful response looks like so:

```json
{
    "status": 0,
    "body": {
        "updatetime": 1690491663,
        "timezone": "Europe/Berlin",
        "measuregrps": [
            {
                "grpid": 4716596696,
                "attrib": 0,
                "date": 1690491576,
                "created": 1690491663,
                "modified": 1690491663,
                "category": 1,
                "deviceid": "c405eb8e0e053f6601e151c7e43c04e29aad6956",
                "hash_deviceid": "c405eb8e0e053f6601e151c7e43c04e29aad6956",
                "measures": [
                    {
                        "value": 89,
                        "type": 9,
                        "unit": 0,
                        "algo": 0,
                        "fm": 3
                    },
                    {
                        "value": 109,
                        "type": 10,
                        "unit": 0,
                        "algo": 0,
                        "fm": 3
                    },
                    {
                        "value": 88,
                        "type": 11,
                        "unit": 0,
                        "algo": 0,
                        "fm": 3
                    }
                ],
                "modelid": 44,
                "model": "BPM Core",
                "comment": null
            },
            {
                "grpid": 4716596681,
                "attrib": 0,
                "date": 1690491236,
                "created": 1690491662,
                "modified": 1690491662,
                "category": 1,
                "deviceid": "c405eb8e0e053f6601e151c7e43c04e29aad6956",
                "hash_deviceid": "c405eb8e0e053f6601e151c7e43c04e29aad6956",
                "measures": [
                    {
                        "value": 65,
                        "type": 9,
                        "unit": 0,
                        "algo": 0,
                        "fm": 3
                    },
                    {
                        "value": 92,
                        "type": 10,
                        "unit": 0,
                        "algo": 0,
                        "fm": 3
                    },
                    {
                        "value": 88,
                        "type": 11,
                        "unit": 0,
                        "algo": 0,
                        "fm": 3
                    }
                ],
                "modelid": 44,
                "model": "BPM Core",
                "comment": null
            },
            {
                "grpid": 4712963495,
                "attrib": 0,
                "date": 1690375238,
                "created": 1690375243,
                "modified": 1690375243,
                "category": 1,
                "deviceid": "dbf7f61809d5fb350a16a50f6af6e826f0746082",
                "hash_deviceid": "dbf7f61809d5fb350a16a50f6af6e826f0746082",
                "measures": [
                    {
                        "value": 99,
                        "type": 54,
                        "unit": 0,
                        "algo": 33619971,
                        "fm": 3,
                        "apppfmid": 9,
                        "appliver": 2741,
                        "algo_params": {
                            "1": 0,
                            "2": 15
                        }
                    }
                ],
                "modelid": null,
                "model": null,
                "comment": null,
                "is_inconclusive": false
            },
            {
                "grpid": 4712927310,
                "attrib": 1,
                "date": 1690374434,
                "created": 1690374456,
                "modified": 1690374486,
                "category": 1,
                "deviceid": "1d453daf947378fac40677e7a085eea73750b061",
                "hash_deviceid": "1d453daf947378fac40677e7a085eea73750b061",
                "measures": [
                    {
                        "value": 37370,
                        "type": 71,
                        "unit": -3,
                        "algo": 0,
                        "fm": 0
                    }
                ],
                "modelid": null,
                "model": null,
                "comment": null
            },
            {
                "grpid": 4712911433,
                "attrib": 0,
                "date": 1690373994,
                "created": 1690374078,
                "modified": 1690374078,
                "category": 1,
                "deviceid": "c405eb8e0e053f6601e151c7e43c04e29aad6956",
                "hash_deviceid": "c405eb8e0e053f6601e151c7e43c04e29aad6956",
                "measures": [
                    {
                        "value": 88,
                        "type": 9,
                        "unit": 0,
                        "algo": 0,
                        "fm": 3
                    },
                    {
                        "value": 124,
                        "type": 10,
                        "unit": 0,
                        "algo": 0,
                        "fm": 3
                    },
                    {
                        "value": 70,
                        "type": 11,
                        "unit": 0,
                        "algo": 0,
                        "fm": 3
                    }
                ],
                "modelid": null,
                "model": null,
                "comment": null
            }
        ]
    }
}
```
