Skip to main content
Use POST /exercises to retrieve recommended exercises from Ochy’s catalog. Each exercise is matched when its lookupKeys array contains at least one of the strings you pass in search_keys. The values you send in search_keys are the same stable identifiers as search_key in analysis results (texts.search_key). See the full catalog of keys and meanings in Search key mapping.
Map analysis items by search_key, then call this endpoint with those keys to fetch titles, media, difficulty, series, and duration or repetition ranges—without relying on localized labels from the analysis response.

Authentication

Same as the rest of the Partner API: pass your apiKey as a query parameter on every request. See Authentication.

Request

ItemValue
MethodPOST
Path/exercises
QueryapiKey (required)
BodyJSON application/json

Body schema

FieldTypeDescription
search_keysstring[]At least one lookup key (e.g. values from Search key mapping).
languagestringLocale for the exercise title (e.g. en, fr). Falls back to English if the locale is missing.

Example body

{
  "language": "en",
  "search_keys": [
    "HeadG",
    "PelvicB"
  ]
}

Response

  • 200 OK — JSON array of exercise objects. Each object includes a localized title.
  • media may include image, video, and optionally video_portrait.

Example response (200)

[
  {
    "difficulty": "easy",
    "effort_per_rep": {
      "max_ms": 15000,
      "min_ms": 10000
    },
    "exercise_format": "duration",
    "kind": "exercise",
    "media": {
      "image": "https://firebasestorage.googleapis.com/v0/b/ochy-7871a.appspot.com/o/assets%2Fexercises%2Fbackview%2Fthumbnails%2FWall%20Assist%20Stork%20Balance.png?alt=media",
      "video": "https://firebasestorage.googleapis.com/v0/b/ochy-7871a.appspot.com/o/assets%2Fexercises%2Fbackview%2Fvideos%2FWall-Assisted-Stork-Balance.mp4?alt=media&token=1c016167-d868-429d-9afb-1d2af1373a1a"
    },
    "number_of_series": 4,
    "title": "Wall Assist Stork Balance"
  },
  {
    "difficulty": "medium",
    "exercise_format": "repetitions",
    "kind": "exercise",
    "media": {
      "image": "https://firebasestorage.googleapis.com/v0/b/ochy-7871a.appspot.com/o/assets%2Fexercises%2Fbackview%2Fthumbnails%2FStep%20Up%20to%20Balance.png?alt=media&token=c6de01b3-f5f7-4fec-95f2-41f50283b718",
      "video": "https://firebasestorage.googleapis.com/v0/b/ochy-7871a.appspot.com/o/assets%2Fexercises%2Fbackview%2Fvideos%2FStep%20Up%20to%20Balance.mp4?alt=media&token=cb8972bf-c8b3-4fcb-89e9-b591c4b4cd5d"
    },
    "number_of_series": 4,
    "repetitions": {
      "max": 10,
      "min": 6
    },
    "title": "Step Up to Balance"
  }
]
A larger catalog match can return many items in one array; the shape is always the same.

Errors

HTTPcodeWhen
400invalid_bodyMalformed JSON or missing required fields.
400language_requiredlanguage is empty.
400search_keys_emptyNo usable values in search_keys.
404no_exercises_foundNo exercises matched the given keys.

Example — nothing matched (404)

{
  "code": "no_exercises_found",
  "detail": "No exercises found for the given search keys"
}
Other errors (e.g. invalid API key, internal failure) follow the same detail / code pattern as the rest of the Partner API.

Example request (cURL)

curl -sS -X POST 'https://partner-api.ochy-prod.com/exercises?apiKey=YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"language":"en","search_keys":["HeadG","PelvicB"]}'
Replace the base URL with your environment (e.g. staging) if needed.