Errors and pagination
How the API reports problems, pages through long lists, and is versioned.
Errors
Failed requests return a 4xx or 5xx status and a JSON body with a stable type and a message written for people:
{
"error": {
"type": "invalid_request",
"message": "status must be one of: Triage, In Progress, In Review, Done."
}
}
| Status | type | When |
|---|---|---|
| 400 | invalid_request | A field is missing, too long or not one of the allowed values. |
| 401 | authentication_required, invalid_api_key | No key, a malformed key, or a revoked one. |
| 402 | plan_limit_reached | Creating a report when the workspace has used its monthly reports. |
| 403 | plan_upgrade_required | Using feature requests from a Starter workspace. They are on the Pro plan. |
| 404 | not_found | Nothing with that ID in this workspace. |
| 409 | project_archived | Creating something in an archived project. |
| 413 | payload_too_large | The body is over 256 KB. |
| 429 | plan_limit_reached | The workspace has used its API and MCP requests for the month. |
| 500 | server_error | Something broke on our side. Retry with backoff. |
Plan limits
The API and the MCP server are on every plan. Each request made with a workspace's keys, through either one, counts toward a monthly allowance that resets on the 1st of the month (UTC):
| Plan | Requests per month | Active API keys | Support |
|---|---|---|---|
| Starter | 1,000 | 1 | These docs |
| Pro | 50,000 | 10 | |
| Enterprise | Unlimited | 20 | Dedicated |
Feature request endpoints and MCP tools need the Pro plan. The Developers page in the dashboard shows how many requests the workspace has used this month.
Pagination
List endpoints return a page of results:
{ "object": "list", "data": [ ... ], "has_more": true, "next_cursor": "eyJvIjoyNX0" }
Pass limit (1 to 100, default 25) to set the page size. When has_more is true, pass next_cursor back as cursor to get the next page. Treat cursors as opaque strings. The SDKs' listAll and list_all methods follow cursors for you.
Status and severity values
Report statuses are Triage, In Progress, In Review and Done. Severities are Blocker, High, Medium and Low. The API also accepts snake_case forms such as in_progress and any capitalization, and always returns the forms above.
Feature request statuses are new, open, planned, in_progress, shipped and declined.
Versioning
Every response carries a FeedbackDots-Version header with the date of the API version. Within /api/v1 we only add things: new endpoints, new optional fields, new fields in responses and new webhook events. Write your code so it ignores fields it doesn't know.
Spec
The full OpenAPI 3.1 description is public at /api/v1/openapi.json. Use it to generate a client in another language or import the API into Postman or Insomnia.