# Fitness & Exercise API — exercise database with step-by-step instructions, muscle targeting, and equipment filters (wger.de open data, 800+ exercises)

> Browse or search the full exercise library (800+ exercises from wger.de). Filter by name keyword; returns each exercise's name, body part, target muscle, equipment, step-by-step instructions, and animation URL.
> ReefAPI engine `fitness` · 8 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/fitness/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed or blocked calls are free.
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http, `Authorization: Bearer <key>`) and your assistant can call these actions directly.

## Endpoints

### POST /fitness/v1/exercises — 1 credit
Browse or search the full exercise library (800+ exercises from wger.de). Filter by name keyword; returns each exercise's name, body part, target muscle, equipment, step-by-step instructions, and animation URL.

**Parameters:**
- `name` (string, optional) — Free-text search term to filter exercises by name.
- `limit` (integer, optional, default 20) — Results per page (1-100, default 20). Larger values are clamped to 100.
- `offset` (integer, optional, default 0) — Pagination offset (skip N results). Page forward with meta.next_offset.
- `language` (integer, optional, default 2) — wger language id for names/instructions (2 = English, 1 = German, 4 = Russian, 5 = Spanish, …). Defaults to English.

**Returns:** results[] (id, name, bodyPart, target, equipment, secondaryMuscles[], instructions[], gifUrl/imageUrl, license, licenseAuthor), count, next_offset

### POST /fitness/v1/by_bodypart — 1 credit
All exercises targeting a specific body part — e.g. 'chest', 'back', 'shoulders', 'upper arms', 'waist'. Returns name, target muscle, equipment, and instructions for each.

**Parameters:**
- `bodypart` (string, required) — Body part / category to filter by (e.g. chest, back, shoulders, upper arms, upper legs, lower legs, waist, cardio). Matched by substring; use bodypart_list for the live options.
- `limit` (integer, optional, default 20) — Results per page (1-100, default 20). Larger values are clamped to 100.
- `offset` (integer, optional, default 0) — Pagination offset (skip N results). Page forward with meta.next_offset.
- `language` (integer, optional, default 2) — wger language id for names/instructions (2 = English, 1 = German, 4 = Russian, 5 = Spanish, …). Defaults to English.

**Returns:** results[] (exercise name, bodyPart, target, equipment, instructions[], gifUrl), count, bodypart

**Example request body:**
```json
{
  "bodypart": "chest",
  "limit": 5
}
```

### POST /fitness/v1/by_equipment — 1 credit
All exercises that use a specific piece of equipment — e.g. 'barbell', 'dumbbell', 'kettlebell', 'none' (bodyweight). Returns name, target muscle, body part, and instructions.

**Parameters:**
- `equipment` (string, required) — Equipment name to filter by (e.g. barbell, dumbbell, kettlebell, none). Matched by substring; use equipment_list for the live options.
- `limit` (integer, optional, default 20) — Results per page (1-100, default 20). Larger values are clamped to 100.
- `offset` (integer, optional, default 0) — Pagination offset (skip N results). Page forward with meta.next_offset.
- `language` (integer, optional, default 2) — wger language id for names/instructions (2 = English, 1 = German, 4 = Russian, 5 = Spanish, …). Defaults to English.

**Returns:** results[] (exercise name, equipment, target, bodyPart, instructions[], gifUrl), count, equipment

### POST /fitness/v1/by_target — 1 credit
All exercises that target a specific muscle — e.g. 'biceps', 'triceps', 'quads', 'glutes', 'lats'. Returns name, equipment, body part, and step-by-step instructions.

**Parameters:**
- `target` (string, required) — Target muscle to filter by (e.g. biceps, triceps, quads, glutes). Matched by substring; use target_list for the live options.
- `limit` (integer, optional, default 20) — Results per page (1-100, default 20). Larger values are clamped to 100.
- `offset` (integer, optional, default 0) — Pagination offset (skip N results). Page forward with meta.next_offset.
- `language` (integer, optional, default 2) — wger language id for names/instructions (2 = English, 1 = German, 4 = Russian, 5 = Spanish, …). Defaults to English.

**Returns:** results[] (exercise name, target, equipment, bodyPart, instructions[], gifUrl), count, target

### POST /fitness/v1/exercise_detail — 1 credit
Full detail for a single exercise by its id — name, body part, primary and secondary muscles, equipment, step-by-step instructions, animation URL, and license.

**Parameters:**
- `id` (integer, required) — A single wger exercise id (the `id` of a search/filter result).
- `language` (integer, optional, default 2) — wger language id for names/instructions (2 = English, 1 = German, 4 = Russian, 5 = Spanish, …). Defaults to English.

**Returns:** exercise{} (full normalized record including primaryMuscles[], instructions[], equipment, gifUrl, license)

**Example request body:**
```json
{
  "id": 1962
}
```

### POST /fitness/v1/bodypart_list — 0 credits
List all available body part categories (e.g. chest, back, shoulders, waist, cardio). Use these values with the by_bodypart action.

**Parameters:** none

**Returns:** bodyParts[] (the available body-part / category names)

### POST /fitness/v1/equipment_list — 0 credits
List all available equipment types (e.g. barbell, dumbbell, kettlebell, none). Use these values with the by_equipment action.

**Parameters:** none

**Returns:** equipment[] (the available equipment names)

### POST /fitness/v1/target_list — 0 credits
List all available target muscles (e.g. biceps, triceps, quads, glutes, lats). Use these values with the by_target action.

**Parameters:** none

**Returns:** targets[] (the available target-muscle names)

## More
- Try it live, no code: https://reefapi.com/playground?engine=fitness
- Human docs page: https://reefapi.com/docs/fitness
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
