Vitruve API
A REST API for your organization's Vitruve data. Read athletes, workouts, repetitions, load-velocity profiles and more as JSON, and write what keeps Vitruve in sync with your systems.
The Vitruve API gives your own systems read access to everything your organization has recorded in Vitruve: athletes, coaches and teams, every workout down to the repetition, programs and templates, load-velocity profiles, leaderboards, wellness questionnaires and injury reports, plus metric trends and athlete rankings computed for you.
It also accepts the writes an external system needs to keep Vitruve in sync: athletes, coach assignments, teams, exercises, load-velocity profiles and injury reports. Programs, workouts, templates and measurements are created in the Vitruve apps.
Use it to feed a data warehouse, build dashboards in the tools you already use, connect Vitruve to a research pipeline, or keep your roster in step with an athlete management system.
| Property | Value |
|---|---|
| Base URL | https://api-next.vitruve.fit/v1 |
| Protocol | HTTPS, JSON |
| Methods | GET; POST, PATCH, PUT and DELETE on the write endpoints |
| Authentication | X-API-Key header; each key belongs to one organization |
| Access | Organizations on the Professional plan, checked on every request |
| Rate limit | 30 requests per minute per key |
| Pagination | Cursor-based, 1–100 items per page |
curl "https://api-next.vitruve.fit/v1/organization" \
-H "X-API-Key: YOUR_API_KEY"const response = await fetch('https://api-next.vitruve.fit/v1/organization', {
headers: { 'X-API-Key': process.env.VITRUVE_API_KEY }
})
const { data } = await response.json()
console.log(data.name)import os
import requests
response = requests.get(
"https://api-next.vitruve.fit/v1/organization",
headers={"X-API-Key": os.environ["VITRUVE_API_KEY"]},
timeout=30,
)
response.raise_for_status()
print(response.json()["data"]["name"])Using an AI assistant instead?
The Vitruve MCP server gives Claude, ChatGPT, Cursor and other MCP clients read access to the same data, with an OAuth sign-in instead of an API key. Coaches can connect too, scoped to the athletes they can see.
Hosts and the 2027-01-31 date
- Now: the Vitruve API answers at
https://api-next.vitruve.fit/v1. Use it for everything you build. - From 2027-01-31: the same API also answers on
https://api.vitruve.fit, at the same/v1paths.https://api-next.vitruve.fitkeeps working after that date, so nothing you build on it has to change. - Pre-v1 endpoints:
GET /usersandGET /vbt-workoutsonhttps://api-exports.vitruve.fitkeep working unchanged until 2027-01-31, and stop on that date. Move them to/v1before then: see Moving from api-exports.
What you can read
| Area | Resources |
|---|---|
| Organization and people | Organization, athletes and their sport profile, coaches, teams |
| Training | Workouts with their full tree, programs, phases, scheduled workouts |
| Templates | Your reusable workout, phase, block and prescription library |
| Measurements | Load-velocity profiles, leaderboards, wellness, injuries |
| Catalogs | Exercises, muscles, metrics, prescription types, units |
Good to know
- One key, one organization. A key only ever reads and writes the data of the organization that issued it.
- Access follows your plan. Every request checks the organization's plan. If it stops including the API, keys answer
403until it is restored. - Entities keep Vitruve's field names. Nothing is renamed or reshaped, so what you see in the reference is what the app stores.
- Ids link resources. A workout holds an
exerciseId, not an exercise name. See IDs and relations. - Unknown parameters are rejected. A misspelled filter answers
400instead of silently returning unfiltered data.
Building a product for Vitruve customers?
Platforms that connect to Vitruve on behalf of shared customers use Partner integrations instead, with their own credentials.