Boards (post categories) organize feedback into distinct containers with their own settings.
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.
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.novaOr 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- Success4xx- 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
| Type | Description |
|---|---|
authentication_error | Authentication failed (401) |
authorization_error | Permission denied (403) |
invalid_request_error | Invalid request parameters or resource not found (400, 404, 410) |
api_error | Server-side error (500) |
rate_limit_error | Too many requests (429) |
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)
content- Comment content in HTML formatpostIdORchangelogId- One is required to specify the target
parentCommentId- Create a reply to an existing commentisPrivate- 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)
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 should be formatted as HTML. For images:
- External URLs in
img srcattributes are automatically pulled into our storage - Base64 encoded data URIs (
data:image/...) are also supported and processed
Returns the created comment object with all fields populated, including:
id- Unique comment identifierauthor- Author information- Voting stats and timestamps
400- Invalid input (missing required fields, invalid IDs)403- Commenting disabled or not authorized404- Post/changelog not found or parent comment not found
Comment content in HTML format
Changelog ID to comment on (accepts ObjectId or slug)
Whether the comment is private (only visible to admins)
Whether to notify voters of the submission about the comment
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.
Set the date when the comment was created. Useful for importing comments from other platforms.
Initial upvotes count. Useful for importing comments from other platforms. Score will be calculated as upvotes - downvotes.
- Mock serverhttps://docs.featurebase.app/_mock/rest-api/v2/comments
- Productionhttps://do.featurebase.app/v2/comments
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
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
}'{ "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" }
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
Returns a comment object with all fields populated.
400- Invalid comment ID format404- Comment not found or doesn't belong to your organization
- Mock serverhttps://docs.featurebase.app/_mock/rest-api/v2/comments/{id}
- Productionhttps://do.featurebase.app/v2/comments/{id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
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'{ "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" }
Request
Updates an existing comment by its unique identifier.
You can update:
- content - Comment text (HTML format)
- isPrivate - Privacy status (admin-only visibility)
- isPinned - Pinned status (displayed at top)
- inReview - Moderation status
Content should be formatted as HTML. For images:
- External URLs in
img srcattributes are automatically pulled into our storage - Base64 encoded data URIs (
data:image/...) are also supported and processed
- Comment authors can update their own comment content
- Admin permissions required for:
isPrivate- Requiresmanage_comments_privatepermissionisPinned- Requiresset_comment_pinnedpermissioninReview- Requiresmoderate_commentspermission- Updating other users' comments - Requires
moderate_commentspermission
Returns the updated comment object with all fields populated.
400- Invalid comment ID format or input403- Not authorized to update this comment404- Comment not found
Comment content in HTML format
Update the creation date (useful for imports)
Set the upvotes count directly. Score will be recalculated as upvotes - downvotes.
- Mock serverhttps://docs.featurebase.app/_mock/rest-api/v2/comments/{id}
- Productionhttps://do.featurebase.app/v2/comments/{id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PATCH \
https://docs.featurebase.app/_mock/rest-api/v2/comments/507f1f77bcf86cd799439011 \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-H 'Featurebase-Version: 2026-01-01.nova' \
-d '{
"content": "<p>This is my updated comment.</p>",
"isPrivate": false,
"isPinned": true,
"inReview": false,
"createdAt": "2025-01-15T10:30:00.000Z",
"upvotes": 10,
"downvotes": 2
}'{ "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" }
CommentsCopy for LLM Copy page as Markdown for LLMs View as Markdown Open this page as Markdown Open in ChatGPT Get insights from ChatGPT Open in Claude Get insights from Claude Connect to Cursor Install MCP server on Cursor Connect to VS Code Install MCP server on VS Code
Threaded discussions on posts and changelogs. Comments support voting, moderation, and privacy controls.