Skip to main content
Changelogs

Update a changelog

Updates an existing changelog by its unique identifier. Only the provided fields change.

PATCH
/v2/outbound/changelogs/{id}

Use translations for locale-keyed draft edits. New translations need a title and nonempty HTML or Markdown content. Existing translations preserve omitted fields; an empty existing entry is a no-op. Every listed locale must be enabled. Top-level localized fields override the default-locale entry. All draft changes save together; published content is unchanged until you call publish. Media limits apply across the whole request. Uploaded assets are not rolled back on failure.

For translation batches, the response is the default-locale draft. If absent, it is the first edited draft in alphabetical locale order, or the first listed draft for an all-no-op batch. The response locale identifies it. Use GET with allTranslations=true&state=draft to read all drafts.

You can update:

  • title - The Changelog title
  • htmlContent / markdownContent - Replacement content (one of the two)
  • categories - Array of category names that already exist in your organization
  • 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

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

Response

Returns the updated Changelog object with all fields populated.

Errors

  • 400 - Invalid Changelog ID format or invalid input
  • 404 - Changelog not found, doesn't belong to your organization, or a category name does not exist

Compatibility

Changelogs appear as Updates in the dashboard. Keep using /v2/outbound/changelogs, client.outbound.changelogs, and the changelog.published webhook. This reference describes Pulsar. The original /v2/changelogs routes still work; their behavior follows the selected API version. The Outbound paths require Pulsar or later. In Pulsar, the API key owner needs a full seat and the manage_changelogs permission.

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-09-03.pulsar, 2026-08-19.orbit, 2026-01-01.nova, 2025-12-12.clover
Example: 2026-09-03.pulsar

Body

application/json
allowedSegmentIdsstring[]

Segment IDs that can view the changelog

Maximum array length: 100
categoriesstring[]

Category names for the changelog

Maximum array length: 100
datestring | null

The changelog date

Example: 2024-01-15

Featured image URL for the changelog

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

Replacement HTML content for the changelog. Provide either htmlContent or markdownContent.

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

Replacement Markdown content for the changelog. Provide either htmlContent or markdownContent.

Example: Updated features to explore.
titlestring

The changelog title

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

Locale-keyed draft content. Each locale must be enabled in changelog settings. New translations require title and nonempty htmlContent or markdownContent; existing translations preserve omitted fields. Top-level localized fields override the primary-locale entry. An empty dictionary uses the single-locale flow; an empty existing-locale entry is a no-op. POST still requires top-level title and content. POST with state="live" publishes all supplied translations without notification emails. PATCH edits drafts only. Media limits apply across the whole request.

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