MuscleWiki APImusclewiki.com ↗
Search and retrieve exercises from MuscleWiki. Filter by muscle group, equipment type, or keyword. Get steps, images, videos, and difficulty for each exercise.
What is the MuscleWiki API?
The MuscleWiki API exposes 4 endpoints for browsing and retrieving exercise data, including full exercise details with form steps, gendered images, and video demonstrations. Use get_exercises to search and paginate across the full exercise catalog with filters for muscle group and equipment type, or call get_exercise_details to pull structured data for a single exercise including difficulty level, grip types, and targeted muscles.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/475e3660-3ef2-46a3-a37d-c3a792b39793/get_exercise_types' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace musclewiki-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""MuscleWiki Exercise API — browse equipment, muscles, and exercises."""
from parse_apis.musclewiki_exercise_api import MuscleWiki, ExerciseNotFound
client = MuscleWiki()
# List all available equipment types
for eq in client.equipmenttypes.list(limit=5):
print(eq.id, eq.name)
# List all muscle groups
for muscle in client.musclegroups.list(limit=5):
print(muscle.id, muscle.name)
# Search exercises filtered by muscle group (chest = id 2)
for ex in client.exercisesummaries.search(muscle_id=2, limit=3):
print(ex.name, ex.equipment, ex.difficulty)
# Drill into a single exercise for full details
summary = client.exercisesummaries.search(query="bench press", limit=1).first()
if summary:
try:
detail = summary.details()
print(detail.name, detail.equipment, detail.difficulty)
for step in detail.correct_steps:
print(step.order, step.text)
for m in detail.muscles_primary:
print(m.id, m.name)
except ExerciseNotFound as exc:
print(f"Exercise not found: {exc}")
print("exercised: equipmenttypes.list / musclegroups.list / exercisesummaries.search / details")
Returns the complete list of equipment types (categories) available on MuscleWiki. Each equipment type has an integer ID usable as a filter in get_exercises. The list is static and rarely changes.
No input parameters required.
{
"type": "object",
"fields": {
"equipments": "array of objects with id (integer) and name (string) for each equipment type"
},
"sample": {
"data": {
"equipments": [
{
"id": 1,
"name": "Barbell"
},
{
"id": 2,
"name": "Dumbbells"
},
{
"id": 3,
"name": "Bodyweight"
},
{
"id": 4,
"name": "Machine"
}
]
},
"status": "success"
}
}About the MuscleWiki API
Exercise Search and Filtering
The get_exercises endpoint accepts up to five optional parameters: query for keyword search, muscle_id and equipment_id for categorical filtering (using IDs from get_muscle_groups and get_exercise_types), and limit/offset for pagination. Each result in the results array includes the exercise id, name, slug, url, thumbnail, equipment, muscles, and difficulty. The total and has_next fields make it straightforward to walk through large result sets page by page.
Lookup Tables
Before filtering, call get_muscle_groups to retrieve the full list of muscle group objects (each with an id and name), and get_exercise_types to get available equipment categories in the same shape. These IDs are what get_exercises expects for the muscle_id and equipment_id filter params. There is no free-text equivalent for these filters; the integer IDs are required.
Exercise Detail
Passing an exercise_id to get_exercise_details returns a richer object: the images and videos fields each contain male and female sub-arrays, so you can surface gender-specific demonstrations. Videos include both a url and a thumbnail. The grips array lists applicable grip variations with their own IDs and names. Additional fields cover difficulty, equipment, seo_tags, and the canonical url and slug for deep-linking.
The MuscleWiki API is a managed, monitored endpoint for musclewiki.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when musclewiki.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official musclewiki.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a workout planner that filters exercises by target muscle group using
muscle_idand available gym equipment usingequipment_id. - Populate an exercise library app with thumbnails, difficulty ratings, and video demonstrations from
get_exercise_details. - Generate equipment-specific workout programs by querying
get_exercise_typesthen listing matching exercises per category. - Display gendered exercise animations or images using the
maleandfemalearrays in theimagesandvideosfields. - Implement an exercise search bar backed by the
queryparameter onget_exerciseswith paginated results. - Catalog exercises by grip variation using the
gripsarray returned in detailed exercise responses. - Build a difficulty-tier workout selector by filtering
get_exercisesresults by thedifficultyfield in each summary.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does MuscleWiki have an official developer API?+
What does `get_exercise_details` return that `get_exercises` does not?+
get_exercises returns a summary per exercise: id, name, slug, thumbnail, equipment, muscles, and difficulty. get_exercise_details adds grips, full images and videos objects with both male and female variants, seo_tags, and the canonical url. It does not include free-text step-by-step form instructions as a discrete field; narrative content is not a named field in the response schema.Can I filter exercises by both muscle group and equipment type at the same time?+
get_exercises endpoint accepts both muscle_id and equipment_id as independent optional parameters, and they can be combined in a single request along with a query keyword and pagination controls.Does the API return user-submitted exercises or community content like workout routines?+
How does pagination work in `get_exercises`?+
limit, offset, total, and has_next. Pass offset incremented by limit on each subsequent request to step through pages. has_next being false indicates you have reached the end of the result set.