← Changelog

Changelog and roadmap: filters, widget, import, review, member votes and custom lanes

2026.10.14-api-changelog-roadmap
The Forumulate team
3 min read
apichangelogroadmap

Changelog

Filtering 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 a version range with ?from= and ?to=.

The answer adds months and the type, channel and breaking facets. A single release (t/{slug}) carries neighbours: previous, next, and ?more=0-10 recent releases.

Releases take more on write. bylines, authorIds, coverUrl, coverAlt, expiresAt (null clears it), and the declared fields type, channel, breaking and ctaUrl. After expiresAt passes, a release leaves the list, the feeds, the widget and the sitemap, and its page answers 410.

Widget. GET /public/…/changelog/widget returns everything the embed needs in one request: config, cards and the announced release. Each card links to the release's own page on your public address. POST …/widget/hit counts opens, and GET /orgs/…/changelog/widget-stats reports them.

Import. POST /orgs/{orgId}/spaces/{spaceId}/changelog/import reads a Keep a Changelog file, GitHub Releases, or a Beamer, Headway or LaunchNotes export (JSON or CSV). It supports dryRun, and running it again imports only what is new. GitHub releases can keep syncing through a release webhook.

Review before publish. /orgs/…/changelog/{releaseId}/review, with /approve and /request-changes. Turn it on with the org setting changelog.require_review or the space setting requireReview. Webhooks: release.review_requested, release.reviewed.

Translations. /orgs/…/changelog/{releaseId}/translations/{locale} stores human translations or machine ones (DeepL, with your own key). Public reads take ?locale=.

The whole changelog as Markdown. GET /public/…/changelog/changelog.md returns the changelog in Keep a Changelog form.

Roadmap

Votes from signed-in members. POST /public/…/roadmap/t/{slug}/vote now counts as the member's vote when the request is signed in, and the board's vote budget and trust weights apply. Without an account, a board that does not take anonymous votes answers 401 "Sign in to vote." (it was 403). Board items and the item read carry voted. GET …/roadmap/votes returns the reader's votes and is never cached. A board can set voteMode: importance, where a vote has a level from 1 to 3; reads carry voteMode and importance.

Custom lanes and grouping. In roadmap settings:

  • roadmapStatuses adds up to 10 custom statuses.

  • roadmapGroupBy (status, target or theme) and horizons change how the board is grouped.

  • publicStatuses lets items in a hidden lane still open by their own link.

GET /public/…/roadmap/lanes returns the board's lanes. ?status= on the board accepts any status the board has; an unknown one answers 422 that lists the valid statuses. Items in a hidden lane that is not public are now private everywhere: the item, its .md, votes, comments, followers, search and RSS. Boards that already had hidden lanes were migrated so those lanes stay public, and nothing that worked before breaks.

Items.

  • GET …/t/{slug}/voters lists named voters; people with hidden profiles or anonymous votes are only counted.

  • Comments support reactions, one level of replies and Markdown.

  • A lane move can carry an official answer (message).

  • The item read adds shippedIn, mergedInto and merged. A changelog release lists the roadmap items it closes.

  • The board read adds tags, themes and filters. The board takes ?sort=top|new|trending, ?tag=, ?mine=1 and ?q=.

  • The public item read no longer exposes internal fields.

Staff tools. …/roadmap/{topicId}/proxy-votes records votes on a customer's behalf; these are never named publicly. Moderators can post whisper comments. POST /orgs/{orgId}/imports/roadmap imports Canny or Featurebase exports. Webhooks: roadmap.status_changed, roadmap.merged, roadmap.shipped.