Existing integrations and /v1
The pre-v1 endpoints on api-integrations.vitruve.fit keep working unchanged, now and after 2027-01-31. How they map to the /v1 partner endpoints, for partners who choose to move.
The pre-v1 endpoints (GET /vbt-workouts, GET /users and GET /legacy-ids on https://api-integrations.vitruve.fit) keep working unchanged for existing integrations: same host, keys, parameters and responses, with no partner secret, registered address or rate limit. Nothing changes for partners already integrated, now or after 2027-01-31: they keep answering on the same host with the identical contract. There is no date to move by.
New partner integrations use the /v1 partner endpoints at https://api-integrations-next.vitruve.fit/v1, with a partner credential. From 2027-01-31 they also answer on https://api-integrations.vitruve.fit, and https://api-integrations-next.vitruve.fit keeps working after that date. An existing integration can move to /v1 whenever it suits you; this page maps one to the other.
Before you switch
- Ask Vitruve for your partner secret and register your egress IP addresses. See Becoming a partner.
/v1cannot be called without both. - Keep your customers' existing integration keys, the ones they created for your platform in Settings → Integrations → Export: they work on
/v1too, together with your secret. Any other key answers401on/v1. - Send
X-Partner-Secreton every/v1request.
Endpoint mapping
| Before | /v1 |
|---|---|
GET /vbt-workouts?date=last-7days | GET /v1/workouts?trainingType=vbt&from=…&to=…. ISO 8601 dates (YYYY-MM-DD or a datetime) instead of presets; epoch milliseconds answer 400. Completed workouts are dated by completedAt, newest first. |
| Workout trees in the list | The list returns workouts without their content. Fetch each one with GET /v1/workouts/{id}. |
cursor (last id) or offset | The opaque meta.nextCursor, passed as cursor while meta.hasMore is true. See Pagination. |
| Metric and exercise names in the payload | Ids. Resolve and cache /v1/metrics, /v1/units and /v1/exercises. See IDs and relations. |
GET /users | GET /v1/athletes and GET /v1/coaches, paginated, active members only. |
GET /legacy-ids | No /v1 equivalent. Keep calling it. |
What else differs on /v1
- Field names are Vitruve's own and match the partner reference. Remap your parsers against the workout data model.
- Unknown query parameters answer
400instead of being ignored. Remove parameters the previous endpoints accepted. - Plan changes apply immediately. A customer whose plan stops including integrations answers
403from the next request. - No CORS. The API sends no CORS headers: call it from your servers, never from a browser.
- Rate limit: 30 requests per minute per customer key, reported in
RateLimit-*headers.
Syncing many customers
A reliable polling loop for every connected customer: per-customer checkpoints, shared catalogs, rate limits, and the errors that should pause a customer.
OpenAPI specification
Download the OpenAPI 3.1 description of the partner endpoints to generate a client or import it into Postman.