curl -X GET "https://api.fitsociety.io/public/v1/workout/exercises/search" \
-H "Authorization: Bearer <access_token>"const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fitsociety.io/public/v1/workout/exercises/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.fitsociety.io/public/v1/workout/exercises/search"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"data": {
"tab": "library",
"items": [
{
"_id": "67f1234567890abcdef1234",
"name": "Barbell Bench Press",
"description": "Flat horizontal press.",
"primaryCategory": "Strength",
"secondaryCategories": [
"Agility & Speed"
],
"primaryMuscle": "Chest",
"secondaryMuscles": [
"Chest"
],
"primaryJoint": "Shoulder",
"equipment": [
"Dumbbells"
],
"difficulty": "Intermediate",
"intensity": "Above Average",
"visibility": "Everyone",
"createdAt": "2026-04-12T10:00:00.000Z",
"media": [
{
"type": "image",
"url": "https://cdn.example.com/exercises/bench.jpg",
"platform": null,
"videoId": null,
"thumbnail": null,
"duration": null,
"width": 1280,
"height": 720
}
],
"defaultType": "reps",
"isInSelectedPlanMoment": true,
"planExerciseId": "67f1234567890abcdef1234",
"targetSets": 3,
"targetReps": "15-20",
"targetRpe": 6,
"planPrescription": {
"source": "plan",
"planId": "67f1234567890abcdef1234",
"planMomentId": "67f1234567890abcdef1234",
"planExerciseId": "67f1234567890abcdef1234",
"type": "reps",
"sets": 3,
"minReps": 15,
"maxReps": 20,
"targetReps": "15-20",
"reps": "15-20",
"rpe": 6,
"restSeconds": 90,
"tempo": "2-0-2",
"rmPercentage": null,
"metric": "",
"perSetTrackingEnabled": false,
"setsData": [
{
"setNumber": 1,
"setType": "N",
"metric": "12",
"repetition": "8-12",
"weight": 60,
"rest": 90,
"rpe": 7.5,
"duration": 45,
"distance": 250
}
],
"display": {
"sets": "3 sets",
"reps": "15-20 reps",
"rpe": "RPE 6",
"summary": "3 sets · 15-20 reps · RPE 6"
}
}
}
],
"pagination": {
"page": 1,
"limit": 25,
"totalPages": 5,
"totalItems": 100,
"hasNextPage": true,
"hasPreviousPage": false,
"nextPage": 2,
"previousPage": null
},
"availableFilters": {
"muscleGroups": [
"Chest"
],
"equipments": [
{
"value": "Dumbbells",
"label": "Dumbbells"
}
],
"categories": [
"Agility & Speed"
]
},
"selectedFilters": {
"tab": "library",
"muscleGroups": [
"Chest"
],
"equipments": [
"Dumbbells"
],
"categories": [
"Strength"
],
"search": "bench",
"planContext": {
"planId": "67f1234567890abcdef1234",
"planMomentId": "67f1234567890abcdef1234"
}
}
}
},
"meta": {
"requestId": "4f849d7d-f4f1-45cc-b4b7-3984a3d17f83",
"rateLimit": {
"limit": 10,
"remaining": 9,
"resetSeconds": 1
}
}
}{
"error": {
"code": 400,
"key": "request.invalid",
"message": "The request is invalid."
},
"meta": {
"requestId": "4f849d7d-f4f1-45cc-b4b7-3984a3d17f83",
"rateLimit": {
"limit": 10,
"remaining": 9,
"resetSeconds": 1
}
}
}{
"error": {
"code": 500,
"key": "server.internal_error",
"message": "An unexpected Public API server error occurred."
},
"meta": {
"requestId": "4f849d7d-f4f1-45cc-b4b7-3984a3d17f83",
"rateLimit": {
"limit": 10,
"remaining": 9,
"resetSeconds": 1
}
}
}Search or filter workout v2 exercises
Searches the exercise library with authenticated visibility scoping. Without an explicit visibility filter, results include global Everyone and Fitsociety exercises plus active-company Company exercises. Company scope is resolved from auth context, not from a query companyId. Supports a tab selector (library | my | member) and multi-value muscleGroups / equipments / categories filters (comma-separated). When valid planId and planMomentId context is provided, matching returned exercises include the selected day prescription (sets, targetReps, rpe, and display labels). Missing, invalid, or unavailable plan context is ignored so exercise search still succeeds without prescription values. The items shape is identical whether or not ?search=/?query= is sent (each item carries a combined media array, not separate images/videos). The response also returns tab, availableFilters (full selectable catalogue) and selectedFilters (the filters applied on this request).
Requires the workout_library:read scope. This operation maps to /app/v1/workout/exercises/search and retains its Workout V2 permission, feature-flag, and resource-scope checks.
The clientId path parameter is resolved inside the company bound to the Public API token when present.
curl -X GET "https://api.fitsociety.io/public/v1/workout/exercises/search" \
-H "Authorization: Bearer <access_token>"const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fitsociety.io/public/v1/workout/exercises/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.fitsociety.io/public/v1/workout/exercises/search"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"data": {
"tab": "library",
"items": [
{
"_id": "67f1234567890abcdef1234",
"name": "Barbell Bench Press",
"description": "Flat horizontal press.",
"primaryCategory": "Strength",
"secondaryCategories": [
"Agility & Speed"
],
"primaryMuscle": "Chest",
"secondaryMuscles": [
"Chest"
],
"primaryJoint": "Shoulder",
"equipment": [
"Dumbbells"
],
"difficulty": "Intermediate",
"intensity": "Above Average",
"visibility": "Everyone",
"createdAt": "2026-04-12T10:00:00.000Z",
"media": [
{
"type": "image",
"url": "https://cdn.example.com/exercises/bench.jpg",
"platform": null,
"videoId": null,
"thumbnail": null,
"duration": null,
"width": 1280,
"height": 720
}
],
"defaultType": "reps",
"isInSelectedPlanMoment": true,
"planExerciseId": "67f1234567890abcdef1234",
"targetSets": 3,
"targetReps": "15-20",
"targetRpe": 6,
"planPrescription": {
"source": "plan",
"planId": "67f1234567890abcdef1234",
"planMomentId": "67f1234567890abcdef1234",
"planExerciseId": "67f1234567890abcdef1234",
"type": "reps",
"sets": 3,
"minReps": 15,
"maxReps": 20,
"targetReps": "15-20",
"reps": "15-20",
"rpe": 6,
"restSeconds": 90,
"tempo": "2-0-2",
"rmPercentage": null,
"metric": "",
"perSetTrackingEnabled": false,
"setsData": [
{
"setNumber": 1,
"setType": "N",
"metric": "12",
"repetition": "8-12",
"weight": 60,
"rest": 90,
"rpe": 7.5,
"duration": 45,
"distance": 250
}
],
"display": {
"sets": "3 sets",
"reps": "15-20 reps",
"rpe": "RPE 6",
"summary": "3 sets · 15-20 reps · RPE 6"
}
}
}
],
"pagination": {
"page": 1,
"limit": 25,
"totalPages": 5,
"totalItems": 100,
"hasNextPage": true,
"hasPreviousPage": false,
"nextPage": 2,
"previousPage": null
},
"availableFilters": {
"muscleGroups": [
"Chest"
],
"equipments": [
{
"value": "Dumbbells",
"label": "Dumbbells"
}
],
"categories": [
"Agility & Speed"
]
},
"selectedFilters": {
"tab": "library",
"muscleGroups": [
"Chest"
],
"equipments": [
"Dumbbells"
],
"categories": [
"Strength"
],
"search": "bench",
"planContext": {
"planId": "67f1234567890abcdef1234",
"planMomentId": "67f1234567890abcdef1234"
}
}
}
},
"meta": {
"requestId": "4f849d7d-f4f1-45cc-b4b7-3984a3d17f83",
"rateLimit": {
"limit": 10,
"remaining": 9,
"resetSeconds": 1
}
}
}{
"error": {
"code": 400,
"key": "request.invalid",
"message": "The request is invalid."
},
"meta": {
"requestId": "4f849d7d-f4f1-45cc-b4b7-3984a3d17f83",
"rateLimit": {
"limit": 10,
"remaining": 9,
"resetSeconds": 1
}
}
}{
"error": {
"code": 500,
"key": "server.internal_error",
"message": "An unexpected Public API server error occurred."
},
"meta": {
"requestId": "4f849d7d-f4f1-45cc-b4b7-3984a3d17f83",
"rateLimit": {
"limit": 10,
"remaining": 9,
"resetSeconds": 1
}
}
}Authorizations
Public API access token issued by /public/v1/oauth/token. Example: Authorization: Bearer fspt_.... Each resource request rechecks the token company's current provider access. Disabling access blocks existing tokens with 403 auth.provider_unavailable.
Query Parameters
Full-text exercise search term.
100Alias for query. When set, the items shape matches the non-search (filter-only) branch exactly.
100Exclude one or more exercises from results (comma-separated string or array of exercise ObjectIds). Aliases accepted: excludeExerciseId / exerciseIds / exerciseId. Invalid id → 400 WORKOUTEXERCISE_EXERCISEID_INVALID. Echoed in selectedFilters.excludeExerciseIds.
"6925d2764ac340a53e012927,6925d2764ac340a53e012928"
Author-based tab. library (default) = all visible exercises; my = exercises created by the caller; member = client-created exercises (addedByRole: Client). Unknown values fall back to library. my requires a valid authenticated user id.
library, my, member Comma-separated muscle groups. Matches primaryMuscle OR secondaryMuscles.
Chest, Back, Lats, Traps, Shoulders, Biceps, Triceps, Forearms, Core, Abs, Obliques, Glutes, Quads, Hamstrings, Calves, Adductors, Abductors, Hip Flexors, Full Body, Cardio / Conditioning, Neck, Lower Back Comma-separated equipment keys (matches equipment).
Dumbbells, AdjustableDumbbells, Kettlebell, AdjustableKettlebell, CompetitionKettlebell, Medicineball, SlamBall, WallBall, Weightplate, BumperPlates, FractionalPlates, LoadableDumbbellHandle, Sandbag, StrongmanSandbag, Bulgarianbag, Aquabag, Aquaball, Hydrovest, MagneticBell, Macebell, SteelClub, IndianClub, Barbell, OlympicBarbell, TechniqueBar, EZBar, TrapBar, SafetySquatBar, SwissBar, CamberedBar, AxleBar, Landmine, Bench, FlatBench, AdjustableBench, InclineBench, DeclineBench, SealRowBench, HipThrustBench, BenchPressRack, SquatRack, SquatStand, PowerRack, WallMountedRack, HalfRack, SmithMachine, Monolift, JammerArms, BarbellJack, WeightTree, PlateStorage, DeadliftPlatform, Rig, StrengthMachinesPlateloaded, StrengthMachinesWeightstack, StrengthMachinesPneumatic, MultiGym, LegPressMachine, VerticalLegPressMachine, LeverageSquatMachine, LinearHackSquatMachine, BeltSquatMachine, PendulumSquatMachine, VSquatMachine, HackSquatMachine, LegExtensionMachine, LegCurlMachine, SeatedLegCurlMachine, LyingLegCurlMachine, StandingLegCurlMachine, StandingCalfRaiseMachine, SeatedCalfRaiseMachine, CalfPressMachine, HipThrustMachine, GluteDriveMachine, GluteKickbackMachine, HipExtensionMachine, HipAbductionMachine, HipAdductionMachine, ChestPressMachine, VerticalChestPressMachine, InclineChestPressMachine, DeclineChestPressMachine, IsoLateralChestPressMachine, IsoLateralInclinePressMachine, ShoulderPressMachine, IsoLateralShoulderPressMachine, MultiPressMachine, LateralRaiseMachine, RearDeltMachine, PecDeckMachine, PulloverMachine, LatPulldownMachine, IsoLateralLatPulldownMachine, AssistedPullupMachine, AssistedDipMachine, SeatedDipMachine, SeatedRowMachine, LowRowMachine, HighRowMachine, IsoLateralRowMachine, ChestSupportedRowMachine, TBarRowMachine, BicepsCurlMachine, PreacherCurlMachine, TricepsExtensionMachine, AbCrunchMachine, AbCoasterMachine, RotaryTorsoMachine, BackExtensionMachine, SeatedBackExtensionMachine, HyperextensionBench, ReverseHyper, GHD, Kinesis, Pulley, CableMachine, CableStation, CableColumn, CableCrossover, DualAdjustablePulley, SingleCableTower, FunctionalTrainer, TotalGymGTS, Gymstick, ViPR, RipTrainer, Battlerope, ProwlerSled, FarmersHandles, Yoke, Tire, Sledgehammer, TorqueTank, SledTrack, WallBallTarget, AgilityPoles, MiniHurdles, SprintParachute, PullUpBar, Parallelbars, DipBars, Equalizer, Suspensiontrainer, SuspensionSlingTrainer, GymnasticRings, MonkeyBars, PegBoard, RopeClimb, Wall, StallBars, DoorPullUpBar, PushUpHandles, AbStraps, Boxstep, SoftPlyoBox, Hurdle, Speedladder, Parallettes, NordicBench, SissySquatBench, Cardio, Treadmill, CurvedTreadmill, AirRunner, AssaultRunner, StationaryBike, UprightBike, RecumbentBike, BikeErg, SpinBike, AirBike, Rower, WaterRower, FanRower, ArmErgometer, SkiErg, Elliptical, ArcTrainer, NuStep, StairClimber, StepMill, JacobsLadder, VersaClimber, Bosu, Balanceball, Exerciseball, PilatesTennisball, PilatesRing, YogaMat, YogaBlock, YogaWheel, StretchStrap, MobilityStick, MassageBall, PeanutMassageBall, Airpad, Balanceboard, BalancePad, WobbleBoard, Glidedisc, Foamroller, Elasticbands, TherapyBand, Resistanceband, MiniBand, PullUpAssistBand, Powertube, AnkleWeights, SlantBoard, Vibrationtraining, CableRope, StraightBarAttachment, CurlBarAttachment, LatBarAttachment, TricepsBarAttachment, RowHandle, DHandle, DoubleDHandle, AnkleCuff, CableCuff, LandmineHandle, MagGripAttachment, DipBelt, AbWheel, WristRoller, FatGrip, Chain, DoorAnchor, JumpRope, SpeedRope, WeightedJumpRope, SledHarness, LiftingStraps, LiftingHooks, WristWraps, WeightliftingBelt, Clubbel, Stick, Bodybow, BuddySystem, Multinet, Flowin, Aerialhoop, Dancingpole, Trapeze, HulaHoop, Trampoline, XCO, PilatesReformer, PilatesChair, PilatesCadillac, PilatesBarrel, PilatesSpringboard, BalanceBeam, TreatmentTable, RehabTable, SlideBoard Comma-separated categories (matches primaryCategory).
Agility & Speed, Strength, Hypertrophy, Strength - Dynamic, Strength - Explosive, Strength - Static, Cardio, Cardio - Duration, Cardio - Interval, HIIT, Crossfit, Mobility, Stretching, Core, Coordination & Balance, Movement Prep, Functional Training, Recovery, Sports, Martial Arts, Yoga, Other, GROUP_WORKOUT_TEMPLATE, Plyometric, Cycling, Cardio - interval, Mobilisation, Stabilisation, Daily Living, Target zone, Respiration, Breathing, Massage, Outdoor sports, Indoor sports, Dance, Group Lessons, Martial arts, Material Arts, Fight skills, Mind and body, , default x >= 11
1 <= x <= 10020
Agility & Speed, Strength, Hypertrophy, Strength - Dynamic, Strength - Explosive, Strength - Static, Cardio, Cardio - Duration, Cardio - Interval, HIIT, Crossfit, Mobility, Stretching, Core, Coordination & Balance, Movement Prep, Functional Training, Recovery, Sports, Martial Arts, Yoga, Other, GROUP_WORKOUT_TEMPLATE, Plyometric, Cycling, Cardio - interval, Mobilisation, Stabilisation, Daily Living, Target zone, Respiration, Breathing, Massage, Outdoor sports, Indoor sports, Dance, Group Lessons, Martial arts, Material Arts, Fight skills, Mind and body, , default Agility & Speed, Strength, Hypertrophy, Strength - Dynamic, Strength - Explosive, Strength - Static, Cardio, Cardio - Duration, Cardio - Interval, HIIT, Crossfit, Mobility, Stretching, Core, Coordination & Balance, Movement Prep, Functional Training, Recovery, Sports, Martial Arts, Yoga, Other, GROUP_WORKOUT_TEMPLATE, Plyometric, Cycling, Cardio - interval, Mobilisation, Stabilisation, Daily Living, Target zone, Respiration, Breathing, Massage, Outdoor sports, Indoor sports, Dance, Group Lessons, Martial arts, Material Arts, Fight skills, Mind and body, , default Chest, Back, Lats, Traps, Shoulders, Biceps, Triceps, Forearms, Core, Abs, Obliques, Glutes, Quads, Hamstrings, Calves, Adductors, Abductors, Hip Flexors, Full Body, Cardio / Conditioning, Neck, Lower Back Chest, Back, Lats, Traps, Shoulders, Biceps, Triceps, Forearms, Core, Abs, Obliques, Glutes, Quads, Hamstrings, Calves, Adductors, Abductors, Hip Flexors, Full Body, Cardio / Conditioning, Neck, Lower Back Beginner, Intermediate, Advanced Everyone, Company, Fitsociety company, everyone, fitsociety Filter exercises by the user that created them.
"67f1234567890abcdef1234"
Optional workout plan/template id. When combined with planMomentId, returned exercises that are already in that day include planPrescription.
"67f1234567890abcdef1234"
Alias for planId.
"67f1234567890abcdef1234"
Optional plan day/moment id used with planId to attach day-level target sets, reps, and RPE.
"67f1234567890abcdef1234"
Alias for planMomentId.
"67f1234567890abcdef1234"