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
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" }
Request
Deletes a comment by its unique identifier.
Comments with replies: Soft delete
- Content is replaced with "[deleted]"
- Author information is anonymized
- Comment remains visible to maintain conversation context
- Votes and scores are reset to 0
Comments without replies: Hard delete
- Comment is permanently removed from the database
- All associated data is deleted
- Comment authors can delete their own comments
- Admins can delete any comment (subject to permissions)
- Lite seat admins can only delete their own comments
- Non-authors require
manage_commentsormanage_comments_privatepermission
Returns a deletion confirmation:
{
"id": "507f1f77bcf86cd799439011",
"object": "comment",
"deleted": true
}400- Invalid comment ID format403- Not authorized to delete this comment404- 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 DELETE \
https://docs.featurebase.app/_mock/rest-api/v2/comments/507f1f77bcf86cd799439011 \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Featurebase-Version: 2026-01-01.nova'{ "id": "507f1f77bcf86cd799439011", "object": "comment", "deleted": true }
Request
Deletes a comment using the legacy Clover API format.
This endpoint accepts the comment ID in the request body instead of the route parameter.
{
"id": "507f1f77bcf86cd799439011"
}Comments with replies: Soft delete
- Content is replaced with "[deleted]"
- Author information is anonymized
- Comment remains visible to maintain conversation context
- Votes and scores are reset to 0
Comments without replies: Hard delete
- Comment is permanently removed from the database
- All associated data is deleted
- Comment authors can delete their own comments
- Admins can delete any comment (subject to permissions)
- Lite seat admins can only delete their own comments
- Non-authors require
manage_commentsormanage_comments_privatepermission
Returns a success confirmation (Clover format):
{
"success": true
}Note: Nova API returns { id, object: "comment", deleted: true }, but Clover transformer converts it to { success: true } for backwards compatibility.
400- Invalid comment ID format or missing ID in body403- Not authorized to delete this comment404- Comment not found or doesn't belong to your organization
- Mock serverhttps://docs.featurebase.app/_mock/rest-api/v2/comment
- Productionhttps://do.featurebase.app/v2/comment
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X DELETE \
https://docs.featurebase.app/_mock/rest-api/v2/comment \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-H 'Featurebase-Version: 2026-01-01.nova' \
-d '{
"id": "507f1f77bcf86cd799439011"
}'{ "success": true }
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.