Skip to content

Versioning and compatibility

SREDSimplify currently uses path-based API versioning.

Current versioned surfaces

SurfaceCurrent versioning shape
Main backend API/api/v1/**
Internal backend APIs/internal/api/v1/**
Python worker API/api/v1/** inside the worker service
Frontend browser path/api/bff/api/v1/* proxied to backend /api/v1/*

Current compatibility posture

Today the repository reflects a single active API generation: v1.

That means:

  • new endpoints should land under /api/v1/** unless a deliberate breaking boundary is introduced
  • existing clients should not assume silent path renames
  • breaking changes should be treated as explicit engineering work, not incidental refactors

What counts as a breaking change

Examples that should trigger deliberate review:

  • removing or renaming an existing endpoint
  • changing required request fields
  • changing authentication requirements on an established route
  • changing response envelope shape in a way that breaks existing clients
  • changing webhook payload assumptions without migration guidance

For cross-service contracts such as Java-to-Python task envelopes, treat breaking changes as architecture-level changes and capture them in an ADR when the boundary meaningfully shifts.

What is documented vs generated

  • Generated Swagger/OpenAPI is the live endpoint inventory
  • These hand-written pages define the expected compatibility posture for humans reading the repo

If the generated docs and the hand-written contract pages disagree, fix the docs in the same change that modifies the API.

Deprecation guidance

There is no separate published deprecation policy document in this repo yet. Until one exists:

  • prefer additive changes over breaking changes
  • keep old routes working while frontend and internal callers migrate
  • document any compatibility caveat in the API docs and changelog
  • update Engineering conventions or add an ADR when the change alters long-lived expectations