API Security, Identity & Zero-TrustPlaybook3 min readUpdated September 2026

A Playbook for Sunsetting an API Without Breaking Customers

The hard part of deprecating an API is almost never the code. It's finding out who's actually still calling the old version, because the customers most likely to be affected are the ones least likely to be watching your changelog.

A playbook that skips straight to a shutdown date, without first measuring real usage, is how you end up breaking a customer's production integration with no warning they'll remember getting.

Measure before you announce anything

Instrument the deprecated version, not just the new one, so you have real call volume and, ideally, real caller identity before you set a shutdown date. A version with near-zero traffic can move fast; a version still handling meaningful volume from a small number of identifiable accounts needs direct outreach to those accounts specifically, not just a changelog entry that assumes everyone reads it.

A four-stage timeline that gives real integrations room to move

  • Announce with a concrete date, not eventually, and add a deprecation header to every response from the old version so it shows up in server logs on the caller's side too, not just yours.
  • Reach out directly to any account still generating meaningful traffic, ideally through the same channel they'd expect a real incident notification through, not just an email that might land in a bulk folder.
  • Add a warning period where the old version still works but returns a deprecation notice in every response body, giving integrations that parse responses programmatically a chance to notice even if a human never reads the changelog.
  • Shut down only after real traffic on the old version has dropped to the small number of accounts you've already contacted directly, not on the calendar date alone if traffic tells a different story.

The deprecated endpoints most likely to be forgotten

A deprecated endpoint that still works exactly as before doesn't just cost you nothing to leave alive, it costs you invisibly: every dependency you don't update, every security patch you have to apply twice, every engineer who has to remember which version is current when debugging.

The riskiest kind, though, is a deprecated internal-facing endpoint from an old integration nobody remembers building, still reachable from the internet with no monitoring on it at all, since a target nobody's watching is a target nobody notices being probed.

What to check before you flip the switch off for good

Confirm the endpoint's real traffic, not the traffic you expect, since a batch job that only runs quarterly can look dead for months and then break loudly the one time it fires. Confirm you've reached every account still generating traffic through a channel you know they'll see. Confirm the deprecation headers and warning-period notices have actually been live long enough for a reasonable integration cycle, not just technically present for a day before shutdown.

A worked example: an integration partner nobody remembered

Say traffic on a deprecated API version has dropped to a small handful of remaining callers, and every one of them has been contacted directly except a single account that's been quiet since the outreach email went out. Shutting down on schedule anyway, on the theory that one unresponsive account isn't worth delaying for, is how you find out that account is a partner whose integration processes a meaningful share of their own customer orders through your API, and they simply hadn't seen the email yet.

Before a final shutdown, escalate outreach to any remaining account through more than one channel, a support ticket, a phone call for a high-value account, not just a repeat of the same email that already went unanswered.

Versioning strategy that makes the next deprecation easier

A deprecation that's painful once is usually a sign the API's versioning strategy makes every deprecation painful. Explicit version numbers in the URL or a header, rather than a single evolving endpoint, let you run two versions side by side indefinitely if needed, which turns a hard cutover into a gradual migration. Teams that treat every API change as a breaking change to the one true endpoint end up either afraid to deprecate anything, or forced into exactly the rushed, under-communicated shutdown this playbook is trying to avoid.

Executive Capability Standard

What Good Looks Like

A good API deprecation process measures real traffic and caller identity before setting a shutdown date, and only actually turns the old version off once that measured traffic has dropped to the accounts already contacted directly.

Building The Capability (5-Stage Skill Ladder)

1. Learn:Instrument every deprecated or legacy endpoint still live in your API surface with logging on call volume and caller identity, even before you plan to sunset any of them.
2. Do Manually:Manually review deprecated endpoint traffic monthly and reach out directly to any account generating meaningful volume before it becomes a shutdown deadline problem.
3. Delegate:Assign an API or platform owner responsibility for the full deprecation lifecycle, from announcement through direct outreach to final shutdown, so it doesn't fall through the cracks between teams.
4. Automate:Add automated deprecation headers and response-body warnings to any endpoint marked for sunset, and alert when a supposedly quiet endpoint suddenly shows new traffic.
5. Buy:An API management or platform consultant is worth bringing in when you're sunsetting a large public API surface with many external integration partners and need a communication plan built for that scale.

How to Get Started

Frequently Asked Questions

How long should an API deprecation warning period last?

Long enough for a realistic integration cycle on the caller's side, which depends heavily on who's calling: a large enterprise integration partner may need months to schedule the change, while a low-traffic internal endpoint might only need weeks. Base it on measured real traffic and direct outreach, not a single fixed rule.

How do we find out who's still calling a deprecated API version?

Instrument the deprecated version itself with logging on caller identity and request volume before you announce anything. A changelog entry alone reaches only the people already reading your changelog, which rarely includes every account with a working integration built months or years ago.

What if a deprecated endpoint still has real traffic on the shutdown date?

Don't shut it down on the calendar date if real traffic tells a different story. Extend the warning period and escalate direct outreach to the remaining accounts, since a scheduled shutdown that breaks a customer's production integration costs more trust than the extra weeks of maintaining the old version.

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