Skip to content

Scope reference

A scope is the wire format of a capability. When a role's capability is "Read transactions", the token carries scope: payments:read. APIs receiving the token validate the scope claim.

The scope catalogue is the tenant-wide list of legitimate scope strings. When you build a role's capabilities, you're picking from this catalogue.

Every tenant ships with the four OIDC standards:

ScopeWhat it grants
openidRequired for any OIDC flow. Issues an id token alongside the access token.
profileAdds name, given_name, family_name, picture, locale to the id token + userinfo.
emailAdds email + email_verified.
offline_accessRequests a refresh token alongside the access token.

You don't add these to custom roles — they're handled at the application's allowed-scopes list, requested by the application at sign-in.

These let an application (or, indirectly, a user via a role) call platform APIs. Shape: <resource>:<verb>.

For a user's own account.

ScopeGrants
me:readRead own profile, sessions, MFA factors.
me:writeUpdate own profile, change password, manage own MFA.
me:sessionsList + revoke own sessions.
ScopeGrants
users:readRead user records in this tenant.
users:writeCreate / update / disable / delete users.
users:bulkBulk import + export.
ScopeGrants
applications:readRead application configs.
applications:writeCreate / update / disable / delete applications.
applications:rotate-secretRotate client secrets.
ScopeGrants
groups:readRead groups + memberships.
groups:writeManage groups + memberships.
roles:readRead role definitions + assignments.
roles:writeManage roles + assignments.
ScopeGrants
audit:readRead the audit feed.
audit:exportBulk export audit entries.
ScopeGrants
resources:readRead resources + relations + check authorisation.
resources:writeCreate / update / delete resources + relations.
ScopeGrants
federation:readRead federation connections.
federation:writeManage federation connections (OIDC + SAML).
ScopeGrants
webhooks:readRead webhook subscriptions + delivery history.
webhooks:writeManage webhook subscriptions.

These don't have integrator scopes because the surfaces are tenant-admin web-only:

  • Flows + Actions configuration
  • Threat intelligence feed management
  • Reports configuration
  • Branding
  • Breach incident management (read / resolve)
  • Audit configuration (streaming setup; not reading)

Integrators receive webhook events for downstream reaction; the configuration itself stays in the admin console.

Your applications likely talk to your own backend APIs, not just the platform's. The platform supports tenant-defined custom scopes for that surface.

Roles & scopes → Scope reference → New scope.

Define:

  • Namepayments:read, inventory:write, analytics:export. Conventional shape is <resource>:<verb>; the platform doesn't enforce it but consistency pays off.
  • Description — what your API treats this scope as granting.
  • Category (optional) — for grouping in the picker UI.

Save. The scope is available for:

  • Role capability assignment.
  • Application allowed-scopes list.
  • Bulk imports + management API operations.
  1. A user with role X has capabilities in role X.
  2. Capabilities resolve to scope strings.
  3. On sign-in, the application requests a token with scope: openid profile email <custom-set>.
  4. The platform intersects: requested scopes ∩ application's allowed scopes ∩ user's capabilities.
  5. The resulting scope set becomes the token's scope claim.
  6. Your API validates the scope claim before serving each request.

The most-restrictive of the three sets wins. An application can't request what it isn't allowed to request; a user can't be granted scopes their roles don't cover.

Conventions that pay off:

  • Lowercasepayments:read, never Payments:Read.
  • <resource>:<verb> — be consistent across your tenant.
  • Avoid *payments:* looks tidy but obscures intent. Define the specific verbs you need.
  • One concept per scopepayments:approve not payments:approve-and-export. Split when the verbs are separable.

The platform doesn't enforce these; picking and applying a convention saves your future self.

  • Scope name with whitespace — scope strings are space-delimited on the wire; whitespace inside one would break parsing.
  • Scope name starting with @ — reserved for platform-internal scopes.
  • Scopes deleted while still in use — the platform refuses deletion if any role or application still references the scope. Remove the references first.