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/register
Create an account. Returns no session — log in afterwards.
POST
/v1/auth/login
Exchange credentials for a session cookie.
POST
/v1/auth/logout
End the current session.
GET
/v1/me
The signed-in user and their organisation.
GET
/v1/members
Members of the organisation.
GET
/v1/projects
List projects.
POST
/v1/projects
Create a project.
GET
/v1/projects/{projectID}
One project.
GET
/v1/projects/{projectID}/dsns
The project’s ingest keys.
POST
/v1/projects/{projectID}/dsns
Issue a new DSN.
DELETE
/v1/projects/{projectID}/dsns/{keyID}
Revoke a DSN.
PUT
/v1/projects/{projectID}/session-replay
Turn replay capture on or off for the project.
GET
/v1/api-keys
List API keys.
POST
/v1/api-keys
Create an API key. The secret is shown once.
DELETE
/v1/api-keys/{keyID}
Revoke an API key.
GET
/v1/settings
Organisation settings, including retention.
PATCH
/v1/settings
Change organisation settings.
GET
/v1/audit-log
The 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/start
Begin an SSO login.
GET
/v1/auth/sso/callback
Identity-provider callback.
GET
/v1/settings/sso
The current connection.
PUT
/v1/settings/sso
Configure the connection.
DELETE
/v1/settings/sso
Remove the connection.
GET
/v1/settings/sso/domains
Claimed email domains.
POST
/v1/settings/sso/domains
Claim a domain.
POST
/v1/settings/sso/domains/verify
Prove a claimed domain.
Issues & events
GET
/v1/issues
List issues, filtered and paged.
GET
/v1/issues/{issueID}
One issue.
GET
/v1/issues/{issueID}/events
Occurrences of an issue.
PATCH
/v1/issues/{issueID}
Change status (resolve, ignore, reopen).
GET
/v1/users
End users seen in telemetry.
GET
/v1/feedback
User feedback submissions.
POST
/v1/feedback
Submit user feedback.
Traces, services & performance
GET
/v1/traces
Trace list. Filters on spans, aggregates whole traces.
GET
/v1/traces/{traceID}
One trace with its spans.
GET
/v1/services
Service list with health.
GET
/v1/services/map
Observed service topology.
GET
/v1/services/structure
Structural facts about the topology.
GET
/v1/services/dependencies
Edges between services.
GET
/v1/services/approaching
Metrics climbing toward the threshold, with the slope.
GET
/v1/traffic
Traffic by project rather than by slowest service.
GET
/v1/queues
Queue and worker behaviour.
GET
/v1/anomalies
Detected anomalies.
GET
/v1/endpoints/surges
Per-endpoint abuse signal, no caller identity.
GET
/v1/database/slow-queries
Slow database queries.
GET
/v1/database/query-patterns
Query patterns.
Logs & metrics (read)
GET
/v1/logs
Search log lines.
GET
/v1/logs/patterns
Recurring log shapes.
GET
/v1/logs/surges
Log volume surges.
GET
/v1/metrics/names
Metric names seen.
GET
/v1/metrics/series
Points for a named series.
Session replay
GET
/v1/projects/{projectID}/replay
Recorded 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/deployments
Record a deployment.
GET
/v1/deployments
List deployments.
GET
/v1/deployments/{deploymentID}
One deployment.
GET
/v1/deployments/{deploymentID}/health
Did this deploy make things worse, with the arithmetic.
GET
/v1/releases
Releases, derived from deployments rather than stored.
GET
/v1/projects/{projectID}/integrations
Configured 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}/artifacts
Upload a source map or debug artifact.
GET
/v1/projects/{projectID}/artifacts
List artifacts.
DELETE
/v1/projects/{projectID}/artifacts/{artifactID}
Delete one.
Alerts, destinations & reports
GET
/v1/alerts
Alert history.
GET
/v1/alert-destinations
Where alerts are sent.
POST
/v1/alert-destinations
Add a destination.
DELETE
/v1/alert-destinations/{destinationID}
Remove one.
GET
/v1/reports/schedule
The digest schedule.
PUT
/v1/reports/schedule
Set it.
DELETE
/v1/reports/schedule
Stop it.
GET
/v1/reports/preview
Render the next digest without sending it.
Cron monitoring & uptime
GET
/v1/cron/checks
List cron checks.
POST
/v1/cron/checks
Create one.
PATCH
/v1/cron/checks/{checkID}
Change schedule or grace.
DELETE
/v1/cron/checks/{checkID}
Delete one.
GET
/v1/cron/checks/{checkID}/pings
Check-in history.
POST
/v1/cron/checks/{checkID}/rotate
Rotate 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/monitors
List uptime monitors.
POST
/v1/uptime/monitors
Create one.
PATCH
/v1/uptime/monitors/{monitorID}
Change one.
DELETE
/v1/uptime/monitors/{monitorID}
Delete one.
GET
/v1/uptime/monitors/{monitorID}/checks
Probe results.
Dashboards
GET
/v1/dashboards
List dashboards.
POST
/v1/dashboards
Create one.
GET
/v1/dashboards/{dashboardID}
One dashboard.
PATCH
/v1/dashboards/{dashboardID}
Rename or re-describe.
PUT
/v1/dashboards/{dashboardID}/widgets
Replace 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}/investigate
Investigate an issue.
GET
/v1/issues/{issueID}/investigation
The result.
POST
/v1/alerts/{alertID}/investigate
Investigate an alert.
GET
/v1/alerts/{alertID}/investigation
The result.
POST
/v1/projects/{projectID}/investigate
Investigate a project.
POST
/v1/projects/{projectID}/explain
Ask a question about the topology.
GET
/v1/investigations
List 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/usage
Metered usage against the plan, with a caveat in every response.
POST
/v1/checkout
Start a purchase. Org-admin scope. Returns a hosted checkout URL.
Operational
GET
/healthz
Liveness. On both the API and the ingest service.
GET
/readyz
Readiness, including dependencies.
Authentication
Credential
Used for
How
DSN
Writing telemetry
In the SDK config. Public by design — it can write and cannot read.
Session cookie
The dashboard
POST /v1/auth/login. The cookie is slk_session and lasts 720h by default.
API key
Scripting the dashboard API
Authorization header. Created at POST /v1/api-keys, shown once.
Check-in token
Cron check-ins
In the URL. The token is the credential, so rotate it with POST /v1/cron/checks/{checkID}/rotate.
SSO
The dashboard, for a claimed domain
Needs 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.