Dashboard API reference

Served by the API process on :8080 by default. Everything is under /v1. Responses are JSON; errors carry a stable code, a human-readable message and a request_id.

Account & projects

POST/v1/auth/registerCreate an account. Returns no session — log in afterwards.
POST/v1/auth/loginExchange credentials for a session cookie.
POST/v1/auth/logoutEnd the current session.
GET/v1/meThe signed-in user and their organisation.
GET/v1/membersMembers of the organisation.
GET/v1/projectsList projects.
POST/v1/projectsCreate a project.
GET/v1/projects/{projectID}One project.
GET/v1/projects/{projectID}/dsnsThe project’s ingest keys.
POST/v1/projects/{projectID}/dsnsIssue a new DSN.
DELETE/v1/projects/{projectID}/dsns/{keyID}Revoke a DSN.
PUT/v1/projects/{projectID}/session-replayTurn replay capture on or off for the project.
GET/v1/api-keysList API keys.
POST/v1/api-keysCreate an API key. The secret is shown once.
DELETE/v1/api-keys/{keyID}Revoke an API key.
GET/v1/settingsOrganisation settings, including retention.
PATCH/v1/settingsChange organisation settings.
GET/v1/audit-logThe audit trail. Not customer-configurable.

Single sign-on

Available only when API_PUBLIC_URL is set. Without it every route here answers sso_unavailable, and the only other sign is a missing “single sign-on enabled” line at boot.

POST/v1/auth/sso/startBegin an SSO login.
GET/v1/auth/sso/callbackIdentity-provider callback.
GET/v1/settings/ssoThe current connection.
PUT/v1/settings/ssoConfigure the connection.
DELETE/v1/settings/ssoRemove the connection.
GET/v1/settings/sso/domainsClaimed email domains.
POST/v1/settings/sso/domainsClaim a domain.
POST/v1/settings/sso/domains/verifyProve a claimed domain.

Issues & events

GET/v1/issuesList issues, filtered and paged.
GET/v1/issues/{issueID}One issue.
GET/v1/issues/{issueID}/eventsOccurrences of an issue.
PATCH/v1/issues/{issueID}Change status (resolve, ignore, reopen).
GET/v1/usersEnd users seen in telemetry.
GET/v1/feedbackUser feedback submissions.
POST/v1/feedbackSubmit user feedback.

Traces, services & performance

GET/v1/tracesTrace list. Filters on spans, aggregates whole traces.
GET/v1/traces/{traceID}One trace with its spans.
GET/v1/servicesService list with health.
GET/v1/services/mapObserved service topology.
GET/v1/services/structureStructural facts about the topology.
GET/v1/services/dependenciesEdges between services.
GET/v1/services/approachingMetrics climbing toward the threshold, with the slope.
GET/v1/trafficTraffic by project rather than by slowest service.
GET/v1/queuesQueue and worker behaviour.
GET/v1/anomaliesDetected anomalies.
GET/v1/endpoints/surgesPer-endpoint abuse signal, no caller identity.
GET/v1/database/slow-queriesSlow database queries.
GET/v1/database/query-patternsQuery patterns.

Logs & metrics (read)

GET/v1/logsSearch log lines.
GET/v1/logs/patternsRecurring log shapes.
GET/v1/logs/surgesLog volume surges.
GET/v1/metrics/namesMetric names seen.
GET/v1/metrics/seriesPoints for a named series.

Session replay

GET/v1/projects/{projectID}/replayRecorded sessions.
GET/v1/projects/{projectID}/replay/{sessionID}One recording’s chunks. Owner scope, re-checks consent, and writes the audit trail before the bytes are read.

Deployments & releases

POST/v1/deploymentsRecord a deployment.
GET/v1/deploymentsList deployments.
GET/v1/deployments/{deploymentID}One deployment.
GET/v1/deployments/{deploymentID}/healthDid this deploy make things worse, with the arithmetic.
GET/v1/releasesReleases, derived from deployments rather than stored.
GET/v1/projects/{projectID}/integrationsConfigured VCS integrations.
PUT/v1/projects/{projectID}/integrations/{provider}Configure github or gitlab.
DELETE/v1/projects/{projectID}/integrations/{provider}Remove one.

Source maps

POST/v1/projects/{projectID}/artifactsUpload a source map or debug artifact.
GET/v1/projects/{projectID}/artifactsList artifacts.
DELETE/v1/projects/{projectID}/artifacts/{artifactID}Delete one.

Alerts, destinations & reports

GET/v1/alertsAlert history.
GET/v1/alert-destinationsWhere alerts are sent.
POST/v1/alert-destinationsAdd a destination.
DELETE/v1/alert-destinations/{destinationID}Remove one.
GET/v1/reports/scheduleThe digest schedule.
PUT/v1/reports/scheduleSet it.
DELETE/v1/reports/scheduleStop it.
GET/v1/reports/previewRender the next digest without sending it.

Cron monitoring & uptime

GET/v1/cron/checksList cron checks.
POST/v1/cron/checksCreate one.
PATCH/v1/cron/checks/{checkID}Change schedule or grace.
DELETE/v1/cron/checks/{checkID}Delete one.
GET/v1/cron/checks/{checkID}/pingsCheck-in history.
POST/v1/cron/checks/{checkID}/rotateRotate the check-in token.
GET/v1/checkins/{token}Check in. Unauthenticated — the token is the credential.
POST/v1/checkins/{token}Check in, with a body.
GET/v1/uptime/monitorsList uptime monitors.
POST/v1/uptime/monitorsCreate one.
PATCH/v1/uptime/monitors/{monitorID}Change one.
DELETE/v1/uptime/monitors/{monitorID}Delete one.
GET/v1/uptime/monitors/{monitorID}/checksProbe results.

Dashboards

GET/v1/dashboardsList dashboards.
POST/v1/dashboardsCreate one.
GET/v1/dashboards/{dashboardID}One dashboard.
PATCH/v1/dashboards/{dashboardID}Rename or re-describe.
PUT/v1/dashboards/{dashboardID}/widgetsReplace the widget set.
DELETE/v1/dashboards/{dashboardID}Delete one.

AI investigations

Every route here needs an AI provider key on the deployment. Without it the feature is off rather than failing per request.

POST/v1/issues/{issueID}/investigateInvestigate an issue.
GET/v1/issues/{issueID}/investigationThe result.
POST/v1/alerts/{alertID}/investigateInvestigate an alert.
GET/v1/alerts/{alertID}/investigationThe result.
POST/v1/projects/{projectID}/investigateInvestigate a project.
POST/v1/projects/{projectID}/explainAsk a question about the topology.
GET/v1/investigationsList investigations.
GET/v1/investigations/{investigationID}One investigation.

Billing

GET /v1/usage is always available. POST /v1/checkout exists only when GENIUSPAY_API_KEY is set — unset, the route is not mounted at all and answers 404 rather than 401, because “there is nothing here” is the honest answer.

GET/v1/usageMetered usage against the plan, with a caveat in every response.
POST/v1/checkoutStart a purchase. Org-admin scope. Returns a hosted checkout URL.

Operational

GET/healthzLiveness. On both the API and the ingest service.
GET/readyzReadiness, including dependencies.

Authentication

CredentialUsed forHow
DSNWriting telemetryIn the SDK config. Public by design — it can write and cannot read.
Session cookieThe dashboardPOST /v1/auth/login. The cookie is slk_session and lasts 720h by default.
API keyScripting the dashboard APIAuthorization header. Created at POST /v1/api-keys, shown once.
Check-in tokenCron check-insIn the URL. The token is the credential, so rotate it with POST /v1/cron/checks/{checkID}/rotate.
SSOThe dashboard, for a claimed domainNeeds API_PUBLIC_URL. Trusts a provider only for the email domain its connection claims, and only for accounts already invited.

Cookie-authenticated requests are Origin-checked. A request without an Origin matching DASHBOARD_ORIGIN is refused with origin_rejected (403). Scripting with curl against a local stack therefore needs -H "Origin: http://localhost:3000".

Rate limits

Rate limits are abuse control, and they are the one thing here that really does refuse a request. They have nothing to do with what your plan includes: going past a plan figure never throttles you and never rejects telemetry. Redis is authoritative so every instance shares a bucket, with a per-process fallback that keeps limiting alive if Redis is unavailable.

LimitDefaultScope
INGEST_REQUESTS_PER_MINUTE600Per project
INGEST_EVENTS_PER_MINUTE30,000Per organisation
AUTH_ATTEMPTS_PER_MINUTE10Per caller
INVESTIGATIONS_PER_HOUR100Per organisation

A refused request answers 429 with Retry-After.

← Documentation