curl -X GET "https://api.fitsociety.io/public/v1/workout/clients/{clientId}/video-library/{videoId}" \
-H "Authorization: Bearer <access_token>"const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fitsociety.io/public/v1/workout/clients/{clientId}/video-library/{videoId}', 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/{videoId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"_id": "67f1234567890abcdef1234",
"title": "Core Fundamentals",
"description": "Learn the basics of core training.",
"thumbnail": "https://cdn.example.com/video-library/thumb-en.jpg",
"url": "https://cdn.example.com/video-library/video-en.mp4",
"duration": 300,
"width": 1920,
"height": 1080,
"size": 2326475,
"platform": "s3",
"type": "video",
"language": "en",
"level": "Beginner",
"category": "Strength",
"isFavorite": false,
"progress": {
"watchedDuration": 120,
"progressPercentage": 40,
"isCompleted": false,
"lastWatchedAt": "2026-04-12T10:00:00.000Z"
},
"viewCount": 43,
"availableLanguages": [
"en",
"nl"
],
"createdAt": "2026-04-12T10:00:00.000Z",
"updatedAt": "2026-04-12T10:00:00.000Z"
},
"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
}
}
}Get video detail
Client-only. Returns a single-language formatted video document resolved from the client’s profile language (fallback to first available). Both thumbnail (s3 poster image) and url (s3 stream URL or external link) are returned. type indicates how the frontend should handle the content. availableLanguages is included so the frontend can offer a language switcher. Increments the video’s viewCount on every call.
Requires the workout_client_plans:read scope. This operation maps to /app/v1/workout/client/video-library/:videoId 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 GET "https://api.fitsociety.io/public/v1/workout/clients/{clientId}/video-library/{videoId}" \
-H "Authorization: Bearer <access_token>"const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fitsociety.io/public/v1/workout/clients/{clientId}/video-library/{videoId}', 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/{videoId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"_id": "67f1234567890abcdef1234",
"title": "Core Fundamentals",
"description": "Learn the basics of core training.",
"thumbnail": "https://cdn.example.com/video-library/thumb-en.jpg",
"url": "https://cdn.example.com/video-library/video-en.mp4",
"duration": 300,
"width": 1920,
"height": 1080,
"size": 2326475,
"platform": "s3",
"type": "video",
"language": "en",
"level": "Beginner",
"category": "Strength",
"isFavorite": false,
"progress": {
"watchedDuration": 120,
"progressPercentage": 40,
"isCompleted": false,
"lastWatchedAt": "2026-04-12T10:00:00.000Z"
},
"viewCount": 43,
"availableLanguages": [
"en",
"nl"
],
"createdAt": "2026-04-12T10:00:00.000Z",
"updatedAt": "2026-04-12T10:00:00.000Z"
},
"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.
Path Parameters
Video library entry id.
"67f1234567890abcdef1234"
Client in the company bound to the Public API token.
^[a-fA-F0-9]{24}$