Markdown for agents
This page as plain markdown, ready to paste into an LLM.
Scopes
What each scope grants, read from the same list the server checks against.
A scope is resource:action. Each endpoint needs one. Missing it is 403 insufficient_scope, and the response names the scope it wanted.
All 21 scopes
| Scope | Grants |
|---|---|
workspaces:read | List and read the workspaces this key can reach |
members:read | List the people who can work a workspace |
leads:read | List and read leads, their replies, assignees, and manual lead tags |
leads:write | Set a lead's status, manual tags, assignees, and workflow markers |
leads:suppress | Unsubscribe a lead through its sending platform and mark it do-not-contact |
leads:enrich | Run the workspace's phone-enrichment waterfall for an Interested or Booked lead |
threads:read | Read the full text of every message in a conversation |
notes:read | Read notes on a lead |
notes:write | Add a note to a lead |
tasks:read | Read tasks |
tasks:write | Create, edit, complete and delete tasks |
meetings:read | Read scheduled meetings |
meetings:write | Set a meeting's outcome, and read its internal notes |
event_types:read | Read event types and their free slots |
templates:read | Read reply templates and render one against a lead |
assets:read | Read a workspace's assets |
sequences:read | Read follow-up sequences and their steps |
sequences:write | Enroll leads into follow-up sequences |
replies:send | Send a reply to a lead through its connected email platform |
campaigns:read | Read the campaign roster and its tags |
insights:read | Read funnel, campaign and daily numbers |
Three that are easy to get wrong
threads:readis separate fromleads:read. Leads give you a preview line. Threads give you the full text of every email.meetings:writealso unlocks a read field:internal_notes, on a single meeting only, never in a list.members:readexposes staff names and emails. Task and assignment endpoints need it.
Presets
Starting points in the create dialog. No preset grants everything.
| Preset | For | Scopes |
|---|
A key cannot beat its owner
On every request the key's scopes are cut down to what the owner's role allows. GET /v1/me returns both lists: scopes is usable now, scopes_withheld was granted but is no longer allowed.
Scopes that do not exist yet
Asking for one of these today fails at key creation. In v2: bookings:write, events:read, webhooks:read, webhooks:write. In v3: assignments:read, assignments:write, enrichment:read. Native v1 already uses replies:send, sequences:write, and a separate leads:suppress check for unsubscribe.