Skip to content
Dashboard

Update a changelog

client.changelogs.update(stringid, ChangelogUpdateParams { allowedSegmentIds, categories, date, 6 more } params, RequestOptionsoptions?): Changelog { id, allowedSegmentIds, availableLocales, 21 more }
PATCH/v2/changelogs/{id}

Updates an existing changelog by its unique identifier.

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
  • 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 "" 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
ParametersExpand Collapse
id: string

Changelog unique identifier

params: ChangelogUpdateParams { allowedSegmentIds, categories, date, 6 more }
allowedSegmentIds?: Array<string>

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

categories?: Array<string>

Body param: An array of category names to which the changelog belongs

date?: string | null

Body param: The date of the changelog

featuredImage?: string

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

htmlContent?: string

Body param: 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.

markdownContent?: string

Body param: 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.

title?: string

Body param: The title of the changelog

minLength1
maxLength512
translations?: Translations

Body param: 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.

id?: ID { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
am?: Am { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
ar?: Ar { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
az?: Az { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
bg?: Bg { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
bn?: Bn { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
bs?: Bs { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
ca?: Ca { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
cs?: Cs { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
da?: Da { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
de?: De { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
el?: El { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
en?: En { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
es?: Es { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
et?: Et { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
fa?: Fa { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
fi?: Fi { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
fr?: Fr { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
gu?: Gu { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
ha?: Ha { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
he?: He { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
hi?: Hi { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
hr?: Hr { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
ht?: Ht { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
hu?: Hu { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
ig?: Ig { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
it?: It { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
ja?: Ja { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
jv?: Jv { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
kk?: Kk { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
km?: Km { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
kn?: Kn { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
ko?: Ko { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
lo?: Lo { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
lt?: Lt { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
lv?: Lv { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
ml?: Ml { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
mn?: Mn { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
mr?: Mr { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
ms?: Ms { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
my?: My { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
nb?: Nb { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
ne?: Ne { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
nl?: Nl { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
pa?: Pa { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
pl?: Pl { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
ps?: Ps { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
pt?: Pt { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
"pt-BR"?: PtBr { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
ro?: Ro { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
ru?: Ru { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
sd?: Sd { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
si?: Si { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
sk?: Sk { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
sl?: Sl { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
so?: So { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
sr?: Sr { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
sv?: Sv { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
sw?: Sw { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
ta?: Ta { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
te?: Te { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
th?: Th { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
tl?: Tl { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
tr?: Tr { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
uk?: Uk { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
ur?: Ur { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
uz?: Uz { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
vi?: Vi { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
yo?: Yo { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
"zh-CN"?: ZhCn { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
"zh-TW"?: ZhTw { featuredImage, htmlContent, markdownContent, title }
featuredImage?: string
htmlContent?: string
markdownContent?: string
title?: string
minLength1
maxLength512
featurebaseVersion?: "2026-08-19.orbit" | "2026-01-01.nova" | "2025-12-12.clover"

Header param: API version for this request. Defaults to your organization’s configured API version if not specified.

One of the following:
"2026-08-19.orbit"
"2026-01-01.nova"
"2025-12-12.clover"
ReturnsExpand Collapse
Changelog { id, allowedSegmentIds, availableLocales, 21 more }
id: string

Unique identifier

allowedSegmentIds: Array<string>

Segment IDs that are allowed to view this changelog

availableLocales: Array<string>

Array of locale codes where the changelog has content

categories: Array<Category>

Categories the changelog belongs to

id: string

Category unique identifier

name: string

Category name

roles?: Array<string>

Roles allowed to view this category

commentCount: number

Number of comments

content: string

Content in HTML format

createdAt: string

ISO 8601 timestamp when created

date: string

Publication date as ISO 8601 timestamp

emailSentToSubscribers: boolean

Whether email notification was sent to subscribers

featuredImage: string | null

Featured image URL

isDraftDiffersFromLive: boolean

Whether the draft content differs from the published live content

isPublished: boolean

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

locale: "ar" | "am" | "fa" | 68 more

Locale of the changelog

One of the following:
"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"
markdownContent: string | null

Content in markdown format

notifications: Record<string, Notifications>

Notification settings for each locale

scheduledDate: string | null

Scheduled publication date as ISO 8601 timestamp

emailSent?: boolean

Whether the email notification has been sent

hideFromBoardAndWidgets?: boolean

Whether the changelog is hidden from the board and widgets

sendEmailNotification?: boolean

Whether email notification should be sent for this locale

object: "changelog"

Object type identifier

organization: string

Organization identifier

publishedLocales: Array<string>

Array of locale codes where the changelog is published

slug: string

URL-friendly slug

slugs: Record<string, string>

URL-friendly slugs for each locale

state: "live" | "draft"

State of the changelog

One of the following:
"live"
"draft"
title: string

Changelog title

updatedAt: string

ISO 8601 timestamp when updated

url: string

Public URL to view the changelog

Update a changelog

import Featurebase from 'featurebase-node';

const client = new Featurebase({
  apiKey: process.env['FEATUREBASE_API_KEY'], // This is the default and can be omitted
});

const changelog = await client.changelogs.update('507f1f77bcf86cd799439011');

console.log(changelog.id);
{
  "id": "6457e3ff70afca5d8c27dccc",
  "allowedSegmentIds": [
    "string"
  ],
  "availableLocales": [
    "en",
    "de",
    "fr"
  ],
  "categories": [
    {
      "id": "6438a1efda3640f8feb72121",
      "name": "New Features",
      "roles": [
        "string"
      ]
    }
  ],
  "commentCount": 2,
  "content": "<p>Your changelog content in HTML format.</p>",
  "createdAt": "2023-12-12T00:00:00.000Z",
  "date": "2023-05-07T12:59:59.000Z",
  "emailSentToSubscribers": true,
  "featuredImage": "https://cdn.example.com/images/feature.png",
  "isDraftDiffersFromLive": false,
  "isPublished": true,
  "locale": "en",
  "markdownContent": "Your changelog content in markdown format.",
  "notifications": {
    "foo": {
      "scheduledDate": "2024-01-15T12:00:00.000Z",
      "emailSent": true,
      "hideFromBoardAndWidgets": false,
      "sendEmailNotification": true
    }
  },
  "object": "changelog",
  "organization": "myorg",
  "publishedLocales": [
    "en",
    "de"
  ],
  "slug": "your-awesome-changelog",
  "slugs": {
    "en": "your-awesome-changelog",
    "de": "dein-tolles-changelog"
  },
  "state": "live",
  "title": "Your awesome changelog!",
  "updatedAt": "2023-12-13T00:00:00.000Z",
  "url": "https://myorg.featurebase.app/en/changelog/your-awesome-changelog"
}
Returns Examples
{
  "id": "6457e3ff70afca5d8c27dccc",
  "allowedSegmentIds": [
    "string"
  ],
  "availableLocales": [
    "en",
    "de",
    "fr"
  ],
  "categories": [
    {
      "id": "6438a1efda3640f8feb72121",
      "name": "New Features",
      "roles": [
        "string"
      ]
    }
  ],
  "commentCount": 2,
  "content": "<p>Your changelog content in HTML format.</p>",
  "createdAt": "2023-12-12T00:00:00.000Z",
  "date": "2023-05-07T12:59:59.000Z",
  "emailSentToSubscribers": true,
  "featuredImage": "https://cdn.example.com/images/feature.png",
  "isDraftDiffersFromLive": false,
  "isPublished": true,
  "locale": "en",
  "markdownContent": "Your changelog content in markdown format.",
  "notifications": {
    "foo": {
      "scheduledDate": "2024-01-15T12:00:00.000Z",
      "emailSent": true,
      "hideFromBoardAndWidgets": false,
      "sendEmailNotification": true
    }
  },
  "object": "changelog",
  "organization": "myorg",
  "publishedLocales": [
    "en",
    "de"
  ],
  "slug": "your-awesome-changelog",
  "slugs": {
    "en": "your-awesome-changelog",
    "de": "dein-tolles-changelog"
  },
  "state": "live",
  "title": "Your awesome changelog!",
  "updatedAt": "2023-12-13T00:00:00.000Z",
  "url": "https://myorg.featurebase.app/en/changelog/your-awesome-changelog"
}