GET
/
workouts
List workouts
curl --request GET \
  --url http://healthkite.local:8080/workouts
{
  "workouts": [
    {
      "uuid": "06E9D6D6-7E37-406C-8465-1DAAD7C223A1",
      "workoutActivityType": "HKWorkoutActivityTypeRunning",
      "startDate": "2026-05-09T16:11:50Z",
      "endDate": "2026-05-09T16:44:24Z",
      "duration": 1953.68,
      "totalDistance": {
        "value": 4855.06,
        "unit": "m"
      },
      "totalEnergyBurned": {
        "value": 482.62,
        "unit": "kcal"
      },
      "averageHeartRate": {
        "value": 164.81,
        "unit": "count/min"
      }
    }
  ],
  "limit": 50,
  "offset": 0,
  "total": 124,
  "hasMore": true
}

Query parameters

NameTypeDefaultRangeNotes
limitinteger501-200Clamped silently if out of range
offsetinteger0≥ 0Garbage values clamp to 0

MCP tool

list_workouts({ "limit": 10, "offset": 0 })

Notes

  • Sorted by startDate descending.
  • Summaries include device + sourceRevision inline (no provenance hoisting at this layer — the list is intended as a quick browseable index, and per-summary provenance is rarely duplicated since users typically have one watch).
  • For full sample-series detail, follow up with GET /workouts/{uuid}.
  • hasMore is true iff offset + workouts.length < total.
  • An offset beyond the end returns an empty workouts array with hasMore: false. It does not 404.

Query Parameters

limit
integer
default:50

Page size (1-200).

Required range: 1 <= x <= 200
offset
integer
default:0

Items to skip.

Required range: x >= 0

Response

200 - application/json

Workout summaries