Keep your data in sync
Poll for new workouts since your last run, avoid duplicates, know what polling cannot detect, and push your own changes back safely.
The API has no webhooks and no "changed since" filter, so syncing means polling for what is new. The pattern below is reliable for new completed workouts.
Poll for new workouts
Completed workouts are sorted newest first and filtered by completedAt. Keep the largest completedAt you have stored, and on each run ask for everything from there.
- Read your stored checkpoint, for example
2026-03-18T10:22:05.117Z. On the first run use the date you want to start from. - Call
GET /workouts?from=<checkpoint>&limit=100and page through the results withcursor. - Skip workouts whose
idyou already stored.fromis inclusive, so the workout at the checkpoint comes back every time. - After all pages succeed, store the new maximum
completedAtas your checkpoint.
Only move the checkpoint after every page was processed. A failure halfway then repeats work instead of losing it.
What polling does not see
- Edits to old workouts. If a coach corrects a workout from last month, its
completedAtdoes not change, so afromfilter will not return it again. - Deleted data. Deleted workouts are simply no longer returned.
To pick up corrections, re-read a recent window on every run, for example the last 14 days, and update by id. For a full refresh, run an export periodically.
Push changes into Vitruve
If your system owns the roster, write it to Vitruve instead of re-entering it: create and update athletes, teams and coach assignments, exercises, load-velocity profiles and injury reports. Send every create with an Idempotency-Key derived from your own record, such as its id, so a retried create never makes a duplicate. See Writes.
How often
Everything, reads and writes, counts against 30 requests per minute per key. Hourly or daily polling is typical. If you poll every few minutes, the list calls are small: a poll with nothing new costs one request.
Export all workouts
Download every completed workout of your organization with sets and repetitions, within the rate limit.
Sync athletes and teams from your system
Keep Vitruve's athletes, teams and coach assignments in step with the roster you already manage elsewhere, such as a club database or an athlete management system.