Skip to main content

REST API

Everything the dashboard does is a call to /api/v1. The live OpenAPI schema is at GET /api/schema/, with Swagger UI at /api/docs/.

Authentication​

Two credential types, same header:

Authorization: Bearer <jwt_access_token> # a signed-in user
Authorization: Bearer errora_pat_… # a personal access token (CI, scripts, MCP)

Get a JWT with POST /auth/login or POST /auth/otp/verify, refresh it with POST /auth/refresh. For anything long-lived use a personal access token.

Every endpoint checks a capability (project:read, issue:write, org:billing, …), not a role name — see Roles.

Conventions​

  • IDs are UUIDs. Cron monitors are also addressable by slug.
  • List endpoints take limit/offset, and mostly stats_period (1h, 24h, 7d, 14d, 30d) plus environment.
  • Text search is q.
  • Times are ISO-8601 UTC.
  • Errors are {"detail": "…"} with the usual status codes: 400 validation, 401 unauthenticated, 403 missing capability, 404 not found or not yours, 429 rate limited.

Endpoint map​

AreaEndpoints
AuthPOST /auth/start, /auth/login, /auth/otp/request, /auth/otp/verify, /auth/refresh, /auth/logout, /auth/password, /auth/totp/setup|enable|disable, GET /auth/me
TokensGET/POST /auth/tokens, DELETE /auth/tokens/{id}
OrganizationsGET/POST /organizations, GET/PATCH/DELETE /organizations/{id}, GET .../members, PATCH .../members/{id}, GET .../invites, POST .../invite, GET /invites/preview/{token}, POST /invites/accept
ProjectsGET/POST /organizations/{id}/projects, GET/PATCH/DELETE .../projects/{id}, GET .../projects/stats, GET/POST .../projects/{id}/keys
IssuesGET /projects/{id}/issues, GET .../issues/{id}, POST .../issues/{id}/resolve|ignore|archive|bookmark|assign, GET .../issues/trends, GET .../issues/{id}/series, GET .../events/{event_id}
Issue trackingGET/POST .../issues/{id}/external-issues, GET .../external-issues/search, GET .../issues/{id}/repositories
PerformanceGET /projects/{id}/transactions, GET .../transactions/{id}
LogsGET /projects/{id}/logs, GET .../logs/{id}, GET .../logs/attribute-keys
ReplaysGET /projects/{id}/replays, GET .../replays/{replay_id}, GET .../replays/{replay_id}/events
Cron monitorsGET/POST /projects/{id}/monitors, GET/PATCH/DELETE .../monitors/{slug}, GET .../monitors/{slug}/checkins|stats, GET .../monitors/overview
UptimeGET/POST /projects/{id}/uptime-monitors, GET/PATCH/DELETE .../uptime-monitors/{id}, GET .../checks|stats, POST .../check-now, GET .../uptime-monitors/overview
User feedbackGET/POST /projects/{id}/feedback, GET/PATCH/DELETE .../feedback/{id}, GET .../feedback/summary, GET /issues/{id}/feedback
ProfilingGET /projects/{id}/profiles, GET .../profiles/{id}, GET .../profiles/{id}/flamegraph, GET .../profiles/functions|overview
MetricsGET /projects/{id}/metrics, GET .../metrics/series|summary|tags
AI monitoringGET /projects/{id}/insights/agents, .../insights/agents/runs, .../insights/agents/runs/{trace_id}, .../insights/mcp
Source mapsGET/POST /projects/{id}/release-files, GET/DELETE .../release-files/{id}
DashboardsGET /dashboards/catalog, GET/POST /organizations/{id}/dashboards, GET/PATCH/DELETE .../dashboards/{id}, POST .../widgets, PATCH .../widgets/reorder, PATCH/DELETE .../widgets/{id}, GET .../widgets/{id}/data
IntegrationsGET/POST /organizations/{id}/integrations, POST .../integrations/{id}/sync, GET .../integrations/{id}/repositories
AIPOST /projects/{id}/issues/{id}/autofix, GET/POST /organizations/{id}/ai-configs, PATCH/DELETE .../ai-configs/{id}
AlertsGET/POST /organizations/{id}/channels, PATCH/DELETE .../channels/{id}, GET .../channels/template-meta, POST .../channels/preview, POST .../channels/{id}/test, GET/POST .../alert-rules, POST .../chat-links/start
BillingGET /pricing, GET /organizations/{id}/usage, GET .../wallet, GET .../wallet/transactions, GET/POST/PATCH/DELETE .../balance-alerts
PaymentsGET /payment-gateways, POST /organizations/{id}/wallet/top-up, GET .../payments

Outside /api/v1: the ingestion endpoints and POST /mcp (MCP server).

Example​

# Sign in
ACCESS=$(curl -s -X POST "$ERRORA/api/v1/auth/login" \
-H 'Content-Type: application/json' \
-d '{"phone":"09121234567","password":"…"}' | python3 -c 'import json,sys;print(json.load(sys.stdin)["access"])')

# Unresolved issues in the last 24h
curl -s -H "Authorization: Bearer $ACCESS" \
"$ERRORA/api/v1/projects/$PROJECT_ID/issues?status=unresolved&stats_period=24h&limit=10"

# Resolve one
curl -s -X POST -H "Authorization: Bearer $ACCESS" \
"$ERRORA/api/v1/projects/$PROJECT_ID/issues/$ISSUE_ID/resolve"