Resources
Versioning and Deprecation

Versioning and Deprecation

What the /v1 Content API guarantees, how additive and breaking changes are handled, and when deprecated fields stop being sent.

On this page

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.code of 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.code values 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 phase or stage in 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

  1. The field or route is marked deprecated in these docs, in the Changelog, and in the OpenAPI description, with its replacement.
  2. It keeps working unchanged for at least 6 months, until its sunset date.
  3. A sunset date can be extended. It is never brought forward.
  4. On the sunset date it stops being sent, or the route answers 410.

Current deprecations

DeprecatedWhereReplacementDeprecated onSunset
itemsModule, course, slide, test, game, and simulation listsdata2026-09-302027-04-30
totalCountModule, course, slide, test, game, and simulation listsmeta.itemCount2026-09-302027-04-30
totalVideo listmeta.itemCount2026-09-302027-04-30
successEvery resource delete responsedeleted2026-09-302027-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 .success on Content API responses and move to the replacements.
  • Read the Changelog before each deploy of your integration.

Was this page helpful?