API version 2026-12-01: one rule for every write
2026.12.01-api2026-12-01 is the newest API version. It groups three breaking changes under one date, so you move once. Nothing changes for you until you send the header:
Forumulate-Version: 2026-12-01On 2026-11-01, 2026-09-01, or with no version, every behaviour below stays as it was. 2026-12-01 includes everything in 2026-11-01 (paging carries only hasMore/nextCursor).
Changed — only when you state 2026-12-01 or later
Unknown request fields are refused. If a write includes a body field the operation does not recognise, at the top level or inside a block document in content, the answer is a 422 validation.failed naming its path, and nothing is written. Earlier versions drop the field, answer 200, and name it on X-Unrecognized-Fields. The theme, site and topic-edit writes already refused; now every write does.
A taken page slug is a 409. If you leave onSlugTaken out when creating or renaming a page, a taken slug answers 409 page.slug_taken instead of quietly publishing at slug-2. Send onSlugTaken: "suffix" to keep the rename.
A new public space joins a site only when you say so. POST /orgs/{orgId}/spaces with no siteId leaves the space out of every site. Earlier versions still add a PUBLIC space to the organization's oldest site, and the answer's warnings names that site. Send siteId (or null) to choose explicitly on any version.
Before you switch
If you send back an object you read, strip read-only fields like
idandcreatedAtfirst; with this version they are a 422. Try a single call first: the error lists every field it would refuse.If you relied on automatic slug suffixes or automatic site membership, send
onSlugTaken: "suffix"orsiteId. Both work on every version.
The official SDKs still send 2026-11-01, so nothing changes for SDK users today; they move to 2026-12-01 in a later SDK release, which will say so. To opt in now, set the Forumulate-Version header yourself. The full list of versions is at Versioning.