docs
Dashboard

REST API

Read projects, issues, events, and AI triage — and change issue status — with an API token. Prefer an agent? See AI agents & MCP.

Authentication

Base URL: https://api.booboo.dev. Create a token in Organization → API tokens (see Create an API token) and send it on every request:

Authorization: Bearer boo_…

Requests and responses are JSON. Tokens are bound to one organization and optionally one project; a Read token can only make GET requests. An invalid, revoked or expired token gets 401.

A Read token grants the same read access as its creator, including member email addresses and full event payloads (request data, user context, breadcrumbs), which may contain your users' personal data. Treat tokens like passwords: never commit them, and scope them to a single project where possible. Tokens expire after 90 days by default (choose Never explicitly if you need a long-lived one), and revoking one under Organization settings → API tokens takes effect immediately.

Example

curl -H "Authorization: Bearer $BOOBOO_API_TOKEN" \
  "https://api.booboo.dev/organizations/my-org/projects/backend/issues/?status=open&limit=5"

Endpoints

Paths starting with … continue from /organizations/{org}/projects/{project}/. {short_id} is the issue number (the 42 in BACK-42).

MethodPathNotes
GET/organizations/{org}/projects/Projects the token can see
GET/organizations/{org}/projects/{project}/Project detail
GET…/{project}/environments/Distinct environments seen in the project
GET…/{project}/issues/List issues — see filters
GET…/issues/{short_id}/Issue detail
PUT…/issues/{short_id}/Change status. Body {"status": "resolved"} (open, resolved, or ignored). Read & write tokens only
GET…/issues/{short_id}/events/Events for the issue, newest first — see parameters
GET…/issues/{short_id}/events/{event_id}/Event detail with full stack trace, breadcrumbs, request, and context
GET…/issues/{short_id}/triage/AI triage for the issue, or {"status": "not_generated"} / "generating"

Issue list parameters

ParameterDescription
statusopen, resolved, or ignored
environmentOnly issues seen in this environment
sinceISO 8601 timestamp — issues first seen at or after it ("new issues")
active_sinceISO 8601 timestamp — issues last seen at or after it
sortlast_seen (default), first_seen, or count; always descending
limit1–500. When present the response is a page {results, count, limit, offset}; without it, a bare array
offsetSkip this many issues (use with limit)

Invalid timestamps return 400.

{
  "results": [ ... ],
  "count": 37,
  "limit": 5,
  "offset": 0
}

Issue object

{
  "short_id": 42,
  "display_id": "BACK-42",
  "project_slug": "backend",
  "title": "ZeroDivisionError: division by zero",
  "culprit": "app/utils.py in safe_divide",
  "status": "open",
  "level": "error",
  "is_regression": false,
  "first_seen": "2026-10-17T09:12:44.120Z",
  "last_seen": "2026-10-18T07:58:03.511Z",
  "count": 17,
  "environments": ["production"]
}

Event list parameters

ParameterDescription
limit1–200. When present the response is a page {results, count, limit, offset}; without it, a bare array of the newest 200 events
offsetSkip this many events (use with limit)

List items are a summary; fetch an event by id for its request data, context, tags, and breadcrumbs.

Errors

StatusMeaning
401Missing, invalid, revoked, or expired token. Response includes WWW-Authenticate: Bearer
403Outside the token's scope: another organization or project, a write with a Read token, an endpoint tokens can't use, or the creator's role doesn't allow it
404Project, issue, or event doesn't exist
429Rate limit exceeded — 600 requests per hour per token