curl -X GET "https://api.fitsociety.io/public/v1/workout/plans/assigned-by-coach" \
-H "Authorization: Bearer <access_token>"const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fitsociety.io/public/v1/workout/plans/assigned-by-coach', 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/plans/assigned-by-coach"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"cards": {
"totalPlans": 14,
"activeNow": 8,
"completed": 6,
"currentProgress": 56
},
"plans": [
{
"_id": "67f1234567890abcdef1234",
"name": "Beginner Swim Training Program",
"thumbnail": "https://cdn.example.com/plan.jpg",
"difficulty": "Beginner",
"intensity": "Medium",
"category": "Strength",
"status": "Active",
"createdBy": {
"_id": "67f1234567890abcdef1234",
"firstName": "Jane",
"lastName": "Smith",
"image": "https://cdn.example.com/coaches/jane.jpg",
"role": "Coach"
},
"duration": {
"startDate": "2026-03-26",
"endDate": "2026-06-20",
"hasEndDate": true
},
"schedule": {
"mode": "multi_week",
"releasePolicy": "weekly_from_start",
"startDate": "2026-09-08",
"timeZone": "Europe/Amsterdam",
"totalWeeks": 4,
"layout": "calendar_week",
"weeks": [
{
"weekNumber": 1,
"days": [
{
"weekday": 1,
"isRestDay": false,
"items": [
{
"_id": "67f1234567890abcdef1234",
"order": 1,
"startTime": "08:30",
"plannedDurationMinutes": 45,
"status": "today",
"plannedDate": "2026-09-08",
"scheduledDate": "2026-09-08",
"source": "programme",
"clientAdjustment": {
"action": "moved",
"occurrenceDate": "2026-09-08",
"scheduledDate": "2026-09-08",
"changedAt": null
},
"canClientRestore": true,
"type": "workout",
"planMomentId": "67f1234567890abcdef1234"
}
]
}
]
}
]
},
"weeks": [
{
"weekNumber": 2,
"availableFrom": "2026-09-08",
"isAvailable": false,
"progressPercentage": 50,
"isCompleted": false,
"days": [
{
"weekday": 1,
"date": "2026-09-08",
"isBeforeStart": false,
"isRestDay": false,
"items": [
{
"_id": "67f1234567890abcdef1234",
"order": 1,
"startTime": "08:30",
"plannedDurationMinutes": 45,
"status": "today",
"plannedDate": "2026-09-08",
"scheduledDate": "2026-09-08",
"source": "programme",
"clientAdjustment": {
"action": "moved",
"occurrenceDate": "2026-09-08",
"scheduledDate": "2026-09-08",
"changedAt": null
},
"canClientRestore": true,
"type": "workout",
"planMomentId": "67f1234567890abcdef1234"
}
]
}
]
}
],
"requiresProgrammeCalendarFeature": true,
"createdAt": "2026-04-12T10:00:00.000Z"
}
],
"availableFilters": {
"levels": [
"Beginner",
"Intermediate",
"Advanced"
],
"status": [
"Active",
"Inactive",
"Completed"
]
},
"selectedFilters": {
"search": "",
"levels": [],
"status": []
},
"pagination": {
"page": 1,
"limit": 10,
"totalItems": 14,
"totalPages": 2
},
"performanceSummary": {
"sessionsTotal": 81,
"sessionsCompleted": 56,
"averageRating": 7.8,
"maxWeight": 109,
"averageVolumePerSession": 7.8,
"distinctExercises": 59,
"totalReps": 1128,
"totalTimeSeconds": 331200,
"totalVolume": 218130.5,
"totalActiveWorkout": 3
},
"muscleActivation": {
"range": {
"startDate": "2026-07-14T10:00:00.000Z",
"endDate": "2026-07-14T10:00:00.000Z",
"days": 7
},
"total": {
"raw": {},
"normalized": {},
"maxValue": 420,
"topMuscles": [
{
"muscle": "Quadriceps",
"value": 420
}
]
}
},
"freestyleWorkout": {
"state": "continue",
"sessionId": "67f1234567890abcdef1234",
"planId": "67f1234567890abcdef1234",
"planMomentId": "67f1234567890abcdef1234",
"status": "in_progress",
"startedAt": "2026-04-12T10:00:00.000Z"
},
"trainingSectionsAccess": {
"pageEnabled": true,
"trainingPlanAssignedSection": true,
"freestyleWorkout": true,
"videoLibrary": true,
"performanceSummary": true,
"muscleActivation": true,
"dailyTrainingNotes": true,
"workoutPlanLibrary": true
}
},
"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
}
}
}Client training page — assigned plans + all dashboard sections
Requires the workout_plans:read scope. This operation maps to /app/v1/workout/plans/assigned-by-coach 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/plans/assigned-by-coach" \
-H "Authorization: Bearer <access_token>"const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fitsociety.io/public/v1/workout/plans/assigned-by-coach', 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/plans/assigned-by-coach"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"cards": {
"totalPlans": 14,
"activeNow": 8,
"completed": 6,
"currentProgress": 56
},
"plans": [
{
"_id": "67f1234567890abcdef1234",
"name": "Beginner Swim Training Program",
"thumbnail": "https://cdn.example.com/plan.jpg",
"difficulty": "Beginner",
"intensity": "Medium",
"category": "Strength",
"status": "Active",
"createdBy": {
"_id": "67f1234567890abcdef1234",
"firstName": "Jane",
"lastName": "Smith",
"image": "https://cdn.example.com/coaches/jane.jpg",
"role": "Coach"
},
"duration": {
"startDate": "2026-03-26",
"endDate": "2026-06-20",
"hasEndDate": true
},
"schedule": {
"mode": "multi_week",
"releasePolicy": "weekly_from_start",
"startDate": "2026-09-08",
"timeZone": "Europe/Amsterdam",
"totalWeeks": 4,
"layout": "calendar_week",
"weeks": [
{
"weekNumber": 1,
"days": [
{
"weekday": 1,
"isRestDay": false,
"items": [
{
"_id": "67f1234567890abcdef1234",
"order": 1,
"startTime": "08:30",
"plannedDurationMinutes": 45,
"status": "today",
"plannedDate": "2026-09-08",
"scheduledDate": "2026-09-08",
"source": "programme",
"clientAdjustment": {
"action": "moved",
"occurrenceDate": "2026-09-08",
"scheduledDate": "2026-09-08",
"changedAt": null
},
"canClientRestore": true,
"type": "workout",
"planMomentId": "67f1234567890abcdef1234"
}
]
}
]
}
]
},
"weeks": [
{
"weekNumber": 2,
"availableFrom": "2026-09-08",
"isAvailable": false,
"progressPercentage": 50,
"isCompleted": false,
"days": [
{
"weekday": 1,
"date": "2026-09-08",
"isBeforeStart": false,
"isRestDay": false,
"items": [
{
"_id": "67f1234567890abcdef1234",
"order": 1,
"startTime": "08:30",
"plannedDurationMinutes": 45,
"status": "today",
"plannedDate": "2026-09-08",
"scheduledDate": "2026-09-08",
"source": "programme",
"clientAdjustment": {
"action": "moved",
"occurrenceDate": "2026-09-08",
"scheduledDate": "2026-09-08",
"changedAt": null
},
"canClientRestore": true,
"type": "workout",
"planMomentId": "67f1234567890abcdef1234"
}
]
}
]
}
],
"requiresProgrammeCalendarFeature": true,
"createdAt": "2026-04-12T10:00:00.000Z"
}
],
"availableFilters": {
"levels": [
"Beginner",
"Intermediate",
"Advanced"
],
"status": [
"Active",
"Inactive",
"Completed"
]
},
"selectedFilters": {
"search": "",
"levels": [],
"status": []
},
"pagination": {
"page": 1,
"limit": 10,
"totalItems": 14,
"totalPages": 2
},
"performanceSummary": {
"sessionsTotal": 81,
"sessionsCompleted": 56,
"averageRating": 7.8,
"maxWeight": 109,
"averageVolumePerSession": 7.8,
"distinctExercises": 59,
"totalReps": 1128,
"totalTimeSeconds": 331200,
"totalVolume": 218130.5,
"totalActiveWorkout": 3
},
"muscleActivation": {
"range": {
"startDate": "2026-07-14T10:00:00.000Z",
"endDate": "2026-07-14T10:00:00.000Z",
"days": 7
},
"total": {
"raw": {},
"normalized": {},
"maxValue": 420,
"topMuscles": [
{
"muscle": "Quadriceps",
"value": 420
}
]
}
},
"freestyleWorkout": {
"state": "continue",
"sessionId": "67f1234567890abcdef1234",
"planId": "67f1234567890abcdef1234",
"planMomentId": "67f1234567890abcdef1234",
"status": "in_progress",
"startedAt": "2026-04-12T10:00:00.000Z"
},
"trainingSectionsAccess": {
"pageEnabled": true,
"trainingPlanAssignedSection": true,
"freestyleWorkout": true,
"videoLibrary": true,
"performanceSummary": true,
"muscleActivation": true,
"dailyTrainingNotes": true,
"workoutPlanLibrary": true
}
},
"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
Client id. Required when the caller is a coach; inferred from token when the caller is a client.
"67f1234567890abcdef1234"
x >= 11
1 <= x <= 10010
Case-insensitive search on plan name.
Comma-separated difficulty filter: Beginner, Intermediate, Advanced.
Comma-separated status filter: Active, Inactive, Completed.
Canonical company-local Monday for the requested programme week or recurring cycle. Omit to use the current company-local week.
^\d{4}-\d{2}-\d{2}$"2026-09-14"