## List all changelogs **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` 1. If `nextCursor` is not null, use it for the next page 1. 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`) ### Query Parameters - `id: optional string` Find changelog by its id (also accepts slug) - `categories: optional string or array of string` Filter changelogs by category names (single value or array) - `string` - `array of string` - `cursor: optional string` Cursor for pagination. Use nextCursor from previous response. - `endDate: optional string` Include Changelogs dated on or before the specified end date - `limit: optional number` Maximum number of changelogs to return - `locale: optional "bn" or "bs" or "pt-BR" or 39 more` The locale of the changelogs. Defaults to the organization default locale. - `"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: optional string` Search for changelogs by title or content - `sortBy: optional "date"` Field to sort by - `"date"` - `sortOrder: optional "asc" or "desc"` Sort direction - `"asc"` - `"desc"` - `startDate: optional string` Include Changelogs dated on or after the specified start date - `state: optional "draft" or "live" or "all"` The state of the changelog. Use "all" to get both draft and live changelogs. - `"draft"` - `"live"` - `"all"` ### Header Parameters - `"Featurebase-Version": optional "2026-01-01.nova" or "2025-12-12.clover"` - `"2026-01-01.nova"` - `"2025-12-12.clover"` ### Returns - `data: array of Changelog` Array of changelogs - `id: string` Unique identifier - `allowedSegmentIds: array of string` Segment IDs that are allowed to view this changelog - `availableLocales: array of string` Array of locale codes where the changelog has content - `categories: array of object { id, name, roles }` Categories the changelog belongs to - `id: string` Category unique identifier - `name: string` Category name - `roles: optional array of 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` 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" or "bs" or "pt-BR" or 39 more` Locale of the changelog - `"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` Content in markdown format - `notifications: map[object { scheduledDate, emailSent, hideFromBoardAndWidgets, sendEmailNotification } ]` Notification settings for each locale - `scheduledDate: string` Scheduled publication date as ISO 8601 timestamp - `emailSent: optional boolean` Whether the email notification has been sent - `hideFromBoardAndWidgets: optional boolean` Whether the changelog is hidden from the board and widgets - `sendEmailNotification: optional boolean` Whether email notification should be sent for this locale - `object: "changelog"` Object type identifier - `"changelog"` - `organization: string` Organization identifier - `publishedLocales: array of string` Array of locale codes where the changelog is published - `slug: string` URL-friendly slug - `slugs: map[string]` URL-friendly slugs for each locale - `state: "live" or "draft"` State of the changelog - `"live"` - `"draft"` - `title: string` Changelog title - `updatedAt: string` ISO 8601 timestamp when updated - `url: string` Public URL to view the changelog - `nextCursor: string` Cursor for fetching the next page (cursor-based pagination) - `object: "list"` Object type identifier - `"list"` - `pagination: optional object { limit, page, total, totalPages }` Pagination metadata for page-based requests - `limit: number` Items per page - `page: number` Current page number - `total: number` Total number of items - `totalPages: number` Total number of pages ### Example ```http curl https://do.featurebase.app/v2/changelogs \ -H "Authorization: Bearer $FEATUREBASE_API_KEY" ``` #### Response ```json { "data": [ { "id": "6457e3ff70afca5d8c27dccc", "allowedSegmentIds": [ "string" ], "availableLocales": [ "en", "de", "fr" ], "categories": [ { "id": "6438a1efda3640f8feb72121", "name": "New Features", "roles": [ "string" ] } ], "commentCount": 2, "content": "
Your changelog content in HTML format.
", "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 } } ```