Deprecation policy
A deprecation is a schedule, not a surprise. Every version deprecation is announced at least twelve months before shutdown, carries a per-endpoint migration guide, and is visible in every response header while the deprecation window is open.
The deprecation timeline
Day 0 · Announcement
A version deprecation lands in the changelog with a target shutdown date at least twelve months out. Every operator with active traffic on the deprecated version gets an email.
Migration window (Day 0 → T−30)
Every response from the deprecated version includes a Deprecation header naming the shutdown date, and a Link header pointing at the migration guide for the specific endpoint. Migration is a shape-change on the client, not a substrate-side change.
HTTP/1.1 200 OK
Deprecation: version="v1"; date="2027-11-01T00:00:00Z"
Link: <https://docs.nebbos.ai/migrations/v1-v2-tasks.html>; rel="deprecation"Final notice (T−30 days)
A second email lands. The response headers escalate the warning; some non-critical endpoints may begin serving 90% of requests with an inserted 100ms delay so slow-migrating clients feel the pressure without breaking.
Shutdown (T−0)
The deprecated version returns HTTP 410 Gone on every endpoint. The body of the 410 names the current version and the migration guide URL. No silent 404, no ambiguous 500 — the shutdown is loud.
{
"code": "version.retired",
"message": "API version v1 was retired on 2027-11-01. Migrate to v2.",
"current_version": "v2",
"migration_guide": "https://docs.nebbos.ai/migrations/v1-v2.html"
}Migration guides
Every breaking change ships with a per-endpoint migration guide. The guide names the old shape, the new shape, and (where the change is more than a rename) an inline example of a request-response pair on each side. Guides live under docs.nebbos.ai/migrations/<version>-<endpoint>.html and are indexed on the version’s deprecation-announcement changelog entry.
SDK version pairing
Each SDK ships an alongside migration: the SDK release that adds support for the new API version lands on the deprecation-announcement day, and stays coexistent with the previous SDK major version for the entire deprecation window. See SDKs & client libraries for the pinning rules.
What never deprecates
The audit-chain read path. Once a chain entry is written, the endpoint that reads it stays live — the chain is an infinite-lifetime record. If an audit-chain endpoint shape needs to evolve, the new shape ships alongside; the old shape does not retire.