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.
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
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.
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 contacts (customers) attached to a specific company.
Only returns contacts with type "customer" that have the company in their companyIds array. Uses cursor-based pagination.
id- The Featurebase internal ID of the company (MongoDB ObjectId)
limit- Number of contacts to return (1-100, default: 10)cursor- Opaque cursor from a previous response for pagination
The response includes:
object- Always "list"data- Array of contact objectsnextCursor- Cursor for the next page (null if no more results)
{
"object": "list",
"data": [
{
"object": "contact",
"id": "507f1f77bcf86cd799439011",
"userId": "usr_12345",
"email": "john@acme.com",
"name": "John Doe",
"type": "customer",
"companies": [...],
"createdAt": "2025-01-01T12:00:00.000Z"
}
],
"nextCursor": "eyJpZCI6IjUwN2YxZjc3YmNmODZjZDc5OTQzOTAxMSJ9"
}- 404 Not Found - Company with the specified ID does not exist
This endpoint is only available in API version 2026-01-01.nova and newer.
- Mock serverhttps://docs.featurebase.app/_mock/rest-api/v2/companies/{id}/contacts
- Productionhttps://do.featurebase.app/v2/companies/{id}/contacts
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs.featurebase.app/_mock/rest-api/v2/companies/507f1f77bcf86cd799439011/contacts?limit=10&cursor=eyJpZCI6IjUwN2YxZjc3YmNmODZjZDc5OTQzOTAxMSJ9' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Featurebase-Version: 2026-01-01.nova'{ "object": "list", "data": [], "nextCursor": "eyJpZCI6IjUwN2YxZjc3YmNmODZjZDc5OTQzOTAxMSJ9" }
Request
Attaches a contact (customer) to a company.
Adds the company to the contact's companyIds array and embedded companies array. This operation is additive - existing company associations are preserved. Also increments the linkedUsers count on the company.
id- The Featurebase internal ID of the company (MongoDB ObjectId)
| Field | Type | Required | Description |
|---|---|---|---|
contactId | string | Yes | The Featurebase internal ID of the contact to attach (MongoDB ObjectId) |
{
"contactId": "507f1f77bcf86cd799439012"
}Returns the updated contact object with the new company association.
{
"object": "contact",
"id": "507f1f77bcf86cd799439012",
"userId": "usr_12345",
"email": "john@acme.com",
"name": "John Doe",
"type": "customer",
"companies": [
{
"object": "company",
"id": "507f1f77bcf86cd799439011",
"companyId": "comp_12345",
"name": "Acme Inc"
}
]
}- 404 Not Found - Company or contact does not exist
This endpoint is only available in API version 2026-01-01.nova and newer.
- Mock serverhttps://docs.featurebase.app/_mock/rest-api/v2/companies/{id}/contacts
- Productionhttps://do.featurebase.app/v2/companies/{id}/contacts
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://docs.featurebase.app/_mock/rest-api/v2/companies/507f1f77bcf86cd799439011/contacts \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-H 'Featurebase-Version: 2026-01-01.nova' \
-d '{
"contactId": "507f1f77bcf86cd799439012"
}'{ "object": "contact", "id": "676f0f6765bdaa7d7d760f88", "userId": "676f0f673dbb299c8a4f3057", "organizationId": "5febde12dc56d60012d47db6", "companies": [], "email": "john@example.com", "name": "John Steezy", "profilePicture": "https://fb-usercontent.fra1.cdn.digitaloceanspaces.com/anon_23.png", "commentsCreated": 0, "postsCreated": 0, "lastActivity": "2025-01-03T21:42:30.181Z", "subscribedToChangelog": true, "manuallyOptedOutFromChangelog": false, "roles": [], "locale": "en", "verified": true, "type": "customer", "description": "", "customFields": { "property1": null, "property2": null } }
Request
Removes a contact (customer) from a company.
Removes the company from the contact's companyIds array and embedded companies array. Also decrements the linkedUsers count on the company.
id- The Featurebase internal ID of the company (MongoDB ObjectId)contactId- The Featurebase internal ID of the contact to remove (MongoDB ObjectId)
Returns the updated contact object with the company removed.
{
"object": "contact",
"id": "507f1f77bcf86cd799439012",
"userId": "usr_12345",
"email": "john@acme.com",
"name": "John Doe",
"type": "customer",
"companies": []
}- 400 Bad Request - Contact is not attached to this company
- 404 Not Found - Company or contact does not exist
This endpoint is only available in API version 2026-01-01.nova and newer.
- Mock serverhttps://docs.featurebase.app/_mock/rest-api/v2/companies/{id}/contacts/{contactId}
- Productionhttps://do.featurebase.app/v2/companies/{id}/contacts/{contactId}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X DELETE \
https://docs.featurebase.app/_mock/rest-api/v2/companies/507f1f77bcf86cd799439011/contacts/507f1f77bcf86cd799439012 \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Featurebase-Version: 2026-01-01.nova'{ "object": "contact", "id": "676f0f6765bdaa7d7d760f88", "userId": "676f0f673dbb299c8a4f3057", "organizationId": "5febde12dc56d60012d47db6", "companies": [], "email": "john@example.com", "name": "John Steezy", "profilePicture": "https://fb-usercontent.fra1.cdn.digitaloceanspaces.com/anon_23.png", "commentsCreated": 0, "postsCreated": 0, "lastActivity": "2025-01-03T21:42:30.181Z", "subscribedToChangelog": true, "manuallyOptedOutFromChangelog": false, "roles": [], "locale": "en", "verified": true, "type": "customer", "description": "", "customFields": { "property1": null, "property2": null } }
Comments
Threaded discussions on posts and changelogs. Comments support voting, moderation, and privacy controls.