Browse API Reference

List exercises

Return a cursor-paginated exercise collection, with search and filters for muscle, equipment, category, and artwork availability.

Build exercise pickers, workout builders, and browse screens from the collection. Filters combine, and each combination is one request — “exercises for lats with a barbell” needs no client-side intersection.

GET https://api.gymassets.dev/v1/exercises
cURL
curl 'https://api.gymassets.dev/v1/exercises?muscle=lats&equipment=barbell' \
  -H "Authorization: Bearer $GA_SECRET_KEY"
Response · application/json 200
{
  "data": [
    {
      "slug": "standing-squat-with-barbell",
      "name": "squat with barbell",
      "category": "strength",
      "difficulty": "intermediate",
      "posture": "standing",
      "muscles": { "primary": ["glutes"], "secondary": ["abs", "calves", "hamstrings", "quads"] },
      "equipment": ["barbell"],
      "frames": []
    }
  ],
  "next": "opaque cursor"
}

Query parameters

ParameterAccepted values
qFree text, matched against the name and slug
muscleA muscle id from /v1/muscles
equipmentAn equipment id from /v1/equipment
categoryA value from /v1/exercise-categories
difficultyA value from /v1/exercise-difficulties
postureA value from /v1/exercise-postures
movementA value from /v1/exercise-movements
gripA value from /v1/exercise-grips
drawntrue or false
cursorThe next value of the previous page

A value outside its vocabulary returns 400 unknown_value with the accepted list. An empty page is a real answer: the filters matched nothing.

The page size is fixed and no parameter changes it — pagination states the contract and the refusal.

Filter by artwork availability

drawn=true returns only exercises whose illustration frames are published, and drawn=false returns the rest. A picker that must never show a silhouette stand-in builds from drawn=true; a catalogue browser that accepts them takes the whole collection. Render exercise art states how the two cases differ in the response.