What ExerciseDB is and who it is for

ExerciseDB is a read-only exercise database API. Every entry in the dataset describes a single exercise: what body part it targets, which specific muscle group it works, what equipment it requires, and a short name. More importantly, each exercise is paired with an animated GIF that can be served directly to end users as a visual demonstration.

The target audience is fairly broad: fitness app developers, personal training platforms, workout generators, rehab tools, and content sites that want structured, filterable exercise data without building and maintaining their own database. With 1,300+ exercises already catalogued and animated, the API removes a significant content production burden.

Core capabilities and endpoint walkthrough

The API is entirely GET-based with no write operations, which keeps integration simple. The meaningful endpoint groups break down as follows:

Discovery and lookup

  • List endpoints/exercises/bodyPartList, /exercises/equipmentList, and /exercises/targetList return the full set of allowlisted values you can pass to the corresponding filter endpoints. Always call these first when building any dropdown or filter UI, since the filter endpoints require exact string matches.
  • Fetch all exercisesGET /exercises returns the full dataset. On the BASIC (free) tier, this endpoint is effectively capped at 10 items per response. Paid tiers can pass limit=0 to retrieve the entire sorted dataset in one call.
  • Filter by body partGET /exercises/bodyPart/{bodyPart} narrows the list to exercises classified under a specific body part. Values with spaces must be URL-encoded (e.g. lower%20arms).
  • Filter by target muscleGET /exercises/target/{target} returns exercises matched to a specific primary muscle, such as cardiovascular%20system.
  • Filter by equipmentGET /exercises/equipment/{equipment} works the same way, covering values like body%20weight or smith%20machine.
  • Search by nameGET /exercises/name/{name} performs a case-insensitive substring match against exercise names. When nothing matches, the API returns an empty array rather than an error, which simplifies client-side error handling.
  • Fetch by IDGET /exercises/exercise/{id} accepts a 4-character exercise ID. One edge case worth noting: if the ID is well-formed but absent from the dataset, the service currently returns HTTP 200 with an empty body rather than a 404. Your client code should check for an empty response explicitly.

Animated GIF delivery

GET /image/{exerciseId} retrieves the animated demonstration for a given exercise. Resolution behavior is tier-dependent:

  • BASIC requests always receive the 180px asset.
  • PRO requests may receive 180px or 360px; requests for 720px or 1080px are silently remapped to 360px.

This means no paid tier currently delivers truly high-resolution GIFs — if your UI needs 720p or 1080p animations, that is a concrete limitation to evaluate before committing to the API.

Status endpoint

GET /status is available for health checking, and the provider also maintains a separate public status page at exercisedb.instatus.com.

Pricing breakdown

ExerciseDB uses a freemium model with four tiers. The provider also lists one-time payment options on their website, but the subscription plans available through the marketplace are:

Plan Monthly price Included requests Rate limit Overage cost
BASIC $0 690 None
PRO $12.99 2,300 120 / min $0.0010 / req
ULTRA $18.99 ⭐ 8,625 120 / min $0.0010 / req
MEGA $30.99 28,750 120 / min $0.0010 / req

The ULTRA plan is marked as recommended. At $18.99 for 8,625 requests, it offers roughly 3.7× more requests than PRO for only 46% more cost — making it the most cost-efficient upgrade path for moderate-volume applications.

The 690-request monthly cap on the free BASIC tier is tight. At one API call per page load or user session, that allows roughly 23 calls per day, which is enough for a personal project or proof of concept but will constrain any application with real daily active users. Keep in mind that BASIC also caps list responses at 10 items, so filter and pagination UX built on the free tier will behave differently from paid tiers.

Overage pricing of $0.001 per request applies to all paid plans, meaning if you exceed your monthly allocation you are billed in fractions of a cent per additional call rather than being hard-blocked. This is developer-friendly for handling occasional spikes.

Practical use cases

  • Workout builders: Use the filter endpoints to let users pick exercises by target muscle or equipment available, then render the animated GIF inline.
  • Fitness content sites: Automate exercise page generation by iterating over the full dataset and using name and muscle metadata for SEO-structured pages.
  • Personal training apps: Pair get-by-bodypart with a session planner to auto-suggest exercises based on the muscle groups a user wants to focus on.
  • Rehab and physical therapy tools: The body-part and target-muscle taxonomy makes it straightforward to scope exercises to specific anatomical regions.

Limitations to evaluate before integrating

  • Image resolution ceiling: No tier delivers GIFs above 360px. If high-definition animation is a product requirement, the current API cannot meet it.
  • Read-only dataset: There is no way to submit custom exercises or override metadata. You get the dataset as curated by the provider.
  • BASIC tier pagination quirk: The 10-item cap on the free tier affects list endpoints globally, meaning your development environment will behave differently from production on a paid plan.
  • ID lookup edge case: Empty 200 responses for missing IDs require defensive coding that a standard 404 would make unnecessary.
  • Rate limit uniformity: All paid tiers share the same 120 requests-per-minute rate limit regardless of plan level. If you need burst capacity, there is currently no tier that offers a higher per-minute ceiling.
  • Success rate: The API reports a 97% average success rate. That is solid but not 99.9%+, so build retry logic into any production integration.

Getting started

  1. Subscribe to the BASIC tier on the marketplace to get an API key with no upfront cost.
  2. Call /exercises/bodyPartList, /exercises/equipmentList, and /exercises/targetList to understand the allowlisted values before building any filter logic.
  3. Test GET /exercises?limit=10 to inspect the exercise object schema — fields include at minimum id, name, bodyPart, target, and equipment.
  4. Integrate the /image/{exerciseId} endpoint to pull animated GIFs directly into your UI, keeping the resolution constraint in mind.
  5. Monitor your request count early; with only 690 free requests per month, it is easy to exhaust the BASIC quota during development alone. Consider upgrading to PRO or ULTRA before going live.

Full API documentation is available at edb-docs.up.railway.app.