ba-thesis/app/withings/README.md

211 lines
6.5 KiB
Markdown
Raw Normal View History

# 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
}
]
}
}
```