Rich exercise data
Every exercise carries muscles, equipment, category, difficulty, movement pattern, mechanics, plane of motion, laterality, aliases, and tags — classification you can filter and program against, not just a name.
Browse, search, and sync a curated exercise catalog into your own app. Rich classification data, sync-friendly endpoints, and a free tier.
Quickstart
No SDK, no setup. Send your key, get exercises back.
curl https://api.harshitbishnoi.dev/exercises?limit=1 \
-H "x-api-key: exdb_XEtT1o…"{
"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
You can find a list of exercise names anywhere. What you cannot easily find is everything around them.
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}/relatedA 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/exercisesEvery 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
Every tier gets the whole catalog and every endpoint. Paid tiers raise the daily quota — that is the only difference.
1,000requests / day
No card required
10,000requests / day
10× the free quota
Most popular
100,000requests / day
100× the free quota
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.
Create an account, copy your key, and make your first call in about two minutes.