Skip to content
Dashboard

List all changelogs

client.changelogs.list(ChangelogListParams { id, categories, cursor, 9 more } params?, RequestOptionsoptions?): CursorPage<Changelog { id, allowedSegmentIds, availableLocales, 21 more } >
GET/v2/changelogs

Returns all changelogs for the authenticated organization.

Changelogs are release notes and updates that keep users informed about new features, improvements, and bug fixes. Each changelog can have:

  • Multiple translations (locales)
  • Categories for organization
  • Featured images
  • Scheduled publishing

Pagination

This endpoint uses cursor-based pagination:

  • limit - Number of changelogs to return (1-100, default 10)
  • cursor - Opaque cursor from a previous response’s nextCursor field

Example: To paginate through results:

  1. First request: GET /v2/changelogs?limit=10
  2. If nextCursor is not null, use it for the next page
  3. Next request: GET /v2/changelogs?limit=10&cursor={nextCursor}

Response Format

Returns a list object with:

  • object - Always “list”
  • data - Array of changelog objects
  • nextCursor - Cursor for the next page (null if no more results)

Filtering

Filter changelogs using query parameters:

  • id - Find a specific changelog by ID or slug
  • q - Search query for title/content
  • categories - Filter by category names
  • locale - Get changelogs in a specific locale (defaults to org default)
  • state - Filter by state: live, draft, or all
  • startDate - Include changelogs dated on or after this date
  • endDate - Include changelogs dated on or before this date

Sorting

Results are sorted by date (descending by default):

  • sortBy - Field to sort by (currently only date)
  • sortOrder - Sort direction: asc or desc (default: desc)
ParametersExpand Collapse
params: ChangelogListParams { id, categories, cursor, 9 more }
id?: string

Query param: Find changelog by its id (also accepts slug)

categories?: string | Array<string>

Query param: Filter changelogs by category names (single value or array)

One of the following:
string
Array<string>
cursor?: string

Query param: Cursor for pagination. Use nextCursor from previous response.

maxLength512
endDate?: string | null

Query param: Include Changelogs dated on or before the specified end date

limit?: number

Query param: Maximum number of changelogs to return

minimum1
maximum100
locale?: "bn" | "bs" | "pt-BR" | 39 more

Query param: The locale of the changelogs. Defaults to the organization default locale.

One of the following:
"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"
q?: string

Query param: Search for changelogs by title or content

maxLength255
sortBy?: "date"

Query param: Field to sort by

sortOrder?: "asc" | "desc"

Query param: Sort direction

One of the following:
"asc"
"desc"
startDate?: string | null

Query param: Include Changelogs dated on or after the specified start date

state?: "draft" | "live" | "all"

Query param: The state of the changelog. Use “all” to get both draft and live changelogs.

One of the following:
"draft"
"live"
"all"
featurebaseVersion?: "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-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: "bn" | "bs" | "pt-BR" | 39 more

Locale of the changelog

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

List all changelogs

import Featurebase from 'featurebase-node';

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

// Automatically fetches more pages as needed.
for await (const changelog of client.changelogs.list()) {
  console.log(changelog.id);
}
{
  "data": [
    {
      "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"
    }
  ],
  "nextCursor": "eyJpZCI6IjUwN2YxZjc3YmNmODZjZDc5OTQzOTAxMSJ9",
  "object": "list",
  "pagination": {
    "limit": 10,
    "page": 1,
    "total": 42,
    "totalPages": 5
  }
}
Returns Examples
{
  "data": [
    {
      "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"
    }
  ],
  "nextCursor": "eyJpZCI6IjUwN2YxZjc3YmNmODZjZDc5OTQzOTAxMSJ9",
  "object": "list",
  "pagination": {
    "limit": 10,
    "page": 1,
    "total": 42,
    "totalPages": 5
  }
}