Reference
Permission scopes
Choose the least API-key permissions required for ingestion, investigation, response, and administration.
API-key scopes use resource:action. A key can receive only known scopes held by the member creating
it. Project scope and permission scope are both enforced: neither can widen the other.
The authenticated scope catalog at GET /api/v1/account/api-keys/scopes and Settings → Access is
authoritative. The groups below describe the current selectable catalog.
Telemetry and investigation
| Resource | Scopes |
|---|---|
| Ingestion | ingest:write |
| Traces | traces:read, traces:delete |
| Logs | logs:read, logs:delete |
| Metrics | metrics:read, metrics:delete |
| Errors and Issues | errors:read, errors:write, errors:delete |
| Query and search | query:read, query:write, search:read |
| Saved searches | saved_search:read, saved_search:write, saved_search:delete |
| Customers and accounts | persons:read, groups:read, groups:write, groups:delete |
| Events and flags | analytics:read, analytics:write, flags:read, flags:write, flags:delete |
| Anomalies | anomalies:read, anomalies:write, anomalies:delete |
| Replay | replay:read, replay:write, replay:delete |
| Releases | releases:read, releases:write |
| Export | export:read, export:write, export:download (owner/admin only) |
errors:write allows Issue lifecycle actions and symbol uploads; deleting error data requires
errors:delete. Application SDKs use ingest:write for OTLP telemetry and captured errors, plus
analytics:write when sending diagnostic, identify, group, or screen events through the capture
surface. Session replay uses replay:write instead of ingest:write.
Response and collaboration
| Resource | Scopes |
|---|---|
| Alerts | alerts:read, alerts:acknowledge, alerts:resolve, alerts:rules:read, alerts:rules:write, alerts:rules:delete |
| Silences | silences:read, silences:write, silences:delete |
| Delivery channels | channels:read, channels:write, channels:delete |
| On-call | oncall:read, oncall:contacts:write, oncall:write, oncall:delete |
| Escalation | escalation:read, escalation:write, escalation:delete |
| Incidents | incidents:read, incidents:respond, incidents:write, incidents:delete |
| Dashboards | dashboard:read, dashboard:write, dashboard:delete |
| Connections and tickets | connections:read, connections:write, connections:delete, tickets:read, tickets:write, tickets:delete |
| Account segments | account_segments:read, account_segments:write, account_segments:delete |
Responder actions such as acknowledging an alert or appending to an incident are separate from configuration and deletion. Give on-call automation the responder scopes it needs, not blanket administration.
Treat channels:read as a credential-grade scope. Reading a delivery channel returns its stored
configuration as you saved it, and a webhook channel’s configuration includes its URL and any
request headers you attached — which is where an authorization token usually lives. A key that only
needs to send telemetry should not carry it. Sending a test notification is channels:write, not
channels:read, because it delivers a real message to that channel’s recipients; a key used for
test-sends needs both, since the test first reads the channel it is about to use.
Personal contact methods are self-service and are gated twice. oncall:read lists them and
oncall:contacts:write adds, edits, or removes them; separately, every request is confined to the
calling user’s own contact methods, so no key can read or change someone else’s. Both scopes are
available to every role, including viewers — being reachable when you are on a rotation does not
depend on your role. Note that an API key acts as the member who created it, so a key you did not
intend to use for this still needs oncall:contacts:write withheld to be unable to change that
member’s paging destinations. Schedule administration stays on oncall:write and oncall:delete.
For dashboards, dashboard:write permits creation, cloning, and widget or layout changes. Changing
dashboard metadata or variables is limited to the dashboard owner and organization admins, and
deletion requires both dashboard:delete and dashboard-owner or organization-admin status.
dashboard:read never makes a shared URL public; dashboard links still require an authenticated
same-organization principal.
Organization, AI, and agents
| Resource | Scopes |
|---|---|
| Settings | settings:read, settings:write, settings:delete |
| GitHub configuration | github_config:read, github_config:write |
| Projects and members | projects:read, projects:write, projects:delete, members:read, members:write |
| API keys | api_key:read, api_key:write |
| Scores and evaluations | scores:read, scores:write, evals:read, evals:write |
| Customer Detective | investigations:run |
| Usage | usage:read |
| MCP | mcp:read, mcp:write |
Settings permissions are deliberately separate. settings:read shows stored organization and
global LLM pricing overrides without edit controls; it does not expose the embedded fallback
catalog. Adding or editing an organization override requires settings:write, and deleting one
requires settings:delete.
The same three scopes cover the organization record and its configuration entries. Reading the
organization or its configuration requires settings:read; renaming the organization or writing a
configuration entry requires settings:write; deleting the organization or removing a configuration
entry requires settings:delete. A key holding none of them authenticates normally and receives
403 permission_denied on all of them — which is the point: an unscoped key must not be able to
delete your organization. Changing a plan or a usage limit is not available to any organization
role, including owner.
Listing projects and listing the member roster are reads in their own right: projects:read returns
each project’s name, slug, id, and retention — whether you list them all or fetch one by id — and
some endpoints need it indirectly, because exporting data validates the project you name before it
accepts the job. members:read returns the roster including pending
invitations, which are the not-yet-accepted half of the same list. Both are available to every role,
because the project selector and the member picker appear throughout the product; creating,
renaming, or deleting a project, and administering members or invitations, remain owner/admin-only
under projects:write, projects:delete, and members:write. A key without the read scopes
authenticates normally and receives 403 permission_denied on those endpoints, so an ingestion-only
credential cannot enumerate your projects or your people.
Key management is itself scoped. Listing the organization’s keys requires api_key:read, and
creating, renaming, revoking, or re-scoping one requires api_key:write. A key without them
authenticates normally but receives 403 permission_denied on those endpoints — listing exposes
every key’s id, name, and granted scopes, so it is not something an unscoped credential should
reach. Granting api_key:write does not widen a key: a new key can still only receive scopes its
creator already holds. Leave both off any key that does not administer credentials.
mcp:write is an umbrella gate. An MCP write also requires its domain scope. For example, creating
an incident requires both MCP write access and the incident permission enforced by that tool.
Exact telemetry deletion requires mcp:write plus traces:delete or logs:delete on a
project-scoped key; the MCP actions do not accept a project override.
Safe key patterns
- Browser or mobile SDK: project-scoped
ingest:writeplusanalytics:write; addreplay:writeonly when recording browser replay. Browser flag evaluation additionally needsflags:read; treat all flag configuration and payloads as client-visible. - Server SDK: project-scoped
ingest:write, addinganalytics:writewhen it calls identify, group, screen, or diagnostic-event methods. - OpenTelemetry collector: project-scoped
ingest:writeonly. - Read-only agent:
mcp:readand only the read domains it needs. - Telemetry-cleanup agent: dedicated project key with
mcp:writeand onlytraces:deleteand/orlogs:delete; both actions preview the signed project and exact target before confirmation. - CI symbol upload: dedicated project key with
errors:write; addreleases:writewhen the same job also registers a release. - Operations automation: explicit responder or configuration scopes, fixed project, no unrelated deletes.
The wildcard platform-admin permission is not grantable to API keys.