x-required-scope); a key without it receives 403 FORBIDDEN. Two kinds of exception exist: GET /me requires no scope (credential health check), and a few endpoints accept a legacy alternative for backwards compatibility (e.g. GET /cases honors documents:read alongside cases:read).
Format
Scopes are<resource>:<verb>, all lowercase:
Rules:
- A verb never implies another —
writedoes not implyread. Keys are granted explicit lists. - There are no wildcard scopes (
*,cases:*) — explicit grants only. - Scopes gate endpoints, and in two cases gate fields (
pii:read) or an entire elevated domain (medical:*) — see below.
Standard scopes
Note:
documents:read, documents:write, and webhooks:manage predate the rest of the vocabulary; existing keys holding them keep working unchanged, and documents:read is still honored on GET /cases (the original document-sync inventory endpoint) alongside cases:read.
Elevated scopes (PHI/PII)
These scopes are never bundled and never implied by any standard scope, and are admin-granted only — they can be added to a key exclusively by platform administrators after BAA verification. Self-serve create/update requests that include them are rejected server-side.
Any key holding an elevated scope additionally requires:
- an acting attorney (every PHI access is attributable to a person),
- HIPAA audit entries written for every read of a gated endpoint or field,
- a shorter maximum expiry (1 year) and the
sensitiverate tier (60/min).
Scope ↔ acting-attorney matrix
Scopes and organization roles
The key scopereports:read is separate from the acting attorney’s organization permissions reports:view, reports:export, and applicable hq:* and data permissions. A hierarchy toggle is not an additional API scope and does not grant a role. See the HQ reporting checklist.
org:manage controls administrative API operations, including key management. It is not required just to execute reports, and it does not make all resource endpoints cross-organization. Portal credential management uses the separate organization permission integrations:manage.
Choosing scopes
Grant the minimum set your integration needs, and split responsibilities across keys where practical — keys are cheap, independently revocable, and each carries its own rate-limit budget and webhook subscriptions. A typical read-only sync integration needs onlyevents:read plus the :read scopes of the entities it mirrors.