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 a list of webhooks in your organization using cursor-based pagination.
limit- Number of webhooks to return (1-100, default 10)cursor- Cursor from previous response for paginationstatus- Filter by status: "active", "paused", or "suspended"
Returns a list object with:
object- Always "list"data- Array of webhook objectsnextCursor- Cursor for the next page, or null if no more results
Each webhook includes:
id- Unique webhook identifiername- Human-readable webhook nameurl- Webhook endpoint URLtopics- Array of subscribed event topicsstatus- Current status ("active", "paused", "suspended")health- Health metrics (response times, error counts)createdAt- Creation timestampupdatedAt- Last update timestamp
{
"object": "list",
"data": [
{
"object": "webhook",
"id": "507f1f77bcf86cd799439011",
"name": "Production Webhook",
"url": "https://example.com/webhooks",
"topics": ["post.created", "post.updated"],
"status": "active",
...
}
],
"nextCursor": "eyJpZCI6IjUwN2YxZjc3YmNmODZjZDc5OTQzOTAxMSJ9"
}This endpoint is only available in API version 2026-01-01.nova and newer.
- Mock serverhttps://docs.featurebase.app/_mock/rest-api/v2/webhooks
- Productionhttps://do.featurebase.app/v2/webhooks
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs.featurebase.app/_mock/rest-api/v2/webhooks?limit=10&cursor=eyJpZCI6IjUwN2YxZjc3YmNmODZjZDc5OTQzOTAxMSJ9&status=active' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Featurebase-Version: 2026-01-01.nova'Success
Array of webhooks
Webhook signing secret for verifying payloads
Optional description of the webhook purpose
Array of event topics the webhook subscribes to
Current status of the webhook
Last delivery attempt status
Status message from last delivery attempt
ISO timestamp of last successful delivery
Number of errors since last successful delivery
ISO timestamp when the webhook was created
{ "object": "list", "data": [], "nextCursor": "eyJpZCI6IjUwN2YxZjc3YmNmODZjZDc5OTQzOTAxMSJ9" }
Request
Creates a new webhook to receive event notifications.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Human-readable name (max 100 chars) |
url | string | Yes | Webhook endpoint URL (must be HTTPS) |
description | string | No | Optional description (max 500 chars) |
topics | string[] | Yes | Event topics to subscribe to |
requestConfig | object | No | Request configuration |
requestConfig.headers | object | No | Custom headers to send (max 10) |
post.created- When a new post is createdpost.updated- When a post is updatedpost.deleted- When a post is deletedpost.voted- When a post receives a votechangelog.published- When a changelog is publishedcomment.created- When a comment is createdcomment.updated- When a comment is updatedcomment.deleted- When a comment is deleted
Returns the created webhook object including the signing secret.
{
"name": "Production Webhook",
"url": "https://example.com/webhooks",
"description": "Handles all production events",
"topics": ["post.created", "post.updated", "comment.created"],
"requestConfig": {
"timeoutMs": 10000,
"headers": {
"X-Custom-Header": "value"
}
}
}{
"object": "webhook",
"id": "507f1f77bcf86cd799439011",
"name": "Production Webhook",
"url": "https://example.com/webhooks",
"secret": "whsec_abc123def456ghi789",
"topics": ["post.created", "post.updated", "comment.created"],
"status": "active",
...
}Each organization has a maximum number of webhooks (default: 10). Creating a webhook when the limit is reached will return a 400 error.
This endpoint is only available in API version 2026-01-01.nova and newer.
Human-readable name for the webhook
Optional description of the webhook purpose
Array of event topics to subscribe to
- Mock serverhttps://docs.featurebase.app/_mock/rest-api/v2/webhooks
- Productionhttps://do.featurebase.app/v2/webhooks
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://docs.featurebase.app/_mock/rest-api/v2/webhooks \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-H 'Featurebase-Version: 2026-01-01.nova' \
-d '{
"name": "Production Webhook",
"url": "https://example.com/webhooks",
"description": "Handles all production events",
"topics": [
"post.created",
"post.updated"
],
"requestConfig": {
"headers": {
"X-Custom-Header": "value"
}
}
}'Created
Webhook signing secret for verifying payloads
Optional description of the webhook purpose
Array of event topics the webhook subscribes to
Last delivery attempt status
ISO timestamp of last successful delivery
Number of errors since last successful delivery
ISO timestamp when the webhook was created
{ "object": "webhook", "id": "507f1f77bcf86cd799439011", "name": "Production Webhook", "url": "https://example.com/webhooks", "secret": "whsec_abc123def456ghi789", "description": "Handles all production events", "topics": [ "post.created", "post.updated" ], "status": "active", "requestConfig": { "timeoutMs": 5000, "headers": { … } }, "lastStatus": { "code": 200, "message": "Success", "timestamp": "2025-01-15T10:30:00.000Z" }, "health": { "lastResponseTime": 150, "avgResponseTime": 200, "lastSuccessAt": "2025-01-15T10:30:00.000Z", "errorsSinceLastSuccess": 0, "consecutiveFailures": 0 }, "version": "1.0", "createdAt": "2025-01-15T10:30:00.000Z", "updatedAt": "2025-01-15T10:30:00.000Z" }
Request
Retrieves a single webhook by its unique identifier.
id- The webhook ID (24-character ObjectId)
Returns a webhook object with:
object- Always "webhook"id- Unique webhook identifiername- Human-readable webhook nameurl- Webhook endpoint URLdescription- Optional descriptiontopics- Array of subscribed event topicsstatus- Current status ("active", "paused", "suspended")requestConfig- Request configuration (timeout, headers)lastStatus- Last delivery attempt statushealth- Health metricscreatedAt- Creation timestampupdatedAt- Last update timestamp
The response includes the webhook signing secret for payload verification.
{
"object": "webhook",
"id": "507f1f77bcf86cd799439011",
"name": "Production Webhook",
"url": "https://example.com/webhooks",
"description": "Handles all production events",
"topics": ["post.created", "post.updated"],
"status": "active",
"requestConfig": {
"timeoutMs": 5000,
"headers": {}
},
"lastStatus": {
"code": 200,
"message": "Success",
"timestamp": "2025-01-15T10:30:00.000Z"
},
"health": {
"lastResponseTime": 150,
"avgResponseTime": 200,
"lastSuccessAt": "2025-01-15T10:30:00.000Z",
"errorsSinceLastSuccess": 0,
"consecutiveFailures": 0
},
"createdAt": "2025-01-01T00:00:00.000Z",
"updatedAt": "2025-01-15T10:30:00.000Z"
}This endpoint is only available in API version 2026-01-01.nova and newer.
- Mock serverhttps://docs.featurebase.app/_mock/rest-api/v2/webhooks/{id}
- Productionhttps://do.featurebase.app/v2/webhooks/{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/webhooks/507f1f77bcf86cd799439011 \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Featurebase-Version: 2026-01-01.nova'Success
Webhook signing secret for verifying payloads
Optional description of the webhook purpose
Array of event topics the webhook subscribes to
Last delivery attempt status
ISO timestamp of last successful delivery
Number of errors since last successful delivery
ISO timestamp when the webhook was created
{ "object": "webhook", "id": "507f1f77bcf86cd799439011", "name": "Production Webhook", "url": "https://example.com/webhooks", "secret": "whsec_abc123def456ghi789", "description": "Handles all production events", "topics": [ "post.created", "post.updated" ], "status": "active", "requestConfig": { "timeoutMs": 5000, "headers": { … } }, "lastStatus": { "code": 200, "message": "Success", "timestamp": "2025-01-15T10:30:00.000Z" }, "health": { "lastResponseTime": 150, "avgResponseTime": 200, "lastSuccessAt": "2025-01-15T10:30:00.000Z", "errorsSinceLastSuccess": 0, "consecutiveFailures": 0 }, "version": "1.0", "createdAt": "2025-01-15T10:30:00.000Z", "updatedAt": "2025-01-15T10:30: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.