Docs
Fitly API
Reference
Programmatic access to exercises, AI-generated workouts, periodized programs, and a supplement database. Every trainer on Joiinflow gets their own rate-limited API key against this shared dataset.
fitly.joiinflow.com/api/fitlyv1JSONAPI Key# Fetch 5 exercises using your API key
curl 'https://fitly.joiinflow.com/api/fitly/v1/exercises?limit=5' \
-H "X-Fitly-Key: wx_your_key_here"
Authentication
Every request requires a key from your API Keys page. Pass it one of two ways.
HTTP HEADER (Recommended)
Keeps the key out of server logs and browser history.
curl 'https://fitly.joiinflow.com/api/fitly/v1/exercises' \
-H "X-Fitly-Key: wx_your_key_here"
QUERY PARAMETER
Convenient for quick tests or embedding a GIF URL directly in an <img> tag.
curl 'https://fitly.joiinflow.com/api/fitly/v1/exercises?api-key=wx_your_key_here'
Exercises
/v1/exercisesList all exercises with pagination and filters.
Parameters
| Name | In | Required |
|---|---|---|
| bodyPart | query | No |
| target | query | No |
| equipment | query | No |
| limit | query | No |
| offset | query | No |
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/exercises?bodyPart=chest&target=pectorals' \
-H "X-Fitly-Key: wx_your_key_here"
Example Response
[
{
"id": "0025",
"name": "Barbell Bench Press",
"bodyPart": "chest",
"target": "pectorals",
"equipment": "barbell",
"difficulty": "intermediate",
"mechanic": "compound",
"force": "push",
"caloriesPerMinute": 7.4,
"popularityRank": 99,
"gifUrl": "https://fitly.joiinflow.com/api/fitly/v1/media/videos/0025-EIeI8Vf.gif",
"isUnilateral": false,
"recommendedSets": "3-4",
"recommendedReps": "5-8"
}
]/v1/exercises/exercise/:idGet a single exercise by ID.
Parameters
| Name | In | Required |
|---|---|---|
| id | path | Yes |
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/exercises/exercise/0001' \
-H "X-Fitly-Key: wx_your_key_here"
Example Response
{
"id": "0025",
"name": "Barbell Bench Press",
"bodyPart": "chest",
"target": "pectorals",
"equipment": "barbell",
"secondaryMuscles": [
"triceps",
"shoulders"
],
"instructions": [
"Lie flat on a bench with your feet flat on the ground.",
"Lower the barbell to your chest.",
"Press back up to full extension."
],
"gifUrl": "https://fitly.joiinflow.com/api/fitly/v1/media/videos/0025-EIeI8Vf.gif",
"category": "strength",
"difficulty": "intermediate",
"mechanic": "compound",
"force": "push",
"met": 6,
"caloriesPerMinute": 7.4
}/v1/exercises/bodyPart/:bodyPartFilter exercises by body part.
Parameters
| Name | In | Required |
|---|---|---|
| bodyPart | path | Yes |
| limit | query | No |
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/exercises/bodyPart/chest?limit=5' \
-H "X-Fitly-Key: wx_your_key_here"
/v1/exercises/target/:targetFilter exercises by target muscle.
Parameters
| Name | In | Required |
|---|---|---|
| target | path | Yes |
| limit | query | No |
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/exercises/target/biceps?limit=5' \
-H "X-Fitly-Key: wx_your_key_here"
/v1/exercises/equipment/:equipmentFilter exercises by equipment.
Parameters
| Name | In | Required |
|---|---|---|
| equipment | path | Yes |
| limit | query | No |
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/exercises/equipment/dumbbell?limit=5' \
-H "X-Fitly-Key: wx_your_key_here"
/v1/exercises/name/:namePartial name search.
Parameters
| Name | In | Required |
|---|---|---|
| name | path | Yes |
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/exercises/name/squat' \
-H "X-Fitly-Key: wx_your_key_here"
/v1/exercises/searchBasic+Multi-filter search. Requires Basic plan or higher.
Parameters
| Name | In | Required |
|---|---|---|
| bodyPart | query | No |
| equipment | query | No |
| limit | query | No |
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/exercises/search?bodyPart=chest&equipment=barbell' \
-H "X-Fitly-Key: wx_your_key_here"
/v1/exercises/bodyPartListAll body part values.
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/exercises/bodyPartList' \
-H "X-Fitly-Key: wx_your_key_here"
/v1/exercises/targetListAll target muscle values.
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/exercises/targetList' \
-H "X-Fitly-Key: wx_your_key_here"
/v1/exercises/equipmentListAll equipment values.
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/exercises/equipmentList' \
-H "X-Fitly-Key: wx_your_key_here"
/v1/exercises/:id/similarExercises similar to the given one.
Parameters
| Name | In | Required |
|---|---|---|
| id | path | Yes |
| limit | query | No |
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/exercises/0025/similar?limit=5' \
-H "X-Fitly-Key: wx_your_key_here"
/v1/exercises/:id/alternativesSame target, different equipment.
Parameters
| Name | In | Required |
|---|---|---|
| id | path | Yes |
| equipment | query | No |
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/exercises/0025/alternatives?equipment=dumbbell' \
-H "X-Fitly-Key: wx_your_key_here"
/v1/exercises/:id/caloriesEstimate calories burned.
Parameters
| Name | In | Required |
|---|---|---|
| id | path | Yes |
| weightKg | query | No |
| minutes | query | No |
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/exercises/0025/calories?weightKg=80&minutes=15' \
-H "X-Fitly-Key: wx_your_key_here"
/v1/exercises/changesUltra+Exercises changed since a date. Requires Ultra plan.
Parameters
| Name | In | Required |
|---|---|---|
| since | query | Yes |
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/exercises/changes?since=2026-01-01' \
-H "X-Fitly-Key: wx_your_key_here"
Workout
/v1/workout/generatePro+Generate a single workout session. Requires Pro plan or higher.
Parameters
| Name | In | Required |
|---|---|---|
| goal | query | No |
| duration | query | No |
| level | query | No |
| split | query | No |
| equipment | query | No |
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/workout/generate?goal=muscle_gain&duration=45' \
-H "X-Fitly-Key: wx_your_key_here"
Example Response
{
"goal": "muscle_gain",
"level": "intermediate",
"seed": "06vhrfi3",
"split": "push",
"bodyFocus": [
"chest",
"shoulders",
"upper arms"
],
"equipment": [
"barbell",
"dumbbell"
],
"totalExercises": 5,
"estimatedDurationMinutes": 47,
"exercises": [
{
"order": 1,
"sets": 4,
"reps": "6-8",
"restSeconds": 90,
"exercise": {
"id": "0025",
"name": "Barbell Bench Press"
}
}
]
}/v1/workout/programUltra+Generate a periodized multi-week program. Requires Ultra plan.
Parameters
| Name | In | Required |
|---|---|---|
| goal | query | No |
| weeks | query | No |
| daysPerWeek | query | No |
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/workout/program?goal=muscle_gain&weeks=8' \
-H "X-Fitly-Key: wx_your_key_here"
Supplements
/v1/supplementsPro+List supplements. Requires Pro plan or higher.
Parameters
| Name | In | Required |
|---|---|---|
| goal | query | No |
| evidence | query | No |
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/supplements?goal=muscle_gain&evidence=strong' \
-H "X-Fitly-Key: wx_your_key_here"
Example Response
[
{
"id": "creatine-monohydrate",
"name": "Creatine Monohydrate",
"category": "performance",
"goals": [
"muscle_gain",
"strength"
],
"typical_dosage": "3-5 g daily",
"evidence_level": "strong",
"disclaimer": "Informational content only - not medical advice."
}
]/v1/supplements/:idSingle supplement by ID.
Parameters
| Name | In | Required |
|---|---|---|
| id | path | Yes |
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/supplements/creatine-monohydrate' \
-H "X-Fitly-Key: wx_your_key_here"
/v1/supplements/exercise/:exerciseIdSupplements relevant to a given exercise.
Parameters
| Name | In | Required |
|---|---|---|
| exerciseId | path | Yes |
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/supplements/exercise/0025' \
-H "X-Fitly-Key: wx_your_key_here"
/v1/supplements/filtersAll filter values with counts.
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/supplements/filters' \
-H "X-Fitly-Key: wx_your_key_here"
/v1/supplements/stackUltra+Goal-based stack builder. Requires Ultra plan.
Parameters
| Name | In | Required |
|---|---|---|
| goal | query | Yes |
| level | query | No |
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/supplements/stack?goal=fat_loss' \
-H "X-Fitly-Key: wx_your_key_here"
Account
/v1/plansYour own full plan ladder (not just the calling key's tier) - what your app renders its pricing page from.
Example Request
curl 'https://fitly.joiinflow.com/api/fitly/v1/plans' \
-H "X-Fitly-Key: wx_your_key_here"
Rate Limits
Each key has a request quota tied to its plan. Free is a lifetime total that never resets; every paid plan resets monthly. Exceeding it returns 429.
// HTTP 429
{
"error": "quota_exceeded",
"limit": 500,
"used": 501,
"resetAt": null,
"message": "You have exceeded your plan's request quota."
}Error Codes
Every error returns JSON with an error field.
| Status | Error | Cause |
|---|---|---|
401 | missing_api_key / invalid_api_key | No key provided, or the key is invalid/revoked. |
403 | plan_required | Your plan doesn't include this endpoint. See requiredPlan in the response. |
404 | not_found | The requested ID doesn't exist. |
429 | quota_exceeded | You've used your plan's full request quota. |
Plans
All plans include the full exercise catalog. Higher tiers unlock search, workout generation, and supplements.
Plans are per-trainer, not fixed platform tiers, the ones below are a starting template every trainer gets by default, editable from your own Plans page. Fetch your own live pricing programmatically via GET /v1/plans.
Free
$0/mo
- ✓500 requests total
- ✓Core exercise endpoints
- ✓10 results per page
Basic
$9.99/mo
- ✓10,000 requests / month
- ✓Multi-filter search
- ✓20 results per page
Pro
Popular$29.99/mo
- ✓100,000 requests / month
- ✓AI workout generator
- ✓Supplements database
- ✓50 results per page
Ultra
$79.99/mo
- ✓1,000,000 requests / month
- ✓Periodized programs
- ✓Joint & Rehab metadata
- ✓Supplement stack builder
- ✓100 results per page
Need more volume? Enterprise plans are available, contact us from the Billing page.