Document API changes so consumers never get surprised
Every change to a public API ripples out to everyone who built against it. A clear changelog entry — version, date, what changed, which endpoints are affected, and how to migrate — is the difference between a smooth upgrade and a flood of broken-integration tickets. This builder turns a few inputs into a consistent, paste-ready Markdown entry.
How it works
You supply the version, ship date, change type, a list of affected endpoints, a summary, and migration steps. The tool assembles a Markdown block using a conventional changelog shape: an H3 heading with the version and date, a bold Type line, a bulleted list of affected endpoints, the summary, a numbered migration guide, and — when you set a removal date — a clearly marked deprecation notice. Breaking changes are highlighted so you remember to bump the MAJOR version under semantic versioning before you publish.
Example output
### v2.0.0 — 2026-06-15
**Type:** Breaking change
**Affected endpoints:**
- `GET /v1/users/{id}`
- `PATCH /v1/users/{id}`
**Summary:** The `name` field has been split into `first_name` and `last_name`.
Clients that write to or read from `name` must update to the new fields.
**Migration guide:**
1. Replace reads of `response.name` with `response.first_name + ' ' + response.last_name`.
2. Replace writes that set `name: "..."` with `first_name: "..."` and `last_name: "..."` separately.
3. Update any filtering or sorting that references `name` to reference `last_name`.
> ⚠️ **Deprecation notice:** The `name` field will be removed entirely on 2026-09-15.
> Clients still sending or requesting `name` after that date will receive a 400 error.
Breaking vs non-breaking: a practical checklist
Always breaking (requires MAJOR bump):
- Removing a field from a response
- Renaming a field or parameter
- Changing a field’s type (e.g. string → object)
- Adding a new required request field
- Tightening validation on an existing field (e.g. max length reduced)
- Removing an endpoint
Never breaking (MINOR or PATCH):
- Adding a new optional response field
- Adding a new endpoint
- Adding a new optional request parameter with a sensible default
- Loosening validation (e.g. max length increased)
- Performance improvements with identical interface
Tips
- For a breaking change, always pair the entry with a MAJOR version bump, e.g.
v1.x→v2.0.0. - List endpoints in
METHOD /pathform, such asGET /v1/users/{id}, so readers can scan them fast. - In the migration guide, show the old request and the new request as fenced code blocks — concrete before-and-after beats prose.
- Set a deprecation date at least one MINOR cycle ahead of removal so consumers have a real migration window.
- Send the changelog entry to API consumers via email or a developer newsletter, not just the docs — many integrators never check a changelog proactively.