Workout Templates reference

List, read, save and delete the user's workout plans: exercises with planned sets that the app starts a workout from.

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_workout_templates

GET https://api.dailygoal.fit/v1/workout-templates

MCP tool list_workout_templates · Read-only

List the user's saved workout templates, the plans the app starts a workout from, newest first, with pagination. Summaries name the exercises but have no sets; use get_workout_template for those. For DailyGoal's built-in plans use list_workout_presets; for workouts already done use list_workouts.

Input

FieldTypeDescription
queryoptionalstringWords in the template name. Results then come in relevance order instead of newest first.
limitoptionalintegerPage size. Defaults to 20.
cursoroptionalstringnextCursor from the previous page, with the same query.

Output

FieldTypeDescription
templatesobject[]
templates[].idstringTemplate id for get_workout_template, save_workout_template and delete_workout_template.
templates[].namestring
templates[].notesoptionalstring
templates[].exerciseCountinteger
templates[].exerciseNamesstring[]Exercise names in template order.
templates[].isTruncatedoptionaltruePresent and true when the template was saved with more than 30 exercises, so this result lists only 30. Such a template can only be deleted.
hasMorebooleanTrue when more templates match. Pass nextCursor to get them.
nextCursorstring | null

Example request

REST
curl "https://api.dailygoal.fit/v1/workout-templates?limit=10" \
  -H "Authorization: Bearer $DAILYGOAL_API_TOKEN"
MCP tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_workout_templates",
    "arguments": {
      "limit": 10
    }
  }
}

Example response

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

json
{
  "templates": [
    {
      "id": "kt71a4s7d0f3g6h9j2k5l8z1x4c7v0b3",
      "name": "Push day",
      "notes": "Heavy week",
      "exerciseCount": 2,
      "exerciseNames": [
        "Barbell Bench Press",
        "Overhead Press"
      ]
    }
  ],
  "hasMore": false,
  "nextCursor": null
}

Errors

get_workout_template

GET https://api.dailygoal.fit/v1/workout-templates/detail

MCP tool get_workout_template · Read-only

Get one saved workout template with every exercise and its planned sets. Use list_workout_templates to find the id. For a workout the user already did, use get_workout.

Input

FieldTypeDescription
idstringTemplate id from list_workout_templates or save_workout_template.

Output

FieldTypeDescription
idstringTemplate id for get_workout_template, save_workout_template and delete_workout_template.
namestring
notesoptionalstring
exercisesobject[]
exercises[].exerciseIdstring
exercises[].namestring
exercises[].notesoptionalstring
exercises[].setsobject[]
exercises[].sets[].setNumberinteger
exercises[].sets[].setType"warmup" | "working"
exercises[].sets[].repsoptionalinteger
exercises[].sets[].durationSecondsoptionalnumber
exercises[].sets[].distanceMetersoptionalnumber
exercises[].sets[].holdSecondsoptionalnumber
exercises[].sets[].restSecondsoptionalnumberRest after this set, in seconds.
exercises[].sets[].intensityoptionalnumberPlanned effort from 0 to 10.
exercises[].sets[].weightoptionalobjectPlanned load in the user's preferred strength unit.
exercises[].sets[].weight.valuenumber
exercises[].sets[].weight.unit"kg" | "lb"
exercises[].sets[].weightKgoptionalnumberCanonical planned load in kilograms.
isTruncatedoptionaltruePresent and true when the template was saved with more than 30 exercises, so this result lists only 30. Such a template can only be deleted.

Example request

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

Example response

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

json
{
  "id": "kt71a4s7d0f3g6h9j2k5l8z1x4c7v0b3",
  "name": "Push day",
  "notes": "Heavy week",
  "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": 80,
            "unit": "kg"
          },
          "weightKg": 80,
          "reps": 5,
          "restSeconds": 180
        }
      ]
    },
    {
      "exerciseId": "jx73e6r9t2y5u8i1o4p7a0s3d6f9g2h5",
      "name": "Overhead Press",
      "sets": [
        {
          "setNumber": 1,
          "setType": "working",
          "weight": {
            "value": 40,
            "unit": "kg"
          },
          "weightKg": 40,
          "reps": 8,
          "restSeconds": 120
        }
      ]
    }
  ]
}

Errors

save_workout_template

POST https://api.dailygoal.fit/v1/workout-templates

MCP tool save_workout_template · Changes data · Destructive · Accepts Idempotency-Key

Create a workout template, or replace one by passing its id: name, notes and the whole list of exercises with planned sets. Get exercise ids from search_exercises, or from list_workout_presets to copy a built-in plan. It records no workout; to log one the user did, use log_workout.

Input

FieldTypeDescription
idoptionalstringThe template to update. Omit it to create a new template.
namestring
notesoptionalstringOmitted notes are cleared on update.
exercisesobject[]
exercises[].exerciseIdoptionalstringExercise id from search_exercises or list_workout_presets. Preferred.
exercises[].nameoptionalstringExact catalogue name, used when exerciseId is absent.
exercises[].notesoptionalstring
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[].repsoptionalinteger
exercises[].sets[].durationSecondsoptionalnumber
exercises[].sets[].distanceMetersoptionalnumber
exercises[].sets[].holdSecondsoptionalnumber
exercises[].sets[].restSecondsoptionalintegerRest after this set, in seconds. Defaults to none.
exercises[].sets[].intensityoptionalnumberPlanned effort from 0 to 10.
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
createdbooleanTrue when this call created the template, false when it updated one.
templateobject
template.idstringTemplate id for get_workout_template, save_workout_template and delete_workout_template.
template.namestring
template.notesoptionalstring
template.exercisesobject[]
template.exercises[].exerciseIdstring
template.exercises[].namestring
template.exercises[].notesoptionalstring
template.exercises[].setsobject[]
template.exercises[].sets[].setNumberinteger
template.exercises[].sets[].setType"warmup" | "working"
template.exercises[].sets[].repsoptionalinteger
template.exercises[].sets[].durationSecondsoptionalnumber
template.exercises[].sets[].distanceMetersoptionalnumber
template.exercises[].sets[].holdSecondsoptionalnumber
template.exercises[].sets[].restSecondsoptionalnumberRest after this set, in seconds.
template.exercises[].sets[].intensityoptionalnumberPlanned effort from 0 to 10.
template.exercises[].sets[].weightoptionalobjectPlanned load in the user's preferred strength unit.
template.exercises[].sets[].weight.valuenumber
template.exercises[].sets[].weight.unit"kg" | "lb"
template.exercises[].sets[].weightKgoptionalnumberCanonical planned load in kilograms.
template.isTruncatedoptionaltruePresent and true when the template was saved with more than 30 exercises, so this result lists only 30. Such a template can only be deleted.

Example request

REST
curl -X POST "https://api.dailygoal.fit/v1/workout-templates" \
  -H "Authorization: Bearer $DAILYGOAL_API_TOKEN" \
  -H "Idempotency-Key: 3f1c9a52-7d4e-4b8a-9e21-5c6d7e8f9a01" \
  -H "Content-Type: application/json" \
  -d '{"name":"Push day","notes":"Heavy week","exercises":[{"exerciseId":"jx71q4w7e0r3t6y9u2i5o8p1a4s7d0f3","sets":[{"setType":"warmup","weight":{"value":40,"unit":"kg"},"reps":10},{"weight":{"value":80,"unit":"kg"},"reps":5,"restSeconds":180}]},{"exerciseId":"jx73e6r9t2y5u8i1o4p7a0s3d6f9g2h5","sets":[{"weight":{"value":40,"unit":"kg"},"reps":8,"restSeconds":120}]}]}'
MCP tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "save_workout_template",
    "arguments": {
      "name": "Push day",
      "notes": "Heavy week",
      "exercises": [
        {
          "exerciseId": "jx71q4w7e0r3t6y9u2i5o8p1a4s7d0f3",
          "sets": [
            {
              "setType": "warmup",
              "weight": {
                "value": 40,
                "unit": "kg"
              },
              "reps": 10
            },
            {
              "weight": {
                "value": 80,
                "unit": "kg"
              },
              "reps": 5,
              "restSeconds": 180
            }
          ]
        },
        {
          "exerciseId": "jx73e6r9t2y5u8i1o4p7a0s3d6f9g2h5",
          "sets": [
            {
              "weight": {
                "value": 40,
                "unit": "kg"
              },
              "reps": 8,
              "restSeconds": 120
            }
          ]
        }
      ]
    }
  }
}

Example response

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

json
{
  "created": true,
  "template": {
    "id": "kt71a4s7d0f3g6h9j2k5l8z1x4c7v0b3",
    "name": "Push day",
    "notes": "Heavy week",
    "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": 80,
              "unit": "kg"
            },
            "weightKg": 80,
            "reps": 5,
            "restSeconds": 180
          }
        ]
      },
      {
        "exerciseId": "jx73e6r9t2y5u8i1o4p7a0s3d6f9g2h5",
        "name": "Overhead Press",
        "sets": [
          {
            "setNumber": 1,
            "setType": "working",
            "weight": {
              "value": 40,
              "unit": "kg"
            },
            "weightKg": 40,
            "reps": 8,
            "restSeconds": 120
          }
        ]
      }
    ]
  }
}

Errors

delete_workout_template

DELETE https://api.dailygoal.fit/v1/workout-templates

MCP tool delete_workout_template · Changes data · Destructive

Delete one saved workout template. Workouts already started from it are kept. This cannot be undone. To delete a workout the user did, use delete_workout.

Input

FieldTypeDescription
idstringTemplate id from list_workout_templates or save_workout_template.

Output

FieldTypeDescription
idstring
deletedtrue

Example request

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

Example response

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

json
{
  "id": "kt71a4s7d0f3g6h9j2k5l8z1x4c7v0b3",
  "deleted": true
}

Errors