Gym Profiles reference

List, save and delete the equipment each of the user's gyms has, and choose the default profile.

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_gym_profiles

GET https://api.dailygoal.fit/v1/gym-profiles

MCP tool list_gym_profiles · Read-only

List the user's gym profiles: the bars, plates, dumbbells, kettlebells and cable and machine increments each gym has, and which profile is the default. The list is empty until the user opens workouts in the app or saves a profile. Use get_context for the user's preferred units.

Input

This operation takes no input.

Output

FieldTypeDescription
profilesobject[]Every profile, oldest first.
profiles[].idstringGym profile id for save_gym_profile, delete_gym_profile and set_default_gym_profile.
profiles[].namestring
profiles[].isDefaultbooleanTrue for the profile new workouts use. Exactly one profile is the default.
profiles[].unitSystem"kg" | "lb"The unit the profile's equipment is weighed in. The default profile's unit is the user's strength unit.
profiles[].barsobject[]
profiles[].bars[].valuenumber
profiles[].bars[].unit"kg" | "lb"
profiles[].bars[].countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profiles[].bars[].labeloptionalstring
profiles[].platesobject[]
profiles[].plates[].valuenumber
profiles[].plates[].unit"kg" | "lb"
profiles[].plates[].countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profiles[].plates[].labeloptionalstring
profiles[].dumbbellsobject[]
profiles[].dumbbells[].valuenumber
profiles[].dumbbells[].unit"kg" | "lb"
profiles[].dumbbells[].countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profiles[].dumbbells[].labeloptionalstring
profiles[].kettlebellsobject[]
profiles[].kettlebells[].valuenumber
profiles[].kettlebells[].unit"kg" | "lb"
profiles[].kettlebells[].countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profiles[].kettlebells[].labeloptionalstring
profiles[].fixedBarsobject[]
profiles[].fixedBars[].valuenumber
profiles[].fixedBars[].unit"kg" | "lb"
profiles[].fixedBars[].countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profiles[].fixedBars[].labeloptionalstring
profiles[].cableIncrementobjectThe step between cable stack loads.
profiles[].cableIncrement.valuenumber
profiles[].cableIncrement.unit"kg" | "lb"
profiles[].cableIncrement.countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profiles[].cableIncrement.labeloptionalstring
profiles[].machineIncrementobjectThe step between machine stack loads.
profiles[].machineIncrement.valuenumber
profiles[].machineIncrement.unit"kg" | "lb"
profiles[].machineIncrement.countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profiles[].machineIncrement.labeloptionalstring

Example request

REST
curl "https://api.dailygoal.fit/v1/gym-profiles" \
  -H "Authorization: Bearer $DAILYGOAL_API_TOKEN"
MCP tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_gym_profiles",
    "arguments": {}
  }
}

Example response

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

json
{
  "profiles": [
    {
      "id": "kg71q3w6e9r2t5y8u1i4o7p0a3s6d9f2",
      "name": "Home gym",
      "isDefault": true,
      "unitSystem": "kg",
      "bars": [
        {
          "value": 20,
          "unit": "kg",
          "count": 1,
          "label": "Olympic bar"
        }
      ],
      "plates": [
        {
          "value": 20,
          "unit": "kg",
          "count": 8
        },
        {
          "value": 10,
          "unit": "kg",
          "count": 4
        },
        {
          "value": 5,
          "unit": "kg",
          "count": 4
        }
      ],
      "dumbbells": [
        {
          "value": 5,
          "unit": "kg",
          "count": 2
        },
        {
          "value": 10,
          "unit": "kg",
          "count": 2
        },
        {
          "value": 15,
          "unit": "kg",
          "count": 2
        },
        {
          "value": 20,
          "unit": "kg",
          "count": 2
        },
        {
          "value": 25,
          "unit": "kg",
          "count": 2
        }
      ],
      "kettlebells": [
        {
          "value": 16,
          "unit": "kg",
          "count": 1
        }
      ],
      "fixedBars": [],
      "cableIncrement": {
        "value": 5,
        "unit": "kg"
      },
      "machineIncrement": {
        "value": 5,
        "unit": "kg"
      }
    }
  ]
}

Errors

save_gym_profile

POST https://api.dailygoal.fit/v1/gym-profiles

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

Create a gym profile stocked with standard equipment, or update one by passing its id. On update, fields you omit keep their value. A user's first profile becomes the default; to switch the default use set_default_gym_profile.

Input

FieldTypeDescription
idoptionalstringThe profile to update. Omit it to create a profile.
namestring
unitSystemoptional"kg" | "lb"A new profile defaults to the user's strength unit. Changing an existing profile's unit restocks it with that unit's standard equipment before the other fields apply.
platesoptionalnumber[]Plate weights the gym has, in the profile's unit. Each must be a standard plate: 25, 20, 15, 10, 5, 2.5, 1.25 kg, or 45, 35, 25, 10, 5, 2.5 lb. Standard counts are stocked.
dumbbellMaxoptionalnumberHeaviest dumbbell, in the profile's unit: 25, 40, 50, 60 kg or 50, 75, 100, 150 lb. Lighter standard dumbbells are stocked up to it.
cableIncrementoptional5 | 10Cable stack step, in the profile's unit.
machineIncrementoptional5 | 10Machine stack step, in the profile's unit.
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 profile, false when it updated one.
profileobject
profile.idstringGym profile id for save_gym_profile, delete_gym_profile and set_default_gym_profile.
profile.namestring
profile.isDefaultbooleanTrue for the profile new workouts use. Exactly one profile is the default.
profile.unitSystem"kg" | "lb"The unit the profile's equipment is weighed in. The default profile's unit is the user's strength unit.
profile.barsobject[]
profile.bars[].valuenumber
profile.bars[].unit"kg" | "lb"
profile.bars[].countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profile.bars[].labeloptionalstring
profile.platesobject[]
profile.plates[].valuenumber
profile.plates[].unit"kg" | "lb"
profile.plates[].countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profile.plates[].labeloptionalstring
profile.dumbbellsobject[]
profile.dumbbells[].valuenumber
profile.dumbbells[].unit"kg" | "lb"
profile.dumbbells[].countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profile.dumbbells[].labeloptionalstring
profile.kettlebellsobject[]
profile.kettlebells[].valuenumber
profile.kettlebells[].unit"kg" | "lb"
profile.kettlebells[].countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profile.kettlebells[].labeloptionalstring
profile.fixedBarsobject[]
profile.fixedBars[].valuenumber
profile.fixedBars[].unit"kg" | "lb"
profile.fixedBars[].countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profile.fixedBars[].labeloptionalstring
profile.cableIncrementobjectThe step between cable stack loads.
profile.cableIncrement.valuenumber
profile.cableIncrement.unit"kg" | "lb"
profile.cableIncrement.countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profile.cableIncrement.labeloptionalstring
profile.machineIncrementobjectThe step between machine stack loads.
profile.machineIncrement.valuenumber
profile.machineIncrement.unit"kg" | "lb"
profile.machineIncrement.countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profile.machineIncrement.labeloptionalstring

Example request

REST
curl -X POST "https://api.dailygoal.fit/v1/gym-profiles" \
  -H "Authorization: Bearer $DAILYGOAL_API_TOKEN" \
  -H "Idempotency-Key: 3f1c9a52-7d4e-4b8a-9e21-5c6d7e8f9a01" \
  -H "Content-Type: application/json" \
  -d '{"name":"Home gym","plates":[20,10,5],"dumbbellMax":25,"cableIncrement":5}'
MCP tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "save_gym_profile",
    "arguments": {
      "name": "Home gym",
      "plates": [
        20,
        10,
        5
      ],
      "dumbbellMax": 25,
      "cableIncrement": 5
    }
  }
}

Example response

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

json
{
  "created": true,
  "profile": {
    "id": "kg71q3w6e9r2t5y8u1i4o7p0a3s6d9f2",
    "name": "Home gym",
    "isDefault": true,
    "unitSystem": "kg",
    "bars": [
      {
        "value": 20,
        "unit": "kg",
        "count": 1,
        "label": "Olympic bar"
      }
    ],
    "plates": [
      {
        "value": 20,
        "unit": "kg",
        "count": 8
      },
      {
        "value": 10,
        "unit": "kg",
        "count": 4
      },
      {
        "value": 5,
        "unit": "kg",
        "count": 4
      }
    ],
    "dumbbells": [
      {
        "value": 5,
        "unit": "kg",
        "count": 2
      },
      {
        "value": 10,
        "unit": "kg",
        "count": 2
      },
      {
        "value": 15,
        "unit": "kg",
        "count": 2
      },
      {
        "value": 20,
        "unit": "kg",
        "count": 2
      },
      {
        "value": 25,
        "unit": "kg",
        "count": 2
      }
    ],
    "kettlebells": [
      {
        "value": 16,
        "unit": "kg",
        "count": 1
      }
    ],
    "fixedBars": [],
    "cableIncrement": {
      "value": 5,
      "unit": "kg"
    },
    "machineIncrement": {
      "value": 5,
      "unit": "kg"
    }
  }
}

Errors

set_default_gym_profile

PUT https://api.dailygoal.fit/v1/gym-profiles/default

MCP tool set_default_gym_profile · Changes data

Make one gym profile the default that new workouts use. The user's strength unit becomes the profile's unit. To change a profile's equipment use save_gym_profile.

Input

FieldTypeDescription
idstringGym profile id from list_gym_profiles.

Output

FieldTypeDescription
profileobject
profile.idstringGym profile id for save_gym_profile, delete_gym_profile and set_default_gym_profile.
profile.namestring
profile.isDefaultbooleanTrue for the profile new workouts use. Exactly one profile is the default.
profile.unitSystem"kg" | "lb"The unit the profile's equipment is weighed in. The default profile's unit is the user's strength unit.
profile.barsobject[]
profile.bars[].valuenumber
profile.bars[].unit"kg" | "lb"
profile.bars[].countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profile.bars[].labeloptionalstring
profile.platesobject[]
profile.plates[].valuenumber
profile.plates[].unit"kg" | "lb"
profile.plates[].countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profile.plates[].labeloptionalstring
profile.dumbbellsobject[]
profile.dumbbells[].valuenumber
profile.dumbbells[].unit"kg" | "lb"
profile.dumbbells[].countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profile.dumbbells[].labeloptionalstring
profile.kettlebellsobject[]
profile.kettlebells[].valuenumber
profile.kettlebells[].unit"kg" | "lb"
profile.kettlebells[].countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profile.kettlebells[].labeloptionalstring
profile.fixedBarsobject[]
profile.fixedBars[].valuenumber
profile.fixedBars[].unit"kg" | "lb"
profile.fixedBars[].countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profile.fixedBars[].labeloptionalstring
profile.cableIncrementobjectThe step between cable stack loads.
profile.cableIncrement.valuenumber
profile.cableIncrement.unit"kg" | "lb"
profile.cableIncrement.countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profile.cableIncrement.labeloptionalstring
profile.machineIncrementobjectThe step between machine stack loads.
profile.machineIncrement.valuenumber
profile.machineIncrement.unit"kg" | "lb"
profile.machineIncrement.countoptionalintegerHow many the gym has. Plates count every plate, not pairs.
profile.machineIncrement.labeloptionalstring

Example request

REST
curl -X PUT "https://api.dailygoal.fit/v1/gym-profiles/default" \
  -H "Authorization: Bearer $DAILYGOAL_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"id":"kg71q3w6e9r2t5y8u1i4o7p0a3s6d9f2"}'
MCP tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "set_default_gym_profile",
    "arguments": {
      "id": "kg71q3w6e9r2t5y8u1i4o7p0a3s6d9f2"
    }
  }
}

Example response

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

json
{
  "profile": {
    "id": "kg71q3w6e9r2t5y8u1i4o7p0a3s6d9f2",
    "name": "Home gym",
    "isDefault": true,
    "unitSystem": "kg",
    "bars": [
      {
        "value": 20,
        "unit": "kg",
        "count": 1,
        "label": "Olympic bar"
      }
    ],
    "plates": [
      {
        "value": 20,
        "unit": "kg",
        "count": 8
      },
      {
        "value": 10,
        "unit": "kg",
        "count": 4
      },
      {
        "value": 5,
        "unit": "kg",
        "count": 4
      }
    ],
    "dumbbells": [
      {
        "value": 5,
        "unit": "kg",
        "count": 2
      },
      {
        "value": 10,
        "unit": "kg",
        "count": 2
      },
      {
        "value": 15,
        "unit": "kg",
        "count": 2
      },
      {
        "value": 20,
        "unit": "kg",
        "count": 2
      },
      {
        "value": 25,
        "unit": "kg",
        "count": 2
      }
    ],
    "kettlebells": [
      {
        "value": 16,
        "unit": "kg",
        "count": 1
      }
    ],
    "fixedBars": [],
    "cableIncrement": {
      "value": 5,
      "unit": "kg"
    },
    "machineIncrement": {
      "value": 5,
      "unit": "kg"
    }
  }
}

Errors

delete_gym_profile

DELETE https://api.dailygoal.fit/v1/gym-profiles

MCP tool delete_gym_profile · Changes data · Destructive

Delete one gym profile. It fails with conflict for the user's only profile. Deleting the default makes the oldest remaining profile the default. Finished workouts keep the equipment they were logged with. To change the equipment instead, use save_gym_profile.

Input

FieldTypeDescription
idstringGym profile id from list_gym_profiles.

Output

FieldTypeDescription
idstring
deletedtrue
defaultProfileIdoptionalstringPresent when the deleted profile was the default: the profile that replaced it.

Example request

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

Example response

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

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

Errors