What This Template Is For
Your API is a product. Every change you ship to it affects downstream integrations, third-party developers, and internal teams who rely on stable contracts. An API changelog is the primary communication mechanism between your platform team and everyone who builds on top of it. Without one, developers discover breaking changes at 2am when their integration fails.
This template provides a structured format for documenting API changes on a per-release basis. It covers new endpoints, modified behavior, deprecations, breaking changes, bug fixes, and rate limit adjustments. Each entry is designed to be scannable by a developer who needs to answer one question: "Do I need to change my code?"
If you are shipping product-level updates alongside API changes, pair this with the Release Notes Template for customer-facing communication. For the full process of coordinating launches that include API changes, the Product Launch Playbook covers cross-functional handoffs between platform, product, and developer relations teams.
When to Use This Template
- Every API release. Whether you ship weekly or on a continuous delivery cadence, batch your API changes into regular changelog entries that developers can subscribe to.
- Before deploying breaking changes. Breaking changes need advance notice. Post the changelog entry at least 2-4 weeks before the change takes effect. Include a migration path.
- When deprecating endpoints or fields. Deprecations require a timeline, a replacement, and a migration guide. The changelog is the official record.
- After fixing an API bug. If a bug caused incorrect responses or unexpected behavior, document what changed. Developers who wrote workarounds need to know the underlying issue is resolved.
- When adjusting rate limits or authentication. Any change to how developers access your API deserves its own entry. Rate limit increases are good news. Rate limit decreases or new auth requirements require advance notice.
- During beta or preview releases. Beta API users expect frequent changes. A changelog entry per release keeps them informed without requiring them to read your source code.
How to Use This Template
- Gather changes from your API team. Pull the list of merged PRs, resolved tickets, or completed stories that affect API behavior. Include changes to request/response schemas, authentication, rate limits, error codes, and endpoint availability.
- Classify each change. Use the categories in the template: New Endpoints, Modified Endpoints, Deprecated Endpoints, Breaking Changes, Bug Fixes, and Infrastructure (rate limits, auth, SDK changes).
- Write for developers, not product managers. Use precise technical language. Include endpoint paths, HTTP methods, field names, and response codes. Developers need specifics, not marketing copy.
- Include code examples for breaking changes. Show the before and after. A diff-style code block communicates more in 10 lines than a paragraph of prose.
- Link to migration guides for anything non-trivial. If a breaking change requires developers to update their integration, link to a step-by-step migration guide. For guidance on writing those, see the Migration Guide Template.
- Publish in a developer-accessible format. Your changelog should be available on your developer docs site, in an RSS feed, and optionally via email to registered API consumers.
The Template
API Name: [Your API]
Version: [vX.Y.Z or date-based, e.g. 2026-03-05]
Release Date: [YYYY-MM-DD]
Effective Date: [YYYY-MM-DD, if different from release date]
Stability: [Stable / Beta / Preview / Deprecated]
Summary
[2-3 sentences describing the headline changes. What should a developer know before reading the details?]
Action Required: [Yes / No. If yes, specify what and by when.]
New Endpoints
| Method | Endpoint | Description |
|---|---|---|
| [GET/POST/PUT/DELETE] | /api/v2/[resource] | [What it does. Who should use it. Link to docs.] |
| [Method] | /api/v2/[resource] | [Description] |
Modified Endpoints
| Method | Endpoint | Change | Impact |
|---|---|---|---|
| [Method] | /api/v2/[resource] | [What changed in request or response] | [Backward compatible / Breaking. If breaking, see Breaking Changes section.] |
Deprecated Endpoints
| Method | Endpoint | Replacement | Removal Date |
|---|---|---|---|
| [Method] | /api/v1/[resource] | [New endpoint or approach] | [YYYY-MM-DD] |
Breaking Changes
Changes that require developers to update their code. Each entry includes the change, the migration path, and the deadline.
Change 1: [Brief title]
- Endpoint:
[METHOD /api/v2/resource] - What changed: [Specific change to request, response, or behavior]
- Why: [Reason for the change]
- Migration: [Step-by-step instructions or link to migration guide]
- Deadline: [Date after which the old behavior is no longer supported]
Before:
{
"old_field": "value"
}
After:
{
"new_field": "value"
}
Bug Fixes
| Endpoint | Issue | Resolution |
|---|---|---|
[METHOD /path] | [What was wrong] | [What was fixed. Any developer action needed.] |
Infrastructure Changes
| Area | Change | Impact |
|---|---|---|
| Rate limits | [New limits or changes to existing limits] | [Who is affected and how to handle] |
| Authentication | [Changes to auth requirements or token handling] | [Migration path if any] |
| SDKs | [New SDK versions or changes] | [Version numbers, link to SDK changelog] |
| Regions | [New regions or availability changes] | [How to opt in or configure] |
Upcoming Changes
Preview of changes coming in the next release. Not yet effective but provided so developers can prepare.
| Change | Expected Date | Action Required |
|---|---|---|
| [Brief description] | [Date] | [What to do now to prepare] |
Filled Example: PayStream API v2.8.0
API Name: PayStream API
Version: v2.8.0
Release Date: 2026-03-01
Effective Date: 2026-03-01 (breaking changes effective 2026-04-15)
Stability: Stable
Summary (Example)
PayStream API v2.8.0 adds a batch payments endpoint, introduces webhook event filtering, and deprecates the v1 transaction search endpoint. One breaking change affects the /v2/refunds response schema. Developers using the refunds endpoint must update their integration by April 15, 2026.
Action Required: Yes. The refund_status field in /v2/refunds responses changes from a string to an object. See Breaking Changes below.
New Endpoints (Example)
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v2/payments/batch | Submit up to 500 payment instructions in a single request. Returns a batch ID for status polling. Reduces API calls for high-volume merchants. Docs |
| GET | /api/v2/webhooks/events | List all available webhook event types with descriptions and example payloads. Useful for building webhook configuration UIs. |
| PUT | /api/v2/webhooks/{id}/filters | Configure event filters on a per-webhook basis. Receive only the events you need instead of all events. |
Modified Endpoints (Example)
| Method | Endpoint | Change | Impact |
|---|---|---|---|
| GET | /api/v2/transactions | New currency filter parameter. Pass ?currency=USD to filter results by currency. | Backward compatible. Existing queries without the parameter return all currencies as before. |
| POST | /api/v2/payments | metadata field now accepts up to 50 key-value pairs (previously 20). | Backward compatible. No changes needed for existing integrations. |
Deprecated Endpoints (Example)
| Method | Endpoint | Replacement | Removal Date |
|---|---|---|---|
| GET | /api/v1/transactions/search | Use /api/v2/transactions with filter parameters | 2026-06-30 |
| GET | /api/v1/webhooks | Use /api/v2/webhooks with event filtering support | 2026-06-30 |
Breaking Changes (Example)
Change 1: Refund status field is now an object
- Endpoint:
GET /api/v2/refunds/{id}andGET /api/v2/refunds - What changed: The
refund_statusfield changes from a string ("completed") to an object withstate,reason, andupdated_atfields. - Why: Merchants requested more detail about refund processing stages, particularly for partial refunds that involve multiple settlement steps.
- Migration: Update your response parsing to read
refund_status.stateinstead ofrefund_statusdirectly. Thestatefield contains the same string values as before. - Deadline: April 15, 2026. After this date, the old string format will no longer be returned.
Before:
{
"id": "ref_abc123",
"amount": 4999,
"refund_status": "completed"
}
After:
{
"id": "ref_abc123",
"amount": 4999,
"refund_status": {
"state": "completed",
"reason": "customer_request",
"updated_at": "2026-03-01T14:30:00Z"
}
}
Bug Fixes (Example)
| Endpoint | Issue | Resolution |
|---|---|---|
POST /v2/payments | Payments with metadata containing Unicode characters returned a 400 error | Fixed. Unicode is now accepted in all metadata fields. No action needed. |
GET /v2/disputes | Pagination cursor returned duplicate results on pages 5+ for merchants with 10,000+ disputes | Fixed. Cursor now uses a stable sort key. Existing integrations using cursor pagination will see correct results without code changes. |
Infrastructure Changes (Example)
| Area | Change | Impact |
|---|---|---|
| Rate limits | Batch payments endpoint: 60 requests/minute. Standard payment endpoints unchanged at 300/min. | New endpoint only. No changes to existing limits. |
| SDKs | Node.js SDK v3.8.0 released with batch payments support and updated TypeScript types for the refund status object. | Upgrade to v3.8.0 for type safety. npm install @paystream/[email protected] |
| Regions | EU data residency now available. Pass X-PayStream-Region: eu header to route requests to EU infrastructure. | Opt-in only. Default region unchanged (US). |
Upcoming Changes (Example)
| Change | Expected Date | Action Required |
|---|---|---|
| OAuth 2.1 support for API authentication (in addition to API keys) | Q2 2026 | No action now. API keys will continue to work. |
| Webhook signature algorithm upgrade from HMAC-SHA256 to HMAC-SHA512 | May 2026 | Prepare to accept both signature formats during transition. |
Key Takeaways
- Write for developers, not stakeholders. Use endpoint paths, HTTP methods, and field names. Marketing language has no place in an API changelog.
- Flag breaking changes at the top with a clear "Action Required" banner. Developers who scan headings need to know immediately if this release affects them.
- Include code examples for every breaking change. A before/after JSON diff communicates faster than any paragraph. For a full walkthrough of communicating breaking changes to your user base, see the Deprecation Notice Template.
- Set deprecation timelines of at least 6 weeks. Shorter timelines create emergencies for integration teams who release on their own cadence.
- Publish in a machine-readable format (RSS, Atom, or a JSON feed) alongside the human-readable version. This lets developer tools auto-detect relevant changes. For understanding how API versioning and changelogs fit into your broader product strategy, the Product Strategy Handbook covers platform product management.
- Batch minor changes and ship standalone entries for anything that requires developer action. A daily changelog with three entries is noise. A weekly changelog with one "action required" entry is signal.
About This Template
Created by: Tim Adair
Last Updated: 3/5/2026
Version: 1.0.0
License: Free for personal and commercial use
