Body Metrics reference
List, record and delete daily weight, body fat and steps readings, one reading per metric per day.
The DailyGoal API is not available on the Free plan. It works with a paid plan or during a free trial. See plans.
Operations
list_body_metrics: List body metricsset_body_metrics: Set body metricsdelete_body_metric: Delete body metric
list_body_metrics
GET https://api.dailygoal.fit/v1/body-metrics
MCP tool list_body_metrics · Read-only
Lists the user's weight, body fat or steps readings (at most one per day) for a date range of up to 366 days, oldest first, with no paging. Omit `to` for today and `from` for 29 days before `to`, a 30-day range that includes both ends. Values come in canonical units with the user's display unit beside them. This reads measurements only: for meals use list_food_entries, for training use list_workouts, and for goal progress use get_daily_goals.
Input
| Field | Type | Description |
|---|---|---|
| metric | "weight" | "body_fat" | "steps" | `weight` (kg or lb), `body_fat` (percent) or `steps` (whole steps). |
| fromoptional | string (YYYY-MM-DD) | First day, YYYY-MM-DD. Defaults to 29 days before `to`, so the default range covers 30 days including both ends. |
| tooptional | string (YYYY-MM-DD) | Last day, YYYY-MM-DD. Defaults to today's Activity Day. |
Output
| Field | Type | Description |
|---|---|---|
| metric | "weight" | "body_fat" | "steps" | `weight` (kg or lb), `body_fat` (percent) or `steps` (whole steps). |
| from | string (YYYY-MM-DD) | |
| to | string (YYYY-MM-DD) | |
| timezone | string | IANA timezone that defines the user's Activity Day. |
| readings | object[] | One reading per day that has one, oldest first. There is no cursor: the range is complete. |
| readings[].date | string (YYYY-MM-DD) | |
| readings[].value | number | Canonical value: kilograms, percent or steps. |
| readings[].unit | "kg" | "percent" | "steps" | |
| readings[].display | object | The same reading in the user's preferred unit. |
| readings[].display.value | number | |
| readings[].display.unit | "kg" | "lb" | "percent" | "steps" |
Example request
curl "https://api.dailygoal.fit/v1/body-metrics?metric=weight&from=2026-09-12&to=2026-09-14" \
-H "Authorization: Bearer $DAILYGOAL_API_TOKEN"{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_body_metrics",
"arguments": {
"metric": "weight",
"from": "2026-09-12",
"to": "2026-09-14"
}
}
}Example response
Synthetic data. REST returns this object as the body; MCP returns it as structuredContent.
{
"metric": "weight",
"from": "2026-09-12",
"to": "2026-09-14",
"timezone": "Europe/London",
"readings": [
{
"date": "2026-09-12",
"value": 78.4,
"unit": "kg",
"display": {
"value": 78.4,
"unit": "kg"
}
},
{
"date": "2026-09-13",
"value": 78.1,
"unit": "kg",
"display": {
"value": 78.1,
"unit": "kg"
}
},
{
"date": "2026-09-14",
"value": 77.9,
"unit": "kg",
"display": {
"value": 77.9,
"unit": "kg"
}
}
]
}Errors
unauthorized(401)origin_not_allowed(403)misdirected_request(421)subscription_required(403)rate_limited(429)validation_failed(400)internal_error(500)
set_body_metrics
PUT https://api.dailygoal.fit/v1/body-metrics
MCP tool set_body_metrics · Changes data · Destructive
Records weight, body fat or steps readings: one metric per call, up to 100 days per call, for example to backfill history. Each reading replaces the day's existing value for that metric. Weight needs `unit` `kg` or `lb`. Omit `date` for today's Activity Day; the response echoes each resolved date and the timezone. Updates the user's latest weight or body fat, steps goals, streak and badges as the app does. To remove a reading use delete_body_metric; to log meals use log_food_entry.
Input
| Field | Type | Description |
|---|---|---|
| metric | "weight" | "body_fat" | "steps" | `weight` (kg or lb), `body_fat` (percent) or `steps` (whole steps). |
| readings | object[] | 1 to 100 readings. A later reading for the same day wins. |
| readings[].dateoptional | string (YYYY-MM-DD) | YYYY-MM-DD in the user's timezone. Defaults to today's Activity Day. Future dates are rejected. |
| readings[].value | number | Weight 20-500 kg (or the same in lb), body fat 2-80 percent, or steps 0-100,000. |
| readings[].unitoptional | "kg" | "lb" | "percent" | "steps" | Required for weight: `kg` or `lb`. Optional for body fat (`percent`) and steps (`steps`). |
Output
| Field | Type | Description |
|---|---|---|
| metric | "weight" | "body_fat" | "steps" | `weight` (kg or lb), `body_fat` (percent) or `steps` (whole steps). |
| timezone | string | IANA timezone that defines the user's Activity Day. |
| readings | object[] | Each stored reading with its resolved date. |
| readings[].date | string (YYYY-MM-DD) | |
| readings[].value | number | Canonical value: kilograms, percent or steps. |
| readings[].unit | "kg" | "percent" | "steps" | |
| readings[].display | object | The same reading in the user's preferred unit. |
| readings[].display.value | number | |
| readings[].display.unit | "kg" | "lb" | "percent" | "steps" | |
| readings[].changed | boolean | False when the day already held this value. |
Example request
curl -X PUT "https://api.dailygoal.fit/v1/body-metrics" \
-H "Authorization: Bearer $DAILYGOAL_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"metric":"weight","readings":[{"date":"2026-09-13","value":78.1,"unit":"kg"},{"value":77.9,"unit":"kg"}]}'{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "set_body_metrics",
"arguments": {
"metric": "weight",
"readings": [
{
"date": "2026-09-13",
"value": 78.1,
"unit": "kg"
},
{
"value": 77.9,
"unit": "kg"
}
]
}
}
}Example response
Synthetic data. REST returns this object as the body; MCP returns it as structuredContent.
{
"metric": "weight",
"timezone": "Europe/London",
"readings": [
{
"date": "2026-09-13",
"value": 78.1,
"unit": "kg",
"display": {
"value": 78.1,
"unit": "kg"
},
"changed": false
},
{
"date": "2026-09-14",
"value": 77.9,
"unit": "kg",
"display": {
"value": 77.9,
"unit": "kg"
},
"changed": true
}
]
}Errors
unauthorized(401)origin_not_allowed(403)misdirected_request(421)subscription_required(403)rate_limited(429)validation_failed(400)internal_error(500)
delete_body_metric
DELETE https://api.dailygoal.fit/v1/body-metrics
MCP tool delete_body_metric · Changes data · Destructive
Deletes one day's weight, body fat or steps reading. Omit `date` for today's Activity Day. Returns not_found when that day has no reading. To change a value instead of removing it, use set_body_metrics.
Input
| Field | Type | Description |
|---|---|---|
| metric | "weight" | "body_fat" | "steps" | `weight` (kg or lb), `body_fat` (percent) or `steps` (whole steps). |
| dateoptional | string (YYYY-MM-DD) | YYYY-MM-DD in the user's timezone. Defaults to today's Activity Day. |
Output
| Field | Type | Description |
|---|---|---|
| metric | "weight" | "body_fat" | "steps" | `weight` (kg or lb), `body_fat` (percent) or `steps` (whole steps). |
| date | string (YYYY-MM-DD) | |
| timezone | string | IANA timezone that defines the user's Activity Day. |
| deleted | true |
Example request
curl -X DELETE "https://api.dailygoal.fit/v1/body-metrics?metric=weight&date=2026-09-13" \
-H "Authorization: Bearer $DAILYGOAL_API_TOKEN"{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "delete_body_metric",
"arguments": {
"metric": "weight",
"date": "2026-09-13"
}
}
}Example response
Synthetic data. REST returns this object as the body; MCP returns it as structuredContent.
{
"metric": "weight",
"date": "2026-09-13",
"timezone": "Europe/London",
"deleted": true
}Errors
unauthorized(401)origin_not_allowed(403)misdirected_request(421)subscription_required(403)rate_limited(429)validation_failed(400)not_found(404)internal_error(500)