Workouts reference

List, read, log, replace and delete finished workouts with their exercises and sets.

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_workouts

GET https://api.dailygoal.fit/v1/workouts

MCP tool list_workouts · Read-only

List finished workouts as summaries, newest first, with pagination. Omit from and to to list every workout, or give either to bound the date window. Summaries have no sets; use get_workout for one workout's exercises and sets.

Input

FieldTypeDescription
fromoptionalstring (YYYY-MM-DD)First Activity Day to include, YYYY-MM-DD. Omit for no lower bound.
tooptionalstring (YYYY-MM-DD)Last Activity Day to include, YYYY-MM-DD, inclusive. Omit for no upper bound.
limitoptionalintegerPage size. Defaults to 50.
cursoroptionalstringnextCursor from the previous page, with the same from and to.

Output

FieldTypeDescription
workoutsobject[]
workouts[].idstringWorkout id for get_workout, replace_workout and delete_workout.
workouts[].namestring
workouts[].datestring (YYYY-MM-DD)Activity Day the workout counts toward, YYYY-MM-DD.
workouts[].startTimeoptionalstringISO 8601 timestamp.
workouts[].endTimeoptionalstringISO 8601 timestamp.
workouts[].durationSecondsoptionalinteger
workouts[].notesoptionalstring
workouts[].estimatedCaloriesoptionalnumberEstimated kcal burned. Absent when the user has no known body weight.
workouts[].exerciseCountinteger
hasMorebooleanTrue when more workouts match. Pass nextCursor to get them.
nextCursorstring | null

Example request

REST
curl "https://api.dailygoal.fit/v1/workouts?from=2026-09-08&to=2026-09-14&limit=20" \
  -H "Authorization: Bearer $DAILYGOAL_API_TOKEN"
MCP tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_workouts",
    "arguments": {
      "from": "2026-09-08",
      "to": "2026-09-14",
      "limit": 20
    }
  }
}

Example response

Synthetic data. REST returns this object as the body; MCP returns it as structuredContent.

json
{
  "workouts": [
    {
      "id": "m1774k2j9h6g3f0d7s4a1p8o5i2u9y6t",
      "name": "Push day",
      "date": "2026-09-14",
      "startTime": "2026-09-14T17:30:00.000Z",
      "endTime": "2026-09-14T18:25:00.000Z",
      "durationSeconds": 3300,
      "notes": "Bench felt strong.",
      "estimatedCalories": 310,
      "exerciseCount": 2
    },
    {
      "id": "m1775l3k0j7h4g1f8d5s2a9p6o3i0u7y",
      "name": "Easy run",
      "date": "2026-09-12",
      "startTime": "2026-09-12T08:05:00.000Z",
      "endTime": "2026-09-12T08:41:00.000Z",
      "durationSeconds": 2160,
      "estimatedCalories": 420,
      "exerciseCount": 1
    }
  ],
  "hasMore": false,
  "nextCursor": null
}

Errors

get_workout

GET https://api.dailygoal.fit/v1/workouts/detail

MCP tool get_workout · Read-only

Get one finished workout with every exercise and set. Use list_workouts to browse workouts by date.

Input

FieldTypeDescription
idstringWorkout id from list_workouts or log_workout.

Output

FieldTypeDescription
idstringWorkout id for get_workout, replace_workout and delete_workout.
namestring
datestring (YYYY-MM-DD)Activity Day the workout counts toward, YYYY-MM-DD.
startTimeoptionalstringISO 8601 timestamp.
endTimeoptionalstringISO 8601 timestamp.
durationSecondsoptionalinteger
notesoptionalstring
estimatedCaloriesoptionalnumberEstimated kcal burned. Absent when the user has no known body weight.
exercisesobject[]
exercises[].exerciseIdstring
exercises[].namestring
exercises[].setsobject[]
exercises[].sets[].setNumberinteger
exercises[].sets[].setType"warmup" | "working"
exercises[].sets[].weightoptionalobjectLoad in the user's preferred strength unit.
exercises[].sets[].weight.valuenumber
exercises[].sets[].weight.unit"kg" | "lb"
exercises[].sets[].weightKgoptionalnumberCanonical load in kilograms.
exercises[].sets[].repsoptionalinteger
exercises[].sets[].durationSecondsoptionalnumber
exercises[].sets[].distanceMetersoptionalnumber
exercises[].sets[].holdSecondsoptionalnumber
exercises[].sets[].intensityoptionalnumberEffort from 0 to 10.

Example request

REST
curl "https://api.dailygoal.fit/v1/workouts/detail?id=m1774k2j9h6g3f0d7s4a1p8o5i2u9y6t" \
  -H "Authorization: Bearer $DAILYGOAL_API_TOKEN"
MCP tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_workout",
    "arguments": {
      "id": "m1774k2j9h6g3f0d7s4a1p8o5i2u9y6t"
    }
  }
}

Example response

Synthetic data. REST returns this object as the body; MCP returns it as structuredContent.

json
{
  "id": "m1774k2j9h6g3f0d7s4a1p8o5i2u9y6t",
  "name": "Push day",
  "date": "2026-09-14",
  "startTime": "2026-09-14T17:30:00.000Z",
  "endTime": "2026-09-14T18:25:00.000Z",
  "durationSeconds": 3300,
  "notes": "Bench felt strong.",
  "estimatedCalories": 310,
  "exercises": [
    {
      "exerciseId": "jx71q4w7e0r3t6y9u2i5o8p1a4s7d0f3",
      "name": "Barbell Bench Press",
      "sets": [
        {
          "setNumber": 1,
          "setType": "warmup",
          "weight": {
            "value": 40,
            "unit": "kg"
          },
          "weightKg": 40,
          "reps": 10
        },
        {
          "setNumber": 2,
          "setType": "working",
          "weight": {
            "value": 70,
            "unit": "kg"
          },
          "weightKg": 70,
          "reps": 8,
          "intensity": 7
        },
        {
          "setNumber": 3,
          "setType": "working",
          "weight": {
            "value": 70,
            "unit": "kg"
          },
          "weightKg": 70,
          "reps": 8,
          "intensity": 8
        }
      ]
    },
    {
      "exerciseId": "jx73e6r9t2y5u8i1o4p7a0s3d6f9g2h5",
      "name": "Overhead Press",
      "sets": [
        {
          "setNumber": 1,
          "setType": "working",
          "weight": {
            "value": 40,
            "unit": "kg"
          },
          "weightKg": 40,
          "reps": 8,
          "intensity": 7
        },
        {
          "setNumber": 2,
          "setType": "working",
          "weight": {
            "value": 40,
            "unit": "kg"
          },
          "weightKg": 40,
          "reps": 7,
          "intensity": 9
        }
      ]
    }
  ]
}

Errors

log_workout

POST https://api.dailygoal.fit/v1/workouts

MCP tool log_workout · Changes data · Accepts Idempotency-Key

Log a workout that is already finished, with its exercises and sets. Get exercise ids from search_exercises. Each call adds a new workout; to correct an existing one use replace_workout.

Input

FieldTypeDescription
namestring
durationSecondsoptionalintegerLength of the whole session in seconds. Optional. Record a run's or set's own time on the set's durationSeconds.
notesoptionalstring
exercisesobject[]
exercises[].exerciseIdoptionalstringExercise id from search_exercises. Preferred.
exercises[].nameoptionalstringExact catalogue name, used when exerciseId is absent.
exercises[].setsobject[]
exercises[].sets[].setTypeoptional"warmup" | "working"Defaults to working.
exercises[].sets[].weightoptionalobjectA load with its unit. Stored as kilograms.
exercises[].sets[].weight.valuenumber
exercises[].sets[].weight.unit"kg" | "lb"
exercises[].sets[].loadIntentoptional"bar_total" | "per_hand" | "plates_each_side" | "assistance" | "added_bodyweight" | "machine_stack" | "custom"What the weight means, for example per_hand for dumbbells. Omit for a plain total load.
exercises[].sets[].repsoptionalinteger
exercises[].sets[].durationSecondsoptionalnumberTime this set took, in seconds. For a timed effort such as 5 km in 28 minutes, put 1680 here with distanceMeters 5000.
exercises[].sets[].distanceMetersoptionalnumber
exercises[].sets[].holdSecondsoptionalnumber
exercises[].sets[].intensityoptionalnumberEffort from 0 to 10.
dateoptionalstring (YYYY-MM-DD)Activity Day, YYYY-MM-DD. Defaults to today in the user's timezone.
idempotency_keyoptionalstringOptional. A unique value for this create, for example a UUID. Retrying with the same key and arguments within 24 hours returns the first result instead of creating a duplicate.

Output

FieldTypeDescription
idstring
datestring (YYYY-MM-DD)The Activity Day the workout was saved to.
timezonestringIANA timezone that defines that Activity Day.
estimatedCaloriesoptionalnumber

Example request

REST
curl -X POST "https://api.dailygoal.fit/v1/workouts" \
  -H "Authorization: Bearer $DAILYGOAL_API_TOKEN" \
  -H "Idempotency-Key: 3f1c9a52-7d4e-4b8a-9e21-5c6d7e8f9a01" \
  -H "Content-Type: application/json" \
  -d '{"name":"Push day","date":"2026-09-14","durationSeconds":3300,"notes":"Bench felt strong.","exercises":[{"exerciseId":"jx71q4w7e0r3t6y9u2i5o8p1a4s7d0f3","sets":[{"setType":"warmup","weight":{"value":40,"unit":"kg"},"reps":10},{"weight":{"value":70,"unit":"kg"},"reps":8,"intensity":7},{"weight":{"value":70,"unit":"kg"},"reps":8,"intensity":8}]},{"exerciseId":"jx73e6r9t2y5u8i1o4p7a0s3d6f9g2h5","sets":[{"weight":{"value":40,"unit":"kg"},"reps":8,"intensity":7},{"weight":{"value":40,"unit":"kg"},"reps":7,"intensity":9}]}]}'
MCP tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "log_workout",
    "arguments": {
      "name": "Push day",
      "date": "2026-09-14",
      "durationSeconds": 3300,
      "notes": "Bench felt strong.",
      "exercises": [
        {
          "exerciseId": "jx71q4w7e0r3t6y9u2i5o8p1a4s7d0f3",
          "sets": [
            {
              "setType": "warmup",
              "weight": {
                "value": 40,
                "unit": "kg"
              },
              "reps": 10
            },
            {
              "weight": {
                "value": 70,
                "unit": "kg"
              },
              "reps": 8,
              "intensity": 7
            },
            {
              "weight": {
                "value": 70,
                "unit": "kg"
              },
              "reps": 8,
              "intensity": 8
            }
          ]
        },
        {
          "exerciseId": "jx73e6r9t2y5u8i1o4p7a0s3d6f9g2h5",
          "sets": [
            {
              "weight": {
                "value": 40,
                "unit": "kg"
              },
              "reps": 8,
              "intensity": 7
            },
            {
              "weight": {
                "value": 40,
                "unit": "kg"
              },
              "reps": 7,
              "intensity": 9
            }
          ]
        }
      ]
    }
  }
}

Example response

Synthetic data. REST returns this object as the body; MCP returns it as structuredContent.

json
{
  "id": "m1774k2j9h6g3f0d7s4a1p8o5i2u9y6t",
  "date": "2026-09-14",
  "timezone": "Europe/London",
  "estimatedCalories": 310
}

Errors

replace_workout

PUT https://api.dailygoal.fit/v1/workouts

MCP tool replace_workout · Changes data · Destructive

Replace a finished workout's name, date, duration, notes and its whole list of exercises and sets in one call. Exercises and sets you leave out are removed, and omitted notes are cleared. To add a new workout use log_workout.

Input

FieldTypeDescription
idstringWorkout id to replace.
namestring
durationSecondsoptionalintegerLength of the whole session in seconds. Optional. Record a run's or set's own time on the set's durationSeconds.
notesoptionalstring
exercisesobject[]
exercises[].exerciseIdoptionalstringExercise id from search_exercises. Preferred.
exercises[].nameoptionalstringExact catalogue name, used when exerciseId is absent.
exercises[].setsobject[]
exercises[].sets[].setTypeoptional"warmup" | "working"Defaults to working.
exercises[].sets[].weightoptionalobjectA load with its unit. Stored as kilograms.
exercises[].sets[].weight.valuenumber
exercises[].sets[].weight.unit"kg" | "lb"
exercises[].sets[].loadIntentoptional"bar_total" | "per_hand" | "plates_each_side" | "assistance" | "added_bodyweight" | "machine_stack" | "custom"What the weight means, for example per_hand for dumbbells. Omit for a plain total load.
exercises[].sets[].repsoptionalinteger
exercises[].sets[].durationSecondsoptionalnumberTime this set took, in seconds. For a timed effort such as 5 km in 28 minutes, put 1680 here with distanceMeters 5000.
exercises[].sets[].distanceMetersoptionalnumber
exercises[].sets[].holdSecondsoptionalnumber
exercises[].sets[].intensityoptionalnumberEffort from 0 to 10.
dateoptionalstring (YYYY-MM-DD)Activity Day, YYYY-MM-DD. Defaults to the workout's current date.

Output

FieldTypeDescription
idstring
datestring (YYYY-MM-DD)The Activity Day the workout was saved to.
timezonestringIANA timezone that defines that Activity Day.
estimatedCaloriesoptionalnumber

Example request

REST
curl -X PUT "https://api.dailygoal.fit/v1/workouts" \
  -H "Authorization: Bearer $DAILYGOAL_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"id":"m1774k2j9h6g3f0d7s4a1p8o5i2u9y6t","name":"Push day","durationSeconds":3600,"notes":"Added a last bench set.","exercises":[{"exerciseId":"jx71q4w7e0r3t6y9u2i5o8p1a4s7d0f3","sets":[{"setType":"warmup","weight":{"value":40,"unit":"kg"},"reps":10},{"weight":{"value":70,"unit":"kg"},"reps":8,"intensity":7},{"weight":{"value":70,"unit":"kg"},"reps":8,"intensity":8}]},{"exerciseId":"jx73e6r9t2y5u8i1o4p7a0s3d6f9g2h5","sets":[{"weight":{"value":40,"unit":"kg"},"reps":8,"intensity":7},{"weight":{"value":40,"unit":"kg"},"reps":7,"intensity":9}]}]}'
MCP tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "replace_workout",
    "arguments": {
      "id": "m1774k2j9h6g3f0d7s4a1p8o5i2u9y6t",
      "name": "Push day",
      "durationSeconds": 3600,
      "notes": "Added a last bench set.",
      "exercises": [
        {
          "exerciseId": "jx71q4w7e0r3t6y9u2i5o8p1a4s7d0f3",
          "sets": [
            {
              "setType": "warmup",
              "weight": {
                "value": 40,
                "unit": "kg"
              },
              "reps": 10
            },
            {
              "weight": {
                "value": 70,
                "unit": "kg"
              },
              "reps": 8,
              "intensity": 7
            },
            {
              "weight": {
                "value": 70,
                "unit": "kg"
              },
              "reps": 8,
              "intensity": 8
            }
          ]
        },
        {
          "exerciseId": "jx73e6r9t2y5u8i1o4p7a0s3d6f9g2h5",
          "sets": [
            {
              "weight": {
                "value": 40,
                "unit": "kg"
              },
              "reps": 8,
              "intensity": 7
            },
            {
              "weight": {
                "value": 40,
                "unit": "kg"
              },
              "reps": 7,
              "intensity": 9
            }
          ]
        }
      ]
    }
  }
}

Example response

Synthetic data. REST returns this object as the body; MCP returns it as structuredContent.

json
{
  "id": "m1774k2j9h6g3f0d7s4a1p8o5i2u9y6t",
  "date": "2026-09-14",
  "timezone": "Europe/London",
  "estimatedCalories": 335
}

Errors

delete_workout

DELETE https://api.dailygoal.fit/v1/workouts

MCP tool delete_workout · Changes data · Destructive

Delete a finished workout with all its exercises and sets. This cannot be undone. To correct a workout instead, use replace_workout.

Input

FieldTypeDescription
idstringWorkout id from list_workouts or log_workout.

Output

FieldTypeDescription
idstring
deletedtrue
datestring (YYYY-MM-DD)The Activity Day the workout was on.
timezonestring

Example request

REST
curl -X DELETE "https://api.dailygoal.fit/v1/workouts?id=m1775l3k0j7h4g1f8d5s2a9p6o3i0u7y" \
  -H "Authorization: Bearer $DAILYGOAL_API_TOKEN"
MCP tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "delete_workout",
    "arguments": {
      "id": "m1775l3k0j7h4g1f8d5s2a9p6o3i0u7y"
    }
  }
}

Example response

Synthetic data. REST returns this object as the body; MCP returns it as structuredContent.

json
{
  "id": "m1775l3k0j7h4g1f8d5s2a9p6o3i0u7y",
  "deleted": true,
  "date": "2026-09-12",
  "timezone": "Europe/London"
}

Errors