FitExerciseDB
/// API · v1

API Docs

REST + JSON. Bearer token auth. USD pricing. Free tier with 100 req/month.

Authentication

Every request to /v1/* must carry an Authorization: Bearer fed_live_… header. Get a key by signing up — your free tier key is shown in the dashboard immediately.

Code samples

curl
curl -H "Authorization: Bearer fed_live_YOUR_KEY" \
  https://api.fitexercisedb.com/v1/exercises/0001
javascript
const res = await fetch("https://api.fitexercisedb.com/v1/exercises/0001", {
  headers: { Authorization: "Bearer fed_live_YOUR_KEY" },
});
const exercise = await res.json();
python
import requests
r = requests.get(
  "https://api.fitexercisedb.com/v1/exercises/0001",
  headers={"Authorization": "Bearer fed_live_YOUR_KEY"},
)
print(r.json())
go
req, _ := http.NewRequest("GET", "https://api.fitexercisedb.com/v1/exercises/0001", nil)
req.Header.Set("Authorization", "Bearer fed_live_YOUR_KEY")
resp, _ := http.DefaultClient.Do(req)
ruby
require "net/http"
uri = URI("https://api.fitexercisedb.com/v1/exercises/0001")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer fed_live_YOUR_KEY"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
php
$ch = curl_init("https://api.fitexercisedb.com/v1/exercises/0001");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer fed_live_YOUR_KEY"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$resp = curl_exec($ch);

Rate limits

Every authed response carries:

Bursts above your tier's per-second limit return HTTP 429 with a Retry-After header. Free tier also has sequential-ID scrape detection.

Errors

Errors use RFC 7807 problem-details with application/problem+json:

{
  "type": "https://fitexercisedb.com/errors/not-found",
  "title": "Exercise not found",
  "status": 404
}

Endpoints

GET/v1/exercises

List exercises (paginated, filterable)

Query params

pagePage number (default 1)
pageSize1-100, default 50
bodyParte.g. Back, Chest, Waist
targetTarget muscle
equipmente.g. Body Weight, Dumbbell
200 · response example
{
  "data": [
    {
      "id": "0001",
      "name": "3/4 Sit-up",
      "bodyPart": "Waist",
      "target": "Abs",
      "equipment": "Body Weight",
      "category": "strength",
      "difficulty": "beginner",
      "mechanic": "isolation",
      "force": "push",
      "met": 3.5,
      "caloriesPerMinute": 4.3,
      "averageCaloriesPerMinute": 4.3,
      "averageCaloriesPerHour": 258,
      "secondaryMuscles": ["Hip Flexors", "Lower Back"],
      "instructions": ["Lie flat on your back…"]
    }
  ],
  "pagination": { "page": 1, "pageSize": 50, "total": 1324, "totalPages": 27 }
}
GET/v1/exercises/{id}

Get a single exercise by id

200 · response example
{
  "id": "0001",
  "name": "3/4 Sit-up",
  "bodyPart": "Waist",
  "target": "Abs",
  "equipment": "Body Weight",
  "category": "strength",
  "difficulty": "beginner",
  "mechanic": "isolation",
  "force": "push",
  "met": 3.5,
  "caloriesPerMinute": 4.3,
  "averageCaloriesPerMinute": 4.3,
  "averageCaloriesPerHour": 258,
  "secondaryMuscles": ["Hip Flexors", "Lower Back"],
  "instructions": [
    "Lie flat on your back with your knees bent.",
    "Place your hands behind your head, elbows out.",
    "Engage your abs and curl forward to a 45° torso angle.",
    "Pause at the top, then slowly lower back to start.",
    "Repeat for the desired number of repetitions."
  ],
  "_links": {
    "self": { "href": "/v1/exercises/0001" },
    "related": { "href": "/v1/exercises/0001/related" },
    "calories": {
      "href": "/v1/exercises/0001/calories{?bodyweightKg,minutes}",
      "templated": true
    },
    "marketplacePreview": { "href": "/marketplace/preview/0001.gif" }
  }
}
GET/v1/exercises/search?q=

Full-text search across name, target, equipment

200 · response example
{
  "data": [
    { "id": "0024", "name": "Barbell Squat", "target": "Quads", "equipment": "Barbell" },
    { "id": "0033", "name": "Barbell Decline Bench Press", "target": "Pectorals", "equipment": "Barbell" }
  ],
  "pagination": { "page": 1, "pageSize": 50, "total": 24, "totalPages": 1 }
}
GET/v1/exercises/{id}/related

5 related exercises (same target, prefer matching equipment, excludes self)

200 · response example
{
  "data": [
    { "id": "0002", "name": "45° Side Bend", "bodyPart": "Waist", "target": "Abs", "equipment": "Body Weight" },
    { "id": "0003", "name": "Air Bike", "bodyPart": "Waist", "target": "Abs", "equipment": "Body Weight" },
    { "id": "0006", "name": "Alternate Heel Touchers", "bodyPart": "Waist", "target": "Abs", "equipment": "Body Weight" },
    { "id": "0157", "name": "Plank", "bodyPart": "Waist", "target": "Abs", "equipment": "Body Weight" },
    { "id": "0244", "name": "Russian Twist", "bodyPart": "Waist", "target": "Obliques", "equipment": "Body Weight" }
  ]
}
GET/v1/exercises/{id}/calories

Estimate calories burned from MET × bodyweight × duration

Query params

bodyweightKg30-250 kg, required
minutes1-600, required
200 · response example
{
  "exerciseId": "0001",
  "met": 3.5,
  "bodyweightKg": 80,
  "minutes": 20,
  "kcal": 93.33
}
GET/v1/random

Return one random exercise

200 · response example
{
  "id": "0549",
  "name": "Kettlebell Swing",
  "bodyPart": "Upper Legs",
  "target": "Glutes",
  "equipment": "Kettlebell",
  "category": "strength",
  "difficulty": "intermediate",
  "mechanic": "compound",
  "force": "push",
  "met": 7.5,
  "caloriesPerMinute": 8.8,
  "averageCaloriesPerMinute": 8.8,
  "averageCaloriesPerHour": 528
}
GET/v1/popular

Top 50 exercises by usage (LEFT JOIN on usage_events; falls back to id ASC)

200 · response example
{
  "data": [
    { "id": "0089", "name": "Bench Press", "bodyPart": "Chest", "target": "Pectorals", "calls": 4127 },
    { "id": "0024", "name": "Barbell Squat", "bodyPart": "Upper Legs", "target": "Quads", "calls": 3884 },
    { "id": "0118", "name": "Deadlift", "bodyPart": "Upper Legs", "target": "Glutes", "calls": 3501 }
  ]
}
GET/v1/workouts

List curated workouts (paginated, filterable)

Query params

pagePage number (default 1)
pageSize1-100, default 25
levelbeginner | intermediate | advanced
categorypush | pull | legs | full_body | core | hiit | cardio | recovery
maxDurationMinutesCap on session duration
equipmentMatch if any in equipment_needed
200 · response example
{
  "data": [
    {
      "id": "wk_beginner_full_body",
      "name": "Beginner Full Body",
      "slug": "beginner-full-body",
      "description": "Eight-exercise full-body intro using minimal equipment for new lifters.",
      "level": "beginner",
      "durationMinutes": 45,
      "category": "full_body",
      "equipmentNeeded": ["Body Weight", "Dumbbell"]
    }
  ],
  "pagination": { "page": 1, "pageSize": 25, "total": 16 }
}
GET/v1/workouts/{id}

Workout with embedded exercise list (sets, reps, rest, position)

200 · response example
{
  "id": "wk_beginner_full_body",
  "name": "Beginner Full Body",
  "level": "beginner",
  "durationMinutes": 45,
  "category": "full_body",
  "exercises": [
    { "position": 1, "id": "0007", "name": "Balance Board",                  "target": "Abs",         "sets": 3, "reps": 12, "restSeconds": 60 },
    { "position": 2, "id": "0009", "name": "Chest Dip",                       "target": "Pectorals",   "sets": 3, "reps": 10, "restSeconds": 60 },
    { "position": 3, "id": "0364", "name": "Dumbbell One Arm Bent-over Row", "target": "Lats",        "sets": 3, "reps": 10, "restSeconds": 60 },
    { "position": 4, "id": "0066", "name": "Bench Hip Extension",            "target": "Glutes",      "sets": 3, "reps": 12, "restSeconds": 60 },
    { "position": 5, "id": "0367", "name": "Dumbbell Alternate Side Press",  "target": "Delts",       "sets": 3, "reps": 10, "restSeconds": 60 },
    { "position": 6, "id": "0001", "name": "3/4 Sit-up",                      "target": "Abs",         "sets": 3, "reps": 15, "restSeconds": 45 }
  ]
}
GET/v1/programs

List multi-week training programs (paginated, filterable)

Query params

pagePage number (default 1)
pageSize1-100, default 25
levelbeginner | intermediate | advanced
goalstrength | hypertrophy | fat_loss | endurance | mobility
200 · response example
{
  "data": [
    {
      "id": "pg_beginner_strength_4w",
      "name": "4-Week Beginner Strength",
      "slug": "4-week-beginner-strength",
      "description": "Three full-body sessions per week to build foundational strength with minimal equipment.",
      "weeks": 4,
      "level": "beginner",
      "goal": "strength",
      "daysPerWeek": 3
    }
  ],
  "pagination": { "page": 1, "pageSize": 25, "total": 6 }
}
GET/v1/programs/{id}

Program with embedded week×day schedule of workout summaries

200 · response example
{
  "id": "pg_beginner_strength_4w",
  "name": "4-Week Beginner Strength",
  "weeks": 4,
  "level": "beginner",
  "goal": "strength",
  "daysPerWeek": 3,
  "schedule": [
    { "week": 1, "day": 1, "workout": { "id": "wk_beginner_full_body",   "name": "Beginner Full Body" } },
    { "week": 1, "day": 2, "workout": { "id": "wk_park_bodyweight",      "name": "Bodyweight Park Workout" } },
    { "week": 1, "day": 3, "workout": { "id": "wk_beginner_full_body",   "name": "Beginner Full Body" } }
  ]
}
GET/v1/bodyparts

List of all body parts (10 entries)

200 · response example
{
  "data": ["Back", "Cardio", "Chest", "Lower Arms", "Lower Legs", "Neck", "Shoulders", "Upper Arms", "Upper Legs", "Waist"]
}
GET/v1/equipment

Equipment taxonomy

200 · response example
{
  "data": ["Assisted", "Band", "Barbell", "Body Weight", "Bosu Ball", "Cable", "Dumbbell", "Kettlebell", "Leverage Machine", "Smith Machine", "Stability Ball", "Stationary Bike", "Trap Bar", "Vibrate Plate"]
}
GET/v1/targets

Target muscle taxonomy

200 · response example
{
  "data": ["Abs", "Adductors", "Biceps", "Calves", "Cardiovascular System", "Delts", "Forearms", "Glutes", "Hamstrings", "Lats", "Levator Scapulae", "Pectorals", "Quads", "Serratus Anterior", "Spine", "Traps", "Triceps", "Upper Back"]
}
GET/v1/me

Current key info: tier, quota used, quota limit, reset date

200 · response example
{
  "keyPrefix": "fed_live_xR8tQk2p",
  "tier": "starter",
  "quotaUsed": 1247,
  "quotaLimit": 10000,
  "resetAt": "2026-05-25"
}