Skip to content
Last updated

Versioning

The Dentally NexGen API uses calendar‑versioned, header‑based revisions behind a fixed URL prefix. This lets us roll out non‑breaking and breaking changes side by side while letting clients opt in at their own pace.

How it works

  • The URL carries a fixed major: every operation lives under /v2.

  • The dated revision is selected per request via the Dentally-API-Version header:

    GET /v2/patients
    Dentally-API-Version: 2026-07-01
  • Each dated revision has its own self‑contained OpenAPI document. Once a dated revision ships, its contract is immutable.

  • Multiple revisions are reachable in parallel until a revision is sunset.

Lifecycle

Each version moves through four phases:

PhaseWhenBehaviour
Opt‑inreleased_at → default_fromReachable only with an explicit Dentally-API-Version header. Existing clients are unaffected.
Defaultdefault_from → deprecated_atThe version returned to clients that omit the header.
Deprecateddeprecated_at → sunset_atStill reachable. Lifecycle headers and warnings flow on every response.
Sunset>= sunset_atGateway returns 410 Gone. The backend never sees the request.

Long‑term‑support (LTS) versions follow the same shape with an extended deprecated_at → sunset_at window.

Response headers

Every response echoes the version that handled it:

HeaderWhenMeaning
Dentally-API-Version: <id>alwaysThe version actually used to serve the response.
Warning: 299 - "Dentally-API-Version header missing; defaulted to <id>."header omittedYou were routed to the current default. Pin a version.
Deprecation: @<unix-ts> (RFC 9745)resolved version is deprecatedTimestamp at which the version became deprecated.
Sunset: <http-date> (RFC 8594)resolved version is deprecatedDate the version will be removed.
Link: <…/changelog/<id>>; rel="sunset"resolved version is deprecatedLink to the per‑version changelog.
Warning: 299 - "API version <id> is deprecated and will be removed on <sunset_at>."resolved version is deprecatedHuman‑readable warning.

Resolution rules

You sendServer does
Valid headerRoutes to that version.
No headerRoutes to the current default and adds the Warning: 299 "missing" header.
Unknown versionReturns 400 Bad Request (Problem Details) with a Link to this page.
Sunsetted versionReturns 410 Gone (Problem Details) with a Link rel="sunset" to the changelog.

Recommendations

  • Pin the version your client was built against. Don't rely on the rolling default.
  • Watch the Sunset header in your monitoring and pre‑emptively migrate before it lands.
  • Stay on LTS for long‑lived integrations to maximise the migration window.

For per‑version differences, see the Changelog.