Skip to content

Scopes

The scope registry a key draws from — thirteen read/write pairs spanning every area of the API — and the 403 a request missing one of them returns.

Requires API access to be enabled for your workspace

A key carries a subset of the scope registry, chosen at creation and immutable afterwards. Every endpoint declares the scope it requires — it is shown on each endpoint's reference page — and the check runs per request.

The registry

Two details worth noting:

  • *Webhook configuration rides the `workspace: scopes** — there is no separate webhooks:*` pair.
  • *`reseller: is special**: granting it to a key requires **organization ownership**, and at request time the key must live on the org owner's own (primary) workspace. Any other workspace gets a 403`, even with the scope present.

Missing a scope

Calling an endpoint whose scope your key lacks returns a 403 that names the missing scope:

This is distinct from the access-gate 403 (API access is not enabled for this workspace.) — a scope error means the workspace's access is fine and only this key is under-scoped.

Choosing scopes

Grant the least you need, per integration:

  • A read-only dashboard or BI sync: the :read scopes it displays — nothing else.
  • A CRM lead sync: leads:read (+ leads:write if it assigns owners).
  • A support tool that replies: conversations:read + conversations:write.
  • Knowledge automation (docs pipeline → chatbot): knowledge:write alone — it does not need chatbots:write to manage sources.

Because scopes are immutable, changing an integration's reach means issuing a new key with the right set and revoking the old one — which also gives you a clean audit boundary between the two configurations.

Where to go next

Last updated