A Playbook for Deprecating an API Without Breaking Customers
A safe API deprecation starts with knowing who still calls the old version, then giving a notice period long enough to matter and repeating it. Deprecations usually fail because nobody measured real usage, one announcement got buried, and the shutdown date arrived with customer traffic still hitting the endpoint.
This playbook works through the steps in order: measuring real usage before you announce, setting a notice period long enough to matter, and handling the integrations that never respond no matter how many emails you send.
Why Most API Deprecations Go Worse Than Planned
The common failure pattern starts with an internal decision to deprecate, followed by a single announcement, usually an email or a changelog entry, and a calendar reminder to turn the endpoint off on a fixed date. Nothing in that sequence confirms anyone actually read the notice or has a plan to migrate. The team finds out who didn't migrate only when the shutdown happens and support tickets start arriving.
The fix is sequencing: instrument usage first, so you know exactly who's affected before you say anything publicly. Announce with a notice period based on how hard the migration actually is for your integrators, not a round number picked for convenience. And track migration progress actively during the notice period instead of assuming silence means success.
Instrumenting Usage Before You Announce Anything
Before setting any date, add logging on the endpoint you're planning to deprecate that captures which API key or account is calling it, at what volume, and ideally which specific fields or parameters they're using if the new version changes the response shape. This tells you two things an announcement plan needs: how many distinct integrators are actually affected, and which of them are high-volume, high-value accounts that need a more direct conversation than a mass email.
Run this instrumentation for at least a full billing or usage cycle before announcing, so you're not making a sunset decision based on a partial or unrepresentative sample of who calls the endpoint and when.
Setting the Notice Period and Communicating It Repeatedly
The right notice period depends on how much work the migration actually requires, not on an internal deadline. A response field rename is a smaller lift than a full authentication method change, and the notice period should reflect that difference rather than using the same window for every deprecation regardless of complexity.
One announcement is not communication, it's a paper trail. Repeat the notice at meaningful intervals through the window, and change the channel and the specificity as the deadline approaches: an early broad announcement in documentation and a changelog, a mid-window email to every account still showing usage, and a final direct outreach, ideally including account-specific usage data, to whoever is still calling the endpoint in the last stretch before shutdown.
Handling the Long Tail That Never Migrates
Some fraction of integrators won't respond to any notice, for reasons ranging from an abandoned integration nobody at their company monitors anymore to a genuinely important dependency stuck behind their own resourcing constraints. Distinguish between these before deciding what to do about them. Usage volume and recency are the fastest signal: an account with near-zero recent traffic is probably abandoned and safe to cut off on schedule. An account with steady, meaningful traffic close to the deadline needs a real conversation, not another automated email.
For accounts you can't reach or that don't respond, consider a soft cutoff before the hard one: rate limit or add a deprecation warning header to responses rather than returning an error outright, which often surfaces the issue to whoever actually owns the integration on their end without breaking them immediately.
The Actual Shutdown: A Staged Approach
Don't flip the endpoint off for everyone at once, even after the notice period ends:
- Start by returning an explicit deprecation error for a small, low-risk slice of remaining traffic, and confirm your monitoring catches the resulting support signal correctly before expanding.
- Expand to the full remaining traffic once you've confirmed the error response and any fallback behavior work as expected.
- Keep the old endpoint's error response informative, pointing to the migration guide and the new endpoint, rather than a generic failure that gives an integrator no path forward.
- Keep the deprecated code path removable but present for a short buffer period after full shutdown, in case a genuinely critical, previously unseen caller surfaces and needs an emergency extension.
Treat the final shutdown itself as a change that could go wrong, with the same rollback readiness as any other production deploy, rather than as a formality once the notice period has technically ended.
What Good Looks Like
A good deprecation process means you know exactly who's still calling the old endpoint at every point during the notice period, not just at the moment you announced it.
Building The Capability (5-Stage Skill Ladder)
How to Get Started
Frequently Asked Questions
How long should a deprecation notice period be?
It depends on how much migration work you're asking integrators to do, not on a fixed company policy. A small field rename might only need a few weeks of notice. A change to authentication or a core data model can reasonably take integrators months to adopt, and the notice period should match that.
What if an integrator never responds to any of our notices?
Check their actual usage volume and recency first. Near-zero recent traffic usually means an abandoned integration that's safe to cut off on schedule. Meaningful ongoing traffic close to the deadline means it's still actively used by someone, and a soft cutoff with a warning header is safer than an immediate hard error.
Should we announce a deprecation before we've measured who's actually using the endpoint?
No. Instrument usage first, for at least a full billing or usage cycle, so the notice period and outreach plan are based on who's actually affected and how much traffic they send, not a guess made before you had real data.
About the numbers
This guide doesn't quote a sourced benchmark. Figures in it are estimates or general guidance, so check them against your own numbers.
Related Guides
Retiring an API Without Breaking Every Integration
A sunset date read as a suggestion breaks three partner integrations at once. A realistic timeline for retiring an API endpoint without the fallout.
How to Sunset an API Version Without Breaking Customers
A playbook for deprecating an API version: how to announce it, track who's still calling it, and pick a sunset window that's fair to slow integrators.
A Playbook for Sunsetting an API Without Breaking Customers
A practical timeline and communication plan for deprecating an API version, including how to find out who's still calling it before shutdown.
How to Sunset an API Version Without Breaking Every Partner
A step-by-step playbook for retiring an old API version: usage auditing, notice periods, migration support, and the hard cutover most teams get wrong.
A Playbook for Sunsetting an API Without Breaking Your Customers
A step-by-step playbook for deprecating an API version: what to communicate, how long to wait, and the safeguards that prevent a shutdown incident.
A Runbook for Sunsetting an API Without Breaking Every Client
A step-by-step runbook for deprecating an API endpoint or version, from measuring real usage to communicating the timeline to the clients who need it.