curl -X POST "https://api.fitsociety.io/public/v1/workout/video-library" \
-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({
title: [
{lang: 'en', value: 'Core Fundamentals'},
{lang: 'nl', value: 'Kern Fundamenten'}
],
videos: [
{
lang: 'en',
url: 'https://cdn.example.com/video-library/company123/video-en.mp4',
thumbnail: 'https://cdn.example.com/video-library/company123/thumb-en.jpg',
duration: 300,
width: 1920,
height: 1080,
size: 104857600,
platform: 's3'
}
]
})
};
fetch('https://api.fitsociety.io/public/v1/workout/video-library', 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/video-library"
payload = {
"title": [
{
"lang": "en",
"value": "Core Fundamentals"
},
{
"lang": "nl",
"value": "Kern Fundamenten"
}
],
"videos": [
{
"lang": "en",
"url": "https://cdn.example.com/video-library/company123/video-en.mp4",
"thumbnail": "https://cdn.example.com/video-library/company123/thumb-en.jpg",
"duration": 300,
"width": 1920,
"height": 1080,
"size": 104857600,
"platform": "s3"
}
]
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"data": {
"video": {
"_id": "67f1234567890abcdef1234",
"name": "Core Fundamentals",
"title": "Core Fundamentals",
"description": "Learn the basics of core training.",
"video": {
"lang": "en",
"url": "https://cdn.example.com/video-library/company123/video-en.mp4",
"thumbnail": "https://cdn.example.com/video-library/company123/thumb-en.jpg",
"duration": 300,
"width": 1920,
"height": 1080,
"size": 104857600,
"platform": "s3"
},
"url": "https://cdn.example.com/video-library/company123/video-en.mp4",
"thumbnail": "https://cdn.example.com/video-library/company123/thumb-en.jpg",
"duration": 300,
"platform": "s3",
"language": "en",
"category": "Strength",
"level": "Intermediate",
"isPublished": true,
"published": true,
"publishedAt": "2026-04-12T10:00:00.000Z",
"viewCount": 42,
"views": 42,
"createdAt": "2026-04-12T10:00:00.000Z",
"updatedAt": "2026-04-12T10:00:00.000Z",
"availableLanguages": [
"en",
"nl"
],
"allTitles": [
{
"lang": "en",
"value": "Core Fundamentals"
},
{
"lang": "nl",
"value": "Kern Fundamenten"
}
],
"allDescriptions": [
{
"lang": "en",
"value": "Core Fundamentals"
},
{
"lang": "nl",
"value": "Kern Fundamenten"
}
],
"allVideos": [
{
"lang": "en",
"url": "https://cdn.example.com/video-library/company123/video-en.mp4",
"thumbnail": "https://cdn.example.com/video-library/company123/thumb-en.jpg",
"duration": 300,
"width": 1920,
"height": 1080,
"size": 104857600,
"platform": "s3"
}
]
}
},
"meta": {
"requestId": "4f849d7d-f4f1-45cc-b4b7-3984a3d17f83",
"rateLimit": {
"limit": 10,
"remaining": 9,
"resetSeconds": 1
},
"idempotency": {
"replayed": false
}
}
}Create a video library entry
Coach-only. Creates a new multi-language video entry for the active company. Each entry must have at least one language variant for title and videos. Duplicate language codes within any array are rejected.
Requires the workout_library:write scope. This operation maps to /app/v1/workout/video-library 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 POST "https://api.fitsociety.io/public/v1/workout/video-library" \
-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({
title: [
{lang: 'en', value: 'Core Fundamentals'},
{lang: 'nl', value: 'Kern Fundamenten'}
],
videos: [
{
lang: 'en',
url: 'https://cdn.example.com/video-library/company123/video-en.mp4',
thumbnail: 'https://cdn.example.com/video-library/company123/thumb-en.jpg',
duration: 300,
width: 1920,
height: 1080,
size: 104857600,
platform: 's3'
}
]
})
};
fetch('https://api.fitsociety.io/public/v1/workout/video-library', 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/video-library"
payload = {
"title": [
{
"lang": "en",
"value": "Core Fundamentals"
},
{
"lang": "nl",
"value": "Kern Fundamenten"
}
],
"videos": [
{
"lang": "en",
"url": "https://cdn.example.com/video-library/company123/video-en.mp4",
"thumbnail": "https://cdn.example.com/video-library/company123/thumb-en.jpg",
"duration": 300,
"width": 1920,
"height": 1080,
"size": 104857600,
"platform": "s3"
}
]
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"data": {
"video": {
"_id": "67f1234567890abcdef1234",
"name": "Core Fundamentals",
"title": "Core Fundamentals",
"description": "Learn the basics of core training.",
"video": {
"lang": "en",
"url": "https://cdn.example.com/video-library/company123/video-en.mp4",
"thumbnail": "https://cdn.example.com/video-library/company123/thumb-en.jpg",
"duration": 300,
"width": 1920,
"height": 1080,
"size": 104857600,
"platform": "s3"
},
"url": "https://cdn.example.com/video-library/company123/video-en.mp4",
"thumbnail": "https://cdn.example.com/video-library/company123/thumb-en.jpg",
"duration": 300,
"platform": "s3",
"language": "en",
"category": "Strength",
"level": "Intermediate",
"isPublished": true,
"published": true,
"publishedAt": "2026-04-12T10:00:00.000Z",
"viewCount": 42,
"views": 42,
"createdAt": "2026-04-12T10:00:00.000Z",
"updatedAt": "2026-04-12T10:00:00.000Z",
"availableLanguages": [
"en",
"nl"
],
"allTitles": [
{
"lang": "en",
"value": "Core Fundamentals"
},
{
"lang": "nl",
"value": "Kern Fundamenten"
}
],
"allDescriptions": [
{
"lang": "en",
"value": "Core Fundamentals"
},
{
"lang": "nl",
"value": "Kern Fundamenten"
}
],
"allVideos": [
{
"lang": "en",
"url": "https://cdn.example.com/video-library/company123/video-en.mp4",
"thumbnail": "https://cdn.example.com/video-library/company123/thumb-en.jpg",
"duration": 300,
"width": 1920,
"height": 1080,
"size": 104857600,
"platform": "s3"
}
]
}
},
"meta": {
"requestId": "4f849d7d-f4f1-45cc-b4b7-3984a3d17f83",
"rateLimit": {
"limit": 10,
"remaining": 9,
"resetSeconds": 1
},
"idempotency": {
"replayed": false
}
}
}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"
Body
Localized title array. At least one entry required; duplicate language codes are rejected.
Show child attributes
Show child attributes
[
{
"lang": "en",
"value": "Core Fundamentals"
},
{ "lang": "nl", "value": "Kern Fundamenten" }
]
Per-language video assets. At least one entry required; each entry must have lang and url.
Show child attributes
Show child attributes
Localized description array. Optional.
Show child attributes
Show child attributes
[
{
"lang": "en",
"value": "Learn the basics of core training."
},
{
"lang": "nl",
"value": "Leer de basis van core training."
}
]
"Strength"
Beginner, Intermediate, Advanced "Intermediate"
false