Skip to content

Featurebase API (2026-01-01.nova)

Welcome to the Featurebase API. This API allows you to programmatically interact with your Featurebase organization.

This documentation reflects API version 2026-01-01.nova.

Download OpenAPI description
Languages
Servers
Mock server
https://docs.featurebase.app/_mock/rest-api/
Production
https://do.featurebase.app/

API Versioning

This API uses date-based versioning. Each version is identified by a release date and slug, e.g., 2026-01-01.nova.

Specifying a Version

Include the version in the request header:

Featurebase-Version: 2026-01-01.nova

Or set a default version for your organization in the dashboard settings.

Version Compatibility

  • Newer versions may add new fields to responses (always backwards-compatible)
  • Breaking changes (removed/renamed fields, changed behavior) only occur in new versions
  • Your integration will continue to work as long as you pin to a specific version

Authentication

All API requests require authentication via API key.

Include in headers:

Authorization: Bearer <api-key>

Create and manage your API keys in the Featurebase dashboard.

Error Handling

The API uses conventional HTTP response codes to indicate success or failure:

  • 2xx - Success
  • 4xx - Client errors (bad request, unauthorized, not found, etc.)
  • 5xx - Server errors (internal error)

Error Response Format

All errors follow a consistent format:

{
  "error": {
    "type": "invalid_request_error",
    "code": "resource_not_found",
    "message": "Post not found",
    "param": "id",
    "status": 404
  }
}

Error Types

TypeDescription
authentication_errorAuthentication failed (401)
authorization_errorPermission denied (403)
invalid_request_errorInvalid request parameters or resource not found (400, 404, 410)
api_errorServer-side error (500)
rate_limit_errorToo many requests (429)

Boards

Boards (post categories) organize feedback into distinct containers with their own settings.

Operations

Posts

User-submitted feedback and feature requests. Posts belong to boards and can be upvoted, commented on, and tracked through statuses.

Operations

Post Statuses

Post statuses define the workflow stages for posts (e.g., In Review, Active, Completed).

Operations

Comments

Threaded discussions on posts and changelogs. Comments support voting, moderation, and privacy controls.

Operations

List comments

Request

Returns comments for your organization.

Comments are threaded discussions. Each comment can have:

  • Author information
  • Voting (upvotes/downvotes)
  • Privacy settings (public/private)
  • Moderation status
  • Parent comment reference for threading

Filtering

Optionally filter by:

  • postId - Get comments for a specific post
  • changelogId - Get comments for a specific changelog

If no filter is provided, returns all comments across the organization.

Pagination

This endpoint uses cursor-based pagination:

  • limit - Number of comments 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/comments?postId={id}&limit=10
  2. If nextCursor is not null, use it for the next page
  3. Next request: GET /v2/comments?postId={id}&limit=10&cursor={nextCursor}

Response Format

Returns a list object with:

  • object - Always "list"
  • data - Array of comment objects (flat structure with parentCommentId for threading)
  • nextCursor - Cursor for the next page (null if no more results)

Comment Structure

Each comment includes:

  • id - Unique comment identifier
  • postId / changelogId - Reference to the parent content
  • parentCommentId - Reference to parent comment (null for root comments)
  • content - Comment content in HTML format
  • author - Author information (id, name, profilePicture, type)
  • upvotes / downvotes / score - Voting metrics
  • isPrivate - Whether comment is only visible to admins
  • inReview - Whether comment is pending moderation
  • created / updated - Unix timestamps

Additional Filters

  • privacy - Filter by privacy: "public", "private", or "all"
  • inReview - Filter by moderation status (true/false)

Sorting

Use sortBy to sort results:

  • best - Sort by confidence score (default, like Reddit)
  • top - Sort by net score (upvotes - downvotes)
  • new - Sort by creation date, newest first
  • old - Sort by creation date, oldest first
Security
bearerAuth
Query
postIdstring

Filter comments by post ID

Example: postId=507f1f77bcf86cd799439011
changelogIdstring

Filter comments by changelog ID

Example: changelogId=507f1f77bcf86cd799439012
privacystring

Filter comments by privacy

Enum"public""private""all"
Example: privacy=public
inReviewboolean or null

Filter by review status

Example: inReview=false
limitinteger[ 1 .. 100 ]

Maximum number of comments to return

Default 10
Example: limit=10
cursorstring<= 512 characters

Cursor for pagination. Use nextCursor from previous response.

Example: cursor=eyJpZCI6IjUwN2YxZjc3YmNmODZjZDc5OTQzOTAxMSJ9
sortBystring

Sort order for comments

Default "best"
Enum"best""top""new""old"
Example: sortBy=best
Headers
Featurebase-Versionstring(FeaturebaseVersion)

API version for this request. Defaults to your organization's configured API version if not specified.

Example: 2026-01-01.nova
curl -i -X GET \
  'https://docs.featurebase.app/_mock/rest-api/v2/comments?postId=507f1f77bcf86cd799439011&changelogId=507f1f77bcf86cd799439012&privacy=public&inReview=false&limit=10&cursor=eyJpZCI6IjUwN2YxZjc3YmNmODZjZDc5OTQzOTAxMSJ9&sortBy=best' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Featurebase-Version: 2026-01-01.nova'

Responses

Success

Bodyapplication/json
objectstringrequired

Object type identifier

Value"list"
Example: "list"
dataArray of objects(Comment)required

Array of comments

Example: []
data[].​objectstringrequired

Object type identifier

Value"comment"
Example: "comment"
data[].​idstringrequired

Unique identifier

Example: "507f1f77bcf86cd799439011"
data[].​postIdstring or nullrequired

Post ID this comment belongs to

Example: "507f1f77bcf86cd799439012"
data[].​changelogIdstring or nullrequired

Changelog ID this comment belongs to

Example: "507f1f77bcf86cd799439013"
data[].​parentCommentIdstring or nullrequired

Parent comment ID for replies, null for root comments

Example: "507f1f77bcf86cd799439014"
data[].​contentstringrequired

Comment content in HTML format

Example: "<p>This is a great idea!</p>"
data[].​authorobject or null(CommentAuthor)required
data[].​author.​idstring or nullrequired

Author unique identifier

Example: "507f1f77bcf86cd799439011"
data[].​author.​namestringrequired

Author display name

Example: "John Doe"
data[].​author.​profilePicturestring or nullrequired

Author profile picture URL

Example: "https://cdn.example.com/avatars/john.png"
data[].​author.​typestringrequired

Type of user who authored the comment

Enum"admin""customer""guest""integration""bot""lead"
Example: "customer"
data[].​upvotesnumberrequired

Number of upvotes

Example: 5
data[].​downvotesnumberrequired

Number of downvotes

Example: 0
data[].​scorenumberrequired

Net score (upvotes - downvotes)

Example: 5
data[].​isPrivatebooleanrequired

Whether the comment is private

Example: false
data[].​isDeletedbooleanrequired

Whether the comment is deleted

Example: false
data[].​isPinnedbooleanrequired

Whether the comment is pinned

Example: false
data[].​inReviewbooleanrequired

Whether the comment is in review

Example: false
data[].​isSpambooleanrequired

Whether the comment is spam

Example: false
data[].​createdAtstringrequired

ISO 8601 timestamp when created

Example: "2023-12-12T00:00:00.000Z"
data[].​updatedAtstringrequired

ISO 8601 timestamp when updated

Example: "2023-12-13T00:00:00.000Z"
nextCursorstring or null<= 512 charactersrequired

Cursor for fetching the next page (cursor-based pagination)

Example: "eyJpZCI6IjUwN2YxZjc3YmNmODZjZDc5OTQzOTAxMSJ9"
paginationobject

Pagination metadata for page-based requests

Response
application/json
{ "object": "list", "data": [], "nextCursor": "eyJpZCI6IjUwN2YxZjc3YmNmODZjZDc5OTQzOTAxMSJ9", "pagination": { "page": 1, "limit": 10, "total": 42, "totalPages": 5 } }

Create a new comment

Request

Creates a new comment or reply to an existing comment.

You can create a comment for a post or changelog. Comments support:

  • HTML content (images are automatically uploaded to our storage)
  • Threading (replies via parentCommentId)
  • Privacy controls (private comments visible only to admins)
  • Author attribution (post on behalf of users)

Required Fields

  • content - Comment content in HTML format
  • postId OR changelogId - One is required to specify the target

Optional Fields

  • parentCommentId - Create a reply to an existing comment
  • isPrivate - Make comment visible only to admins (default: false)
  • sendNotification - Notify voters about the comment (default: true)
  • author - Post comment under a specific user (uses authenticated user if not provided)
  • createdAt - Backdate creation (useful for imports)

Author Object

The author field supports multiple identification methods:

  • id - Featurebase user ID (direct reference)
  • userId - External user ID from your system (via SSO)
  • email - Email address (finds existing or creates new user)
  • name - Display name (used with email for new users)
  • profilePicture - Profile picture URL

If no author is provided, the comment is posted under the authenticated user.

Content Format

Content should be formatted as HTML. For images:

  • External URLs in img src attributes are automatically pulled into our storage
  • Base64 encoded data URIs (data:image/...) are also supported and processed

Response

Returns the created comment object with all fields populated, including:

  • id - Unique comment identifier
  • author - Author information
  • Voting stats and timestamps

Errors

  • 400 - Invalid input (missing required fields, invalid IDs)
  • 403 - Commenting disabled or not authorized
  • 404 - Post/changelog not found or parent comment not found
Security
bearerAuth
Headers
Featurebase-Versionstring(FeaturebaseVersion)

API version for this request. Defaults to your organization's configured API version if not specified.

Example: 2026-01-01.nova
Bodyapplication/json
contentstring>= 2 charactersrequired

Comment content in HTML format

Example: "<p>This is a great idea!</p>"
postIdstring

Post ID to comment on (accepts ObjectId or slug)

Example: "507f1f77bcf86cd799439011"
changelogIdstring

Changelog ID to comment on (accepts ObjectId or slug)

Example: "507f1f77bcf86cd799439012"
parentCommentIdstring

Parent comment ID if this is a reply

Example: "507f1f77bcf86cd799439013"
isPrivateboolean or null

Whether the comment is private (only visible to admins)

Default false
Example: false
sendNotificationboolean or null

Whether to notify voters of the submission about the comment

Default true
Example: true
authorobject

Author to attribute the post to. If not provided, uses the authenticated user. Supports multiple identification methods: id (Featurebase ID), userId (external SSO ID), or email.

createdAtstring or null

Set the date when the comment was created. Useful for importing comments from other platforms.

Example: "2025-01-15T10:30:00.000Z"
upvotesinteger or null>= 0

Initial upvotes count. Useful for importing comments from other platforms. Score will be calculated as upvotes - downvotes.

Example: 5
downvotesinteger or null>= 0

Initial downvotes count. Useful for importing comments from other platforms. Score will be calculated as upvotes - downvotes.

Example: 0
curl -i -X POST \
  https://docs.featurebase.app/_mock/rest-api/v2/comments \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -H 'Featurebase-Version: 2026-01-01.nova' \
  -d '{
    "content": "<p>This is a great idea!</p>",
    "postId": "507f1f77bcf86cd799439011",
    "changelogId": "507f1f77bcf86cd799439012",
    "parentCommentId": "507f1f77bcf86cd799439013",
    "isPrivate": false,
    "sendNotification": true,
    "author": {
      "id": "507f1f77bcf86cd799439011",
      "userId": "usr_12345",
      "email": "john@example.com",
      "name": "John Doe",
      "profilePicture": "https://example.com/avatar.png"
    },
    "createdAt": "2025-01-15T10:30:00.000Z",
    "upvotes": 5,
    "downvotes": 0
  }'

Responses

Created

Bodyapplication/json
objectstringrequired

Object type identifier

Value"comment"
Example: "comment"
idstringrequired

Unique identifier

Example: "507f1f77bcf86cd799439011"
postIdstring or nullrequired

Post ID this comment belongs to

Example: "507f1f77bcf86cd799439012"
changelogIdstring or nullrequired

Changelog ID this comment belongs to

Example: "507f1f77bcf86cd799439013"
parentCommentIdstring or nullrequired

Parent comment ID for replies, null for root comments

Example: "507f1f77bcf86cd799439014"
contentstringrequired

Comment content in HTML format

Example: "<p>This is a great idea!</p>"
authorobject or null(CommentAuthor)required
author.​idstring or nullrequired

Author unique identifier

Example: "507f1f77bcf86cd799439011"
author.​namestringrequired

Author display name

Example: "John Doe"
author.​profilePicturestring or nullrequired

Author profile picture URL

Example: "https://cdn.example.com/avatars/john.png"
author.​typestringrequired

Type of user who authored the comment

Enum"admin""customer""guest""integration""bot""lead"
Example: "customer"
upvotesnumberrequired

Number of upvotes

Example: 5
downvotesnumberrequired

Number of downvotes

Example: 0
scorenumberrequired

Net score (upvotes - downvotes)

Example: 5
isPrivatebooleanrequired

Whether the comment is private

Example: false
isDeletedbooleanrequired

Whether the comment is deleted

Example: false
isPinnedbooleanrequired

Whether the comment is pinned

Example: false
inReviewbooleanrequired

Whether the comment is in review

Example: false
isSpambooleanrequired

Whether the comment is spam

Example: false
createdAtstringrequired

ISO 8601 timestamp when created

Example: "2023-12-12T00:00:00.000Z"
updatedAtstringrequired

ISO 8601 timestamp when updated

Example: "2023-12-13T00:00:00.000Z"
Response
application/json
{ "object": "comment", "id": "507f1f77bcf86cd799439011", "postId": "507f1f77bcf86cd799439012", "changelogId": "507f1f77bcf86cd799439013", "parentCommentId": "507f1f77bcf86cd799439014", "content": "<p>This is a great idea!</p>", "author": { "id": "507f1f77bcf86cd799439011", "name": "John Doe", "profilePicture": "https://cdn.example.com/avatars/john.png", "type": "customer" }, "upvotes": 5, "downvotes": 0, "score": 5, "isPrivate": false, "isDeleted": false, "isPinned": false, "inReview": false, "isSpam": false, "createdAt": "2023-12-12T00:00:00.000Z", "updatedAt": "2023-12-13T00:00:00.000Z" }

Get a comment by ID

Request

Retrieves a single comment by its unique identifier.

Returns the full comment object including:

  • Author information
  • Voting stats (upvotes, downvotes, score)
  • Privacy and moderation status
  • Threading information (parentCommentId)
  • Timestamps

Response

Returns a comment object with all fields populated.

Errors

  • 400 - Invalid comment ID format
  • 404 - Comment not found or doesn't belong to your organization
Security
bearerAuth
Path
idstringrequired

Comment unique identifier

Example: 507f1f77bcf86cd799439011
Headers
Featurebase-Versionstring(FeaturebaseVersion)

API version for this request. Defaults to your organization's configured API version if not specified.

Example: 2026-01-01.nova
curl -i -X GET \
  https://docs.featurebase.app/_mock/rest-api/v2/comments/507f1f77bcf86cd799439011 \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Featurebase-Version: 2026-01-01.nova'

Responses

Success

Bodyapplication/json
objectstringrequired

Object type identifier

Value"comment"
Example: "comment"
idstringrequired

Unique identifier

Example: "507f1f77bcf86cd799439011"
postIdstring or nullrequired

Post ID this comment belongs to

Example: "507f1f77bcf86cd799439012"
changelogIdstring or nullrequired

Changelog ID this comment belongs to

Example: "507f1f77bcf86cd799439013"
parentCommentIdstring or nullrequired

Parent comment ID for replies, null for root comments

Example: "507f1f77bcf86cd799439014"
contentstringrequired

Comment content in HTML format

Example: "<p>This is a great idea!</p>"
authorobject or null(CommentAuthor)required
author.​idstring or nullrequired

Author unique identifier

Example: "507f1f77bcf86cd799439011"
author.​namestringrequired

Author display name

Example: "John Doe"
author.​profilePicturestring or nullrequired

Author profile picture URL

Example: "https://cdn.example.com/avatars/john.png"
author.​typestringrequired

Type of user who authored the comment

Enum"admin""customer""guest""integration""bot""lead"
Example: "customer"
upvotesnumberrequired

Number of upvotes

Example: 5
downvotesnumberrequired

Number of downvotes

Example: 0
scorenumberrequired

Net score (upvotes - downvotes)

Example: 5
isPrivatebooleanrequired

Whether the comment is private

Example: false
isDeletedbooleanrequired

Whether the comment is deleted

Example: false
isPinnedbooleanrequired

Whether the comment is pinned

Example: false
inReviewbooleanrequired

Whether the comment is in review

Example: false
isSpambooleanrequired

Whether the comment is spam

Example: false
createdAtstringrequired

ISO 8601 timestamp when created

Example: "2023-12-12T00:00:00.000Z"
updatedAtstringrequired

ISO 8601 timestamp when updated

Example: "2023-12-13T00:00:00.000Z"
Response
application/json
{ "object": "comment", "id": "507f1f77bcf86cd799439011", "postId": "507f1f77bcf86cd799439012", "changelogId": "507f1f77bcf86cd799439013", "parentCommentId": "507f1f77bcf86cd799439014", "content": "<p>This is a great idea!</p>", "author": { "id": "507f1f77bcf86cd799439011", "name": "John Doe", "profilePicture": "https://cdn.example.com/avatars/john.png", "type": "customer" }, "upvotes": 5, "downvotes": 0, "score": 5, "isPrivate": false, "isDeleted": false, "isPinned": false, "inReview": false, "isSpam": false, "createdAt": "2023-12-12T00:00:00.000Z", "updatedAt": "2023-12-13T00:00:00.000Z" }

Custom Fields

Configurable input fields for posts in your Featurebase organization. Custom fields allow you to collect additional structured data when users create posts.

Operations

Changelogs

Release notes and updates published by the organization. Changelogs keep users informed about new features, improvements, and fixes.

Operations

Admins

Team members who manage your Featurebase organization. Admins have roles that define their permissions.

Operations

Teams

Teams are groups within your Featurebase organization. Use this endpoint to list and retrieve team information for conversation assignment and organization management.

Operations

Contacts

Contacts are the customers and leads in your Featurebase organization. Use this endpoint to list and retrieve contact information.

Operations

Companies

Companies represent organizations or businesses that your users belong to. Use this endpoint to list and retrieve company information.

Operations

Surveys

Surveys allow you to collect targeted feedback from your users within your product. Surveys can be targeted to specific user segments or pages and can contain multiple questions with conditional logic.

Operations

Help Centers

Help centers allow organizations to create and manage knowledge bases with articles and collections. Currently, Featurebase supports one help center per organization.

Operations

Conversations

Conversations are messenger/inbox conversations in your Featurebase organization. Use this endpoint to list and retrieve conversation information.

Operations

Webhooks

Webhooks allow you to receive real-time HTTP callbacks when events occur in your Featurebase organization. Configure webhook endpoints to subscribe to specific event types.

Operations