Create a changelog
Creates a changelog (release note). Omit state or use state: "draft" to save a draft. Use state: "live" to publish it in the same request, without notification emails.
For imports, provide date to preserve the original publication date. Live creation uses the normal publishing flow, and emits the existing changelog.published webhook. To publish an existing draft, schedule publication or request notification emails, use POST /v2/outbound/changelogs/{id}/publish.
Supply translations to create multiple languages in one request. Each key is an enabled locale; each new entry needs title and nonempty htmlContent or markdownContent. Top-level title and content are still required and override the primary-locale entry. With state: "live", all created translations publish without notification emails. Media limits apply across all languages: 100 items, 15 MB per image and 50 MB total imported images. Uploaded assets are not rolled back if a later step fails.
Live creation requires an enabled changelog locale. Every allowedSegmentId must exist in your organization; invalid IDs are rejected rather than removed. If publication fails after creation, inspect the Changelog at the response's Location header before retrying publication. Do not repeat the create request. The response includes x-should-retry: false to prevent automatic SDK retries after creation.
Required Fields
title- The title of the Changelog
Content
Provide content in one of two formats (at least one is required):
htmlContent- HTML content, including Featurebase custom blocksmarkdownContent- Markdown content
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
Optional Fields
categories- Array of category names (e.g., ["New", "Fixed", "Improved"]). Categories must already existfeaturedImage- URL of the featured image (external URLs are uploaded to our storage)allowedSegmentIds- Array of segment IDs that are allowed to view the Changelog. Accepts user segment ids and company segment ids (a company segment means "people with a company in the segment"). Every id must be a segment of your organization: an unknown or deleted id is rejected with400.locale- The locale of the Changelog (defaults to the organization default)date- The date of the Changelogstate-draft(default) orlive. Live creation publishes immediately without notification emails
Response
Returns the created Changelog object with object: "changelog".
Errors
400- Invalid or missing fields404- A category name does not exist in your organization
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.
Body
Featured image URL for the changelog. External images are uploaded to Featurebase storage.
https://example.com/image.pngHTML content of the changelog. Provide either htmlContent or markdownContent. Featurebase custom blocks and external image uploads are supported.
<p>Exciting new features to explore.</p>Optional retry protection. Retrying with the same key and request returns the first result (for 7 days) instead of creating a copy. The same key with another request answers 409 idempotency_conflict.
8 - 128^[a-zA-Z0-9_.:-]+$create-onboarding-2026-11-05The changelog locale. Defaults to the organization default locale.
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, vienMarkdown content of the changelog. Provide either htmlContent or markdownContent.
Exciting new features to explore.Create a draft (default) or publish immediately with live. Live creation preserves the supplied date and does not send notification emails.
draft, liveliveThe title of the changelog
1 - 512New Features changelogLocale-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
Created
Whether email notification was sent to subscribers
trueFeatured image URL
https://cdn.example.com/images/feature.pngWhether the draft content differs from the published live content
falseWhether the changelog is published (has a live version) in this locale
trueLocale of the changelog
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, vienContent in markdown format
Your changelog content in markdown format.