Skip to content

ExerciseDB APIA public exercise catalog for fitness apps

Browse, search, and sync a curated exercise catalog into your own app. Rich classification data, sync-friendly endpoints, and a free tier.

Quickstart

One request, real data

No SDK, no setup. Send your key, get exercises back.

Request
curl https://api.harshitbishnoi.dev/exercises?limit=1 \
  -H "x-api-key: exdb_XEtT1o…"
Response
{
  "success": true,
  "data": [
    {
      "id": "8c1e5a10-0000-4000-8000-000000000001",
      "slug": "barbell-back-squat",
      "name": "Barbell Back Squat",
      "status": "active",
      "category": "strength",
      "difficulty": "intermediate",
      "movementPattern": "squat",
      "tags": ["compound", "lower-body"],
      "updatedAt": "2026-06-15T10:00:00.000Z"
    }
  ],
  "pagination": { "limit": 1, "offset": 0 }
}

That is a summary. Ask for one exercise by id and you also get the description, ordered instructions, coaching tips, breathing cues, contraindications, mechanics, and programming data.

Why ExerciseDB

Why not just scrape a dataset?

You can find a list of exercise names anywhere. What you cannot easily find is everything around them.

Relationships, curated by hand

A flat list tells you a barbell back squat exists. It does not tell you that a goblet squat is the regression, a front squat is the variation, and a pause squat is the progression. One request returns all three groups — which is what lets you build a programme that scales with a user instead of a menu they scroll past.

GET /exercises/{id}/related

Sync that tells you what was deleted

A dataset you copy once starts rotting immediately. Sync returns only what changed since last time — and, critically, tombstones for records that were deprecated or removed. Without those, a deleted exercise lingers in your app forever. That is the failure a raw dump cannot warn you about.

GET /sync/exercises

Ids that do not move

Every exercise has a stable UUID and a stable slug. Use the id as your local primary key and it will still resolve next year. Re-scraping a dataset means re-reconciling it, every single time.

GET /exercises/{id}

Plans

Start free. Scale when you need to.

Every tier gets the whole catalog and every endpoint. Paid tiers raise the daily quota — that is the only difference.

Free

1,000requests / day

No card required

Basic

10,000requests / day

10× the free quota

Enterprise

1,000,000requests / day

For high-volume sync

Every account starts on Free — no card, no trial clock. Quotas are counted per API key and reset at midnight UTC. Every response carries X-RateLimit-Remaining, and a 429 carries Retry-After telling you exactly when to try again. Upgrading is not a code change: your tier lives on your key, so the same key simply returns more.

Start building

Create an account, copy your key, and make your first call in about two minutes.

Released under the MIT License.