Scopes & Permissions

API keys use granular scopes to control access. Use broad scopes for full access or resource-specific scopes for least-privilege integrations.

Available Scopes

ScopeDescription
readRead access to all resources (JDs, resumes, matches, candidates)
writeCreate and update resources
adminManage API keys, full access to everything
jd:readRead-only access to job descriptions
jd:writeCreate and update job descriptions
resume:readRead-only access to resumes
match:readRead-only access to AI match results
candidate:readRead-only access to candidate search

How Scopes Work

Each endpoint requires at least one of its allowed scopes. For example, GET /jds requires either read or jd:read.

Broad scopes (read, write, admin) include all resource-specific scopes of that level. For example:

  • read grants jd:read + resume:read + match:read + candidate:read
  • write grants jd:write
  • admin grants everything

Example: Least-Privilege Keys

Read-only dashboard integration:

{ "scopes": ["read"] }

CI/CD that only pushes JDs:

{ "scopes": ["jd:write"] }

ATS sync that reads matches and creates JDs:

{ "scopes": ["jd:read", "jd:write", "match:read"] }

Admin key for managing other keys:

{ "scopes": ["admin"] }

Scope Errors

If your key lacks the required scope:

{
  "success": false,
  "error": "Insufficient scope: requires 'write'"
}

HTTP status: 403 Forbidden

Aram by ScootSign docs.scootsign.com