Decision guide
URL vs Header vs Date-Based API Versioning
How should you version an API when breaking changes are unavoidable?
Side by side
| Criterion | URL major version | Header / query version | Date-pinned per account | No versioning (evolution) |
|---|---|---|---|---|
| Visibility to developers | High | Medium | Medium | N/A |
| Granularity of change | Coarse (majors) | Per release | Fine (per change) | Per field |
| Server complexity | Parallel code/infra | Routing by header | Version transformers | Lowest |
| Caching | Easy | Needs Vary | Server-side | Easy |
| Upgrade pressure on clients | Big migrations | Moderate | Gradual, per account | Continuous |
| Examples | Many public APIs | Azure, GitHub | Stripe | GraphQL APIs |
When to choose each
URL major version
/v1/orders, /v2/orders.
Choose when
- Public APIs that value visibility and simplicity
- Rare, large breaking changes
Avoid when
- Frequent small breaking changes
- You can't afford parallel stacks
Header / query version
api-version=2026-10-01 or X-Api-Version header.
Choose when
- Stable URLs with many API versions
- Platform-wide release trains
Avoid when
- Clients/tools that can't set headers easily
- CDN caching without Vary
Date-pinned per account
Each account pinned to the version at signup; requests may override (Stripe).
Choose when
- Frequent small breaking changes
- Large customer base upgrading at its own pace
Avoid when
- Small teams (needs transformation layers and tooling)
No versioning (evolution)
Only additive changes; deprecate and sunset old fields.
Choose when
- GraphQL APIs
- Internal APIs with known consumers
- Strong tolerant-reader clients
Avoid when
- Unavoidable semantic changes for external consumers
Verdict
First try not to version: additive changes, tolerant readers, deprecation with Sunset headers. When you must, pick one strategy per API platform. URL majors are simplest; date-pinned versions are the gold standard for large public APIs but need serious investment.
Learn more
- API Platform & Lifecycle
- REST APIs in Depth
- API Design
- Version a FastAPI API without breaking clients (FastAPI)