Versioning & deprecation
The /v1 compatibility policy, deprecation windows, and sunset headers.
Backfill’s public REST API version is the path prefix: /v1.
The OpenAPI info.version describes the generated specification package. It
is not a request negotiation mechanism and should not be used to select
behavior.
Compatibility rules
Non-breaking changes may ship within /v1:
- New endpoints.
- New optional request fields.
- New response fields.
- New list filters or sort options.
- More specific validation errors for requests that were already invalid.
- New event types for outbound webhooks.
Breaking changes require either a new API version or an explicit compatibility window:
- Removing or renaming response fields.
- Changing a field type.
- Changing the response envelope for an existing endpoint.
- Removing enum values or making optional request fields required.
- Changing idempotency, auth, tenant isolation, or scope semantics in a way that can reject previously valid requests.
Enum additions are usually additive, but clients with exhaustive enum handling should treat unknown values as forward-compatible.
Deprecation headers
Deprecated endpoints, fields, aliases, or response shapes include these headers whenever the deprecation can be detected at response time:
Deprecation: true
Sunset: Wed, 30 Sep 2026 00:00:00 GMT
Link: <https://backfill.io/changelog#2026-07-02>; rel="deprecation"
Policy:
- Default deprecation window: at least 90 days.
- Widely used endpoints or envelope changes: target at least 180 days.
- Security, legal, or data integrity fixes may have a shorter window or no window when continuing compatibility would be unsafe.
When a deprecated alias remains available — for example
POST /v1/invoices/{id}/confirm, the legacy alias for
POST /v1/invoices/{id}/mark_paid — responses, docs, and the OpenAPI
reference prefer the replacement.
Future versions
The next breaking API version will use a new path prefix such as /v2. If a
header-based preview or compatibility mode is introduced before /v2, it
will be documented here and in the changelog before clients are asked to
depend on it.