HIVE80lab — Ops notes

The API deprecation notice template: sunsetting a version without breaking customers

Every API deprecation is a promise you are allowed to break exactly once — and only if you tell everyone before you do. Small teams usually fail at this in one of two ways: they never deprecate anything (versions pile up, every bug exists in four places at once), or they deprecate with a changelog entry nobody reads and a deadline nobody believed. The outage email templates handle the incident you didn't plan; this template handles the breakage you did. The honest version has three notices, one timeline, and a holdout ladder driven by actual usage, not by who replied to your email.

1. The three notices (one message, three channels)

A deprecation is communicated three times because each channel reaches a different person:

ChannelReachesWhen
The changelog entry — what is deprecated, the sunset date, the replacement, the migration notePeople who read changelogs (your best integrators already do)T−90 days, and linked from every affected endpoint's docs page
The runtime warning — the Deprecation and Sunset headers (and Link to the docs) on every deprecated responseThe code and the person watching logs — it reaches customers who never read anything you sendT−90 through T−0, on every request to the old version
The direct email — sent only to accounts that called the old version in the last 30 daysThe owner of the integration, with a name attachedT−60, and again at T−30 only to accounts still calling

The runtime header is the one small teams skip and the one that saves you: a warning that appears in the customer's own logs cannot be missed by the person whose code will break. One line of middleware — Deprecation: true, Sunset: <date> — is worth fifty emails.

2. The sunset timeline

ClockWhat happensGate to pass
T−90Changelog + docs banner + runtime headers live; first email to recent callersThe replacement must already exist and be documented. Deprecating before the replacement works is breaking, not deprecating
T−60Usage dashboard reviewed: who is still calling? Migration guide published with copy-paste diffsEvery holdout has a named owner on your side tracking their switch
T−30Second email to remaining callers, now with their own usage counts in the body ("your account made 41,000 calls to v1 last week")Offer the 15-minute migration call to anyone still stuck
T−7Final notice; write the fallback decision: hard-stop, or read-only grace windowGrace window is a decision made now, not improvised at sunset
T−0Sunset: the endpoint returns 410 Gone with a JSON body naming the replacement — never a naked 404Sunset-day monitoring of 410s, so a spike means someone needs help, not silence
T+7Deprecation review: who migrated, how long it took them, what the next timeline should beThe review writes the next version's habits

Ninety days is the small-team standard: long enough for a customer's own release cycle to absorb the change, short enough that the old version does not become permanent. If a customer's migration genuinely cannot land in ninety days, the exception is a documented extension with a new date — never a quiet indefinite extension, which is how dead versions survive forever.

3. The direct email: what it must contain

Five sentences, all of them specific, none of them marketing:

  1. What is going away — the exact version and endpoints, not "some legacy endpoints."
  2. When — one calendar date. "Early next quarter" is not a date; it is a shrug.
  3. Why — one honest sentence (security patching, a bugfix that cannot ship to the old version, consolidation). Customers accept reasons; they do not accept silence.
  4. What to do — the replacement endpoint and the migration guide link, with the diff between old and new shown, not described.
  5. A human to reply to — a named engineer's address. "Reply to this email" counts if a person actually reads it.

The subject line that works: "Action needed: v1 API sunsets March 31 — your migration guide." The two that don't: anything starting "We're excited to announce…" and anything burying the date below the fold.

4. The holdout ladder

Usage data, not email opens, decides the escalation:

This is the same discipline as the invoice collection ladder: rank by exposure, escalate by evidence, and never treat the list as one blob.

5. Versioning habits that make the next deprecation boring

6. Common mistakes

Takeaways

From the HIVE80lab kit

Related: the leaked API key runbook covers the rotation you hope never to run, the changelog automation keeps the deprecation entry from living in someone's drafts, and the vendor outage runbook is the mirror image — what you want from a vendor who is sunsetting something you depend on.