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

Delete a post

Request

Permanently deletes a post. This action cannot be undone.

What Gets Deleted

When you delete a post:

  • The post itself is permanently removed
  • All comments on the post are deleted
  • Vote records are removed
  • Any associated notifications are cleared

Response

Returns a deletion confirmation object with:

  • id - The ID of the deleted post
  • object - Always "post"
  • deleted - Always true

Permissions

Requires member-level access or higher to delete posts.

Security
bearerAuth
Path
idstringrequired

Post 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 DELETE \
  https://docs.featurebase.app/_mock/rest-api/v2/posts/507f1f77bcf86cd799439011 \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Featurebase-Version: 2026-01-01.nova'

Responses

Success

Bodyapplication/json
idstringrequired

Unique identifier of the deleted post

Example: "507f1f77bcf86cd799439011"
objectstringrequired

Object type identifier

Value"post"
Example: "post"
deletedbooleanrequired

Indicates the resource was deleted

Valuetrue
Example: true
Response
application/json
{ "id": "507f1f77bcf86cd799439011", "object": "post", "deleted": true }

List voters on a post

Request

Returns all voters (upvoters) for a specific post.

Voters are users who have upvoted the post. Each voter is returned in the standard user format with:

  • Basic info: id, name, email, profilePicture
  • User type (admin, customer, guest, etc.)
  • Companies the user belongs to
  • Activity stats: commentsCreated, postsCreated, lastActivity
  • Preferences: subscribedToChangelog, locale, verified

Pagination

This endpoint uses cursor-based pagination:

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

Response Format

Returns a list object with:

  • object - Always "list"
  • data - Array of user objects
  • nextCursor - Cursor for the next page (null if no more results)

Permissions

Requires member-level access or higher.

Security
bearerAuth
Path
idstringrequired

Post unique identifier

Example: 507f1f77bcf86cd799439011
Query
limitinteger[ 1 .. 100 ]

A limit on the number of voters to be returned, between 1 and 100.

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

An opaque cursor for pagination. Use the nextCursor value from a previous response to fetch the next page of results.

Example: cursor=eyJpZCI6IjUwN2YxZjc3YmNmODZjZDc5OTQzOTAxMSJ9
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/posts/507f1f77bcf86cd799439011/voters?limit=10&cursor=eyJpZCI6IjUwN2YxZjc3YmNmODZjZDc5OTQzOTAxMSJ9' \
  -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(User)required

Array of users

Example: []
data[].​objectstringrequired

Object type identifier

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

Unique identifier

Example: "676f0f6765bdaa7d7d760f88"
data[].​userIdstring

External user ID from SSO

Example: "676f0f673dbb299c8a4f3057"
data[].​organizationIdstring

Organization ID the user belongs to

Example: "5febde12dc56d60012d47db6"
data[].​companiesArray of objects(Company)

Companies the user belongs to

data[].​emailstring or null

User email

Example: "john@example.com"
data[].​namestringrequired

User display name

Example: "John Steezy"
data[].​profilePicturestring or null

Profile picture URL

Example: "https://fb-usercontent.fra1.cdn.digitaloceanspaces.com/anon_23.png"
data[].​commentsCreatednumber

Number of comments created

Example: 0
data[].​postsCreatednumber

Number of posts created

Example: 0
data[].​lastActivitystring

Last activity ISO timestamp

Example: "2025-01-03T21:42:30.181Z"
data[].​subscribedToChangelogboolean

Whether subscribed to changelog

Example: true
data[].​manuallyOptedOutFromChangelogboolean

Whether manually opted out from changelog

Example: false
data[].​rolesArray of strings

User roles

Example: []
data[].​localestring

User locale

Example: "en"
data[].​verifiedboolean

Whether email is verified

Example: true
data[].​typestringrequired

Type of user

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

User description/bio

Example: ""
data[].​customFieldsobject

Custom field values on the user

nextCursorstring or nullrequired

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 } }

Add a voter to a post

Request

Adds a voter (upvote) to a post.

Voter Identification

To add a vote on behalf of a user, provide one or more identification fields:

  • id - Featurebase user ID
  • userId - External SSO user ID from your system
  • email - User's email address
  • name - Display name (used when creating a new user)
  • profilePicture - Profile picture URL (used when creating a new user)

Resolution priority: id > userId > email > authenticated user

If no fields are provided, the authenticated user's vote is added.

If the user doesn't exist, a new customer will be created with the provided information.

Idempotency

If the user has already voted on this post, the request succeeds but no duplicate vote is added.

Response

Returns a confirmation object with:

  • object - Always "voter"
  • added - Always true
  • id - The voter's user ID
  • postId - The post ID the vote was added to

Permissions

Requires member-level access or higher.

Security
bearerAuth
Path
idstringrequired

Post 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
Bodyapplication/json
idstring

Featurebase user ID to add as voter

Example: "507f1f77bcf86cd799439011"
userIdstring<= 255 characters

External user ID from your system (matched via SSO)

Example: "usr_12345"
emailstring(email)

Voter email (used to find or create user)

Example: "john@example.com"
namestring<= 255 characters

Voter display name (used when creating new user)

Example: "John Doe"
profilePicturestring

Voter profile picture URL

Example: "https://example.com/avatar.png"
curl -i -X POST \
  https://docs.featurebase.app/_mock/rest-api/v2/posts/507f1f77bcf86cd799439011/voters \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -H 'Featurebase-Version: 2026-01-01.nova' \
  -d '{
    "id": "507f1f77bcf86cd799439011",
    "userId": "usr_12345",
    "email": "john@example.com",
    "name": "John Doe",
    "profilePicture": "https://example.com/avatar.png"
  }'

Responses

Created

Bodyapplication/json
objectstringrequired

Object type identifier

Value"voter"
Example: "voter"
addedbooleanrequired

Indicates the voter was added

Valuetrue
Example: true
idstringrequired

Voter unique identifier

Example: "507f1f77bcf86cd799439011"
postIdstringrequired

Post ID the voter was added to

Example: "507f1f77bcf86cd799439012"
Response
application/json
{ "object": "voter", "added": true, "id": "507f1f77bcf86cd799439011", "postId": "507f1f77bcf86cd799439012" }

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

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