curl -X GET "https://api.fitsociety.io/public/v1/workout/clients/{clientId}/programme-calendar" \
-H "Authorization: Bearer <access_token>"const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fitsociety.io/public/v1/workout/clients/{clientId}/programme-calendar', 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}/programme-calendar"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"timeZone": "Europe/Amsterdam",
"selectedWeekStart": "2026-09-08",
"selectedWeekEnd": "2026-09-08",
"previousWeekStart": "2026-09-08",
"nextWeekStart": "2026-09-08",
"plans": [
{
"planId": "67f1234567890abcdef1234",
"name": "Hybrid programme",
"mode": "recurring",
"startDate": "2026-09-08",
"weekNumber": 1,
"isAvailable": true
}
],
"days": [
{
"weekday": 1,
"date": "2026-09-08",
"planDays": [
{
"planId": "67f1234567890abcdef1234",
"planName": "Hybrid programme",
"weekNumber": 2,
"isAvailable": true,
"isBeforeStart": false,
"isRestDay": false,
"items": [
{
"programmeScheduleItemId": "67f1234567890abcdef1234",
"plannedDate": "2026-09-08",
"scheduledDate": "2026-09-08",
"source": "programme",
"clientAdjustment": {
"action": "moved",
"occurrenceDate": "2026-09-08",
"scheduledDate": "string",
"changedAt": "2026-07-14T10:00:00.000Z"
},
"canClientMove": true,
"canClientSkip": true,
"canClientRestore": true,
"type": "workout",
"order": 1,
"title": "Upper body",
"description": "Strength session",
"startTime": "18:00",
"plannedDurationMinutes": 45,
"status": "today",
"isAvailable": true,
"planMomentId": null,
"activityType": "running",
"targetDistanceMeters": 5000,
"performance": {
"workBlocks": [
{
"blockId": "66f7b8b1e13c8d25f4d3d90a",
"stepId": "66f7b8b1e13c8d25f4d3d90a",
"repIndex": 1,
"durationSec": 1,
"distanceM": 1,
"avgPaceSecPerKm": 1,
"avgHrBpm": 1
}
],
"avgHrBpm": 1,
"missedReason": "sick",
"conditions": {
"temperatureC": 1,
"windNote": "string",
"elevationGainM": 1,
"preFatigueNote": "string"
},
"niggle": {
"note": "string"
},
"source": "manual",
"completedOnTarget": true,
"workBlockEvaluation": {
"reasonCodes": [
"SESSION_NOT_COMPLETED"
],
"blocks": [
{
"blockId": "66f7b8b1e13c8d25f4d3d90a",
"stepId": "66f7b8b1e13c8d25f4d3d90a",
"repIndex": 1,
"onTarget": true,
"reasonCode": "string"
}
]
},
"resolvedTargetsSnapshot": {
"source": "execution_snapshot",
"paceUnit": "s/km",
"sessionType": "easy",
"controlMode": "pace",
"blocks": [
{
"_id": "66f7b8b1e13c8d25f4d3d90a",
"repeat": 1,
"steps": [
{
"_id": "66f7b8b1e13c8d25f4d3d90a",
"kind": "warmup",
"durationType": "time",
"durationValue": 1,
"target": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"secondaryTarget": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"targetReasonCode": "string",
"secondaryTargetReasonCode": "string"
}
]
}
]
},
"externalWorkoutRef": "string",
"id": "67f1234567890abcdef1234",
"planId": "67f1234567890abcdef1234",
"programmeScheduleItemId": "67f1234567890abcdef1234",
"plannedDate": "2026-09-08",
"status": "completed",
"startedAt": null,
"completedAt": null,
"actualDurationMinutes": 45,
"actualDistanceMeters": 8000,
"notes": "Felt smooth.",
"rpe": 7
},
"cardio": {
"slotKey": "string",
"sessionType": "easy",
"controlMode": "pace",
"ladderStep": 1,
"poolLengthM": 25,
"blocks": [
{
"_id": "67f1234567890abcdef1234",
"repeat": 1,
"steps": [
{
"_id": "67f1234567890abcdef1234",
"kind": "warmup",
"durationType": "time",
"durationValue": 1,
"target": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"secondaryTarget": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"notes": "string",
"stroke": "free",
"equipment": [
"pullBuoy"
],
"restMode": "rest",
"sendOffSec": 1,
"cadence": {
"low": 1,
"high": 1
}
}
]
}
],
"sourceTemplateId": null
},
"resolvedTargets": {
"paceUnit": "s/km",
"source": "string",
"reasonCodes": [
"CARDIO_PROFILE_INVALID"
],
"blocks": [
{
"_id": "66f7b8b1e13c8d25f4d3d90a",
"repeat": 1,
"steps": [
{
"_id": "66f7b8b1e13c8d25f4d3d90a",
"kind": "string",
"target": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"secondaryTarget": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"targetReasonCode": "CARDIO_PROFILE_INVALID",
"secondaryTargetReasonCode": "CARDIO_PROFILE_INVALID"
}
]
}
]
}
}
]
}
],
"clientItems": [
{
"clientCalendarItemId": "67f1234567890abcdef1234",
"source": "client",
"type": "activity",
"scheduledDate": "2026-09-08",
"plannedDate": "2026-09-08",
"startTime": "string",
"title": "string",
"description": "Example description",
"activityType": "string",
"plannedDurationMinutes": 1,
"targetDistanceMeters": 1,
"actualDurationMinutes": 1,
"actualDistanceMeters": 1,
"rpe": 1,
"notes": "string",
"status": "upcoming",
"isAvailable": true,
"workoutSessionId": null,
"canEdit": true,
"canDelete": true,
"canStart": true
}
]
}
],
"skippedOccurrences": [
{
"programmeScheduleItemId": "67f1234567890abcdef1234",
"plannedDate": "2026-09-08",
"scheduledDate": "2026-09-08",
"source": "programme",
"clientAdjustment": {
"action": "skipped",
"occurrenceDate": "2026-09-08",
"scheduledDate": "",
"changedAt": "2026-07-14T10:00:00.000Z"
},
"canClientMove": true,
"canClientSkip": true,
"canClientRestore": true,
"type": "workout",
"order": 1,
"title": "Upper body",
"description": "Strength session",
"startTime": "18:00",
"plannedDurationMinutes": 45,
"status": "today",
"isAvailable": true,
"planMomentId": null,
"activityType": "running",
"targetDistanceMeters": 5000,
"performance": {
"workBlocks": [
{
"blockId": "66f7b8b1e13c8d25f4d3d90a",
"stepId": "66f7b8b1e13c8d25f4d3d90a",
"repIndex": 1,
"durationSec": 1,
"distanceM": 1,
"avgPaceSecPerKm": 1,
"avgHrBpm": 1
}
],
"avgHrBpm": 1,
"missedReason": "sick",
"conditions": {
"temperatureC": 1,
"windNote": "string",
"elevationGainM": 1,
"preFatigueNote": "string"
},
"niggle": {
"note": "string"
},
"source": "manual",
"completedOnTarget": true,
"workBlockEvaluation": {
"reasonCodes": [
"SESSION_NOT_COMPLETED"
],
"blocks": [
{
"blockId": "66f7b8b1e13c8d25f4d3d90a",
"stepId": "66f7b8b1e13c8d25f4d3d90a",
"repIndex": 1,
"onTarget": true,
"reasonCode": "string"
}
]
},
"resolvedTargetsSnapshot": {
"source": "execution_snapshot",
"paceUnit": "s/km",
"sessionType": "easy",
"controlMode": "pace",
"blocks": [
{
"_id": "66f7b8b1e13c8d25f4d3d90a",
"repeat": 1,
"steps": [
{
"_id": "66f7b8b1e13c8d25f4d3d90a",
"kind": "warmup",
"durationType": "time",
"durationValue": 1,
"target": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"secondaryTarget": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"targetReasonCode": "string",
"secondaryTargetReasonCode": "string"
}
]
}
]
},
"externalWorkoutRef": "string",
"id": "67f1234567890abcdef1234",
"planId": "67f1234567890abcdef1234",
"programmeScheduleItemId": "67f1234567890abcdef1234",
"plannedDate": "2026-09-08",
"status": "completed",
"startedAt": null,
"completedAt": null,
"actualDurationMinutes": 45,
"actualDistanceMeters": 8000,
"notes": "Felt smooth.",
"rpe": 7
},
"cardio": {
"slotKey": "string",
"sessionType": "easy",
"controlMode": "pace",
"ladderStep": 1,
"poolLengthM": 25,
"blocks": [
{
"_id": "67f1234567890abcdef1234",
"repeat": 1,
"steps": [
{
"_id": "67f1234567890abcdef1234",
"kind": "warmup",
"durationType": "time",
"durationValue": 1,
"target": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"secondaryTarget": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"notes": "string",
"stroke": "free",
"equipment": [
"pullBuoy"
],
"restMode": "rest",
"sendOffSec": 1,
"cadence": {
"low": 1,
"high": 1
}
}
]
}
],
"sourceTemplateId": null
},
"resolvedTargets": {
"paceUnit": "s/km",
"source": "string",
"reasonCodes": [
"CARDIO_PROFILE_INVALID"
],
"blocks": [
{
"_id": "66f7b8b1e13c8d25f4d3d90a",
"repeat": 1,
"steps": [
{
"_id": "66f7b8b1e13c8d25f4d3d90a",
"kind": "string",
"target": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"secondaryTarget": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"targetReasonCode": "CARDIO_PROFILE_INVALID",
"secondaryTargetReasonCode": "CARDIO_PROFILE_INVALID"
}
]
}
]
},
"planId": "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": 403,
"key": "scopes.insufficient",
"message": "The access token does not include the required scope.",
"details": {
"requiredScopes": [
"required:scope"
]
}
},
"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 the client's merged programme calendar week
Returns exactly seven company-local Monday-through-Sunday days for the authenticated client. Active assigned calendar programmes are merged without accepting client or company scope overrides. Recurring programmes repeat their authored week; multi-week programmes expose only the authored week matching selectedWeekStart. Plans outside their assignment range are omitted. Future programme weeks remain visible with isAvailable: false. Rest is plan-day metadata, so one plan’s rest day can coexist with another plan’s items.
Requires the workout_calendar:read scope. This operation maps to /app/v1/workout/client/programme-calendar 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}/programme-calendar" \
-H "Authorization: Bearer <access_token>"const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fitsociety.io/public/v1/workout/clients/{clientId}/programme-calendar', 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}/programme-calendar"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"timeZone": "Europe/Amsterdam",
"selectedWeekStart": "2026-09-08",
"selectedWeekEnd": "2026-09-08",
"previousWeekStart": "2026-09-08",
"nextWeekStart": "2026-09-08",
"plans": [
{
"planId": "67f1234567890abcdef1234",
"name": "Hybrid programme",
"mode": "recurring",
"startDate": "2026-09-08",
"weekNumber": 1,
"isAvailable": true
}
],
"days": [
{
"weekday": 1,
"date": "2026-09-08",
"planDays": [
{
"planId": "67f1234567890abcdef1234",
"planName": "Hybrid programme",
"weekNumber": 2,
"isAvailable": true,
"isBeforeStart": false,
"isRestDay": false,
"items": [
{
"programmeScheduleItemId": "67f1234567890abcdef1234",
"plannedDate": "2026-09-08",
"scheduledDate": "2026-09-08",
"source": "programme",
"clientAdjustment": {
"action": "moved",
"occurrenceDate": "2026-09-08",
"scheduledDate": "string",
"changedAt": "2026-07-14T10:00:00.000Z"
},
"canClientMove": true,
"canClientSkip": true,
"canClientRestore": true,
"type": "workout",
"order": 1,
"title": "Upper body",
"description": "Strength session",
"startTime": "18:00",
"plannedDurationMinutes": 45,
"status": "today",
"isAvailable": true,
"planMomentId": null,
"activityType": "running",
"targetDistanceMeters": 5000,
"performance": {
"workBlocks": [
{
"blockId": "66f7b8b1e13c8d25f4d3d90a",
"stepId": "66f7b8b1e13c8d25f4d3d90a",
"repIndex": 1,
"durationSec": 1,
"distanceM": 1,
"avgPaceSecPerKm": 1,
"avgHrBpm": 1
}
],
"avgHrBpm": 1,
"missedReason": "sick",
"conditions": {
"temperatureC": 1,
"windNote": "string",
"elevationGainM": 1,
"preFatigueNote": "string"
},
"niggle": {
"note": "string"
},
"source": "manual",
"completedOnTarget": true,
"workBlockEvaluation": {
"reasonCodes": [
"SESSION_NOT_COMPLETED"
],
"blocks": [
{
"blockId": "66f7b8b1e13c8d25f4d3d90a",
"stepId": "66f7b8b1e13c8d25f4d3d90a",
"repIndex": 1,
"onTarget": true,
"reasonCode": "string"
}
]
},
"resolvedTargetsSnapshot": {
"source": "execution_snapshot",
"paceUnit": "s/km",
"sessionType": "easy",
"controlMode": "pace",
"blocks": [
{
"_id": "66f7b8b1e13c8d25f4d3d90a",
"repeat": 1,
"steps": [
{
"_id": "66f7b8b1e13c8d25f4d3d90a",
"kind": "warmup",
"durationType": "time",
"durationValue": 1,
"target": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"secondaryTarget": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"targetReasonCode": "string",
"secondaryTargetReasonCode": "string"
}
]
}
]
},
"externalWorkoutRef": "string",
"id": "67f1234567890abcdef1234",
"planId": "67f1234567890abcdef1234",
"programmeScheduleItemId": "67f1234567890abcdef1234",
"plannedDate": "2026-09-08",
"status": "completed",
"startedAt": null,
"completedAt": null,
"actualDurationMinutes": 45,
"actualDistanceMeters": 8000,
"notes": "Felt smooth.",
"rpe": 7
},
"cardio": {
"slotKey": "string",
"sessionType": "easy",
"controlMode": "pace",
"ladderStep": 1,
"poolLengthM": 25,
"blocks": [
{
"_id": "67f1234567890abcdef1234",
"repeat": 1,
"steps": [
{
"_id": "67f1234567890abcdef1234",
"kind": "warmup",
"durationType": "time",
"durationValue": 1,
"target": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"secondaryTarget": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"notes": "string",
"stroke": "free",
"equipment": [
"pullBuoy"
],
"restMode": "rest",
"sendOffSec": 1,
"cadence": {
"low": 1,
"high": 1
}
}
]
}
],
"sourceTemplateId": null
},
"resolvedTargets": {
"paceUnit": "s/km",
"source": "string",
"reasonCodes": [
"CARDIO_PROFILE_INVALID"
],
"blocks": [
{
"_id": "66f7b8b1e13c8d25f4d3d90a",
"repeat": 1,
"steps": [
{
"_id": "66f7b8b1e13c8d25f4d3d90a",
"kind": "string",
"target": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"secondaryTarget": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"targetReasonCode": "CARDIO_PROFILE_INVALID",
"secondaryTargetReasonCode": "CARDIO_PROFILE_INVALID"
}
]
}
]
}
}
]
}
],
"clientItems": [
{
"clientCalendarItemId": "67f1234567890abcdef1234",
"source": "client",
"type": "activity",
"scheduledDate": "2026-09-08",
"plannedDate": "2026-09-08",
"startTime": "string",
"title": "string",
"description": "Example description",
"activityType": "string",
"plannedDurationMinutes": 1,
"targetDistanceMeters": 1,
"actualDurationMinutes": 1,
"actualDistanceMeters": 1,
"rpe": 1,
"notes": "string",
"status": "upcoming",
"isAvailable": true,
"workoutSessionId": null,
"canEdit": true,
"canDelete": true,
"canStart": true
}
]
}
],
"skippedOccurrences": [
{
"programmeScheduleItemId": "67f1234567890abcdef1234",
"plannedDate": "2026-09-08",
"scheduledDate": "2026-09-08",
"source": "programme",
"clientAdjustment": {
"action": "skipped",
"occurrenceDate": "2026-09-08",
"scheduledDate": "",
"changedAt": "2026-07-14T10:00:00.000Z"
},
"canClientMove": true,
"canClientSkip": true,
"canClientRestore": true,
"type": "workout",
"order": 1,
"title": "Upper body",
"description": "Strength session",
"startTime": "18:00",
"plannedDurationMinutes": 45,
"status": "today",
"isAvailable": true,
"planMomentId": null,
"activityType": "running",
"targetDistanceMeters": 5000,
"performance": {
"workBlocks": [
{
"blockId": "66f7b8b1e13c8d25f4d3d90a",
"stepId": "66f7b8b1e13c8d25f4d3d90a",
"repIndex": 1,
"durationSec": 1,
"distanceM": 1,
"avgPaceSecPerKm": 1,
"avgHrBpm": 1
}
],
"avgHrBpm": 1,
"missedReason": "sick",
"conditions": {
"temperatureC": 1,
"windNote": "string",
"elevationGainM": 1,
"preFatigueNote": "string"
},
"niggle": {
"note": "string"
},
"source": "manual",
"completedOnTarget": true,
"workBlockEvaluation": {
"reasonCodes": [
"SESSION_NOT_COMPLETED"
],
"blocks": [
{
"blockId": "66f7b8b1e13c8d25f4d3d90a",
"stepId": "66f7b8b1e13c8d25f4d3d90a",
"repIndex": 1,
"onTarget": true,
"reasonCode": "string"
}
]
},
"resolvedTargetsSnapshot": {
"source": "execution_snapshot",
"paceUnit": "s/km",
"sessionType": "easy",
"controlMode": "pace",
"blocks": [
{
"_id": "66f7b8b1e13c8d25f4d3d90a",
"repeat": 1,
"steps": [
{
"_id": "66f7b8b1e13c8d25f4d3d90a",
"kind": "warmup",
"durationType": "time",
"durationValue": 1,
"target": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"secondaryTarget": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"targetReasonCode": "string",
"secondaryTargetReasonCode": "string"
}
]
}
]
},
"externalWorkoutRef": "string",
"id": "67f1234567890abcdef1234",
"planId": "67f1234567890abcdef1234",
"programmeScheduleItemId": "67f1234567890abcdef1234",
"plannedDate": "2026-09-08",
"status": "completed",
"startedAt": null,
"completedAt": null,
"actualDurationMinutes": 45,
"actualDistanceMeters": 8000,
"notes": "Felt smooth.",
"rpe": 7
},
"cardio": {
"slotKey": "string",
"sessionType": "easy",
"controlMode": "pace",
"ladderStep": 1,
"poolLengthM": 25,
"blocks": [
{
"_id": "67f1234567890abcdef1234",
"repeat": 1,
"steps": [
{
"_id": "67f1234567890abcdef1234",
"kind": "warmup",
"durationType": "time",
"durationValue": 1,
"target": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"secondaryTarget": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"notes": "string",
"stroke": "free",
"equipment": [
"pullBuoy"
],
"restMode": "rest",
"sendOffSec": 1,
"cadence": {
"low": 1,
"high": 1
}
}
]
}
],
"sourceTemplateId": null
},
"resolvedTargets": {
"paceUnit": "s/km",
"source": "string",
"reasonCodes": [
"CARDIO_PROFILE_INVALID"
],
"blocks": [
{
"_id": "66f7b8b1e13c8d25f4d3d90a",
"repeat": 1,
"steps": [
{
"_id": "66f7b8b1e13c8d25f4d3d90a",
"kind": "string",
"target": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"secondaryTarget": {
"kind": "paceZone",
"zone": "E",
"basis": "lthr",
"low": 1,
"high": 1
},
"targetReasonCode": "CARDIO_PROFILE_INVALID",
"secondaryTargetReasonCode": "CARDIO_PROFILE_INVALID"
}
]
}
]
},
"planId": "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": 403,
"key": "scopes.insufficient",
"message": "The access token does not include the required scope.",
"details": {
"requiredScopes": [
"required:scope"
]
}
},
"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
Client in the company bound to the Public API token.
^[a-fA-F0-9]{24}$Query Parameters
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"