Deprecation policy

When a published /v1 route is retired, it follows this lifecycle. The rules here stay stable. Individual retirements are listed in the API changelog and marked on the API Reference.

publisheddeprecated (at least 90 days) → gone (410, kept indefinitely)

Deprecated

The route still works. It stays in the API Reference (struck through) and names its replacement.

Every response from that route — including errors — includes:

Header Meaning
Deprecation Announcement date (RFC 9745, @ + Unix timestamp)
Sunset Removal instant (RFC 8594, HTTP-date, end of day GMT)
Link Migration doc, only when a real URL exists

Minimum notice is 90 days from announcement to sunset. Sunset is set when we mark the route; there is no undated deprecation.

Watch the headers in your client. Do not wait for a human email.

Gone (410)

After sunset the route answers 410 with error.code gone and a pointer to the replacement. It is not a 404. Keep calling the old path and you will keep getting 410 — that is intentional, so stale integrations can diagnose.

Example: POST /v1/projects/submit was removed; the successor is POST /v1/projects.

Withdrawn from the reference

A route can also be withdrawn: taken out of this reference while still answering normally. That is where the six routes announced on 2026-08-07 sit today.

Withdrawal is not a quiet removal. The route keeps working, keeps its Deprecation and Sunset headers, and its replacement is listed on Migrating to current v1 shapes. What changes is only that a new integrator can no longer pick it up by mistake.

We do this when a route is on its way out and showing it alongside its replacement would present two ways to do one thing.

What we will not do

  • Withdraw a route without publishing its replacement first
  • Remove a published route with less than 90 days notice, unless logging shows zero live callers
  • Rename error.code strings without a major version bump

Current example: six routes announced on 2026-08-07 with sunset 2026-11-05 are withdrawn from this reference and still answering. The full list and what to call instead is on Migrating to current v1 shapes.