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.
published → deprecated (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.codestrings 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.