The Content API is versioned in the path. Every route in these docs is under /v1/content. This page describes what /v1 promises and how changes reach you.
What /v1 guarantees
Within /v1, TutorFlow does not:
- Remove a route, a documented request field, or a documented response field without the deprecation process below.
- Rename a field, or change its type or its meaning.
- Make an optional request field required, or add a new required request field.
- Change the status code or the
error.codeof a documented outcome. - Change what a price in Pricing buys without announcing it in the Changelog first.
Additive changes
These can ship in /v1 at any time, and are listed in the Changelog:
- New routes, new optional request fields, and new query parameters.
- New fields in a response object.
- New
error.codevalues for outcomes that were not documented before. - New webhook event types. You receive only the events an endpoint subscribes to, so a new type never arrives unasked.
- New values in a field documented as open, such as
phaseorstagein a generation event.
Write clients that tolerate them: ignore response fields you do not know, branch on error.code with a default branch, and do not fail on an unknown enum value in a field you only display.
Breaking changes
A change that breaks the guarantees above goes to a new path version, /v2, or follows the deprecation process for one field or route. When a /v2 exists, /v1 keeps working for at least 12 months after the /v2 announcement.
Security fixes are the exception. If a response exposed data it should not have, the field is removed at once and the removal is listed in the Changelog. The 2026-09-30 removal of internal storage keys and learner contact details was such a fix.
Deprecation process
- The field or route is marked deprecated in these docs, in the Changelog, and in the OpenAPI description, with its replacement.
- It keeps working unchanged for at least 6 months, until its sunset date.
- A sunset date can be extended. It is never brought forward.
- On the sunset date it stops being sent, or the route answers
410.
Current deprecations
| Deprecated | Where | Replacement | Deprecated on | Sunset |
|---|---|---|---|---|
items | Module, course, slide, test, game, and simulation lists | data | 2026-09-30 | 2027-04-30 |
totalCount | Module, course, slide, test, game, and simulation lists | meta.itemCount | 2026-09-30 | 2027-04-30 |
total | Video list | meta.itemCount | 2026-09-30 | 2027-04-30 |
success | Every resource delete response | deleted | 2026-09-30 | 2027-04-30 |
The sunset date of 2027-04-30 may be extended if integrations still depend on these keys. It will not be brought forward. Module, slide, and test updates answer { "success": true } as their whole body; that response is not deprecated.
Checking your integration
- Search your code for
.items,.totalCount,.total, and.successon Content API responses and move to the replacements. - Read the Changelog before each deploy of your integration.