Step-by-step playbook for deprecating and sunsetting an API version — header strategy, consumer communication timeline, traffic monitoring gates, and the SDKs/portal update checklist.
Scanned 9/23/2026
npx -y skills add mcorbett51090/RavenClaude --skill api-deprecation-rollout --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Api Deprecation Rollout?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/mcorbett51090-api-deprecation-rollout)More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.
---
name: api-deprecation-rollout
description: "Step-by-step playbook for deprecating and sunsetting an API version — header strategy, consumer communication timeline, traffic monitoring gates, and the SDKs/portal update checklist."
---
# API Deprecation Rollout
## When to Use This Skill
When a breaking change requires retiring an existing API version (major bump), or when removing an individual operation/field that consumers depend on.
## 1. Deprecation vs. Sunset
| Term | Meaning | Header |
|---|---|---|
| **Deprecated** | Still works; consumers should migrate | `Deprecation: @<unix-ts>` (RFC 9745) |
| **Sunset** | Will stop working on this date | `Sunset: <date>` |
| **Retired** | Endpoint returns `410 Gone` | No header needed |
`Sunset` uses the RFC 7231 HTTP-date format (`Sunset: Sat, 01 Aug 2025 00:00:00 GMT`); `Deprecation` (RFC 9745) uses a Structured-Fields Date — an `@` followed by a Unix timestamp in seconds (`Deprecation: @1738368000`).
## 2. Rollout Timeline Template
| Phase | Duration | Action |
|---|---|---|
| **Announce** | Day 0 | Publish deprecation notice; add headers to all responses on old version; update developer portal; email registered consumers |
| **Migration window** | 90 days min (180 for high-traffic APIs) | Monitor old-version traffic; publish migration guide; offer upgrade office hours |
| **Sunset warning** | 30 days before retirement | Increase warning cadence; add `Link: <sunset-date>; rel="sunset"` header; block new app registrations on old version |
| **Sunset** | Day N | Return `410 Gone` with a Problem Details body pointing to the new version |
| **Remove** | 30 days after sunset | Remove code, teardown infra, archive spec |
## 3. Required Headers on Every Response (deprecated endpoint)
```
Deprecation: @1738368000 # RFC 9745: @ + Unix seconds (2025-02-01T00:00:00Z)
Sunset: Fri, 01 Aug 2025 00:00:00 GMT
Link: <https://api.example.com/v2/orders>; rel="successor-version",
<https://developer.example.com/migration/v1-to-v2>; rel="deprecation"
```
## 4. OpenAPI Annotation
```yaml
/v1/orders:
get:
operationId: listOrdersV1
deprecated: true
description: |
**DEPRECATED** as of 2025-02-01. Sunset: 2025-08-01.
Migrate to `/v2/orders`. See https://developer.example.com/migration/v1-to-v2.
```
## 5. Traffic Monitoring Gates
Before retiring, confirm all traffic gates are met:
- [ ] Old-version daily active callers < 1% of peak
- [ ] Zero callers in the last 7 days from production app registrations (not test/sandbox)
- [ ] All known SDK versions that target old version have an updated release published
- [ ] Support ticket rate on old-version migration < 2 open tickets
If any gate is red, extend the migration window — do not force a sunset.
## 6. Consumer Communication Checklist
- [ ] Developer portal "Breaking changes" page updated
- [ ] In-app SDK deprecation warning added (console.warn / log.warn on old-version call)
- [ ] Email to registered app owners with: what changes, migration steps, timeline
- [ ] Changelog entry in the API changelog
- [ ] Status page / changelog RSS updated
## 7. The 410 Gone Response Body
```json
{
"type": "https://api.example.com/problems/version-retired",
"title": "API Version Retired",
"status": 410,
"detail": "The v1 Orders API was retired on 2025-08-01. Migrate to v2: https://developer.example.com/migration/v1-to-v2",
"instance": "/v1/orders"
}
```
## Pitfalls
- Retiring silently with no `Deprecation`/`Sunset` headers — consumers discover the breakage in production
- Setting a sunset date under 90 days — not enough time for enterprise consumers with release cycles
- Removing the deprecated endpoint before traffic reaches zero — check the gates
- Forgetting to update auto-generated SDKs — client libraries that call the old URL break on sunset even if the docs are updated
- Announcing by email alone — developer portal + headers + changelog are the durable channels; email bounces
## See Also
- [`../../agents/api-platform-engineer.md`](../../agents/api-platform-engineer.md) — developer portal, SDK/codegen, and lifecycle management
- [`../../agents/api-design-architect.md`](../../agents/api-design-architect.md) — versioning strategy and breaking-change classification
- [`../../CLAUDE.md`](../../CLAUDE.md) — house opinion: version only for breaking changes; deprecate on a clock
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!