API versioning is not only a routing concern. It is a product and contract concern.
Core approach
- Version only when behavior changes, not for cosmetic refactors.
- Keep old versions stable for a clear deprecation window.
- Publish migration notes for each breaking change.
Delivery checklist
- Add contract tests for all supported versions.
- Track usage per version before removing endpoints.
- Announce deprecations with concrete end-of-life dates.