Versioning and stability
What may change inside v1, what may not, and where every change is written down.
What v1 means
The /v1/ in every path and contractVersion: "1" in every response name the shape of the contract. Within v1 an integration that works today keeps getting the same answer to the same request — the same keys in the same order, the same headers, the same error codes and statuses.
What may change within v1
- A new endpoint.
- A new optional request field, a new
includetoken or another new accepted value in a request. - A new response field that appears only when the request asks for it, or only in a case that did not exist before.
- A new header, or a new key inside
details— treat unknown keys as informational. - Wording:
messageandwarningsare for people. Branch onerror,unplaced,guillotineValidand the metrics.
What does not ship within v1
A breaking change: a removed endpoint, field or enum value; a request validated more strictly (a field that becomes required, a narrower type, a tighter limit); a response that can carry a value it could not before (a wider type, a field that is no longer always sent). The OpenAPI document is recorded on every change, and our build refuses a change of this kind.
Fixes are the exception the changelog names: when the server already behaved one way and the document said another, the document is corrected to the behaviour.
Deprecation
A deprecated field is marked deprecated: true in the OpenAPI document, says what replaces it, and keeps working within v1. No removal date is set today.
Deprecated now: Part2D.grainGroup.
Better plans are not a new version
The engines are deterministic, but they improve. When an algorithm changes, the same request can return a better plan and engineVersion changes with it — the shape stays the same. To pin behaviour, send engine explicitly and watch engineVersion; see engines and determinism.
Where changes are written down
Every change to the document has a dated entry in the API changelog (also as RSS), under Added, Changed, Deprecated or Fixed. The current document is always at /engine/openapi.json.