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

  1. Ask Vitruve for your partner secret and register your egress IP addresses. See Becoming a partner. /v1 cannot be called without both.
  2. Keep your customers' existing integration keys, the ones they created for your platform in Settings → Integrations → Export: they work on /v1 too, together with your secret. Any other key answers 401 on /v1.
  3. Send X-Partner-Secret on every /v1 request.

Endpoint mapping

Before/v1
GET /vbt-workouts?date=last-7daysGET /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 listThe list returns workouts without their content. Fetch each one with GET /v1/workouts/{id}.
cursor (last id) or offsetThe opaque meta.nextCursor, passed as cursor while meta.hasMore is true. See Pagination.
Metric and exercise names in the payloadIds. Resolve and cache /v1/metrics, /v1/units and /v1/exercises. See IDs and relations.
GET /usersGET /v1/athletes and GET /v1/coaches, paginated, active members only.
GET /legacy-idsNo /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 400 instead of being ignored. Remove parameters the previous endpoints accepted.
  • Plan changes apply immediately. A customer whose plan stops including integrations answers 403 from 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.

On this page