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
Returns all posts (feedback submissions) for the authenticated organization.
Posts are user-submitted feedback items. Each post belongs to a board and can have:
- Status (in progress, complete, etc.)
- Tags for categorization
- Upvotes from users
- Comments (if enabled)
- Custom field values
This endpoint uses cursor-based pagination:
limit- Number of posts to return (1-100, default 10)cursor- Opaque cursor from a previous response'snextCursorfield
Example: To paginate through results:
- First request:
GET /v2/posts?limit=10 - If
nextCursoris not null, use it for the next page - Next request:
GET /v2/posts?limit=10&cursor={nextCursor}
Returns a list object with:
object- Always "list"data- Array of post objectsnextCursor- Cursor for the next page (null if no more results)
Filter posts using query parameters:
boardId- Filter by board (category) IDstatusId- Filter by status IDtags- Filter by tag names (can be comma-separated or repeated)q- Search query for title/contentinReview- Include posts pending moderation
Use sortBy to sort results:
createdAt- Sort by creation date (default)upvotes- Sort by vote counttrending- Sort by trending scorerecent- Sort by most recently updated
A limit on the number of posts to be returned, between 1 and 100.
An opaque cursor for pagination. Use the nextCursor value from a previous response to fetch the next page of results.
Filter by board (category) ID(s)
Filter by board (category) ID(s)
Filter by status ID(s)
Filter by status ID(s)
Filter by tag names
Filter by tag names
Sort order for posts
- Mock serverhttps://docs.featurebase.app/_mock/rest-api/v2/posts
- Productionhttps://do.featurebase.app/v2/posts
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs.featurebase.app/_mock/rest-api/v2/posts?limit=10&cursor=eyJpZCI6IjUwN2YxZjc3YmNmODZjZDc5OTQzOTAxMSJ9&boardId=507f1f77bcf86cd799439011&statusId=507f1f77bcf86cd799439012&tags=bug%2Cfeature&q=dark+mode&inReview=true&sortBy=upvotes&sortOrder=desc' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Featurebase-Version: 2026-01-01.nova'Success
Array of posts
Full URL to view the post
Post content in HTML format
Board (category) ID this post belongs to
Author unique identifier
Author email (if available)
Author profile picture URL
Object type identifier
The workflow stage this status represents
Tags attached to this post
User IDs explicitly granted access to this post. Empty array means no user-level restrictions (post uses board/org visibility). Non-empty means only these users (plus admins) can see the post.
ID of the admin assigned to this post, null if unassigned
Estimated completion time as ISO 8601 timestamp, null if not set
Custom field values keyed by field ID
ISO 8601 timestamp when created
Cursor for fetching the next page (cursor-based pagination)
{ "object": "list", "data": [], "nextCursor": "eyJpZCI6IjUwN2YxZjc3YmNmODZjZDc5OTQzOTAxMSJ9", "pagination": { "page": 1, "limit": 10, "total": 42, "totalPages": 5 } }
Request
Creates a new post (feedback submission) in the specified board.
title- Post title (minimum 2 characters)boardId- Board ID to create the post in
content- Post content in HTML formattags- Array of tag names to attachstatusId- Status ID to set (defaults to board's default status)commentsEnabled- Whether comments are allowed (default: true)inReview- Whether post is pending moderation (default: false)customFields- Custom field values as key-value pairseta- Estimated completion date (Unix timestamp or ISO date)assigneeId- Admin ID to assign this post tovisibility- Post-level visibility restriction: 'public' (no additional restrictions), 'authorOnly' (only author and admins), or 'companyOnly' (only users in author's company). Note: even 'public' posts are still subject to board-level and organization-level access controls.
For posts created on behalf of users, use the author object:
id- Featurebase user IDuserId- External SSO user IDemail- User's email addressname- Display nameprofilePicture- Profile picture URL
Resolution priority: id > userId > email > authenticated user
createdAt- Override creation date for importing historical data
Returns the created post object with all fields populated.
Tag names to attach
Tag names to attach
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.
Custom field values. Keys must be valid ObjectIds. Values can be: string, boolean, number, ISO date string, array of strings, ObjectId string, or null.
Post visibility. 'public' = visible to all users, 'authorOnly' = only visible to the author and admins, 'companyOnly' = only visible to users in the same company as the author
- Mock serverhttps://docs.featurebase.app/_mock/rest-api/v2/posts
- Productionhttps://do.featurebase.app/v2/posts
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://docs.featurebase.app/_mock/rest-api/v2/posts \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-H 'Featurebase-Version: 2026-01-01.nova' \
-d '{
"title": "Add dark mode support",
"content": "<p>It would be great to have dark mode.</p>",
"boardId": "507f1f77bcf86cd799439011",
"tags": [
"feature",
"ui"
],
"commentsEnabled": true,
"statusId": "507f1f77bcf86cd799439012",
"author": {
"id": "507f1f77bcf86cd799439011",
"userId": "usr_12345",
"email": "john@example.com",
"name": "John Doe",
"profilePicture": "https://example.com/avatar.png"
},
"inReview": false,
"customFields": {
"507f1f77bcf86cd799439011": "high"
},
"eta": "2025-12-31T23:59:59.000Z",
"createdAt": "2025-01-15T10:30:00.000Z",
"assigneeId": "507f1f77bcf86cd799439013",
"visibility": "public",
"upvotes": 5
}'Created
Full URL to view the post
Post content in HTML format
Author profile picture URL
The workflow stage this status represents
Tags attached to this post
User IDs explicitly granted access to this post. Empty array means no user-level restrictions (post uses board/org visibility). Non-empty means only these users (plus admins) can see the post.
ID of the admin assigned to this post, null if unassigned
Estimated completion time as ISO 8601 timestamp, null if not set
Custom field values keyed by field ID
{ "object": "post", "id": "507f1f77bcf86cd799439011", "slug": "add-dark-mode-support", "postUrl": "https://feedback.example.com/p/add-dark-mode-support", "title": "Add dark mode support", "content": "<p>It would be great to have a dark mode option for the dashboard.</p>", "boardId": "507f1f77bcf86cd799439011", "author": { "id": "507f1f77bcf86cd799439011", "name": "John Doe", "email": "john@example.com", "profilePicture": "https://cdn.example.com/avatars/john.png", "type": "customer" }, "status": { "object": "post_status", "id": "507f1f77bcf86cd799439011", "name": "In Progress", "color": "Blue", "type": "active", "isDefault": false }, "tags": [ { … } ], "features": { "commentsEnabled": true }, "upvotes": 42, "commentCount": 5, "inReview": false, "isPinned": false, "access": { "userIds": [], "companyExternalIds": [] }, "assigneeId": "507f1f77bcf86cd799439013", "eta": "2025-01-01T00:00:00.000Z", "customFields": { "cf_priority": "high", "cf_effort": 3 }, "createdAt": "2023-12-12T00:00:00.000Z", "updatedAt": "2023-12-13T00:00:00.000Z" }
- Mock serverhttps://docs.featurebase.app/_mock/rest-api/v2/posts/{id}
- Productionhttps://do.featurebase.app/v2/posts/{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/posts/507f1f77bcf86cd799439011 \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Featurebase-Version: 2026-01-01.nova'Success
Full URL to view the post
Post content in HTML format
Author profile picture URL
The workflow stage this status represents
Tags attached to this post
User IDs explicitly granted access to this post. Empty array means no user-level restrictions (post uses board/org visibility). Non-empty means only these users (plus admins) can see the post.
ID of the admin assigned to this post, null if unassigned
Estimated completion time as ISO 8601 timestamp, null if not set
Custom field values keyed by field ID
{ "object": "post", "id": "507f1f77bcf86cd799439011", "slug": "add-dark-mode-support", "postUrl": "https://feedback.example.com/p/add-dark-mode-support", "title": "Add dark mode support", "content": "<p>It would be great to have a dark mode option for the dashboard.</p>", "boardId": "507f1f77bcf86cd799439011", "author": { "id": "507f1f77bcf86cd799439011", "name": "John Doe", "email": "john@example.com", "profilePicture": "https://cdn.example.com/avatars/john.png", "type": "customer" }, "status": { "object": "post_status", "id": "507f1f77bcf86cd799439011", "name": "In Progress", "color": "Blue", "type": "active", "isDefault": false }, "tags": [ { … } ], "features": { "commentsEnabled": true }, "upvotes": 42, "commentCount": 5, "inReview": false, "isPinned": false, "access": { "userIds": [], "companyExternalIds": [] }, "assigneeId": "507f1f77bcf86cd799439013", "eta": "2025-01-01T00:00:00.000Z", "customFields": { "cf_priority": "high", "cf_effort": 3 }, "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.