WHOWORKEDDOCS

Scopes & Permissions

Understand API key scopes and what each permission level allows.

API keys can be created with specific scopes to limit what they can access. This follows the principle of least privilege — only grant the permissions your integration needs.

Available scopes

ScopeDescription
entries:readRead time entries
entries:writeCreate, update, and delete time entries
projects:readRead projects
projects:writeCreate, update, and delete projects
tasks:readRead workstreams
tasks:writeCreate, update, and delete workstreams
clients:readRead clients
clients:writeCreate, update, and delete clients
invoices:readRead invoices
invoices:writeCreate, update, and delete invoices
tags:readRead tags
tags:writeCreate, update, and delete tags
agent_sessions:readRead agent sessions
agent_sessions:writeLog and update agent sessions
ai_attributions:readRead AI attributions
ai_attributions:writeCreate, update, and delete AI attributions
ai_attributions:manageReview and approve AI attributions
ai_reporters:readRead AI reporters
ai_reporters:writeCreate, update, and delete AI reporters
external_id_mappings:readRead external ID mappings
external_id_mappings:writeCreate, update, and delete external ID mappings
skills:readRead skills
skills:writeCreate, update, and delete skills
members:readRead workspace members
members:writeInvite, update, and remove workspace members
invitations:readRead pending invitations
invitations:writeSend and revoke invitations

Workstreams are tasks in the API for historical reasons — the scope is tasks:* but the product calls them workstreams.

Write implies read: a key with entries:write can also perform entries:read.

Scope combinations

When creating an API key, you can select any combination of scopes. Common patterns:

  • Read-only integration — Select all *:read scopes for dashboards and reporting.
  • Time tracking botentries:read + entries:write + projects:read.
  • AI agententries:write + projects:read + agent_sessions:write for logging work.

Error handling

If your API key lacks a required scope, the API returns 403 Forbidden with a message indicating which scope is needed.

On this page