curl -X GET "https://api.fitsociety.io/public/v1/workout/plans/{planId}/export" \
-H "Authorization: Bearer <access_token>"const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fitsociety.io/public/v1/workout/plans/{planId}/export', 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/{planId}/export"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)"<string>"Export a coach-visible V2 plan as PDF
Requires training.programmes.view in the active company and member scope, Training V2, and the programme calendar capability for flexible plans. Assigned plans use their saved personal prescriptions. Calendar exports contain the base programme only, never occurrence overrides or performance history. Automatic language uses the assigned member profile, otherwise the coach. PDF generation requires saved editor changes. QR links require the configured website assistant token with exercises.read and access to the requested language site. A website API failure returns 500; retry or explicitly request qr=false. No export preferences are persisted. Slow-request diagnostics separately measure plan reads, context reads, media resolution and PDF rendering, including failed phases.
Requires the workout_plans:read scope. This operation maps to /app/v1/workout/plans/:planId/export 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/{planId}/export" \
-H "Authorization: Bearer <access_token>"const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fitsociety.io/public/v1/workout/plans/{planId}/export', 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/{planId}/export"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)"<string>"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
^[a-fA-F0-9]{24}$Query Parameters
Supercompact uses two V1-style prescription cards per row, with full-width continuation tables for long exercises. It does not use the legacy V1 data/export endpoint. Handout starts each training day on a new page; worksheet includes blank result fields. Logbook uses landscape A4 with up to four weeks per sheet, exact per-week prescriptions and blank results for each set. Changed exercise sequences are separate blocks; absent weeks or sets have no writing fields.
supercompact, handout, worksheet, logbook Only accepted for layout=logbook. Number of weeks to repeat a recurring single-week programme. Multi-week programmes always use the actual selected weeks and ignore this repeat count. Four weeks per sheet; additional bands start on a new sheet.
4, 8, 12 auto, nl, en, de, es, fr all, weeks, days Comma-separated week numbers (1–999), required only with selection=weeks. At most 500 values.
"1,2"
Comma-separated plan-moment IDs, required only with selection=days. At most 500 values. Calendar day selection includes these workouts only.
Defaults to true for supercompact and handout, false for worksheet and logbook.
Include available localized exercise instructions and original written instructions. Defaults to false for logbook and true for the other layouts.
Defaults to true for handout, false for supercompact, worksheet and logbook. No client data or tokens in public links.
Response
A4 PDF (landscape for logbook, portrait otherwise); private, no-store. Reuse this file for preview, print and download.
The response is of type file.