Search the exercise catalog

GET/api/public/exercises

Search the exercises catalog (name, muscle group).

Authentication

Requires an API key, sent as Authorization: Bearer cp_live_....

API keys carry scopes. Get the catalog of scopes and webhook events lists every scope.

Query parameters

Query parameters
NameTypeDescription
pageinteger

Page number (1-based, default 1)

Minimum: 1

limitinteger

Number of items to return (default 25, max 500)

Minimum: 1

Maximum: 500

searchstring
muscleGroupstring

Muscle group filter, matched case-insensitively against either the exercise target ("pectorals") or its body part ("chest"), so either spelling works. Any value is accepted; these are the ones the catalog actually uses. Body parts: back, cardio, chest, lower arms, lower legs, neck, shoulders, upper arms, upper legs, waist. Targets: abdominals, abductors, abs, adductors, biceps, calves, cardiovascular system, delts, forearms, glutes, hamstrings, lats, levator scapulae, pectorals, quads, rear deltoids, serratus anterior, spine, traps, triceps, upper back.

Request examples

cURL
curl --request GET \
  --url 'https://api.coach-platform.com/api/public/exercises' \
  --header 'Authorization: Bearer cp_live_...'
JavaScript (fetch)
const response = await fetch('https://api.coach-platform.com/api/public/exercises', {
  method: 'GET',
  headers: {
    Authorization: 'Bearer cp_live_...',
  },
});

const data = await response.json();

Responses

200 OK

Successful response

Example body (application/json)
{
  "data": [
    {
      "_id": "<string>",
      "name": "<string>",
      "target": "abdominals",
      "bodyPart": "back",
      "equipment": "assisted",
      "instructions": [
        "<string>"
      ],
      "videoUrl": "<string>"
    }
  ],
  "pagination": {
    "page": 123,
    "limit": 123,
    "total": 123,
    "hasMore": true,
    "truncated": true
  }
}
Response fields (14)
Response fields
NameTypeDescription
dataobject[]
data[]._idstring
data[].namestring
data[].targetstring

Primary muscle worked. Coach-created exercises may carry a value outside this list.

Allowed values: abdominals abductors abs adductors biceps calves cardiovascular system delts forearms glutes hamstrings lats levator scapulae pectorals quads rear deltoids serratus anterior spine traps triceps upper back

data[].bodyPartstring

Body region the exercise trains. Only the global catalog is reliably tagged.

Allowed values: back cardio chest lower arms lower legs neck shoulders upper arms upper legs waist

data[].equipmentstring

Equipment needed. Every global-catalog exercise is tagged; most coach-created ones are not.

Allowed values: assisted band barbell body weight bosu ball cable cable machine dumbbell elliptical machine ez barbell kettlebell leverage machine medicine ball olympic barbell resistance band roller rope skierg machine sled machine smith machine stability ball stationary bike stepmill machine tire trap bar upper body ergometer weighted wheel roller

data[].instructionsstring[]
data[].videoUrlstring

The coach's own demonstration video for this exercise, when they have set one.

paginationobject
pagination.pagenumber
pagination.limitnumber
pagination.totalnumber | null

Total number of matching items. null when the underlying source cannot report an exact count for this page; use hasMore to keep paging.

pagination.hasMoreboolean
pagination.truncatedboolean

Present and true when the result set exceeded the in-memory scan cap and was truncated. Narrow your filters to page through all items.

Error responses

  • 400 Bad Request
  • 401 Unauthorized
  • 403 Forbidden
  • 429 Too Many Requests
  • 500 Internal Server Error

These statuses share the same response body.

Example body (application/json)
{
  "error": {
    "code": "<string>",
    "message": "<string>",
    "fix": "<string>",
    "details": {},
    "retryAfterMs": 123
  }
}
Error fields (6)
Error fields
NameTypeDescription
errorobject
error.codestring
error.messagestring
error.fixstring | null
error.detailsobject | null
error.retryAfterMsnumber | null

This page is also available as Markdown. Browse it in the interactive explorer or download the OpenAPI spec.