api-changelog-versioning
About
This Claude Skill generates comprehensive API changelogs and versioning documentation. It helps developers document breaking changes, migration guides, and version history between API releases. Use it specifically for creating upgrade guides, deprecation notices, and backward compatibility documentation.
Documentation
API Changelog & Versioning
Overview
Create comprehensive API changelogs that document changes, deprecations, breaking changes, and provide migration guides for API consumers.
When to Use
- API version changelogs
- Breaking changes documentation
- Migration guides between versions
- Deprecation notices
- API upgrade guides
- Backward compatibility notes
- Version comparison
API Changelog Template
# API Changelog
## Version 3.0.0 - 2025-01-15
### π¨ Breaking Changes
#### Authentication Method Changed
**Previous (v2):**
```http
GET /api/users
Authorization: Token abc123
Current (v3):
GET /api/v3/users
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Impact: All API consumers must switch from API tokens to JWT Bearer tokens
Migration Steps:
- Obtain JWT token from
/api/v3/auth/loginendpoint - Replace
Authorization: TokenwithAuthorization: Bearer - Update token refresh logic (JWT tokens expire after 1 hour)
Migration Deadline: June 1, 2025 (v2 auth will be deprecated)
Migration Guide: JWT Authentication Guide
Response Format Changed
Previous (v2):
{
"id": "123",
"name": "John Doe",
"email": "[email protected]"
}
Current (v3):
{
"data": {
"id": "123",
"type": "user",
"attributes": {
"name": "John Doe",
"email": "[email protected]"
}
}
}
Impact: All API responses now follow JSON:API specification
Migration:
// Before (v2)
const user = await response.json();
console.log(user.name);
// After (v3)
const { data } = await response.json();
console.log(data.attributes.name);
// Or use our SDK which handles this automatically
import { ApiClient } from '@company/api-sdk';
const user = await client.users.get('123');
console.log(user.name); // SDK unwraps the response
Removed Endpoints
| Removed Endpoint | Replacement | Notes |
|---|---|---|
GET /api/users/list | GET /api/v3/users | Use pagination parameters |
POST /api/users/create | POST /api/v3/users | RESTful convention |
GET /api/search | GET /api/v3/search | Now supports advanced filters |
β¨ New Features
Webhook Support
Subscribe to real-time events:
POST /api/v3/webhooks
Content-Type: application/json
{
"url": "https://your-app.com/webhook",
"events": ["user.created", "user.updated", "user.deleted"],
"secret": "your-webhook-secret"
}
Webhook Payload:
{
"event": "user.created",
"timestamp": "2025-01-15T14:30:00Z",
"data": {
"id": "123",
"type": "user",
"attributes": {
"name": "John Doe",
"email": "[email protected]"
}
}
}
Documentation: Webhook Guide
Batch Operations
Process multiple records in a single request:
POST /api/v3/users/batch
Content-Type: application/json
{
"operations": [
{
"method": "POST",
"path": "/users",
"body": { "name": "User 1", "email": "[email protected]" }
},
{
"method": "PATCH",
"path": "/users/123",
"body": { "name": "Updated Name" }
},
{
"method": "DELETE",
"path": "/users/456"
}
]
}
Response:
{
"results": [
{ "status": 201, "data": { "id": "789", ... } },
{ "status": 200, "data": { "id": "123", ... } },
{ "status": 204 }
]
}
Limits: Maximum 100 operations per batch request
Field Filtering
Request only the fields you need:
GET /api/v3/users/123?fields=id,name,email
Before (full response):
{
"data": {
"id": "123",
"type": "user",
"attributes": {
"name": "John Doe",
"email": "[email protected]",
"phone": "+1234567890",
"address": { "street": "123 Main St", "city": "NYC" },
"preferences": { /* ... */ },
"metadata": { /* ... */ }
// ... many more fields
}
}
}
After (filtered response):
{
"data": {
"id": "123",
"type": "user",
"attributes": {
"name": "John Doe",
"email": "[email protected]"
}
}
}
Benefits:
- Reduced response size (up to 80% smaller)
- Faster response times
- Lower bandwidth usage
π§ Improvements
Performance Enhancements
- 50% faster response times for list endpoints
- Database query optimization reducing average query time from 150ms to 50ms
- Caching layer added for frequently accessed resources
- CDN integration for static assets
Benchmark Comparison:
| Endpoint | v2 (avg) | v3 (avg) | Improvement |
|---|---|---|---|
| GET /users | 320ms | 140ms | 56% faster |
| GET /users/{id} | 180ms | 60ms | 67% faster |
| POST /users | 250ms | 120ms | 52% faster |
Better Error Messages
Before (v2):
{
"error": "Validation failed"
}
After (v3):
{
"errors": [
{
"code": "VALIDATION_ERROR",
"field": "email",
"message": "Email format is invalid",
"suggestion": "Use format: [email protected]"
},
{
"code": "VALIDATION_ERROR",
"field": "password",
"message": "Password too weak",
"suggestion": "Password must be at least 8 characters with uppercase, lowercase, and numbers"
}
]
}
Enhanced Rate Limiting
New rate limit headers in every response:
HTTP/1.1 200 OK
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 950
X-RateLimit-Reset: 1642694400
X-RateLimit-Window: 3600
Retry-After: 3600
Rate Limits by Plan:
| Plan | Requests/Hour | Burst | Reset |
|---|---|---|---|
| Free | 100 | 10/min | 1 hour |
| Pro | 1,000 | 50/min | 1 hour |
| Enterprise | 10,000 | 200/min | 1 hour |
π Security
- TLS 1.3 Required: Dropped support for TLS 1.2
- JWT Expiry: Tokens now expire after 1 hour (was 24 hours)
- Rate Limiting: Stricter limits on authentication endpoints
- CORS: Updated allowed origins (see security policy)
- Input Validation: Enhanced validation on all endpoints
ποΈ Deprecated
Deprecation Schedule
| Feature | Deprecated | Removal Date | Replacement |
|---|---|---|---|
| API Token Auth | v3.0.0 | 2025-06-01 | JWT Bearer tokens |
| XML Response Format | v3.0.0 | 2025-04-01 | JSON only |
/api/v1/* endpoints | v3.0.0 | 2025-03-01 | /api/v3/* |
Query param filter | v3.0.0 | 2025-05-01 | Use filters[field]=value |
Deprecation Warnings:
All deprecated features return a warning header:
HTTP/1.1 200 OK
Deprecation: true
Sunset: Sat, 01 Jun 2025 00:00:00 GMT
Link: <https://docs.example.com/migration/v2-to-v3>; rel="deprecation"
π Version Support Policy
| Version | Status | Release Date | End of Support |
|---|---|---|---|
| v3.x | Current | 2025-01-15 | TBD |
| v2.x | Maintenance | 2024-01-01 | 2025-07-01 |
| v1.x | End of Life | 2023-01-01 | 2024-12-31 |
Support Levels:
- Current: Full support, new features
- Maintenance: Bug fixes and security patches only
- End of Life: No support, upgrade required
Migration Guide: v2 β v3
Step 1: Update Base URL
// Before
const API_BASE = 'https://api.example.com/api';
// After
const API_BASE = 'https://api.example.com/api/v3';
Step 2: Migrate Authentication
// Before (v2) - API Token
const response = await fetch(`${API_BASE}/users`, {
headers: {
'Authorization': `Token ${apiToken}`
}
});
// After (v3) - JWT Bearer
const tokenResponse = await fetch(`${API_BASE}/auth/login`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email, password })
});
const { token } = await tokenResponse.json();
const response = await fetch(`${API_BASE}/users`, {
headers: {
'Authorization': `Bearer ${token}`
}
});
Step 3: Update Response Parsing
// Before (v2)
const user = await response.json();
console.log(user.name);
// After (v3) - Unwrap data object
const { data } = await response.json();
console.log(data.attributes.name);
// Or use SDK
import { ApiClient } from '@company/api-sdk';
const client = new ApiClient(token);
const user = await client.users.get('123');
console.log(user.name); // SDK handles unwrapping
Step 4: Update Error Handling
// Before (v2)
try {
const response = await fetch(`${API_BASE}/users`);
if (!response.ok) {
const error = await response.json();
console.error(error.error);
}
} catch (error) {
console.error(error);
}
// After (v3) - Handle multiple errors
try {
const response = await fetch(`${API_BASE}/users`);
if (!response.ok) {
const { errors } = await response.json();
errors.forEach(err => {
console.error(`${err.field}: ${err.message}`);
console.log(`Suggestion: ${err.suggestion}`);
});
}
} catch (error) {
console.error(error);
}
Step 5: Update Pagination
// Before (v2)
const response = await fetch(`${API_BASE}/users?page=1&per_page=20`);
// After (v3)
const response = await fetch(`${API_BASE}/users?page[number]=1&page[size]=20`);
// Response structure
{
"data": [...],
"meta": {
"page": {
"current": 1,
"size": 20,
"total": 150,
"totalPages": 8
}
},
"links": {
"first": "/api/v3/users?page[number]=1",
"last": "/api/v3/users?page[number]=8",
"next": "/api/v3/users?page[number]=2",
"prev": null
}
}
Step 6: Testing
// Run tests against v3 API
npm run test:api -- --api-version=v3
// Test migration gradually
const USE_V3 = process.env.USE_API_V3 === 'true';
const API_BASE = USE_V3
? 'https://api.example.com/api/v3'
: 'https://api.example.com/api/v2';
Version Comparison
Feature Matrix
| Feature | v1 | v2 | v3 |
|---|---|---|---|
| REST API | β | β | β |
| GraphQL | β | β | β |
| Webhooks | β | β | β |
| Batch Operations | β | β | β |
| Field Filtering | β | β | β |
| JSON:API Format | β | β | β |
| JWT Auth | β | β | β |
| API Token Auth | β | β | β οΈ Deprecated |
| XML Responses | β | β οΈ Deprecated | β |
Legend: β Supported | β Not Available | β οΈ Deprecated
SDK Updates
Update to the latest SDK version:
# JavaScript/TypeScript
npm install @company/api-sdk@^3.0.0
# Python
pip install company-api-sdk>=3.0.0
# Ruby
gem install company-api-sdk -v '~> 3.0'
# Go
go get github.com/company/api-sdk/v3
SDK Changelog: SDK Releases
Support & Resources
- Migration Support: [email protected]
- Documentation: https://docs.example.com/v3
- API Status: https://status.example.com
- Community Forum: https://community.example.com
- GitHub Issues: https://github.com/company/api/issues
## Best Practices
### β
DO
- Clearly mark breaking changes
- Provide migration guides with code examples
- Include before/after comparisons
- Document deprecation timelines
- Show impact on existing implementations
- Provide SDKs for major versions
- Use semantic versioning
- Give advance notice (3-6 months)
- Maintain backward compatibility when possible
- Document version support policy
### β DON'T
- Make breaking changes without notice
- Remove endpoints without deprecation period
- Skip migration examples
- Forget to version your API
- Change behavior without documentation
- Rush deprecations
## Resources
- [Stripe API Versioning](https://stripe.com/docs/api/versioning)
- [GitHub API Changes](https://docs.github.com/en/rest/overview/api-versions)
- [Semantic Versioning](https://semver.org/)
- [JSON:API Specification](https://jsonapi.org/)
Quick Install
/plugin add https://github.com/aj-geddes/useful-ai-prompts/tree/main/api-changelog-versioningCopy and paste this command in Claude Code to install this skill
GitHub δ»εΊ
Related Skills
evaluating-llms-harness
TestingThis Claude Skill runs the lm-evaluation-harness to benchmark LLMs across 60+ standardized academic tasks like MMLU and GSM8K. It's designed for developers to compare model quality, track training progress, or report academic results. The tool supports various backends including HuggingFace and vLLM models.
langchain
MetaLangChain is a framework for building LLM applications using agents, chains, and RAG pipelines. It supports multiple LLM providers, offers 500+ integrations, and includes features like tool calling and memory management. Use it for rapid prototyping and deploying production systems like chatbots, autonomous agents, and question-answering services.
Algorithmic Art Generation
MetaThis skill helps developers create algorithmic art using p5.js, focusing on generative art, computational aesthetics, and interactive visualizations. It automatically activates for topics like "generative art" or "p5.js visualization" and guides you through creating unique algorithms with features like seeded randomness, flow fields, and particle systems. Use it when you need to build reproducible, code-driven artistic patterns.
webapp-testing
TestingThis Claude Skill provides a Playwright-based toolkit for testing local web applications through Python scripts. It enables frontend verification, UI debugging, screenshot capture, and log viewing while managing server lifecycles. Use it for browser automation tasks but run scripts directly rather than reading their source code to avoid context pollution.
