Migrating from the Legacy API
The legacy Content API (https://admin.kinestex.com/api/v1/) and the SDK convenience methods built on it still work. New integrations should use the endpoints on this page.
What moves
| Legacy | Updated |
https://admin.kinestex.com/api/v1/ | https://data.kinestex.com/api/ |
x-api-key + x-company-name headers | x-api-key alone (the key identifies the company) |
/workouts, /plans, /exercises | /workouts/client, /plans/client, /exercises/client |
lastDocId cursor paging | limit + offset with a full pagination block |
| Client-side filtering | search, body_parts, categories, difficulty_level, level, translation_languages |
| Firestore document IDs | Numeric IDs (legacy 20-character Firestore IDs still resolve) |
Response shape differences to expect
- Lists are keyed
exercises,workouts, anddata(plans), each alongsidepagination. - Workout and plan list titles live under
translation.title, not at the root. total_timeon workouts is in seconds;total_minutesis the minutes value and appears on the detail endpoints.- Exercise
idis a number in list responses and a string in single-item responses. Planidbehaves the same way. created_byis reduced to{ "id": ... }and internal fields (firestore_id,created_by_id,ai_model_id, full AI-model configuration) are stripped from every/clientresponse.
A safe migration order
1. Point your list screens at the new endpoints and drive paging from pagination.
2. Replace client-side filtering with the query parameters, and delete the "fetch everything" code path.
3. Switch detail screens to /{id}, passing the numeric ID you now get from the list.
4. Move localization to the Language header plus ?lang=, and drop any hard-coded language handling.
If you are still on the SDK convenience methods (fetchWorkouts(), fetchPlans(), fetchExercises()), keep using them: they are supported, and the legacy page documents them in full. Reach out to KinesteX when you want the SDK helpers pointed at these endpoints.