---
title: "Search the exercise database"
method: GET
path: "/searchExercises"
tags: ["Exercise Database"]
---

# Search the exercise database

`GET /searchExercises`

## Request

- Base URL: `https://api.anatome.dev`
- URL: `https://api.anatome.dev/searchExercises`
- Auth: none declared

Fuzzy name search across 1,324 exercises with optional muscle/equipment/level filters. Default response includes free-exercise-db fields (instructions, images, force, category, etc.) plus Anatome mappings. Use fields= to trim or fields=all for variations and relatedExerciseIds.

## Query parameters

- `q` string, required
- `muscle` string
- `equipment` string
- `level` 'beginner' | 'intermediate' | 'expert'
- `limit` integer
- `offset` integer
- `cursor` string
- `fields` string
- `lang` 'en' | 'es' | 'it' | 'tr' | 'ru' | 'zh' | 'hi' | 'pl' | 'ko' | 'fr'

## Response `200`

Search results

- object
  - `ok` boolean
  - `total_matched` integer
  - `offset` integer
  - `limit` integer
  - `next_cursor` string, nullable
  - `results` object[]
    - `id` string
    - `name` string
    - `primaryMuscles` string[]
    - `secondaryMuscles` string[]
    - `equipment` string
    - `level` string
    - `category` string
    - `image_url` string, nullable: Always null. Retired with /exerciseGif — see video_url.
    - `gif_url` string, nullable: Always null on public JSON. Licensed GymVisual GIFs are not advertised here — first-party pages construct GET /exerciseGif?id=<ext_id> themselves. See has_licensed_media.
    - `has_licensed_media` boolean: True when this ext_id has a GymVisual join (media may exist in R2). Not a URL and not a licence. Bytes are served only to allowlisted Origins/Referers or X-Anatome-Media-Key.
    - `licensed_media_kinds` string[]: Gated demo tiers that exist for this row, best first, so a first-party page can pick one instead of probing and eating a 404. Availability metadata only — no URL, no filename, not a grant. Empty when there is no join.
    - `video_url` string, nullable: Demonstration video (YouTube) for this exercise, from yuhonas/free-exercise-db PR #26. A link only — Anatome hosts no video bytes. Link or embed with YouTube's own player; do not extract frames.
    - `video_exercise_specific` boolean, nullable: True when this clip backs only this exercise. False when it is shared with related exercises in the same family and may not show this exact variant — 1,158 of 1,324 exercises share a clip. Filter on this when you need a true depiction rather than coverage.
    - `anatome_imageSrc` string: Ready-to-embed absolute <img src> URL for Anatome's own generated muscle diagram
    - `anatome_layers_payload` object[]
    - `instructions` string[]: Step-by-step cues. Language follows Accept-Language or ?lang= (en,es,it,tr,ru,zh,hi,pl,ko,fr). English is always wrkout/exercises.json (Unlicense). Other langs are hasaneyldrm/exercises-dataset (MIT) when Hasan's English cue is the same lift as wrkout (a subset of the 198 media joins); otherwise English is returned and instructions_lang is en.
    - `instructions_lang` string: Language of the instructions array actually returned.
    - `instructions_langs` string[]: Hasan translation langs this row can serve (no en — English is always wrkout). Empty when unmatched or when the Hasan EN cue is a different lift. Not in the searchExercises default projection (it is [] or the same 9 tags on every row) — ask for it with fields=, or read it off the full getExercise record.
    - `instruction_source` 'wrkout' | 'hasan': wrkout = Unlicense English cues. hasan = MIT translated steps from hasaneyldrm/exercises-dataset.
    - `images` string[]: Always empty. Retired with /exerciseImage — the source photography's copyright could not be established.
    - `source_images` string[]: Always empty. Retired with /exerciseImage.
    - `movementType` string, nullable: Alias of mechanic (compound / isolation)
    - `keywords` string[]
    - `variations` object[]
      - `ext_id` string
      - `name` string
      - `anatome_imageSrc` string, nullable
    - `relatedExerciseIds` string[]
  - `exercise_db_attribution` string
  - `license` string

---

[API](https://skmtc.dev/anatome/apis/anatome-muscle-group-image-generator-api.md) · [All operations](https://skmtc.dev/anatome/apis/anatome-muscle-group-image-generator-api/llms.txt) · [OpenAPI document](https://skmtc.dev/anatome/apis/anatome-muscle-group-image-generator-api/revisions/87cc81795f65?raw)
