Changelog
Subscribe (RSS)Everything we’ve shipped, newest first.
Translated labels: collections, categories, the space name, the intro and the chrome
2026.10.14-api-translated-labelsOne translations map for every label around your content. The map has the shape { "<locale>": { … } }. A reader sees an entry when the page's language or their interface language matches it. A missing language or field shows the original. See Translated labels. Collections: trans…
Read releaseBlog posts and forum topics have translations. A language declared with POST …/docs/locales now takes effect on a blog or a forum: each post (…/blog/{topicId}/translations/{locale}, blog.author) and each topic (…/forum/{topicId}/translations/{locale}, forum.moderate) takes a tran…
Read releaseEvery language has its own address
2026.10.14-language-pathsA translation used to be the page address plus ?locale=es. Search engines may ignore a query parameter, a CDN may drop it, and you cannot point a search console at it as "the Spanish section". Now every language has its own path, right after the space's address: numestri.com/docs…
Read release- Breaking
Status pages: Statuspage-compatible API v2, a widget, badges and an incident archive
2026.10.14-api-statusPublic status routes below sit under /public/orgs/{orgId}/spaces/{spaceId}/status. A status page also serves each one at its own address (/st/{org}/{space}/… or your domain), with CORS and Cross-Origin-Resource-Policy: cross-origin, so a tool on another origin can read them. summ…
Read release Rename a language, a whole interface from ?lang=, and accented anchors
2026.10.14-reader-languagePATCH /orgs/{orgId}/spaces/{spaceId}/docs/locales/{code} with { "label": "…" } renames a language in the reader's switcher. {code} may be default, which relabels the source language — "Original" until now, with no way to change it. Answers the full locales list, like POST and DEL…
Read releaseOfficial templates for every space type, a section library, and page experiments
2026.10.14-api-templatesEvery space type has official templates. GET /orgs/{orgId}/space-templates now lists official templates for all 13 space types: 80 templates, up from 30. Status, events, roadmap, courses, careers, contact, FAQ, legal and custom spaces join docs, blog, forum and changelog. POST /o…
Read releaseReader sign-in: PATCH, same-origin redeem and sign-out, named JWT refusals
2026.10.14-reader-authPATCH …/reader-auth. On the org (/orgs/{orgId}/reader-auth) and on a space override. A deep merge: absent keeps, null deletes, providers are matched by method (plus order when there are two of one method), unmatched providers are added, remove: true drops one, and a provider's co…
Read release- Breaking
Events: private calendars stay private, plus series, agendas, attendees and tickets
2026.10.14-api-eventsPublic events routes now check that the space is public. Before this release, every route under /public/orgs/{orgId}/spaces/{spaceId}/events returned events from any EVENTS space, even a private one. That covered the list, a single event, calendar.ics, the per-event .ics and the…
Read release Courses, careers, contact, FAQ and legal: enrolment, applications, inboxes, follows and editions
2026.10.14-api-typesEnrolment and progress. PUT …/course/enrolment enrols a learner and records their last lesson. POST …/course/progress/merge adds progress a learner made while signed out. GET /orgs/{orgId}/me/courses returns "My learning". The outline carries enrolment, course (instructors, prere…
Read releaseFeeds and scoped subscriptions on every kind of space
2026.10.14-api-feedsOne feed writer, more feeds. RSS, Atom and JSON Feed now come from one writer, so the three formats always agree. Space. Feeds. Narrow with. Changelog. …/changelog/atom.xml (beside rss.xml). ?tag=, ?type=. Status. …/status/atom.xml, …/status/feed.json, …/status/maintenance.ics. ?…
Read releaseTake payments on your own Stripe: event tickets and paid courses
2026.10.14-api-paymentsConnect your org's Stripe. Use GET, PUT and DELETE on /orgs/{orgId}/payments/stripe, and POST …/stripe/test to check the keys. Keys are stored encrypted and are write-only: the API never returns them. Each org has one connection, and both event tickets and paid courses use it. Mo…
Read releasePublishing a translation updates its address immediately. Publishing a page's locale twin now drops every address a reader can ask for it at — ?locale=<code> on the original page's address and the /<code>/<page> path form — from both our web tier and the edge, on your own domains…
Read releaseChangelog and roadmap: filters, widget, import, review, member votes and custom lanes
2026.10.14-api-changelog-roadmapFiltering the public archive. The public changelog list takes these filters: ?type=: the release's declared type (New, Improved, Fixed, Deprecated, Retired, Security). ?channel= and ?breaking=true. ?tag=a,b with ?match=any|all. ?month=YYYY-MM, which wins over ?year. ?family=, and…
Read release- Breaking
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-01. On 2026-11-01, 2026-09-01, or with no version, every behaviour below stays as it was. 2026-1…
Read release Replace a site in one call, and see the diff first
2026.10.14-api-sitesPATCH /orgs/{orgId}/sites/{siteId} deep-merges config, so a key you delete from your own copy stays live until you send null for it. A publisher that keeps its site in a repository had to diff against what we stored to work out the nulls. PUT /orgs/{orgId}/sites/{siteId} stores c…
Read releasepat.secret. POST /pats, POST /pats/{id}/rotate and device-key creation now return the secret on the token object as well as in the top-level token — the same string, on the object you are likely to keep. It is still shown once and never again. description on every space type. GET…
Read releaseEvery paged list answers `data`
2026.10.14-api-listsEach collection names its rows after what they are: a forum answers topics, a blog articles, a status page monitors, documentation pages. That is clear for one endpoint and a guessing game for a client that reads them all — a publisher that read topics off a blog saw an empty lis…
Read releaseMarkdown as data, drafts over the API, one-call ordering, icons and site theme drafts
2026.10.14-api-authoringNew endpoints and parameters. All of them are additive and work on every API version. GET /docs/markdown-dialect — the Markdown dialect the importer understands, as data: every directive, its attributes, and the block each one becomes. Every markdown field in the API reference li…
Read release- Breaking
API version 2026-11-01: paging speaks one spelling
2026.11.01-api2026-11-01 has been live since 7 October. It makes one change, and nothing changes for you until you send the header: Forumulate-Version: 2026-11-01. On 2026-09-01, or with no version, the paging envelope stays as it was. Paging speaks one spelling. page carries hasMore and nextC…
Read release Every documentation page renders again. Reader pages were answering 200 while the browser showed "This page could not be loaded". The reader's Trusted Types policy refused a script URL by throwing, and the throw propagated into rendering, so one unexpected script origin took the…
Read release