Browse the docs

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."
  }
}
StatustypeWhen
400invalid_requestA field is missing, too long or not one of the allowed values.
401authentication_required, invalid_api_keyNo key, a malformed key, or a revoked one.
402plan_limit_reachedCreating a report when the workspace has used its monthly reports.
403plan_upgrade_requiredUsing feature requests from a Starter workspace. They are on the Pro plan.
404not_foundNothing with that ID in this workspace.
409project_archivedCreating something in an archived project.
413payload_too_largeThe body is over 256 KB.
429plan_limit_reachedThe workspace has used its API and MCP requests for the month.
500server_errorSomething 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):

PlanRequests per monthActive API keysSupport
Starter1,0001These docs
Pro50,00010Email
EnterpriseUnlimited20Dedicated

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.