The version is in the path
Every endpoint is versioned in the URL path:/api/v2), served alongside /api/v1 for as long as the deprecation window below runs.
What counts as a breaking change
A breaking change is one that can make a correct client stop working. These only land in a new major version:- Removing or renaming a field, a parameter, an endpoint, or an error
error_kind. - Changing a field’s type, or making an optional request field required.
- Changing the meaning of an existing value.
- Removing an enum value that the API previously emitted.
- Changing an HTTP method or path for an existing operation.
What can change inside a version
Additive changes land on the current version at any time, without notice. Your client must tolerate all of them:- New fields on a response body.
- New optional request fields and new optional query parameters.
- New values in an open union, including new
sentimentvalues, newsession_statusvalues, newresolutionvalues, new observation blocktypevalues, newenvironmentkinds, and newerror_kindvalues on an error. - New endpoints, and new operations on an existing resource.
- New response headers.
- Ignore fields you do not recognize. Never fail parsing because a response carried something new. Decode into a permissive shape rather than a closed struct that rejects unknown keys.
- Tolerate values you do not recognize. Treat an unknown enum value as an unhandled case with a sane default, not as an error. A client that hard-codes today’s seven session statuses breaks the day an eighth ships; one that treats any status other than
openas terminal does not.
While v1 is pre-release
/api/v1 is not frozen yet. The API is in developer preview, and breaking revisions still land on /api/v1 rather than opening a /api/v2, because there is no public installed base to protect. The revision of 2026-07-28 is one: it renamed a request field and moved an endpoint.
Every such revision is announced as an entry in the changelog, with the exact wire diff and what to change in your client. Read it before you upgrade. If you are integrating now, pin the changelog and check it before each deploy.
Once v1 is declared stable, the rules above hold without the exception: breaking changes go to /api/v2, and /api/v1 keeps working.
Deprecation, when it applies
No endpoint is deprecated today. When one is, it is announced three ways at once:- A
Deprecationheader on every response from the deprecated operation, carrying the date the deprecation was announced. - A
Sunsetheader carrying the date the operation stops being served, as an HTTP date. - A
Linkheader withrel="deprecation"pointing at the migration guide for that change.
Sunset date. Log these headers rather than only reading release notes: they arrive in the responses your integration is already making, which is the one channel that cannot be missed.
Related
Changelog
Every wire change, newest first, with what to change in your client.
API reference
The operations, the response conventions, and which fields are open unions.