Update a changelog
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 changelogmarkdownContent- 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 "
Errors
400- Invalid changelog ID format or invalid input404- Changelog not found or doesn’t belong to your organization
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"
}