Skip to main content
Changelogs

Update a changelog

Updates an existing changelog by its unique identifier.

PATCH
/v2/changelogs/{id}

You can update:

  • title - The changelog title
  • htmlContent - HTML content (one of htmlContent or markdownContent)
  • markdownContent - Markdown content (one of htmlContent or markdownContent)
  • categories - Array of category names
  • featuredImage - Featured image URL
  • allowedSegmentIds - Segment IDs for access control. Accepts user segment ids and company segment ids (a company segment means "people with a company in the segment"). Ids already stored on the changelog pass through; a NEW id that is unknown or deleted is rejected with 400.
  • date - The date of the changelog

Content Format

Provide content in one of two formats:

  • htmlContent - HTML content of the changelog
  • markdownContent - Markdown content of the changelog

Note: For images in content, you can use:

  • External URLs in img src attributes (automatically uploaded to our storage)
  • Base64 encoded data URIs (data:image/...) which are processed and stored

Categories

Provide category names as an array. The categories must already exist in your organization.

Example: ["New", "Fixed", "Improved"]

Response

Returns the updated changelog object with all fields populated.

Batched translations (Orbit only)

In API version 2026-08-19.orbit, optional translations accepts multiple locale-keyed draft updates. Each entry accepts title, htmlContent or markdownContent (not both), and featuredImage. New translations require title and nonempty content; existing translations preserve omitted fields. Supplied top-level content must also be nonempty for nonempty batches. Every listed locale must be enabled for the organization's changelogs, including existing translations and the primary-locale entry. Top-level localized fields target the organization default locale and override corresponding dictionary fields. HTML/Markdown are one content field: a top-level format replaces the entry's content input. Categories, segments and date remain top-level. The complete batch and global changes are saved together only after validation and content processing succeed. The response is the current organization default draft with draft availableLocales, not a translations dictionary. If that draft is absent, return the first edited locale in alphabetical order; if all entries are no-ops, return the first listed draft in alphabetical order. The response locale identifies the selected draft. Publication remains separate. Omitted or empty dictionaries retain existing behavior. An empty existing-locale entry is a no-op; an empty new-locale entry fails completeness validation. Completed uploads are not rolled back on failure. Existing legacy update/publication overwrite races are unchanged. Changing the organization default does not require creating its draft when updating other explicitly listed locales. Top-level localized fields still target the current default, and require title and content if creating that draft. Disabled locales return 400 invalid_parameter, parameter locale: Locale "<locale>" is not enabled for this organization's changelogs.

Errors

  • 400 - Invalid changelog ID format or invalid input
  • 404 - Changelog not found or doesn't belong to your organization
Authorizationstringheaderrequired

API key as Bearer token. Use: Authorization: Bearer sk_...

idstringrequired

Changelog unique identifier

Example: 507f1f77bcf86cd799439011
Featurebase-Versionenum<string>header

API version for this request. Defaults to your organization's configured API version if not specified.

Available options: 2026-08-19.orbit, 2026-01-01.nova, 2025-12-12.clover
Example: 2026-08-19.orbit

Body

application/json
allowedSegmentIdsstring[]

An array of segment IDs that are allowed to view the changelog

Maximum array length: 100
categoriesstring[]

An array of category names to which the changelog belongs

Maximum array length: 100
datestring | null

The date of the changelog

Example: 2024-01-15

The URL of the featured image for the changelog. External URLs will be uploaded to our storage.

Example: https://example.com/image.png
htmlContentstring

HTML content of the changelog. Provide either htmlContent or markdownContent. Supports Featurebase custom blocks (callouts, multi-code, accordions, columns, file/image/video, iframes) — see the Content Components guide. External image URLs and base64 data URIs are uploaded to our storage automatically.

Example: <p>Updated features to explore.</p>
markdownContentstring

Markdown content of the changelog (CommonMark + GFM). Provide either htmlContent or markdownContent. Markdown is converted to plain HTML — to use Featurebase custom blocks (callouts, multi-code, accordions, columns) send htmlContent instead. See the Content Components guide.

Example: Updated features to explore.
titlestring

The title of the changelog

Required string length: 1 - 512
Example: Updated Features Release
translationsobject

Locale-keyed draft updates. Every listed locale must be enabled for the organization. New translations require title and nonempty htmlContent or markdownContent; existing translations preserve omitted fields. Do not combine content formats within an entry. For nonempty batches, supplied top-level content must also be nonempty. Top-level localized fields override the primary-locale entry (HTML/Markdown are one content field). An empty dictionary uses the existing flow; an empty existing-locale entry is a no-op. Nonempty batches are saved together and return the primary draft with draft availableLocales. On PATCH, if the current organization default draft is absent, return the first edited locale in alphabetical order; for an all-no-op batch, return the first listed draft in alphabetical order. The response locale identifies the selected draft. Publication is separate. Uploaded assets are not rolled back on failure.

Response

application/json

Success

allowedSegmentIdsstring[]required

Segment IDs that are allowed to view this changelog

availableLocalesstring[]required

Array of locale codes where the changelog has content

categoriesobject[]required

Categories the changelog belongs to

commentCountnumberrequired

Number of comments

Example: 2
contentstringrequired

Content in HTML format

Example: <p>Your changelog content in HTML format.</p>
createdAtstringrequired

ISO 8601 timestamp when created

Example: 2023-12-12T00:00:00.000Z
datestringrequired

Publication date as ISO 8601 timestamp

Example: 2023-05-07T12:59:59.000Z
emailSentToSubscribersbooleanrequired

Whether email notification was sent to subscribers

Example: true

Featured image URL

Example: https://cdn.example.com/images/feature.png
idstringrequired

Unique identifier

Example: 6457e3ff70afca5d8c27dccc
isDraftDiffersFromLivebooleanrequired

Whether the draft content differs from the published live content

Example: false
isPublishedbooleanrequired

Whether the changelog is published (has a live version) in this locale

Example: true
localeenum<string>required

Locale of the changelog

Available options: ar, am, fa, ht, lo, my, pa, ps, so, tl, ur, he, ta, te, mr, gu, kn, ml, ha, jv, yo, ig, uz, ne, sd, az, si, km, kk, bn, bs, pt-BR, bg, ca, hr, cs, da, nl, en, et, fi, fr, de, el, hi, hu, id, it, ja, ko, lv, lt, ms, mn, nb, pl, pt, ro, ru, sr, zh-CN, sk, sl, es, sw, sv, th, zh-TW, tr, uk, vi
Example: en
markdownContentstring | nullrequired

Content in markdown format

Example: Your changelog content in markdown format.
notificationsobjectrequired

Notification settings for each locale

objectenum<string>required

Object type identifier

Available options: changelog
Example: changelog
organizationstringrequired

Organization identifier

Example: myorg
publishedLocalesstring[]required

Array of locale codes where the changelog is published

slugstringrequired

URL-friendly slug

Example: your-awesome-changelog
slugsobjectrequired

URL-friendly slugs for each locale

stateenum<string>required

State of the changelog

Available options: live, draft
Example: live
titlestringrequired

Changelog title

Example: Your awesome changelog!
updatedAtstringrequired

ISO 8601 timestamp when updated

Example: 2023-12-13T00:00:00.000Z
urlstringrequired

Public URL to view the changelog

Example: https://myorg.featurebase.app/en/changelog/your-awesome-changelog