Key endpoints
Ingestion and API routes.
Event ingestion
Sentry-compatible ingestion endpoints:
POST /api/:projectId/store/POST /api/:projectId/envelope/
The envelope endpoint takes every item type the SDKs send: event, transaction
(and the span items that arrive with it), session, sessions (aggregates) and
log. Each request must include a valid project key, supplied through the
x-sentry-auth header, the sentry_key query parameter, or HTTP Basic auth.
Traces can also arrive over OTLP: POST /v1/traces (see the
OpenTelemetry pages).
Rate limits
Ingestion is rate limited per project, counted in the database so every instance and restart shares one window:
| Variable | Default | Window |
|---|---|---|
RATE_LIMIT_EVENTS_PER_MINUTE | 1000 | one minute |
RATE_LIMIT_EVENTS_PER_HOUR | 50000 | one hour |
Over the limit, ingestion answers 429 with { "code": "RATE_LIMITED" }. Point a
separate DSN at a separate project when one client needs its own budget.
REST API
Everything lives under /api/v1:
GET/POST /organizations,GET/PATCH/DELETE /organizations/{slug}- members, invitations, teams, API tokens, audit, agent keys + agent audit
- projects, DSN keys (create/rotate/revoke/activate), project team grants, debug files, session stats, project stats
- project groups — projects that ship together, for cross-project views
- issues (org feed + counts, filters), triage (status/assign/comment/mute), activity, events per issue
- events per project, single-event lookup
- alert rules, notification channels, alert history, channel test sends
- dashboards (create, generate from a prompt, star, view) and monitors
- billing view (plan, usage, quotas)
- onboarding
Pagination
Most lists take limit and offset. The issue feed is keyset-paginated instead,
because grouping means rows move while you read them: request cursor= from a
previous response's nextCursor, and the page continues from where it left off
without repeating or skipping an issue that changed in between.
Traces, logs and AI
Traces are stored as spans, so a trace is read as a tree rather than as an event:
GET /organizations/{slug}/traces— recent traces, one row per transaction (newest first), each with its span and error counts.op=narrows to traces containing a span with that op.GET /organizations/{slug}/traces/{traceId}— one trace with every span, oldest first: the waterfall's order, with each span's own attributes.GET /organizations/{slug}/transactions— p50/p95/avg latency and an error rate per transaction, slowest by p95 first. Percentiles are computed per transaction, so a transaction with four runs and one with four million both get a p95 that means the same thing.GET /organizations/{slug}/logs— the structured log feed, filterable by project, level, body substring and time.traceId=returns just one trace's lines, which is how the waterfall links back to them. Attributes arrive as JSON and are returned as serialized JSON.GET /organizations/{slug}/gen-ai— AI usage rolled up fromgen_ai.*span attributes: calls and tokens per model, plus the tools and agents used.GET /organizations/{slug}/storage— rows and bytes held per project. Payload bytes are summed exactly up to the sampling threshold and estimated above it;estimatedandanyEstimatedsay which figures are estimates.
The full schema — parameters, request bodies and response shapes — is the
OpenAPI document at /openapi.json, which also lists the MCP surface.
MCP
POST /mcp speaks streamable HTTP MCP with 21 tools. Authenticate with an ak_…
agent key; every call is recorded in the agent audit trail.
| Family | Tools |
|---|---|
| Workspace | list_organizations, list_projects, create_project, get_project_dsn |
| Issues | list_issues, get_issue, update_issue_status, assign_issue, add_issue_comment, list_issue_events, related_issues |
| Events | get_event, ingest_test_event |
| Alerts | list_alert_rules, create_alert_rule, list_notification_channels |
| Releases | list_release_files |
| Project groups | list_project_groups, create_project_group |
| Dashboards | list_dashboards, create_dashboard |
Releases and artifacts
sentry-cli-compatible routes under /api/0/:
GET /api/0/organizations/{slug}/chunk-upload/— chunk-upload capabilitiesPOST /api/0/organizations/{slug}/chunk-upload/— gzip chunk uploadPOST /api/0/organizations/{slug}/artifactbundle/assemble— artifact bundles- release files: create/get/list/upload/update/delete