Skip to main content

Scopes

Expedify uses coarse, least-privilege scopes of the form {resource}:{action}. A key holds a set of them; every operation declares the one it needs. Default-deny: no scope → no access. This model is shared by the REST API and MCP.

write / author / run imply read on the same resource — you never grant the read counterpart separately.

CRM

Per entity — contacts, companies, deals, tasks, notes, activities:

ScopeGrants
<entity>:readView and list; get; list associations
<entity>:writeCreate, update, delete; link / unlink (implies read)

Associations require the scope on both sides — linking a contact to a company needs contacts:write and companies:write.

Workflows

ScopeGrants
workflows:readList nodes, read/list workflows, validate, read executions
workflows:authorCreate, edit, import, activate/deactivate, delete (implies read)
workflows:runRun and test workflows and single nodes (implies read)

author and run are separate so a key can be "build only" or "run only". Runs are additionally confirm-gated.

Knowledge Base

ScopeGrants
knowledge:readList KBs, read documents, search, ask (RAG)
knowledge:writeCreate/update/delete KBs and documents (implies read)

Analytics

ScopeGrants
analytics:readList/read datasets, charts, dashboards; run queries/charts; NL→SQL; inspect schema
analytics:writeCreate/update/delete datasets, charts, and dashboards (implies read)

Choosing scopes

Grant the narrowest set that does the job:

  • A reporting integration → the relevant …:read scopes.
  • A data-entry integration → add the …:write it needs.
  • An automation runnerworkflows:run (+ any entity reads it needs).

You pick these in the scope picker when minting a key (Settings → API Keys). Each operation in this reference and each tool in the MCP catalog states its required scope.