Start building your project using the MuscleLib API

Base URL

All of the endpoints are prefixed with the base URL. The base URL for the MuscleLib API is:

https://libapi.vercel.app/api

Get Started

All Exercises

Retrieve a list of all exercises available in the database. This endpoint supports various query parameters for filtering and pagination.

Response Samples

RESPONSE SCHEMA: application/json


  • type: array
    • items: object
      • _id: string
      • name: string
      • force: string
      • level: string
      • mechanic: string
      • equipment: string
      • primaryMuscles: array (items: string)
      • secondaryMuscles: array (items: object) - details not specified)
      • instructions: array (items: string)
      • category: string
      • images: array (items: string)
      • id: string

RESPONSE SCHEMA: application/json


  • type: object
    • properties:
      • message: string
      • error: string

  {
    "_id": "677471831533c77a3a55b2e0",
    "name": "3/4 Sit-Up",
    "force": "pull",
    "level": "beginner",
    "mechanic": "compound",
    "equipment": "body only",
    "primaryMuscles": [
      "abdominals"
    ],
    "secondaryMuscles": [],
    "instructions": [
      "Lie down on the floor and secure your feet"
    ],
    "category": "strength",
    "images": [
      "3_4_Sit-Up/0.jpg",
      "3_4_Sit-Up/1.jpg"
    ],
    "id": "3_4_Sit-Up"
  }              
                

  {
    "message": "Error fetching exercises.",
    "error": "Operation `exercises.distinct()` buffering timed out after 10000ms"
  }
                
Lang

Language for response. Default is en. Supported values: en, pt.

Example Request:

Response Samples

RESPONSE SCHEMA: application/json


  • type: array
    • items: object
      • _id: string
      • name: string
      • force: string
      • level: string
      • mechanic: string
      • equipment: string
      • primaryMuscles: array (items: string)
      • secondaryMuscles: array (items: object) - details not specified)
      • instructions: array (items: string)
      • category: string
      • images: array (items: string)
      • id: string

RESPONSE SCHEMA: application/json


  • type: object
    • properties:
      • message: string

  [
    {
      "_id": "677471841533c77a3a55b2e6",
      "name": "Advanced Kettlebell Windmill",
      "force": "push",
      "level": "intermediate",
      "mechanic": "isolation",
      "equipment": "kettlebells",
      "primaryMuscles": [
        "abdominals"
      ],
      "secondaryMuscles": [
        "glutes",
        "hamstrings",
        "shoulders"
      ],
      "instructions": [
        "Clean and press a kettlebell overhead with one arm."
      ],
      "category": "strength",
      "images": [
        "Advanced_Kettlebell_Windmill/0.jpg",
        "Advanced_Kettlebell_Windmill/1.jpg"
      ],
      "id": "Advanced_Kettlebell_Windmill"
    }             
              

  {
    "message": "Invalid language. Use 'en' or 'pt'."
  }
              
Fields

Comma-separated list of fields to return e.g.: (name,instructions).

Example Request:

Response Samples

RESPONSE SCHEMA: application/json


  • type: object
    • items: object
      • _id: string
      • name: string
      • instructions: array (items: string)

RESPONSE SCHEMA: application/json


  • type: object
    • properties:
      • message: string

  {
    "_id": "677471841533c77a3a55b2e9",
    "name": "Alternate Hammer Curl",
    "instructions": [
      "Stand up with your torso upright and a dumbbell in each hand being held at arms length. The elbows should be close to the torso.",
      "The palms of the hands should be facing your torso. This will be your starting position."
    ]
  }         
              

  {
    "message": "The field(s) parameter(s) cannot be empty. Valid fields are: force, level, mechanic, equipment, primaryMuscles, secondaryMuscles, instructions, category, images, name."
  }
              
Page

Page number for pagination must be an integer ≥ 1. Default is 1.

Example Request:

Response Samples

RESPONSE SCHEMA: application/json


  • type: array
    • items: object
      • _id: string
      • name: string
      • force: string
      • level: string
      • mechanic: string
      • equipment: string
      • primaryMuscles: array (items: sstring)
      • secondaryMuscles: array (items: object - details not specified)
      • instructions: array (items: string)
      • category: string
      • images: array (items: string)
      • id: string

RESPONSE SCHEMA: application/json


  • type: obeject
    • properties:
      • message: string

  {
    "_id": "677471841533c77a3a55b4d4",
    "name": "One-Arm Open Palm Kettlebell Clean",
    "force": "pull",
    "level": "intermediate",
    "mechanic": "compound",
    "equipment": "kettlebells",
    "primaryMuscles": [
      "hamstrings"
    ],
    "secondaryMuscles": [
      "forearms",
      "glutes",
      "lower back",
      "quadriceps",
      "shoulders"
    ],
    "instructions": [
      "Place one kettlebell between your feet."
    ],
    "category": "strength",
    "images": [
      "One-Arm_Open_Palm_Kettlebell_Clean/0.jpg",
      "One-Arm_Open_Palm_Kettlebell_Clean/1.jpg"
    ],
    "id": "One-Arm_Open_Palm_Kettlebell_Clean",
    "__v": 0
  }           
              

  {
    "message": "parameter 'page' is invalid. use a value greater than or equal to 0."
  }
              
Limit

Number of items to return per page. Must be an integer ≥ 1. Default is 10.

Example Request:

Response Samples

RESPONSE SCHEMA: application/json


  • type: array
    • items: object
      • _id: string
      • name: string
      • force: string
      • level: string
      • mechanic: string
      • equipment: string
      • primaryMuscles: array
      • secondaryMuscles: array
      • instructions: array
      • category: string
      • images: array
      • id: string

RESPONSE SCHEMA: application/json


  • type: object
    • properties:
      • message: string

[
  {
    "_id": "677471841533c77a3a55b4c1",
    "name": "Bent-Over Two-Arm Long Bar Row",
    "force": "pull"
  }
]
              

{
  "message": "parameter 'limit' must be greater than 0"
}
              
Dynamic Filters

Apply filters based on exercise attributes. Example: (level=expert&force=push&primaryMuscles=chest).

Example Request:

Response Samples

RESPONSE SCHEMA: application/json


  • type: array
    • items: object
      • _id: string
      • name: string
      • force: string
      • level: string
      • mechanic: string
      • equipment: string
      • primaryMuscles: array (items: string)
      • secondaryMuscles: array (items: object - details not specified)
      • instructions: array (items: string)
      • category: string
      • images: array (items: string)
      • id: string

RESPONSE SCHEMA: application/json


  • type: object
    • properties:
      • message: string
[
  {
    "_id": "677471841533c77a3a55b4ff",
    "name": "Plyo Kettlebell Pushups",
    "force": "push",
    "level": "expert",
    "mechanic": "compound",
    "equipment": "kettlebells",
    "primaryMuscles": [
      "chest"
    ],
    "secondaryMuscles": [
      "shoulders",
      "triceps"
    ],
    "instructions": [
      "Place a kettlebell on the floor. Place yourself in a pushup position, on your toes with one hand on the ground and one hand holding the kettlebell, with your elbows extended. This will be your starting position."
    ],
    "category": "strength",
    "images": [
      "Plyo_Kettlebell_Pushups/0.jpg",
      "Plyo_Kettlebell_Pushups/1.jpg"
    ],
    "id": "Plyo_Kettlebell_Pushups",
    "__v": 0
  }
]
{
  "message": "No exercises found."
}
Get Exercise Images

The endpoint allows users to retrieve images associated with exercises from the MuscleLib API. Each exercise has its images stored in a specific directory.

Response Samples

RESPONSE SCHEMA: image/jpeg

Exercise Image Example

RESPONSE SCHEMA: application/json


  • type: object
    • properties:
      • message: string
      • availableOptions: array
        • items: string
{
  "message": "The $exerciseName provided is incorrect or does not exist in the database. Try:",
  "availableOptions": [
    "Stiff-Legged_Barbell_Deadlift"
  ]
}
Image Structure

Exercise images are organized in folders, where each folder corresponds to an exercise. Inside each folder, there are two images named 0.jpg and 1.jpg.
For example:

  • Image paths for the exercise "3/4 Sit-Up":
  • First Image
    0.jpg
    Second Image
    1.jpg
    https://libapi.vercel.app/api/exercises/3_4_Sit-Up/0.jpg
    https://libapi.vercel.app/api/exercises/3_4_Sit-Up/1.jpg
  • Image paths for the exercise "Stiff-Legged_Barbell_Deadlift":
  • First Image
    0.jpg
    Second Image
    1.jpg
    https://libapi.vercel.app/api/exercises/Stiff-Legged_Barbell_Deadlift/0.jpg
    https://libapi.vercel.app/api/exercises/Stiff-Legged_Barbell_Deadlift/1.jpg