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.

Usage notes

Read ranges include both ends and cover at most 366 days per request. Pro has no plan history cap; Free app history is the latest 7 days, but Free accounts cannot call the API.

All operations require Pro or a trial. GET and DELETE take query parameters; other methods take a JSON body. The input table also includes any MCP-only idempotency_key argument; REST sends it as a header. See retrying creates. Example ids are synthetic; find your own with the search and list operations.

Operations

list_body_metrics

GET https://api.dailygoal.fit/v1/body-metrics

MCP tool list_body_metrics · Read-only · DailyGoal data 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

FieldTypeDescription
metric"weight" | "body_fat" | "steps"`weight` (kg or lb), `body_fat` (percent) or `steps` (whole steps).
fromoptionalstring (YYYY-MM-DD)First day, YYYY-MM-DD. Defaults to 29 days before `to`, so the default range covers 30 days including both ends.
tooptionalstring (YYYY-MM-DD)Last day, YYYY-MM-DD. Defaults to today's Activity Day.
Full input schema, including bounds and nested alternatives (MCP)
JSON Schema
{
  "type": "object",
  "properties": {
    "metric": {
      "type": "string",
      "enum": [
        "weight",
        "body_fat",
        "steps"
      ],
      "description": "`weight` (kg or lb), `body_fat` (percent) or `steps` (whole steps)."
    },
    "from": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "First day, YYYY-MM-DD. Defaults to 29 days before `to`, so the default range covers 30 days including both ends."
    },
    "to": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Last day, YYYY-MM-DD. Defaults to today's Activity Day."
    }
  },
  "required": [
    "metric"
  ],
  "additionalProperties": true
}

Output

FieldTypeDescription
metric"weight" | "body_fat" | "steps"`weight` (kg or lb), `body_fat` (percent) or `steps` (whole steps).
fromstring (YYYY-MM-DD)
tostring (YYYY-MM-DD)
timezonestringIANA timezone that defines the user's Activity Day.
readingsobject[]One reading per day that has one, oldest first. There is no cursor: the range is complete.
readings[].datestring (YYYY-MM-DD)
readings[].valuenumberCanonical value: kilograms, percent or steps.
readings[].unit"kg" | "percent" | "steps"
readings[].displayobjectThe same reading in the user's preferred unit.
readings[].display.valuenumber
readings[].display.unit"kg" | "lb" | "percent" | "steps"
Full output schema
JSON Schema
{
  "type": "object",
  "properties": {
    "metric": {
      "type": "string",
      "enum": [
        "weight",
        "body_fat",
        "steps"
      ],
      "description": "`weight` (kg or lb), `body_fat` (percent) or `steps` (whole steps)."
    },
    "from": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "to": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "timezone": {
      "type": "string",
      "description": "IANA timezone that defines the user's Activity Day."
    },
    "readings": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "value": {
            "type": "number",
            "description": "Canonical value: kilograms, percent or steps."
          },
          "unit": {
            "type": "string",
            "enum": [
              "kg",
              "percent",
              "steps"
            ]
          },
          "display": {
            "type": "object",
            "properties": {
              "value": {
                "type": "number"
              },
              "unit": {
                "type": "string",
                "enum": [
                  "kg",
                  "lb",
                  "percent",
                  "steps"
                ]
              }
            },
            "required": [
              "value",
              "unit"
            ],
            "additionalProperties": true,
            "description": "The same reading in the user's preferred unit."
          }
        },
        "required": [
          "date",
          "value",
          "unit",
          "display"
        ],
        "additionalProperties": true
      },
      "description": "One reading per day that has one, oldest first. There is no cursor: the range is complete."
    }
  },
  "required": [
    "metric",
    "from",
    "to",
    "timezone",
    "readings"
  ],
  "additionalProperties": true
}

Example request

REST
curl "https://api.dailygoal.fit/v1/body-metrics?metric=weight&from=2026-09-12&to=2026-09-14" \
  -H "Authorization: Bearer $DAILYGOAL_API_TOKEN"
MCP tools/call
{
  "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.

json
{
  "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

set_body_metrics

PUT https://api.dailygoal.fit/v1/body-metrics

MCP tool set_body_metrics · Changes data · Destructive · DailyGoal data only

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

FieldTypeDescription
metric"weight" | "body_fat" | "steps"`weight` (kg or lb), `body_fat` (percent) or `steps` (whole steps).
readingsobject[]1 to 100 readings. A later reading for the same day wins.
readings[].dateoptionalstring (YYYY-MM-DD)YYYY-MM-DD in the user's timezone. Defaults to today's Activity Day. Future dates are rejected.
readings[].valuenumberWeight 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`).
Full input schema, including bounds and nested alternatives (MCP)
JSON Schema
{
  "type": "object",
  "properties": {
    "metric": {
      "type": "string",
      "enum": [
        "weight",
        "body_fat",
        "steps"
      ],
      "description": "`weight` (kg or lb), `body_fat` (percent) or `steps` (whole steps)."
    },
    "readings": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "YYYY-MM-DD in the user's timezone. Defaults to today's Activity Day. Future dates are rejected."
          },
          "value": {
            "type": "number",
            "description": "Weight 20-500 kg (or the same in lb), body fat 2-80 percent, or steps 0-100,000."
          },
          "unit": {
            "type": "string",
            "enum": [
              "kg",
              "lb",
              "percent",
              "steps"
            ],
            "description": "Required for weight: `kg` or `lb`. Optional for body fat (`percent`) and steps (`steps`)."
          }
        },
        "required": [
          "value"
        ],
        "additionalProperties": true
      },
      "minItems": 1,
      "maxItems": 100,
      "description": "1 to 100 readings. A later reading for the same day wins."
    }
  },
  "required": [
    "metric",
    "readings"
  ],
  "additionalProperties": true
}

Output

FieldTypeDescription
metric"weight" | "body_fat" | "steps"`weight` (kg or lb), `body_fat` (percent) or `steps` (whole steps).
timezonestringIANA timezone that defines the user's Activity Day.
readingsobject[]Each stored reading with its resolved date.
readings[].datestring (YYYY-MM-DD)
readings[].valuenumberCanonical value: kilograms, percent or steps.
readings[].unit"kg" | "percent" | "steps"
readings[].displayobjectThe same reading in the user's preferred unit.
readings[].display.valuenumber
readings[].display.unit"kg" | "lb" | "percent" | "steps"
readings[].changedbooleanFalse when the day already held this value.
Full output schema
JSON Schema
{
  "type": "object",
  "properties": {
    "metric": {
      "type": "string",
      "enum": [
        "weight",
        "body_fat",
        "steps"
      ],
      "description": "`weight` (kg or lb), `body_fat` (percent) or `steps` (whole steps)."
    },
    "timezone": {
      "type": "string",
      "description": "IANA timezone that defines the user's Activity Day."
    },
    "readings": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "value": {
            "type": "number",
            "description": "Canonical value: kilograms, percent or steps."
          },
          "unit": {
            "type": "string",
            "enum": [
              "kg",
              "percent",
              "steps"
            ]
          },
          "display": {
            "type": "object",
            "properties": {
              "value": {
                "type": "number"
              },
              "unit": {
                "type": "string",
                "enum": [
                  "kg",
                  "lb",
                  "percent",
                  "steps"
                ]
              }
            },
            "required": [
              "value",
              "unit"
            ],
            "additionalProperties": true,
            "description": "The same reading in the user's preferred unit."
          },
          "changed": {
            "type": "boolean",
            "description": "False when the day already held this value."
          }
        },
        "required": [
          "date",
          "value",
          "unit",
          "display",
          "changed"
        ],
        "additionalProperties": true
      },
      "description": "Each stored reading with its resolved date."
    }
  },
  "required": [
    "metric",
    "timezone",
    "readings"
  ],
  "additionalProperties": true
}

Example request

REST
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"}]}'
MCP tools/call
{
  "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.

json
{
  "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

delete_body_metric

DELETE https://api.dailygoal.fit/v1/body-metrics

MCP tool delete_body_metric · Changes data · Destructive · DailyGoal data only

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

FieldTypeDescription
metric"weight" | "body_fat" | "steps"`weight` (kg or lb), `body_fat` (percent) or `steps` (whole steps).
dateoptionalstring (YYYY-MM-DD)YYYY-MM-DD in the user's timezone. Defaults to today's Activity Day.
Full input schema, including bounds and nested alternatives (MCP)
JSON Schema
{
  "type": "object",
  "properties": {
    "metric": {
      "type": "string",
      "enum": [
        "weight",
        "body_fat",
        "steps"
      ],
      "description": "`weight` (kg or lb), `body_fat` (percent) or `steps` (whole steps)."
    },
    "date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "YYYY-MM-DD in the user's timezone. Defaults to today's Activity Day."
    }
  },
  "required": [
    "metric"
  ],
  "additionalProperties": true
}

Output

FieldTypeDescription
metric"weight" | "body_fat" | "steps"`weight` (kg or lb), `body_fat` (percent) or `steps` (whole steps).
datestring (YYYY-MM-DD)
timezonestringIANA timezone that defines the user's Activity Day.
deletedtrue
Full output schema
JSON Schema
{
  "type": "object",
  "properties": {
    "metric": {
      "type": "string",
      "enum": [
        "weight",
        "body_fat",
        "steps"
      ],
      "description": "`weight` (kg or lb), `body_fat` (percent) or `steps` (whole steps)."
    },
    "date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "timezone": {
      "type": "string",
      "description": "IANA timezone that defines the user's Activity Day."
    },
    "deleted": {
      "type": "boolean",
      "enum": [
        true
      ]
    }
  },
  "required": [
    "metric",
    "date",
    "timezone",
    "deleted"
  ],
  "additionalProperties": true
}

Example request

REST
curl -X DELETE "https://api.dailygoal.fit/v1/body-metrics?metric=weight&date=2026-09-13" \
  -H "Authorization: Bearer $DAILYGOAL_API_TOKEN"
MCP tools/call
{
  "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.

json
{
  "metric": "weight",
  "date": "2026-09-13",
  "timezone": "Europe/London",
  "deleted": true
}

Errors