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 Custom domains: claim, verify, then activate
2026.10.02-domainsMoving an address you already serve onto Forumulate no longer has a moment where neither side answers it. Verification and activation are separate steps. POST …/domains/{domainId}/verify with {"activate": false} proves you own the address without moving any traffic: the domain re…
Read release