curl -X POST "https://api.fitsociety.io/public/v1/workout/clients/{clientId}/video-library/category/{categoryId}" \
-H "Authorization: Bearer <access_token>" \
-H "Idempotency-Key: <stable_request_key>" \
-H "Content-Type: application/json" \
-d '{}'const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
page: 1,
limit: 20,
favourites: false,
levels: ['Beginner'],
categories: ['Strength'],
coaches: [],
search: ''
})
};
fetch('https://api.fitsociety.io/public/v1/workout/clients/{clientId}/video-library/category/{categoryId}', 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/clients/{clientId}/video-library/category/{categoryId}"
payload = {
"page": 1,
"limit": 20,
"favourites": False,
"levels": ["Beginner"],
"categories": ["Strength"],
"coaches": [],
"search": ""
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)Get all videos in a category (See All)
Client-only. Returns formatted (single-language) video cards for every published video in the given category, ordered by their category position. Accepts the same filter set as the home endpoint in the request body. Language is always resolved from the client’s profile. An empty category returns videos: [] (200, not 404). availableFilters.coaches is dynamically populated from coaches who have published videos for this company.
Requires the workout_client_plans:write scope. This operation maps to /app/v1/workout/client/video-library/category/:categoryId and retains its Workout V2 permission, feature-flag, and resource-scope checks.
The clientId path parameter identifies the client represented by the request context.
curl -X POST "https://api.fitsociety.io/public/v1/workout/clients/{clientId}/video-library/category/{categoryId}" \
-H "Authorization: Bearer <access_token>" \
-H "Idempotency-Key: <stable_request_key>" \
-H "Content-Type: application/json" \
-d '{}'const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
page: 1,
limit: 20,
favourites: false,
levels: ['Beginner'],
categories: ['Strength'],
coaches: [],
search: ''
})
};
fetch('https://api.fitsociety.io/public/v1/workout/clients/{clientId}/video-library/category/{categoryId}', 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/clients/{clientId}/video-library/category/{categoryId}"
payload = {
"page": 1,
"limit": 20,
"favourites": False,
"levels": ["Beginner"],
"categories": ["Strength"],
"coaches": [],
"search": ""
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)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.
Headers
Required for Public API write requests. Reusing the same key with the same method, path, and body replays the stored successful response; reusing it with a different request returns 409 idempotency.conflict.
1 - 200"booking-create-20260714-001"
Path Parameters
Video library category id.
"67f1234567890abcdef1234"
Client in the company bound to the Public API token.
^[a-fA-F0-9]{24}$Body
x >= 11
1 <= x <= 10020
false
Beginner, Intermediate, Advance ["Beginner"]
["Strength"]
Filter by video creator coach IDs.
[]
""