Versioning & Deprecation Policy¶
Argus SBOM Guard's REST API is versioned and its public contract is frozen for the current major version. This page describes how versions are chosen, what is guaranteed to stay stable, and how endpoints are deprecated and removed.
Versioning¶
The API uses a URI path prefix for the major version:
- The major version lives in the path (
v1). A breaking change ships as a new major version (/api/v2/...), never as a silent change tov1. - The application version (
app/VERSION.md, reported ininfo.versionof the OpenAPI schema and inGET /healthz) follows SemVer. The API major version is independent from the application minor/patch —v1is stable across application releases.
Stability Guarantees¶
For the current major version (v1):
- Existing endpoints, their HTTP methods, and their response shapes will not change in a breaking way.
- New functionality is additive only: new endpoints, new optional request fields, and new optional response fields may be introduced. Response objects never have fields removed or re-typed.
GETendpoints remain side-effect free.
This is what "frozen contract" means for /api/v1.
Deprecation Policy¶
Before an endpoint is removed, it goes through a deprecation period. A deprecated endpoint:
- Is marked
deprecated: truein the OpenAPI schema. - Emits a
Deprecationresponse header (RFC 8594) with the date after which the endpoint will be removed. - Continues to work unchanged until the end of the deprecation period.
Removal happens only in a new major version. Within the current major version, deprecated endpoints are kept functional and backward compatible.
| Phase | Signal | Minimum duration |
|---|---|---|
| Active | — | — |
| Deprecated | deprecated: true + Deprecation header |
≥ one minor application release |
| Removed | 410/404 in the next major version | — |
OpenAPI Schema¶
The machine-readable contract for the current version is published at:
Browse it at /api/docs (ReDoc). A static copy is committed at
openapi.json for offline browsing. The schema's
info.version reflects the application version that generated it. The canonical
schema is always generated from the running application — regenerate the
committed copy with scripts/generate_openapi.sh whenever the API changes.