curl -X DELETE "https://api.fitsociety.io/public/v1/workout/plans/moments/{planId}/weeks/{weekNumber}" \
-H "Authorization: Bearer <access_token>" \
-H "Idempotency-Key: <stable_request_key>"const options = {
method: 'DELETE',
headers: {'Idempotency-Key': '<idempotency-key>', Authorization: 'Bearer <token>'}
};
fetch('https://api.fitsociety.io/public/v1/workout/plans/moments/{planId}/weeks/{weekNumber}', 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/moments/{planId}/weeks/{weekNumber}"
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>"
}
response = requests.delete(url, headers=headers)
print(response.text){
"data": {
"weekNumber": 2,
"deletedPlanMomentIds": [
"string"
],
"totalWeeks": 2,
"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"
}
]
}
]
}
]
},
"duration": {
"startDate": "2026-04-15",
"endDate": "2026-06-15",
"hasEndDate": true
}
},
"meta": {
"requestId": "4f849d7d-f4f1-45cc-b4b7-3984a3d17f83",
"rateLimit": {
"limit": 10,
"remaining": 9,
"resetSeconds": 1
},
"idempotency": {
"replayed": false
}
}
}Delete a complete workout v2 programme week
Removes one whole programme week: every day (plan moment) the week owns is soft-deleted and, on a calendar programme, the week is dropped from the schedule definition. Accepts the same plans as the append and duplicate week endpoints — templates on either layout, assigned plans only when they are multi-week calendar programmes. Later weeks shift up, so deleting week 2 of 3 makes the stored week 3 the new week 2 for the schedule week and for every surviving day’s week number; a multi-week definition is only valid when its week numbers run contiguously from 1, so week numbers are positions rather than permanent labels. The last remaining week cannot be deleted. Days are soft-deleted so sessions already logged against them still resolve, execution and performance records are never removed, and the plan duration is left unchanged. Existing sessions retain their original day and week labels in an immutable plan snapshot before days are renumbered.
Requires the workout_plans:write scope. This operation maps to /app/v1/workout/plans/moments/:planId/weeks/:weekNumber 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 DELETE "https://api.fitsociety.io/public/v1/workout/plans/moments/{planId}/weeks/{weekNumber}" \
-H "Authorization: Bearer <access_token>" \
-H "Idempotency-Key: <stable_request_key>"const options = {
method: 'DELETE',
headers: {'Idempotency-Key': '<idempotency-key>', Authorization: 'Bearer <token>'}
};
fetch('https://api.fitsociety.io/public/v1/workout/plans/moments/{planId}/weeks/{weekNumber}', 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/moments/{planId}/weeks/{weekNumber}"
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>"
}
response = requests.delete(url, headers=headers)
print(response.text){
"data": {
"weekNumber": 2,
"deletedPlanMomentIds": [
"string"
],
"totalWeeks": 2,
"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"
}
]
}
]
}
]
},
"duration": {
"startDate": "2026-04-15",
"endDate": "2026-06-15",
"hasEndDate": true
}
},
"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"
Path Parameters
Workout template plan id.
"67f1234567890abcdef1234"
Active programme week to delete.
x >= 12