Authentication and authorization
Credentials, tenancy, RBAC and delegated authority from the generated contract.
# Authentication and authorization
# Authentication and authorization
Generated from the shared API contract, canonical permission catalog, permission scopes and system roles. Custom role assignments and memberships are live Workspace data and are never published here.
## Authentication
WorkOS AuthKit verifies human identity, sessions and MFA. Scheduler Zero verifies personal API keys locally and owns authorization in Postgres. A verified human identity carries no Organization, role or permission authority; provider claims do not select a tenant or grant access.
### Personal API keys
Create a personal key in Settings → Personal → API keys. Send `x-api-key: szp_…` to REST, or `Authorization: Bearer szp_…` to REST/MCP. Keys act as their owner. Full-account keys reach the owner's authorized Organizations and Workspaces; restricted keys intersect their per-Organization restrictions with the owner's live permissions. New secrets are locally generated, stored as a hash, and shown only on creation/rotation. Pre-existing WorkOS `sk_` keys remain valid until rotated, expired or revoked; legacy `sz_` keys are rejected.
### Interactive MCP and delegated agents
Interactive MCP clients complete WorkOS AuthKit sign-in and explicit Scheduler Zero consent. The Worker refreshes the human credential and forwards the durable grant context; the API intersects the grant with the user's live authority. Grants constrain approved scopes, bundles and Workspaces; old single-Workspace grants retain their pin. Delegated agents carry a verified registration and scope ceiling, bound to the authorizing actor and Organization. Revocation, expiry or missing authority denies access, without selecting another Workspace.
## Request authorization
1. Verify the credential and classify its principal. An endpoint's accepted principal kinds decide admission.
2. Resolve the Organization or Workspace named by the request. Organization is the commercial parent; Workspace is the product-data tenant. MCP data tools take an explicit `workspaceId`.
3. Resolve current memberships, Workspace access and the union of assigned local roles. Custom roles use the same canonical permission catalog.
4. Intersect delegated grants, agent scopes or personal-key restrictions with the actor's live authority. A scope is a ceiling, never an independent permission grant.
5. Enforce the endpoint's permission, resource policy, confirmation, subscription and idempotency requirements before product execution.
Organization permissions apply to the parent and Workspace permissions apply to authorized child Workspaces. Organization ownership is a distinct ownership relationship, not an assignable role. Organization Admin excludes owner-only actions. Platform/operator and agent-control permissions cannot be granted by ordinary custom roles. Workspace access may be all, selected, or none; being an Organization member alone does not grant product access.
Human-only actions, including key creation/rotation and irreversible ownership actions, remain subject to their declared principal and confirmation policies. Tool discovery is public metadata and never proves the caller may execute a tool.
## Errors and recovery
- `401`: missing, expired or invalid credential; follow the protected-resource discovery hint or reconnect.
- `403`: authenticated principal lacks the required authority or delegated scope. Check current roles, key restrictions and consent.
- Inaccessible resources can be reported as not found to preserve tenant boundaries.
- `429`: rate limited; honor `Retry-After` where returned.
- An unavailable identity or authorization dependency fails closed; it cannot widen authority.
## Resources and discovery
- REST: `https://api.schedulerzero.com/v1`.
- MCP: `https://mcp.schedulerzero.com/mcp`.
- WorkOS authorization-server metadata: `https://api.workos.com/.well-known/oauth-authorization-server`.
OAuth access tokens are audience-bound. A Worker-issued MCP access token is not a personal REST API key. Protected-resource metadata and `WWW-Authenticate` challenges describe the credential expected by each service.
## System roles
These defaults are computed from the canonical RBAC definitions. Actual assignments and custom roles are checked at request time.
| Role | Scope | Permissions |
| --- | --- | --- |
| `organization_admin` | organization | `audit:read`, `billing:manage`, `billing:read`, `orgAnalytics:read`, `orgAnalytics:manage`, `org:read`, `org:update`, `orgApiKey:manage`, `orgMember:invite`, `orgMember:read`, `orgMember:remove`, `orgMember:update`, `role:manage`, `role:read`, `usage:read`, `workspace:create`, `workspace:delete`, `workspace:transfer` |
| `billing_admin` | organization | `org:read`, `billing:read`, `billing:manage`, `usage:read` |
| `workspace_admin` | workspace | `analytics:export`, `analytics:read`, `apiKey:create`, `apiKey:delete`, `apiKey:read`, `apiKey:update`, `blocklist:create`, `blocklist:delete`, `blocklist:read`, `campaign:archive`, `campaign:create`, `campaign:delete`, `campaign:launch`, `campaign:pause`, `campaign:read`, `campaign:update`, `dialer:assign_numbers`, `dialer:assign_seats`, `dialer:create`, `dialer:delete`, `dialer:dial`, `dialer:manage_billing`, `dialer:manage_number_health`, `dialer:manage_numbers`, `dialer:manage_numbers_self`, `dialer:manage_voicemails`, `dialer:read`, `dialer:read_analytics`, `dialer:read_numbers_all`, `dialer:release_numbers`, `dialer:update`, `domain:manage_dns`, `domain:purchase`, `domain:read`, `domain:transfer`, `emailVerification:manage_credits`, `emailVerification:manage_keys`, `emailVerification:manage_sharing`, `emailVerification:read`, `emailVerification:verify`, `inbox:connect`, `inbox:create`, `inbox:delete`, `inbox:read`, `inbox:update`, `inbox:warmup_manage`, `integration:create`, `integration:delete`, `integration:read`, `integration:update`, `lead:create`, `lead:delete`, `lead:export`, `lead:import`, `lead:read`, `lead:update`, `leadList:create`, `leadList:delete`, `leadList:read`, `leadList:update`, `phoneVerification:manage_keys`, `phoneVerification:read`, `phoneVerification:verify`, `replyLabel:create`, `replyLabel:delete`, `replyLabel:read`, `replyLabel:update`, `sequence:create`, `sequence:delete`, `sequence:read`, `sequence:update`, `sql:manage_dashboards`, `sql:query`, `support:create`, `support:read`, `support:update`, `tag:create`, `tag:delete`, `tag:read`, `tag:update`, `task:create`, `task:delete`, `task:read`, `task:update`, `template:create`, `template:delete`, `template:read`, `template:update`, `unibox:archive`, `unibox:label`, `unibox:read`, `unibox:reply`, `webhook:create`, `webhook:delete`, `webhook:read`, `webhook:update`, `whiteLabel:read`, `whiteLabel:update`, `workflow:create`, `workflow:delete`, `workflow:publish`, `workflow:read`, `workflow:run`, `workflow:update`, `workspace:read`, `workspace:update`, `workspaceMember:invite`, `workspaceMember:read`, `workspaceMember:remove`, `workspaceMember:update` |
| `workspace_member` | workspace | `analytics:read`, `campaign:create`, `campaign:launch`, `campaign:pause`, `campaign:read`, `campaign:update`, `dialer:create`, `dialer:dial`, `dialer:manage_numbers_self`, `dialer:read`, `dialer:update`, `domain:read`, `emailVerification:read`, `emailVerification:verify`, `inbox:connect`, `inbox:read`, `lead:create`, `lead:import`, `lead:read`, `lead:update`, `leadList:create`, `leadList:read`, `leadList:update`, `phoneVerification:read`, `phoneVerification:verify`, `replyLabel:read`, `sequence:create`, `sequence:read`, `sequence:update`, `sql:query`, `support:create`, `support:read`, `support:update`, `tag:read`, `task:create`, `task:delete`, `task:read`, `task:update`, `template:create`, `template:read`, `template:update`, `unibox:label`, `unibox:read`, `unibox:reply`, `workflow:create`, `workflow:publish`, `workflow:read`, `workflow:run`, `workflow:update`, `workspace:read`, `workspaceMember:read` |
| `workspace_viewer` | workspace | `analytics:read`, `campaign:read`, `dialer:read`, `domain:read`, `emailVerification:read`, `inbox:read`, `lead:read`, `leadList:read`, `phoneVerification:read`, `replyLabel:read`, `sequence:read`, `support:create`, `support:read`, `support:update`, `tag:read`, `task:read`, `unibox:read`, `workflow:read`, `workspace:read` |
## Permission reference
| Permission | Class | Meaning |
| --- | --- | --- |
| `agent:capabilities` | agent | Controls an agent-platform function; it does not grant product resource access. |
| `agent:identity` | agent | Controls an agent-platform function; it does not grant product resource access. |
| `agent:operations:cancel` | agent | Controls an agent-platform function; it does not grant product resource access. |
| `agent:operations:read` | agent | Controls an agent-platform function; it does not grant product resource access. |
| `analytics:export` | workspace | Permits export on analytics resources after resource authorization. |
| `analytics:read` | workspace | Permits read on analytics resources after resource authorization. |
| `apiKey:create` | workspace | Permits create on apiKey resources after resource authorization. |
| `apiKey:delete` | workspace | Permits delete on apiKey resources after resource authorization. |
| `apiKey:read` | workspace | Permits read on apiKey resources after resource authorization. |
| `apiKey:update` | workspace | Permits update on apiKey resources after resource authorization. |
| `audit:read` | organization | Permits read on audit resources after resource authorization. |
| `billing:manage` | organization | Permits manage on billing resources after resource authorization. |
| `billing:read` | organization | Permits read on billing resources after resource authorization. |
| `blocklist:create` | workspace | Permits create on blocklist resources after resource authorization. |
| `blocklist:delete` | workspace | Permits delete on blocklist resources after resource authorization. |
| `blocklist:read` | workspace | Permits read on blocklist resources after resource authorization. |
| `campaign:archive` | workspace | Permits archive on campaign resources after resource authorization. |
| `campaign:create` | workspace | Permits create on campaign resources after resource authorization. |
| `campaign:delete` | workspace | Permits delete on campaign resources after resource authorization. |
| `campaign:launch` | workspace | Permits launch on campaign resources after resource authorization. |
| `campaign:pause` | workspace | Permits pause on campaign resources after resource authorization. |
| `campaign:read` | workspace | Permits read on campaign resources after resource authorization. |
| `campaign:update` | workspace | Permits update on campaign resources after resource authorization. |
| `dialer:assign_numbers` | workspace | Permits assign_numbers on dialer resources after resource authorization. |
| `dialer:assign_seats` | workspace | Permits assign_seats on dialer resources after resource authorization. |
| `dialer:create` | workspace | Permits create on dialer resources after resource authorization. |
| `dialer:delete` | workspace | Permits delete on dialer resources after resource authorization. |
| `dialer:dial` | workspace | Permits dial on dialer resources after resource authorization. |
| `dialer:manage_billing` | workspace | Permits manage_billing on dialer resources after resource authorization. |
| `dialer:manage_number_health` | workspace | Permits manage_number_health on dialer resources after resource authorization. |
| `dialer:manage_numbers` | workspace | Permits manage_numbers on dialer resources after resource authorization. |
| `dialer:manage_numbers_self` | workspace | Permits manage_numbers_self on dialer resources after resource authorization. |
| `dialer:manage_voicemails` | workspace | Permits manage_voicemails on dialer resources after resource authorization. |
| `dialer:read` | workspace | Permits read on dialer resources after resource authorization. |
| `dialer:read_analytics` | workspace | Permits read_analytics on dialer resources after resource authorization. |
| `dialer:read_numbers_all` | workspace | Permits read_numbers_all on dialer resources after resource authorization. |
| `dialer:release_numbers` | workspace | Permits release_numbers on dialer resources after resource authorization. |
| `dialer:update` | workspace | Permits update on dialer resources after resource authorization. |
| `domain:manage_dns` | workspace | Permits manage_dns on domain resources after resource authorization. |
| `domain:purchase` | workspace | Permits purchase on domain resources after resource authorization. |
| `domain:read` | workspace | Permits read on domain resources after resource authorization. |
| `domain:transfer` | workspace | Permits transfer on domain resources after resource authorization. |
| `emailVerification:manage_credits` | workspace | Permits manage_credits on emailVerification resources after resource authorization. |
| `emailVerification:manage_keys` | workspace | Permits manage_keys on emailVerification resources after resource authorization. |
| `emailVerification:manage_sharing` | workspace | Permits manage_sharing on emailVerification resources after resource authorization. |
| `emailVerification:read` | workspace | Permits read on emailVerification resources after resource authorization. |
| `emailVerification:verify` | workspace | Permits verify on emailVerification resources after resource authorization. |
| `inbox:connect` | workspace | Permits connect on inbox resources after resource authorization. |
| `inbox:create` | workspace | Permits create on inbox resources after resource authorization. |
| `inbox:delete` | workspace | Permits delete on inbox resources after resource authorization. |
| `inbox:read` | workspace | Permits read on inbox resources after resource authorization. |
| `inbox:update` | workspace | Permits update on inbox resources after resource authorization. |
| `inbox:warmup_manage` | workspace | Permits warmup_manage on inbox resources after resource authorization. |
| `integration:create` | workspace | Permits create on integration resources after resource authorization. |
| `integration:delete` | workspace | Permits delete on integration resources after resource authorization. |
| `integration:read` | workspace | Permits read on integration resources after resource authorization. |
| `integration:update` | workspace | Permits update on integration resources after resource authorization. |
| `lead:create` | workspace | Permits create on lead resources after resource authorization. |
| `lead:delete` | workspace | Permits delete on lead resources after resource authorization. |
| `lead:export` | workspace | Permits export on lead resources after resource authorization. |
| `lead:import` | workspace | Permits import on lead resources after resource authorization. |
| `lead:read` | workspace | Permits read on lead resources after resource authorization. |
| `lead:update` | workspace | Permits update on lead resources after resource authorization. |
| `leadList:create` | workspace | Permits create on leadList resources after resource authorization. |
| `leadList:delete` | workspace | Permits delete on leadList resources after resource authorization. |
| `leadList:read` | workspace | Permits read on leadList resources after resource authorization. |
| `leadList:update` | workspace | Permits update on leadList resources after resource authorization. |
| `org:delete` | organization | Permits delete on org resources after resource authorization. |
| `orgAnalytics:read` | organization | Permits read on orgAnalytics resources after resource authorization. |
| `orgAnalytics:manage` | organization | Permits manage on orgAnalytics resources after resource authorization. |
| `org:read` | organization | Permits read on org resources after resource authorization. |
| `org:update` | organization | Permits update on org resources after resource authorization. |
| `orgApiKey:manage` | organization | Permits manage on orgApiKey resources after resource authorization. |
| `orgMember:invite` | organization | Permits invite on orgMember resources after resource authorization. |
| `orgMember:read` | organization | Permits read on orgMember resources after resource authorization. |
| `orgMember:remove` | organization | Permits remove on orgMember resources after resource authorization. |
| `orgMember:update` | organization | Permits update on orgMember resources after resource authorization. |
| `phoneVerification:manage_keys` | workspace | Permits manage_keys on phoneVerification resources after resource authorization. |
| `phoneVerification:read` | workspace | Permits read on phoneVerification resources after resource authorization. |
| `phoneVerification:verify` | workspace | Permits verify on phoneVerification resources after resource authorization. |
| `platform:operate` | platform | Permits an internal operations Organization operator surface. |
| `replyLabel:create` | workspace | Permits create on replyLabel resources after resource authorization. |
| `replyLabel:delete` | workspace | Permits delete on replyLabel resources after resource authorization. |
| `replyLabel:read` | workspace | Permits read on replyLabel resources after resource authorization. |
| `replyLabel:update` | workspace | Permits update on replyLabel resources after resource authorization. |
| `role:manage` | organization | Permits manage on role resources after resource authorization. |
| `role:read` | organization | Permits read on role resources after resource authorization. |
| `sequence:create` | workspace | Permits create on sequence resources after resource authorization. |
| `sequence:delete` | workspace | Permits delete on sequence resources after resource authorization. |
| `sequence:read` | workspace | Permits read on sequence resources after resource authorization. |
| `sequence:update` | workspace | Permits update on sequence resources after resource authorization. |
| `sql:manage_dashboards` | workspace | Permits manage_dashboards on sql resources after resource authorization. |
| `sql:query` | workspace | Permits query on sql resources after resource authorization. |
| `support:create` | workspace | Permits create on support resources after resource authorization. |
| `support:read` | workspace | Permits read on support resources after resource authorization. |
| `support:update` | workspace | Permits update on support resources after resource authorization. |
| `tag:create` | workspace | Permits create on tag resources after resource authorization. |
| `tag:delete` | workspace | Permits delete on tag resources after resource authorization. |
| `tag:read` | workspace | Permits read on tag resources after resource authorization. |
| `tag:update` | workspace | Permits update on tag resources after resource authorization. |
| `task:create` | workspace | Permits create on task resources after resource authorization. |
| `task:delete` | workspace | Permits delete on task resources after resource authorization. |
| `task:read` | workspace | Permits read on task resources after resource authorization. |
| `task:update` | workspace | Permits update on task resources after resource authorization. |
| `template:create` | workspace | Permits create on template resources after resource authorization. |
| `template:delete` | workspace | Permits delete on template resources after resource authorization. |
| `template:read` | workspace | Permits read on template resources after resource authorization. |
| `template:update` | workspace | Permits update on template resources after resource authorization. |
| `unibox:archive` | workspace | Permits archive on unibox resources after resource authorization. |
| `unibox:label` | workspace | Permits label on unibox resources after resource authorization. |
| `unibox:read` | workspace | Permits read on unibox resources after resource authorization. |
| `unibox:reply` | workspace | Permits reply on unibox resources after resource authorization. |
| `usage:read` | organization | Permits read on usage resources after resource authorization. |
| `webhook:create` | workspace | Permits create on webhook resources after resource authorization. |
| `webhook:delete` | workspace | Permits delete on webhook resources after resource authorization. |
| `webhook:read` | workspace | Permits read on webhook resources after resource authorization. |
| `webhook:update` | workspace | Permits update on webhook resources after resource authorization. |
| `whiteLabel:read` | workspace | Permits read on whiteLabel resources after resource authorization. |
| `whiteLabel:update` | workspace | Permits update on whiteLabel resources after resource authorization. |
| `workflow:create` | workspace | Permits create on workflow resources after resource authorization. |
| `workflow:delete` | workspace | Permits delete on workflow resources after resource authorization. |
| `workflow:publish` | workspace | Permits publish on workflow resources after resource authorization. |
| `workflow:read` | workspace | Permits read on workflow resources after resource authorization. |
| `workflow:run` | workspace | Permits run on workflow resources after resource authorization. |
| `workflow:update` | workspace | Permits update on workflow resources after resource authorization. |
| `workspace:create` | organization | Permits create on workspace resources after resource authorization. |
| `workspace:delete` | organization | Permits delete on workspace resources after resource authorization. |
| `workspace:read` | workspace | Permits read on workspace resources after resource authorization. |
| `workspace:transfer` | organization | Permits transfer on workspace resources after resource authorization. |
| `workspace:update` | workspace | Permits update on workspace resources after resource authorization. |
| `workspaceMember:invite` | workspace | Permits invite on workspaceMember resources after resource authorization. |
| `workspaceMember:read` | workspace | Permits read on workspaceMember resources after resource authorization. |
| `workspaceMember:remove` | workspace | Permits remove on workspaceMember resources after resource authorization. |
| `workspaceMember:update` | workspace | Permits update on workspaceMember resources after resource authorization. |
## Endpoint access policies
Generated customer-facing endpoint admission and permission requirements. These declarations also drive OpenAPI and MCP projections. Principal admission and permission are both required; a listed scope alone does not authorize a call.
| Operation | Method and path | Accepted principals | Permission | Agent scopes | Confirmation |
| --- | --- | --- | --- | --- | --- |
| `accountSecurity.execute` | `POST /v1/me/security/actions` | human | No resource permission; endpoint policy still applies | None | human_completion |
| `accountSecurity.handoff` | `POST /v1/me/security/handoff` | human, agent | No resource permission; endpoint policy still applies | `workspace:read` | human_completion |
| `accountSecurity.read` | `GET /v1/me/security` | human, agent | No resource permission; endpoint policy still applies | `workspace:read` | none |
| `affiliate.codeAvailability` | `GET /v1/me/affiliate/code-availability` | human | `workspace:read` | None | none |
| `affiliate.enroll` | `POST /v1/me/affiliate/enroll` | human | `workspace:read` | None | human_completion |
| `affiliate.mintCode` | `POST /v1/me/affiliate/code` | human | `workspace:read` | None | none |
| `affiliate.payoutSetup` | `GET /v1/me/affiliate/payout-setup` | human | `workspace:read` | None | none |
| `affiliate.renameCode` | `POST /v1/me/affiliate/code/rename` | human | `workspace:read` | None | none |
| `affiliate.state` | `GET /v1/me/affiliate` | human | `workspace:read` | None | none |
| `agent.cancelOperation` | `POST /agent/operations/:operationId/cancel` | agent, personal_api_key, human | `agent:operations:cancel` | `agent:operations:cancel` | none |
| `agent.getCapability` | `GET /agent/capabilities/:capabilityId` | agent, personal_api_key, human | `agent:capabilities` | `agent:capabilities` | none |
| `agent.getIdentity` | `GET /agent/identity` | agent, personal_api_key, human | `agent:identity` | `agent:identity` | none |
| `agent.getOperation` | `GET /agent/operations/:operationId` | agent, personal_api_key, human | `agent:operations:read` | `agent:operations:read` | none |
| `agent.listCapabilities` | `GET /agent/capabilities` | agent, personal_api_key, human | `agent:capabilities` | `agent:capabilities` | none |
| `agent.listCapabilityBundles` | `GET /agent/capability-bundles` | agent, personal_api_key, human | `agent:capabilities` | `agent:capabilities` | none |
| `agent.listWorkspaces` | `GET /agent/workspaces` | agent, personal_api_key, human | `agent:identity` | `agent:identity` | none |
| `agent.prepareConfirmation` | `POST /agent/confirmations` | agent, personal_api_key, human | `agent:capabilities` | `agent:capabilities` | none |
| `agent.resolveWorkspace` | `POST /agent/workspaces/resolve` | agent, personal_api_key, human | `workspace:read` | `workspace:read` | none |
| `agentRegistrations.confirmLink` | `POST /agent/registrations/:registrationId/confirm-link` | human | `agent:identity` | None | none |
| `agents.create` | `POST /v1/organizations/:organizationId/agents` | human | `apiKey:create` | None | none |
| `agents.issueCredential` | `POST /v1/organizations/:organizationId/agents/:agentRegistrationId/credentials` | human | `apiKey:create` | None | none |
| `agents.list` | `GET /v1/organizations/:organizationId/agents` | human | `apiKey:read` | None | none |
| `agents.previewRevoke` | `POST /v1/organizations/:organizationId/agents/:agentRegistrationId/revocation-preview` | human | `apiKey:delete` | None | preview_token |
| `agents.revoke` | `DELETE /v1/organizations/:organizationId/agents/:agentRegistrationId` | human | `apiKey:delete` | None | preview_token |
| `aiLabels.get` | `GET /v1/workspaces/:workspaceId/settings/ai-labels` | human, agent, personal_api_key | `workspace:read` | `workspace:read` | none |
| `aiLabels.update` | `PATCH /v1/workspaces/:workspaceId/settings/ai-labels` | human, agent, personal_api_key | `workspace:update` | `workspace:update` | none |
| `assets.createUploadIntent` | `POST /v1/workspaces/:workspaceId/asset-uploads` | human | `workspace:read` | None | explicit |
| `attio.callback` | `GET /oauth/attio/callback` | | No resource permission; endpoint policy still applies | None | none |
| `attio.disconnect` | `POST /v1/workspaces/:workspaceId/integrations/attio/disconnect` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | none |
| `attio.getAuthUrl` | `POST /v1/workspaces/:workspaceId/integrations/attio/oauth` | human, agent, personal_api_key | `integration:create` | `integration:create` | none |
| `attio.getStatus` | `GET /v1/workspaces/:workspaceId/integrations/attio` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `attio.testConnection` | `GET /v1/workspaces/:workspaceId/integrations/attio/test` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `attioBrowse.companyAttributes` | `GET /v1/workspaces/:workspaceId/integrations/attio/companies/attributes` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `attioBrowse.listAttributes` | `GET /v1/workspaces/:workspaceId/integrations/attio/lists/:listId/attributes` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `attioBrowse.listEntries` | `GET /v1/workspaces/:workspaceId/integrations/attio/lists/:listId/entries` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `attioBrowse.listEntry` | `GET /v1/workspaces/:workspaceId/integrations/attio/lists/:listId/entries/:entryId` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `attioBrowse.lists` | `GET /v1/workspaces/:workspaceId/integrations/attio/lists` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `attioBrowse.peopleAttributes` | `GET /v1/workspaces/:workspaceId/integrations/attio/people/attributes` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `attioBrowse.person` | `GET /v1/workspaces/:workspaceId/integrations/attio/people/:recordId` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `attioBrowse.personImportPreview` | `GET /v1/workspaces/:workspaceId/integrations/attio/people/:recordId/import-preview` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `attioBrowse.searchPeople` | `GET /v1/workspaces/:workspaceId/integrations/attio/people/search` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `attioBrowse.syncLists` | `POST /v1/workspaces/:workspaceId/integrations/attio/lists/sync` | human, agent, personal_api_key | `integration:update` | `integration:update` | explicit |
| `attioBrowse.workspaceMembers` | `GET /v1/workspaces/:workspaceId/integrations/attio/workspace-members` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `attioImports.details` | `GET /v1/workspaces/:workspaceId/integrations/attio/imports/:importId` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `attioImports.history` | `GET /v1/workspaces/:workspaceId/integrations/attio/imports` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `attioImports.list` | `POST /v1/workspaces/:workspaceId/integrations/attio/imports/list` | human, agent, personal_api_key | `lead:import` | `lead:import`, `integration:read` | none |
| `attioImports.person` | `POST /v1/workspaces/:workspaceId/integrations/attio/imports/person` | human, agent, personal_api_key | `lead:import` | `lead:import`, `integration:read` | explicit |
| `attioMappings.create` | `POST /v1/workspaces/:workspaceId/integrations/attio/mappings` | human, agent, personal_api_key | `integration:create` | `integration:create` | explicit |
| `attioMappings.delete` | `DELETE /v1/workspaces/:workspaceId/integrations/attio/mappings/:mappingId` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | explicit |
| `attioMappings.getDefault` | `GET /v1/workspaces/:workspaceId/integrations/attio/mappings/default` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `attioMappings.list` | `GET /v1/workspaces/:workspaceId/integrations/attio/mappings` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `attioMappings.update` | `PATCH /v1/workspaces/:workspaceId/integrations/attio/mappings/:mappingId` | human, agent, personal_api_key | `integration:update` | `integration:update` | explicit |
| `attioOutbound.leadLink` | `GET /v1/workspaces/:workspaceId/integrations/attio/leads/:leadId/link` | human, agent, personal_api_key | `integration:read` | `integration:read`, `lead:read` | none |
| `attioOutbound.pushLead` | `POST /v1/workspaces/:workspaceId/integrations/attio/leads/:leadId/push` | human, agent, personal_api_key | `integration:update` | `integration:update`, `lead:read` | none |
| `attioOutbound.settings` | `GET /v1/workspaces/:workspaceId/integrations/attio/outbound-settings` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `attioOutbound.updateSettings` | `PATCH /v1/workspaces/:workspaceId/integrations/attio/outbound-settings` | human, agent, personal_api_key | `integration:update` | `integration:update` | explicit |
| `billing.acceptRetentionOffer` | `POST /v1/organizations/:organizationId/billing/retention-offer` | human | `billing:manage` | None | human_completion |
| `billing.billingPortal` | `POST /v1/organizations/:organizationId/billing/portal` | human, agent | `billing:manage` | `billing:manage` | human_completion |
| `billing.cancel` | `POST /v1/organizations/:organizationId/billing/cancel` | human | `billing:manage` | None | human_completion |
| `billing.getSubscription` | `GET /v1/organizations/:organizationId/billing/subscription` | human, agent, personal_api_key | `billing:read` | `billing:read` | none |
| `billing.restore` | `POST /v1/organizations/:organizationId/billing/restore` | human | `billing:manage` | None | human_completion |
| `billing.retentionEligibility` | `GET /v1/organizations/:organizationId/billing/retention-eligibility` | human, agent | `billing:manage` | `billing:manage`, `dialer:manage_billing` | none |
| `billing.upgrade` | `POST /v1/organizations/:organizationId/billing/upgrade` | human, agent | `billing:manage` | `billing:manage` | human_completion |
| `blockedEmails.add` | `POST /v1/workspaces/:workspaceId/settings/blocked-emails` | human, agent, personal_api_key | `blocklist:create` | `blocklist:create` | none |
| `blockedEmails.list` | `GET /v1/workspaces/:workspaceId/settings/blocked-emails` | human, agent, personal_api_key | `blocklist:read` | `blocklist:read` | none |
| `blockedEmails.remove` | `DELETE /v1/workspaces/:workspaceId/settings/blocked-emails/:entry` | human, agent, personal_api_key | `blocklist:delete` | `blocklist:delete` | explicit |
| `booking.availability.list` | `GET /v1/workspaces/:workspaceId/booking/availability` | human, agent, personal_api_key | `workspace:read` | `workspace:read` | none |
| `booking.availability.status` | `GET /v1/workspaces/:workspaceId/booking/availability/status` | human, agent, personal_api_key | `workspace:read` | `workspace:read` | none |
| `booking.calCom.connect` | `POST /v1/workspaces/:workspaceId/booking/cal-com/connect` | human | `integration:create` | None | none |
| `booking.calCom.disconnect` | `POST /v1/workspaces/:workspaceId/booking/cal-com/disconnect` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | preview_token |
| `booking.calCom.getStatus` | `GET /v1/workspaces/:workspaceId/booking/cal-com` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `booking.calCom.previewDisconnect` | `POST /v1/workspaces/:workspaceId/booking/cal-com/disconnect/preview` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | none |
| `booking.calCom.testConnection` | `POST /v1/workspaces/:workspaceId/booking/cal-com/test` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `booking.calendly.callback` | `GET /oauth/calendly/callback` | | No resource permission; endpoint policy still applies | None | none |
| `booking.calendly.disconnect` | `POST /v1/workspaces/:workspaceId/booking/calendly/disconnect` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | preview_token |
| `booking.calendly.getAuthUrl` | `POST /v1/workspaces/:workspaceId/booking/calendly/oauth` | human, agent, personal_api_key | `integration:create` | `integration:create` | human_completion |
| `booking.calendly.getStatus` | `GET /v1/workspaces/:workspaceId/booking/calendly` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `booking.calendly.previewDisconnect` | `POST /v1/workspaces/:workspaceId/booking/calendly/disconnect/preview` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | none |
| `booking.calendly.testConnection` | `POST /v1/workspaces/:workspaceId/booking/calendly/test` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `booking.eventTypes.list` | `GET /v1/workspaces/:workspaceId/booking/:provider/event-types` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `booking.eventTypes.setDefaultEventType` | `PUT /v1/workspaces/:workspaceId/booking/:provider/default-event-type` | human, agent, personal_api_key | `integration:update` | `integration:update` | none |
| `campaignAnalytics.campaign` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/analytics` | human, agent, personal_api_key | `analytics:read` | `analytics:read` | none |
| `campaignAnalytics.createShare` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/analytics-shares` | human, agent, personal_api_key | `analytics:export` | `analytics:export` | explicit |
| `campaignAnalytics.filterOptions` | `GET /v1/workspaces/:workspaceId/campaigns/analytics/filter-options` | human, agent, personal_api_key | `analytics:read` | `analytics:read` | none |
| `campaignAnalytics.listShares` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/analytics-shares` | human, agent, personal_api_key | `analytics:export` | `analytics:export` | none |
| `campaignAnalytics.revokeShare` | `DELETE /v1/workspaces/:workspaceId/campaigns/analytics-shares/:shareId` | human, agent, personal_api_key | `analytics:export` | `analytics:export` | explicit |
| `campaignAnalytics.rowStats` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/row-stats` | human, agent, personal_api_key | `analytics:read` | `analytics:read` | none |
| `campaignAnalytics.totals` | `GET /v1/workspaces/:workspaceId/campaigns/analytics/totals` | human, agent, personal_api_key | `analytics:read` | `analytics:read` | none |
| `campaignAnalytics.workspaceReport` | `GET /v1/workspaces/:workspaceId/campaigns/analytics` | human, agent, personal_api_key | `analytics:read` | `analytics:read` | none |
| `campaignContactAssignments.create` | `POST /v1/workspaces/:workspaceId/leads/:campaignContactId/assignees` | human, agent, personal_api_key | `lead:update` | `lead:update` | explicit |
| `campaignContactAssignments.remove` | `DELETE /v1/workspaces/:workspaceId/leads/:campaignContactId/assignees/:assigneeUserId` | human, agent, personal_api_key | `lead:update` | `lead:update` | explicit |
| `campaignContacts.add` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/contacts` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignContacts.applyTimezones` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/contacts/apply-timezones` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignContacts.count` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/contacts/count` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignContacts.importCsv` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/contacts/import` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignContacts.importLeads` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/contacts/import-from-list` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignContacts.list` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/contacts` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignContacts.moveToSubsequence` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/contacts/move-to-subsequence` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignContacts.remove` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/contacts/remove` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignContacts.resume` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/contacts/resume` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignContacts.validateTimezones` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/contacts/validate-timezones` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignDelivery.export` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/delivery/export` | human, agent, personal_api_key | `analytics:export` | `analytics:export` | none |
| `campaignDelivery.get` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/delivery/:sendHistoryId` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignDelivery.list` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/delivery` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignDelivery.resume` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/delivery/:sendHistoryId/resume` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignDelivery.stop` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/delivery/:sendHistoryId/stop` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignDelivery.summary` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/delivery/summary` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignFolders.breadcrumb` | `GET /v1/workspaces/:workspaceId/campaign-folders/:folderId/breadcrumb` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignFolders.create` | `POST /v1/workspaces/:workspaceId/campaign-folders` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignFolders.delete` | `DELETE /v1/workspaces/:workspaceId/campaign-folders/:folderId` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignFolders.list` | `GET /v1/workspaces/:workspaceId/campaign-folders` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignFolders.move` | `POST /v1/workspaces/:workspaceId/campaign-folders/:folderId/move` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignFolders.moveCampaigns` | `POST /v1/workspaces/:workspaceId/campaign-folders/move-campaigns` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignFolders.rename` | `PATCH /v1/workspaces/:workspaceId/campaign-folders/:folderId` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignFolders.tree` | `GET /v1/workspaces/:workspaceId/campaign-folders/tree` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignFolders.unfiledCount` | `GET /v1/workspaces/:workspaceId/campaign-folders/unfiled-count` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignHolidays.list` | `GET /v1/workspaces/:workspaceId/campaigns/holidays/:calendar` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignHolidays.range` | `GET /v1/workspaces/:workspaceId/campaigns/holidays` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignInboxes.count` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/inboxes/count` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignInboxes.listExplicit` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/inboxes/explicit` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignInboxes.listResolved` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/inboxes/resolved` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignInboxes.renderDraftTest` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/inboxes/:inboxId/render-draft-test` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignNotes.create` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/notes` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | none |
| `campaignNotes.delete` | `DELETE /v1/workspaces/:workspaceId/campaigns/:campaignId/notes/:noteId` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignNotes.get` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/notes/:noteId` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignNotes.list` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/notes` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignNotes.update` | `PATCH /v1/workspaces/:workspaceId/campaigns/:campaignId/notes/:noteId` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaigns.copyContext` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/copy-context` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaigns.create` | `POST /v1/workspaces/:workspaceId/campaigns` | human, agent, personal_api_key | `campaign:create` | `campaign:create` | explicit |
| `campaigns.customFieldKeys` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/custom-field-keys` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaigns.delete` | `DELETE /v1/workspaces/:workspaceId/campaigns/:campaignId` | human, agent, personal_api_key | `campaign:delete` | `campaign:delete` | explicit |
| `campaigns.duplicate` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/duplicate` | human, agent, personal_api_key | `campaign:create` | `campaign:create` | explicit |
| `campaigns.get` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaigns.getSchedule` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/schedule` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaigns.inboxes` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/inboxes` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaigns.launch` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/launch` | human, agent, personal_api_key | `campaign:launch` | `campaign:launch` | preview_token |
| `campaigns.list` | `GET /v1/workspaces/:workspaceId/campaigns` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaigns.previewLaunch` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/launch-preview` | human, agent, personal_api_key | `campaign:launch` | `campaign:launch` | preview_token |
| `campaigns.testCampaign` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/test` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | none |
| `campaigns.update` | `PATCH /v1/workspaces/:workspaceId/campaigns/:campaignId` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaigns.updateSchedule` | `PATCH /v1/workspaces/:workspaceId/campaigns/:campaignId/schedule` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaigns.updateSettings` | `PATCH /v1/workspaces/:workspaceId/campaigns/:campaignId/settings` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaigns.validate` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/validate` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaigns.validateCopy` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/validate-copy` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaigns.variableCoverage` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/variable-coverage` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignScheduleProfiles.create` | `POST /v1/workspaces/:workspaceId/campaign-schedule-profiles` | human, agent, personal_api_key | `campaign:create` | `campaign:create` | explicit |
| `campaignScheduleProfiles.delete` | `DELETE /v1/workspaces/:workspaceId/campaign-schedule-profiles/:profileId` | human, agent, personal_api_key | `campaign:delete` | `campaign:delete` | explicit |
| `campaignScheduleProfiles.list` | `GET /v1/workspaces/:workspaceId/campaign-schedule-profiles` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignScheduleProfiles.propagate` | `POST /v1/workspaces/:workspaceId/campaign-schedule-profiles/:profileId/propagate` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignScheduleProfiles.setDefault` | `POST /v1/workspaces/:workspaceId/campaign-schedule-profiles/:profileId/default` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignScheduleProfiles.update` | `PATCH /v1/workspaces/:workspaceId/campaign-schedule-profiles/:profileId` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignSequences.create` | `POST /v1/workspaces/:workspaceId/campaigns/sequences` | human, agent, personal_api_key | `campaign:create` | `campaign:create` | explicit |
| `campaignSequences.enrollments` | `GET /v1/workspaces/:workspaceId/campaigns/sequences/:sequenceId/enrollments` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignSequences.enrollThread` | `POST /v1/workspaces/:workspaceId/campaigns/sequences/:sequenceId/enroll-thread` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignSequences.list` | `GET /v1/workspaces/:workspaceId/campaigns/sequences` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignSequences.setStatus` | `PATCH /v1/workspaces/:workspaceId/campaigns/sequences/:sequenceId/status` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignSequences.unenroll` | `POST /v1/workspaces/:workspaceId/campaigns/sequences/:sequenceId/unenroll` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignSteps.complete` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/steps/complete` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignSteps.count` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/steps/count` | human, agent, personal_api_key | `sequence:read` | `sequence:read` | none |
| `campaignSteps.createStep` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/sequence/steps` | human, agent, personal_api_key | `sequence:update` | `sequence:update` | explicit |
| `campaignSteps.createVariant` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/sequence/steps/:stepId/variants` | human, agent, personal_api_key | `sequence:update` | `sequence:update` | explicit |
| `campaignSteps.delete` | `DELETE /v1/workspaces/:workspaceId/campaigns/:campaignId/steps/:stepId` | human, agent, personal_api_key | `sequence:delete` | `sequence:delete` | explicit |
| `campaignSteps.deleteAll` | `DELETE /v1/workspaces/:workspaceId/campaigns/:campaignId/steps` | human, agent, personal_api_key | `sequence:delete` | `sequence:delete` | explicit |
| `campaignSteps.deleteSequenceStep` | `DELETE /v1/workspaces/:workspaceId/campaigns/:campaignId/sequence/steps/:stepId` | human, agent, personal_api_key | `sequence:delete` | `sequence:delete` | explicit |
| `campaignSteps.deleteVariant` | `DELETE /v1/workspaces/:workspaceId/campaigns/:campaignId/sequence/variants/:variantId` | human, agent, personal_api_key | `sequence:update` | `sequence:update` | explicit |
| `campaignSteps.externalExecutions` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/external-executions` | human, agent, personal_api_key | `sequence:read` | `sequence:read` | none |
| `campaignSteps.fail` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/steps/fail` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignSteps.getSequence` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/sequence` | human, agent, personal_api_key | `sequence:read` | `sequence:read` | none |
| `campaignSteps.list` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/steps` | human, agent, personal_api_key | `sequence:read` | `sequence:read` | none |
| `campaignSteps.moveSequenceStep` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/sequence/steps/:stepId/move` | human, agent, personal_api_key | `sequence:update` | `sequence:update` | explicit |
| `campaignSteps.replaceSequence` | `PUT /v1/workspaces/:workspaceId/campaigns/:campaignId/sequence` | human, agent, personal_api_key | `sequence:update` | `sequence:update` | explicit |
| `campaignSteps.resolveExternalExecution` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/external-executions/:executionId/resolve` | human, agent, personal_api_key | `sequence:update` | `sequence:update` | explicit |
| `campaignSteps.save` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/steps/save` | human, agent, personal_api_key | `sequence:update` | `sequence:update` | explicit |
| `campaignSteps.stats` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/step-stats` | human, agent, personal_api_key | `analytics:read` | `analytics:read` | none |
| `campaignSteps.toggleEnabled` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/steps/:stepId/toggle-enabled` | human, agent, personal_api_key | `sequence:update` | `sequence:update` | explicit |
| `campaignSteps.update` | `PATCH /v1/workspaces/:workspaceId/campaigns/:campaignId/steps/:stepId` | human, agent, personal_api_key | `sequence:update` | `sequence:update` | explicit |
| `campaignSteps.updateSequence` | `PATCH /v1/workspaces/:workspaceId/campaigns/:campaignId/sequence` | human, agent, personal_api_key | `sequence:update` | `sequence:update` | explicit |
| `campaignSteps.updateSequenceStep` | `PATCH /v1/workspaces/:workspaceId/campaigns/:campaignId/sequence/steps/:stepId` | human, agent, personal_api_key | `sequence:update` | `sequence:update` | explicit |
| `campaignSteps.updateVariant` | `PATCH /v1/workspaces/:workspaceId/campaigns/:campaignId/sequence/variants/:variantId` | human, agent, personal_api_key | `sequence:update` | `sequence:update` | explicit |
| `campaignSubsequences.create` | `POST /v1/workspaces/:workspaceId/campaigns/:campaignId/subsequences` | human, agent, personal_api_key | `campaign:create` | `campaign:create` | explicit |
| `campaignSubsequences.list` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/subsequences` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignSubsequences.saveTriggers` | `POST /v1/workspaces/:workspaceId/campaigns/subsequences/:subsequenceCampaignId/triggers` | human, agent, personal_api_key | `campaign:update` | `campaign:update` | explicit |
| `campaignVersions.get` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/versions/:version` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `campaignVersions.list` | `GET /v1/workspaces/:workspaceId/campaigns/:campaignId/versions` | human, agent, personal_api_key | `campaign:read` | `campaign:read` | none |
| `customFields.create` | `POST /v1/workspaces/:workspaceId/settings/custom-fields` | human, agent, personal_api_key | `workspace:update` | `workspace:update` | none |
| `customFields.delete` | `DELETE /v1/workspaces/:workspaceId/settings/custom-fields/:customFieldId` | human, agent, personal_api_key | `workspace:update` | `workspace:update` | explicit |
| `customFields.list` | `GET /v1/workspaces/:workspaceId/settings/custom-fields` | human, agent, personal_api_key | `workspace:read` | `workspace:read` | none |
| `customFields.update` | `PATCH /v1/workspaces/:workspaceId/settings/custom-fields/:customFieldId` | human, agent, personal_api_key | `workspace:update` | `workspace:update` | none |
| `dashboards.delete` | `DELETE /v1/workspaces/:workspaceId/dashboards/:dashboardId` | human, agent, personal_api_key | `sql:manage_dashboards` | `sql:manage_dashboards` | none |
| `dashboards.get` | `GET /v1/workspaces/:workspaceId/dashboards/:dashboardId` | human, agent, personal_api_key | `sql:query` | `sql:query` | none |
| `dashboards.list` | `GET /v1/workspaces/:workspaceId/dashboards` | human, agent, personal_api_key | `sql:query` | `sql:query` | none |
| `dashboards.save` | `PUT /v1/workspaces/:workspaceId/dashboards/:dashboardId` | human, agent, personal_api_key | `sql:manage_dashboards` | `sql:manage_dashboards` | none |
| `developerMode.get` | `GET /v1/me/developer-mode` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `workspace:read` | none |
| `developerMode.update` | `PATCH /v1/me/developer-mode` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `workspace:read` | none |
| `dialerBilling.cancel` | `POST /v1/workspaces/:workspaceId/dialer/billing/cancel` | human | `dialer:manage_billing` | `dialer:manage_billing` | explicit |
| `dialerBilling.checkout` | `POST /v1/workspaces/:workspaceId/dialer/billing/checkout` | human, agent, personal_api_key | `dialer:manage_billing` | `dialer:manage_billing` | none |
| `dialerBilling.status` | `GET /v1/workspaces/:workspaceId/dialer/billing/status` | human, agent, personal_api_key | `dialer:manage_billing` | `dialer:manage_billing` | none |
| `dialerBilling.usage` | `GET /v1/workspaces/:workspaceId/dialer/billing/usage` | human, agent, personal_api_key | `dialer:manage_billing` | `dialer:manage_billing` | none |
| `dialerCallContacts.importAttioList` | `POST /v1/workspaces/:workspaceId/dialer/call-lists/:callListId/contacts/import-attio` | human, agent, personal_api_key | `dialer:update` | `dialer:update`, `lead:import`, `integration:read` | explicit |
| `dialerCallContacts.importCsv` | `POST /v1/workspaces/:workspaceId/dialer/call-lists/:callListId/contacts/import` | human, agent, personal_api_key | `dialer:update` | `dialer:update`, `lead:import` | explicit |
| `dialerCallContacts.list` | `GET /v1/workspaces/:workspaceId/dialer/call-lists/:callListId/contacts` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerCallLists.create` | `POST /v1/workspaces/:workspaceId/dialer/call-lists` | human, agent, personal_api_key | `dialer:create` | `dialer:create` | explicit |
| `dialerCallLists.delete` | `DELETE /v1/workspaces/:workspaceId/dialer/call-lists/:callListId` | human, agent, personal_api_key | `dialer:delete` | `dialer:delete` | explicit |
| `dialerCallLists.duplicate` | `POST /v1/workspaces/:workspaceId/dialer/call-lists/:callListId/duplicate` | human, agent, personal_api_key | `dialer:create` | `dialer:create` | explicit |
| `dialerCallLists.get` | `GET /v1/workspaces/:workspaceId/dialer/call-lists/:callListId` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerCallLists.list` | `GET /v1/workspaces/:workspaceId/dialer/call-lists` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerCallLists.update` | `PATCH /v1/workspaces/:workspaceId/dialer/call-lists/:callListId` | human, agent, personal_api_key | `dialer:update` | `dialer:update` | explicit |
| `dialerCalls.attachLead` | `POST /v1/workspaces/:workspaceId/dialer/calls/:callId/attach-lead` | human | `dialer:update` | None | none |
| `dialerCalls.automaticDisposition` | `POST /v1/workspaces/:workspaceId/dialer/calls/:callId/automatic-disposition` | human | `dialer:update` | None | none |
| `dialerCalls.disposition` | `POST /v1/workspaces/:workspaceId/dialer/calls/:callId/disposition` | human | `dialer:update` | None | none |
| `dialerCalls.get` | `GET /v1/workspaces/:workspaceId/dialer/calls/:callId` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerCalls.hangup` | `POST /v1/workspaces/:workspaceId/dialer/calls/:callId/hangup` | human | `dialer:update` | None | none |
| `dialerCalls.list` | `GET /v1/workspaces/:workspaceId/dialer/calls` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerCalls.note` | `PATCH /v1/workspaces/:workspaceId/dialer/calls/:callId/note` | human | `dialer:update` | None | none |
| `dialerCalls.recordQualityStats` | `POST /v1/workspaces/:workspaceId/dialer/calls/:callId/quality-stats` | human | `dialer:dial` | None | none |
| `dialerCalls.resolveSingleDialNumber` | `GET /v1/workspaces/:workspaceId/dialer/calls/single-dial/number` | human | `dialer:dial` | None | none |
| `dialerCalls.saveLead` | `POST /v1/workspaces/:workspaceId/dialer/calls/:callId/save-lead` | human | `dialer:update` | None | none |
| `dialerCalls.singleDial` | `POST /v1/workspaces/:workspaceId/dialer/calls/single-dial` | human | `dialer:dial` | None | none |
| `dialerCalls.status` | `GET /v1/workspaces/:workspaceId/dialer/calls/:callId/status` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerCalls.voicemailDrop` | `POST /v1/workspaces/:workspaceId/dialer/calls/:callId/voicemail-drop` | human | `dialer:dial` | None | none |
| `dialerNumbers.assign` | `PATCH /v1/workspaces/:workspaceId/dialer/numbers/:numberId/assign` | human, agent, personal_api_key | `dialer:assign_numbers` | `dialer:assign_numbers` | explicit |
| `dialerNumbers.get` | `GET /v1/workspaces/:workspaceId/dialer/numbers/:numberId` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerNumbers.list` | `GET /v1/workspaces/:workspaceId/dialer/numbers` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerNumbers.provision` | `POST /v1/workspaces/:workspaceId/dialer/numbers/provision` | human, agent, personal_api_key | `dialer:manage_numbers_self` | `dialer:manage_numbers_self`, `dialer:manage_numbers` | none |
| `dialerNumbers.provisioningOptions` | `GET /v1/workspaces/:workspaceId/dialer/numbers/provisioning-options` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerNumbers.provisionStatus` | `GET /v1/workspaces/:workspaceId/dialer/numbers/provision-status` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerNumbers.release` | `DELETE /v1/workspaces/:workspaceId/dialer/numbers/:numberId` | human, agent, personal_api_key | `dialer:release_numbers` | `dialer:release_numbers` | explicit |
| `dialerNumbers.searchAvailable` | `GET /v1/workspaces/:workspaceId/dialer/numbers/search-available` | human, agent, personal_api_key | `dialer:manage_numbers` | `dialer:manage_numbers` | none |
| `dialerNumbers.update` | `PATCH /v1/workspaces/:workspaceId/dialer/numbers/:numberId` | human, agent, personal_api_key | `dialer:manage_number_health` | `dialer:manage_number_health` | explicit |
| `dialerRecordings.createShare` | `POST /v1/workspaces/:workspaceId/dialer/calls/:callId/recording-share` | human, agent, personal_api_key | `dialer:update` | `dialer:update` | explicit |
| `dialerRecordings.playbackUrl` | `GET /v1/workspaces/:workspaceId/dialer/calls/:callId/recording-url` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerRecordings.revokeShare` | `DELETE /v1/workspaces/:workspaceId/dialer/calls/:callId/recording-share` | human, agent, personal_api_key | `dialer:update` | `dialer:update` | explicit |
| `dialerRecordings.shareState` | `GET /v1/workspaces/:workspaceId/dialer/calls/:callId/recording-share` | human, agent, personal_api_key | `dialer:update` | `dialer:update` | none |
| `dialerRecordingSettings.get` | `GET /v1/workspaces/:workspaceId/dialer/recording-settings` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerRecordingSettings.update` | `PATCH /v1/workspaces/:workspaceId/dialer/recording-settings` | human, agent, personal_api_key | `dialer:manage_numbers` | `dialer:manage_numbers` | explicit |
| `dialerSeats.assign` | `POST /v1/workspaces/:workspaceId/dialer/seats/assign` | human, agent, personal_api_key | `dialer:assign_seats` | `dialer:assign_seats` | explicit |
| `dialerSeats.getInboundForwarding` | `GET /v1/workspaces/:workspaceId/dialer/seats/me/inbound-forwarding` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerSeats.list` | `GET /v1/workspaces/:workspaceId/dialer/seats` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerSeats.me` | `GET /v1/workspaces/:workspaceId/dialer/seats/me` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerSeats.setInboundForwarding` | `POST /v1/workspaces/:workspaceId/dialer/seats/me/inbound-forwarding` | human, agent, personal_api_key | `dialer:manage_numbers_self` | `dialer:manage_numbers_self` | explicit |
| `dialerSessions.get` | `GET /v1/workspaces/:workspaceId/dialer/sessions/:sessionId` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerSessions.list` | `GET /v1/workspaces/:workspaceId/dialer/sessions` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerSessions.next` | `GET /v1/workspaces/:workspaceId/dialer/sessions/:sessionId/next` | human | `dialer:dial` | None | none |
| `dialerSessions.originate` | `POST /v1/workspaces/:workspaceId/dialer/sessions/:sessionId/originate` | human | `dialer:dial` | None | none |
| `dialerSessions.report` | `GET /v1/workspaces/:workspaceId/dialer/sessions/:sessionId/report` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerSessions.start` | `POST /v1/workspaces/:workspaceId/dialer/sessions` | human | `dialer:dial` | None | none |
| `dialerSessions.update` | `PATCH /v1/workspaces/:workspaceId/dialer/sessions/:sessionId` | human | `dialer:dial` | None | none |
| `dialerSoftphone.token` | `GET /v1/workspaces/:workspaceId/dialer/token` | human | `dialer:dial` | None | none |
| `dialerStats.overview` | `GET /v1/workspaces/:workspaceId/dialer/stats/overview` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `dialerVoicemails.createUploadIntent` | `POST /v1/workspaces/:workspaceId/dialer/voicemails/upload-url` | human, agent, personal_api_key | `dialer:manage_voicemails` | `dialer:manage_voicemails` | explicit |
| `dialerVoicemails.delete` | `DELETE /v1/workspaces/:workspaceId/dialer/voicemails/:voicemailId` | human, agent, personal_api_key | `dialer:manage_voicemails` | `dialer:manage_voicemails` | explicit |
| `dialerVoicemails.finalize` | `POST /v1/workspaces/:workspaceId/dialer/voicemails` | human, agent, personal_api_key | `dialer:manage_voicemails` | `dialer:manage_voicemails` | explicit |
| `dialerVoicemails.list` | `GET /v1/workspaces/:workspaceId/dialer/voicemails` | human, agent, personal_api_key | `dialer:read` | `dialer:read` | none |
| `discovery.authMarkdown` | `GET /auth.md` | | No resource permission; endpoint policy still applies | None | none |
| `discovery.authorizationServer` | `GET /.well-known/oauth-authorization-server` | | No resource permission; endpoint policy still applies | None | none |
| `discovery.protectedResource` | `GET /.well-known/oauth-protected-resource` | | No resource permission; endpoint policy still applies | None | none |
| `discovery.protectedResourceV1` | `GET /.well-known/oauth-protected-resource/v1` | | No resource permission; endpoint policy still applies | None | none |
| `domainDns.check` | `POST /v1/workspaces/:workspaceId/domains/dns-hosting/:zoneId/check` | human, agent | `domain:manage_dns` | `domain:manage_dns` | explicit |
| `domainDns.get` | `GET /v1/workspaces/:workspaceId/domains/dns-hosting/:zoneId` | human, agent, personal_api_key | `domain:manage_dns` | `domain:manage_dns` | none |
| `domainDns.list` | `GET /v1/workspaces/:workspaceId/domains/dns-hosting` | human, agent, personal_api_key | `domain:manage_dns` | `domain:manage_dns` | none |
| `domainDns.plan` | `POST /v1/workspaces/:workspaceId/domains/dns-hosting` | human, agent | `domain:manage_dns` | `domain:manage_dns` | explicit |
| `domainDns.provision` | `POST /v1/workspaces/:workspaceId/domains/dns-hosting/:zoneId/provision` | human, agent | `domain:manage_dns` | `domain:manage_dns` | explicit |
| `domainDns.replan` | `POST /v1/workspaces/:workspaceId/domains/dns-hosting/:zoneId/plan` | human, agent | `domain:manage_dns` | `domain:manage_dns` | explicit |
| `domainDns.update` | `POST /v1/workspaces/:workspaceId/domains/dns-hosting/:zoneId/records` | human, agent | `domain:manage_dns` | `domain:manage_dns` | explicit |
| `domains.dnsRecords` | `GET /v1/workspaces/:workspaceId/domains/:domainId/dns` | human, agent, personal_api_key | `domain:manage_dns` | `domain:manage_dns` | none |
| `domains.get` | `GET /v1/workspaces/:workspaceId/domains/:domainId` | human, agent, personal_api_key | `domain:read` | `domain:read` | none |
| `domains.list` | `GET /v1/workspaces/:workspaceId/domains` | human, agent, personal_api_key | `domain:read` | `domain:read` | none |
| `domains.registrationStatus` | `GET /v1/workspaces/:workspaceId/domains/:domainId/registration-status` | human, agent, personal_api_key | `domain:read` | `domain:read` | none |
| `domains.requestPush` | `POST /v1/workspaces/:workspaceId/domains/:domainId/push` | human, agent | `domain:transfer` | `domain:transfer` | explicit |
| `domains.setAutoRenew` | `POST /v1/workspaces/:workspaceId/domains/:domainId/auto-renew` | human, agent | `domain:purchase` | `domain:purchase` | explicit |
| `domains.setDnsRecords` | `POST /v1/workspaces/:workspaceId/domains/:domainId/dns` | human, agent | `domain:manage_dns` | `domain:manage_dns` | explicit |
| `domains.transferOut` | `POST /v1/workspaces/:workspaceId/domains/:domainId/transfer-out` | human | `domain:transfer` | None | explicit |
| `domains.transferStatus` | `GET /v1/workspaces/:workspaceId/domains/:domainId/transfer-status` | human, agent, personal_api_key | `domain:read` | `domain:read` | none |
| `egressOps.workspaceStatus` | `GET /v1/workspaces/:workspaceId/egress/status` | human | `workspace:read` | None | none |
| `electricSync.shape` | `GET /v1/sync/:resource` | human | No resource permission; endpoint policy still applies | None | none |
| `emailVerification.bulk` | `POST /v1/workspaces/:workspaceId/verification/verify/bulk` | human, agent, personal_api_key | `emailVerification:verify` | `emailVerification:verify` | none |
| `emailVerification.connectKey` | `POST /v1/workspaces/:workspaceId/verification/keys` | human | `emailVerification:manage_keys` | None | none |
| `emailVerification.creditBalance` | `GET /v1/workspaces/:workspaceId/verification/credits` | human, agent, personal_api_key | `emailVerification:read` | `emailVerification:read` | none |
| `emailVerification.disconnectKey` | `DELETE /v1/workspaces/:workspaceId/verification/keys/:keyId` | human | `emailVerification:manage_keys` | `emailVerification:manage_keys` | explicit |
| `emailVerification.estimateCredits` | `POST /v1/workspaces/:workspaceId/verification/credits/estimate` | human, agent, personal_api_key | `emailVerification:read` | `emailVerification:read` | none |
| `emailVerification.freshness` | `POST /v1/workspaces/:workspaceId/verification/freshness` | human, agent, personal_api_key | `emailVerification:read` | `emailVerification:read` | none |
| `emailVerification.getResult` | `GET /v1/workspaces/:workspaceId/verification/results/:email` | human, agent, personal_api_key | `emailVerification:read` | `emailVerification:read` | none |
| `emailVerification.getRun` | `GET /v1/workspaces/:workspaceId/verification/runs/:runId` | human, agent, personal_api_key | `emailVerification:read` | `emailVerification:read` | none |
| `emailVerification.history` | `GET /v1/workspaces/:workspaceId/verification/results/:email/history` | human, agent, personal_api_key | `emailVerification:read` | `emailVerification:read` | none |
| `emailVerification.listKeys` | `GET /v1/workspaces/:workspaceId/verification/keys` | human, agent, personal_api_key | `emailVerification:read` | `emailVerification:read` | none |
| `emailVerification.listProviders` | `GET /v1/workspaces/:workspaceId/verification/providers` | human, agent, personal_api_key | `emailVerification:read` | `emailVerification:read` | none |
| `emailVerification.listRuns` | `GET /v1/workspaces/:workspaceId/verification/runs` | human, agent, personal_api_key | `emailVerification:read` | `emailVerification:read` | none |
| `emailVerification.providerStats` | `GET /v1/workspaces/:workspaceId/verification/provider-stats` | human, agent, personal_api_key | `emailVerification:read` | `emailVerification:read` | none |
| `emailVerification.purchaseCredits` | `POST /v1/workspaces/:workspaceId/verification/credits/purchase` | human | `emailVerification:manage_credits` | None | none |
| `emailVerification.rotateKey` | `PATCH /v1/workspaces/:workspaceId/verification/keys/:keyId/rotate` | human | `emailVerification:manage_keys` | None | none |
| `emailVerification.sharingPreferences` | `GET /v1/workspaces/:workspaceId/verification/sharing` | human, agent, personal_api_key | `emailVerification:read` | `emailVerification:read` | none |
| `emailVerification.single` | `POST /v1/workspaces/:workspaceId/verification/verify` | human, agent, personal_api_key | `emailVerification:verify` | `emailVerification:verify` | explicit |
| `emailVerification.status` | `GET /v1/workspaces/:workspaceId/verification/runs/:runId/status` | human, agent, personal_api_key | `emailVerification:read` | `emailVerification:read` | none |
| `emailVerification.updateSharing` | `PATCH /v1/workspaces/:workspaceId/verification/sharing` | human, agent, personal_api_key | `emailVerification:manage_sharing` | `emailVerification:manage_sharing` | explicit |
| `getleads.configureWebhook` | `PUT /v1/workspaces/:workspaceId/integrations/getleads/:connectionId/webhook` | human | `integration:update` | None | none |
| `getleads.connect` | `POST /v1/workspaces/:workspaceId/integrations/getleads/connection` | human | `integration:create` | None | none |
| `getleads.disconnect` | `DELETE /v1/workspaces/:workspaceId/integrations/getleads/:connectionId` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | none |
| `getleads.execute` | `POST /v1/workspaces/:workspaceId/integrations/getleads/:connectionId/execute` | human, agent, personal_api_key | `integration:update` | `integration:read`, `integration:update` | preview_token |
| `getleads.previewExecution` | `POST /v1/workspaces/:workspaceId/integrations/getleads/:connectionId/execute/preview` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `getleads.setRateLimit` | `PATCH /v1/workspaces/:workspaceId/integrations/getleads/:connectionId/rate-limit` | human, agent, personal_api_key | `integration:update` | `integration:update` | none |
| `getleads.status` | `GET /v1/workspaces/:workspaceId/integrations/getleads` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `getleads.usage` | `GET /v1/workspaces/:workspaceId/integrations/getleads/:connectionId/usage` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `google.callback` | `GET /oauth/google/callback` | | No resource permission; endpoint policy still applies | None | none |
| `heyreachAccounts.connect` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/accounts` | human | `integration:update` | None | none |
| `heyreachAccounts.connectWithCookies` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/accounts/cookies` | human | `integration:update` | None | none |
| `heyreachAccounts.get` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/accounts/:accountId` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachAccounts.list` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/accounts` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachAccounts.proxyCountries` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/accounts/proxy-countries` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachAccounts.reconnect` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/accounts/:accountId/reconnect` | human, agent, personal_api_key | `integration:update` | `integration:update`, `inbox:connect` | explicit |
| `heyreachAccounts.remove` | `DELETE /v1/workspaces/:workspaceId/integrations/heyreach/accounts/:accountId` | human, agent, personal_api_key | `integration:update` | `integration:update`, `inbox:delete` | explicit |
| `heyreachAccounts.resync` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/accounts/:accountId/resync` | human, agent, personal_api_key | `integration:update` | `integration:update` | explicit |
| `heyreachAccounts.status` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/accounts/:accountId/status` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachAccounts.submitPin` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/accounts/:accountId/pin` | human | `integration:update` | None | none |
| `heyreachAccounts.updateInboxConfiguration` | `PUT /v1/workspaces/:workspaceId/integrations/heyreach/accounts/:accountId/inbox-configuration` | human, agent, personal_api_key | `integration:update` | `integration:update`, `inbox:update` | explicit |
| `heyreachAccounts.updateProxy` | `PUT /v1/workspaces/:workspaceId/integrations/heyreach/accounts/:accountId/proxy` | human | `integration:update` | None | none |
| `heyreachCampaigns.addAccounts` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/campaigns/:campaignId/accounts` | human, agent, personal_api_key | `integration:update` | `integration:update`, `campaign:launch` | explicit |
| `heyreachCampaigns.addLeads` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/campaigns/:campaignId/leads` | human, agent, personal_api_key | `integration:update` | `integration:update`, `campaign:launch` | explicit |
| `heyreachCampaigns.create` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/campaigns` | human, agent, personal_api_key | `integration:update` | `integration:update`, `campaign:create` | explicit |
| `heyreachCampaigns.createFromTemplate` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/campaigns/from-template` | human, agent, personal_api_key | `integration:update` | `integration:update`, `campaign:create` | explicit |
| `heyreachCampaigns.forLead` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/campaigns/for-lead` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachCampaigns.get` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/campaigns/:campaignId` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachCampaigns.leads` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/campaigns/:campaignId/leads` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachCampaigns.list` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/campaigns/search` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachCampaigns.pause` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/campaigns/:campaignId/pause` | human, agent, personal_api_key | `integration:update` | `integration:update`, `campaign:pause` | explicit |
| `heyreachCampaigns.removeAccounts` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/campaigns/:campaignId/accounts/remove` | human, agent, personal_api_key | `integration:update` | `integration:update`, `campaign:pause` | explicit |
| `heyreachCampaigns.resume` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/campaigns/:campaignId/resume` | human, agent, personal_api_key | `integration:update` | `integration:update`, `campaign:launch` | explicit |
| `heyreachCampaigns.sequence` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/campaigns/:campaignId/sequence` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachCampaigns.setAccounts` | `PUT /v1/workspaces/:workspaceId/integrations/heyreach/campaigns/:campaignId/accounts` | human, agent, personal_api_key | `integration:update` | `integration:update`, `campaign:update` | explicit |
| `heyreachCampaigns.start` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/campaigns/:campaignId/start` | human, agent, personal_api_key | `integration:update` | `integration:update`, `campaign:launch` | explicit |
| `heyreachCampaigns.stopLead` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/campaigns/:campaignId/leads/stop` | human, agent, personal_api_key | `integration:update` | `integration:update`, `campaign:pause` | explicit |
| `heyreachCampaigns.updateSchedule` | `PUT /v1/workspaces/:workspaceId/integrations/heyreach/campaigns/:campaignId/schedule` | human, agent, personal_api_key | `integration:update` | `integration:update`, `campaign:update` | explicit |
| `heyreachCampaigns.updateSequence` | `PUT /v1/workspaces/:workspaceId/integrations/heyreach/campaigns/:campaignId/sequence` | human, agent, personal_api_key | `integration:update` | `integration:update`, `campaign:update` | explicit |
| `heyreachCampaigns.updateSettings` | `PUT /v1/workspaces/:workspaceId/integrations/heyreach/campaigns/:campaignId/settings` | human, agent, personal_api_key | `integration:update` | `integration:update`, `campaign:update` | explicit |
| `heyreachConnection.connect` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/connect` | human | `integration:create` | None | none |
| `heyreachConnection.disconnect` | `DELETE /v1/workspaces/:workspaceId/integrations/heyreach/disconnect` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | explicit |
| `heyreachConnection.ensureReplyWebhook` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/reply-webhook` | human, agent, personal_api_key | `integration:update` | `integration:update` | explicit |
| `heyreachConnection.status` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/status` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachConnection.test` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/test` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachConversations.get` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/accounts/:accountId/conversations/:conversationId` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachConversations.list` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/conversations/search` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachConversations.seen` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/conversations/:conversationId/seen` | human, agent, personal_api_key | `integration:update` | `integration:update` | none |
| `heyreachConversations.send` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/conversations/:conversationId/messages` | human, agent, personal_api_key | `integration:update` | `integration:update`, `unibox:reply` | explicit |
| `heyreachInsights.enrichEmail` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/enrichment/email` | human, agent, personal_api_key | `integration:update` | `integration:update` | explicit |
| `heyreachInsights.enrichStatus` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/enrichment/:jobId` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachInsights.events` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/events` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachInsights.isConnection` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/network/connection` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachInsights.network` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/accounts/:accountId/network` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachInsights.stats` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/statistics` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachInsights.statsByCampaign` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/statistics/by-campaign` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachLeads.addTags` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/leads/tags` | human, agent, personal_api_key | `integration:update` | `integration:update` | explicit |
| `heyreachLeads.lookup` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/leads/lookup` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachLeads.replaceTags` | `PUT /v1/workspaces/:workspaceId/integrations/heyreach/leads/tags` | human, agent, personal_api_key | `integration:update` | `integration:update` | explicit |
| `heyreachLeads.tags` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/leads/tags` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachLists.addLeads` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/lists/:listId/leads` | human, agent, personal_api_key | `integration:update` | `integration:update`, `campaign:launch` | explicit |
| `heyreachLists.create` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/lists` | human, agent, personal_api_key | `integration:update` | `integration:update` | explicit |
| `heyreachLists.deleteLeads` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/lists/:listId/leads/remove` | human, agent, personal_api_key | `integration:update` | `integration:update` | explicit |
| `heyreachLists.get` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/lists/:listId` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachLists.leads` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/lists/:listId/leads` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachLists.list` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/lists/search` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `heyreachWebhooks.create` | `POST /v1/workspaces/:workspaceId/integrations/heyreach/webhooks` | human, agent, personal_api_key | `integration:update` | `integration:update` | explicit |
| `heyreachWebhooks.delete` | `DELETE /v1/workspaces/:workspaceId/integrations/heyreach/webhooks/:webhookId` | human, agent, personal_api_key | `integration:update` | `integration:update` | explicit |
| `heyreachWebhooks.list` | `GET /v1/workspaces/:workspaceId/integrations/heyreach/webhooks` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `inboxBulk.assignTags` | `PATCH /v1/workspaces/:workspaceId/inboxes/bulk/tags` | human, agent, personal_api_key | `inbox:update` | `inbox:update` | explicit |
| `inboxBulk.export` | `POST /v1/workspaces/:workspaceId/inboxes/bulk/export` | human, agent, personal_api_key | `inbox:read` | `inbox:read` | none |
| `inboxBulk.move` | `POST /v1/workspaces/:workspaceId/inboxes/bulk/move` | human, agent, personal_api_key | `inbox:update` | `inbox:update` | explicit |
| `inboxBulk.recheckDns` | `POST /v1/workspaces/:workspaceId/inboxes/bulk/recheck-dns` | human, agent, personal_api_key | `inbox:update` | `inbox:update` | none |
| `inboxBulk.reconnectErrors` | `POST /v1/workspaces/:workspaceId/inboxes/bulk/reconnect-errors` | human, agent, personal_api_key | `inbox:update` | `inbox:update` | none |
| `inboxBulk.remove` | `POST /v1/workspaces/:workspaceId/inboxes/bulk/delete` | human, agent, personal_api_key | `inbox:delete` | `inbox:delete` | explicit |
| `inboxBulk.setWarmupEnabled` | `PATCH /v1/workspaces/:workspaceId/inboxes/bulk/warmup` | human, agent, personal_api_key | `inbox:warmup_manage` | `inbox:warmup_manage` | explicit |
| `inboxBulk.updateSettings` | `PATCH /v1/workspaces/:workspaceId/inboxes/bulk/settings` | human, agent, personal_api_key | `inbox:update` | `inbox:update`, `inbox:warmup_manage` | explicit |
| `inboxBulk.updateWarmupPolicy` | `PATCH /v1/workspaces/:workspaceId/inboxes/bulk/warmup-policy` | human, agent, personal_api_key | `inbox:warmup_manage` | `inbox:update`, `inbox:warmup_manage` | explicit |
| `inboxConnections.adoptWarmupS0Label` | `POST /v1/workspaces/:workspaceId/inboxes/:inboxId/google-warmup-label/adopt` | human, agent, personal_api_key | `inbox:warmup_manage` | `inbox:update`, `inbox:warmup_manage` | none |
| `inboxConnections.bulkConnectImapSmtp` | `POST /v1/workspaces/:workspaceId/inbox-connections/imap-smtp/bulk` | human | `inbox:connect` | None | none |
| `inboxConnections.connectImapSmtp` | `POST /v1/workspaces/:workspaceId/inbox-connections/imap-smtp` | human | `inbox:connect` | None | none |
| `inboxConnections.createGoogleConnectLinks` | `POST /v1/workspaces/:workspaceId/inbox-connections/google/connect-links` | human, agent, personal_api_key | `inbox:connect` | `inbox:connect` | none |
| `inboxConnections.disconnect` | `POST /v1/workspaces/:workspaceId/inboxes/:inboxId/disconnect` | human, agent, personal_api_key | `inbox:delete` | `inbox:delete` | explicit |
| `inboxConnections.probeImapSmtp` | `POST /v1/workspaces/:workspaceId/inbox-connections/imap-smtp/probe` | human | `inbox:connect` | None | none |
| `inboxConnections.refreshGrant` | `POST /v1/workspaces/:workspaceId/inboxes/:inboxId/refresh` | human, agent, personal_api_key | `inbox:update` | `inbox:update` | none |
| `inboxConnections.startGoogleOAuth` | `POST /v1/workspaces/:workspaceId/inbox-connections/google/oauth` | human, agent, personal_api_key | `inbox:connect` | `inbox:connect` | human_completion |
| `inboxConnections.startGoogleReconnect` | `POST /v1/workspaces/:workspaceId/inboxes/:inboxId/google-reconnect` | human, agent, personal_api_key | `inbox:connect` | `inbox:connect` | human_completion |
| `inboxConnections.startMicrosoftOAuth` | `POST /v1/workspaces/:workspaceId/inbox-connections/microsoft/oauth` | human, agent, personal_api_key | `inbox:connect` | `inbox:connect` | human_completion |
| `inboxConnections.test` | `POST /v1/workspaces/:workspaceId/inboxes/:inboxId/test` | human, agent, personal_api_key | `inbox:read` | `inbox:read` | none |
| `inboxConnections.updateImapSmtpCredentials` | `PATCH /v1/workspaces/:workspaceId/inboxes/:inboxId/imap-smtp` | human | `inbox:update` | None | none |
| `inboxDeliverability.checkBlacklists` | `POST /v1/workspaces/:workspaceId/inboxes/:inboxId/deliverability/check-blacklists` | human, agent, personal_api_key | `inbox:update` | `inbox:update` | none |
| `inboxDeliverability.get` | `GET /v1/workspaces/:workspaceId/inboxes/:inboxId/deliverability` | human, agent, personal_api_key | `inbox:read` | `inbox:read` | none |
| `inboxes.accountAnalytics` | `GET /v1/workspaces/:workspaceId/inboxes/:inboxId/account-analytics` | human, agent, personal_api_key | `analytics:read` | `analytics:read` | none |
| `inboxes.batchRowStats` | `POST /v1/workspaces/:workspaceId/inboxes/row-stats/batch` | human, agent, personal_api_key | `inbox:read` | `inbox:read` | none |
| `inboxes.checkDns` | `POST /v1/workspaces/:workspaceId/inboxes/:inboxId/check-dns` | human, agent, personal_api_key | `inbox:update` | `inbox:update` | none |
| `inboxes.dnsCheckStatus` | `GET /v1/workspaces/:workspaceId/inboxes/:inboxId/dns-check-status` | human, agent, personal_api_key | `inbox:read` | `inbox:read` | none |
| `inboxes.list` | `GET /v1/workspaces/:workspaceId/inboxes` | human, agent, personal_api_key | `inbox:read` | `inbox:read` | none |
| `inboxes.recentHealth` | `GET /v1/workspaces/:workspaceId/inboxes/recent-health` | human, agent, personal_api_key | `inbox:read` | `inbox:read`, `analytics:read` | none |
| `inboxes.repairAttachments` | `POST /v1/workspaces/:workspaceId/inboxes/:inboxId/repair-attachments` | human, agent, personal_api_key | `inbox:update` | `inbox:update` | none |
| `inboxes.rowStats` | `GET /v1/workspaces/:workspaceId/inboxes/:inboxId/row-stats` | human, agent, personal_api_key | `inbox:read` | `inbox:read` | none |
| `inboxes.sendTestEmail` | `POST /v1/workspaces/:workspaceId/inboxes/:inboxId/test-email` | human, agent, personal_api_key | `inbox:update` | `inbox:update` | explicit |
| `inboxes.stats` | `GET /v1/workspaces/:workspaceId/inboxes/stats` | human, agent, personal_api_key | `inbox:read` | `inbox:read` | none |
| `inboxes.subscriptionTargets` | `GET /v1/workspaces/:workspaceId/inboxes/subscription-targets` | human, agent, personal_api_key | `unibox:read` | `unibox:read` | none |
| `inboxes.sync` | `POST /v1/workspaces/:workspaceId/inboxes/sync` | human, agent, personal_api_key | `inbox:update` | `inbox:update` | none |
| `inboxes.warmupAnalytics` | `GET /v1/workspaces/:workspaceId/inboxes/:inboxId/warmup-analytics` | human, agent, personal_api_key | `analytics:read` | `analytics:read` | none |
| `inboxOAuthBatches.connectLink` | `POST /v1/workspaces/:workspaceId/inbox-oauth-batches/:batchId/items/:itemId/connect-link` | human | `inbox:connect` | None | none |
| `inboxOAuthBatches.credentials` | `POST /v1/workspaces/:workspaceId/inbox-oauth-batches/:batchId/credentials` | human | `inbox:connect` | None | none |
| `inboxOAuthBatches.manage` | `POST /v1/workspaces/:workspaceId/inbox-oauth-batches/actions` | human, agent, personal_api_key | `inbox:connect` | `inbox:connect`, `inbox:read` | none |
| `inboxPlacementDiagnostics.designateRecipient` | `POST /v1/workspaces/:workspaceId/inboxes/:inboxId/placement-diagnostics/recipient` | human, agent, personal_api_key | `inbox:update` | `inbox:update` | explicit |
| `inboxPlacementDiagnostics.get` | `GET /v1/workspaces/:workspaceId/inboxes/:inboxId/placement-diagnostics` | human, agent, personal_api_key | `inbox:read` | `inbox:read` | none |
| `inboxPlacementDiagnostics.start` | `POST /v1/workspaces/:workspaceId/placement-diagnostics/start` | human, agent, personal_api_key | `inbox:update` | `inbox:update`, `inbox:warmup_manage` | none |
| `inboxProviderImports.beginSetup` | `POST /v1/workspaces/:workspaceId/inbox-providers/setups` | human, agent, personal_api_key | `integration:create` | `integration:create` | human_completion |
| `inboxProviderImports.cancel` | `POST /v1/workspaces/:workspaceId/inbox-imports/:importId/cancel` | human, agent, personal_api_key | `inbox:connect` | `inbox:connect` | none |
| `inboxProviderImports.cancelSetup` | `POST /v1/workspaces/:workspaceId/inbox-providers/setups/:setupId/cancel` | human, agent, personal_api_key | `integration:create` | `integration:create` | none |
| `inboxProviderImports.connect` | `POST /v1/workspaces/:workspaceId/inbox-providers/connections` | human | `integration:create` | None | none |
| `inboxProviderImports.connectLink` | `POST /v1/workspaces/:workspaceId/inbox-imports/:importId/connect-link` | human, agent, personal_api_key | `inbox:connect` | `inbox:connect` | human_completion |
| `inboxProviderImports.disconnect` | `POST /v1/workspaces/:workspaceId/inbox-providers/connections/:connectionId/disconnect` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | preview_token |
| `inboxProviderImports.domains` | `GET /v1/workspaces/:workspaceId/inbox-providers/connections/:connectionId/domains` | human, agent, personal_api_key | `integration:read` | `integration:read`, `inbox:connect` | none |
| `inboxProviderImports.get` | `GET /v1/workspaces/:workspaceId/inbox-imports/:importId` | human, agent, personal_api_key | `inbox:read` | `inbox:read` | none |
| `inboxProviderImports.getSetup` | `GET /v1/workspaces/:workspaceId/inbox-providers/setups/:setupId` | human, agent, personal_api_key | `integration:create` | `integration:create` | none |
| `inboxProviderImports.googleApproval` | `GET /v1/workspaces/:workspaceId/inbox-imports/:importId/google-approval` | human, agent, personal_api_key | `inbox:connect` | `inbox:connect` | none |
| `inboxProviderImports.identify` | `POST /v1/workspaces/:workspaceId/inbox-providers/connections/identify` | human | `integration:create` | None | none |
| `inboxProviderImports.list` | `GET /v1/workspaces/:workspaceId/inbox-imports` | human, agent, personal_api_key | `inbox:read` | `inbox:read` | none |
| `inboxProviderImports.listConnections` | `GET /v1/workspaces/:workspaceId/inbox-providers/connections` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `inboxProviderImports.mailboxes` | `GET /v1/workspaces/:workspaceId/inbox-providers/connections/:connectionId/mailboxes` | human, agent, personal_api_key | `integration:read` | `integration:read`, `inbox:connect` | none |
| `inboxProviderImports.prepareConnect` | `POST /v1/workspaces/:workspaceId/inbox-providers/connections/handoff` | human, agent, personal_api_key | `integration:create` | `integration:create` | human_completion |
| `inboxProviderImports.previewDisconnect` | `POST /v1/workspaces/:workspaceId/inbox-providers/connections/:connectionId/disconnect/preview` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | none |
| `inboxProviderImports.retry` | `POST /v1/workspaces/:workspaceId/inbox-imports/:importId/retry` | human, agent, personal_api_key | `inbox:connect` | `integration:read`, `inbox:connect` | none |
| `inboxProviderImports.selectMailboxes` | `POST /v1/workspaces/:workspaceId/inbox-providers/connections/:connectionId/mailbox-selection` | human, agent, personal_api_key | `integration:read` | `integration:read`, `inbox:connect` | none |
| `inboxProviderImports.start` | `POST /v1/workspaces/:workspaceId/inbox-imports` | human, agent, personal_api_key | `inbox:connect` | `integration:read`, `inbox:connect` | none |
| `inboxSettings.get` | `GET /v1/workspaces/:workspaceId/inboxes/:inboxId/settings` | human, agent, personal_api_key | `inbox:read` | `inbox:read` | none |
| `inboxSettings.toggleWarmup` | `POST /v1/workspaces/:workspaceId/inboxes/:inboxId/warmup` | human, agent, personal_api_key | `inbox:warmup_manage` | `inbox:warmup_manage` | explicit |
| `inboxSettings.update` | `PATCH /v1/workspaces/:workspaceId/inboxes/:inboxId/settings` | human, agent, personal_api_key | `inbox:update` | `inbox:update` | explicit |
| `inboxSettings.verifyTrackingDomain` | `POST /v1/workspaces/:workspaceId/inboxes/:inboxId/verify-tracking-domain` | human, agent, personal_api_key | `inbox:update` | `inbox:update` | none |
| `inboxTags.create` | `POST /v1/workspaces/:workspaceId/settings/inbox-tags` | human, agent, personal_api_key | `tag:create` | `tag:create` | none |
| `inboxTags.delete` | `DELETE /v1/workspaces/:workspaceId/settings/inbox-tags/:tagId` | human, agent, personal_api_key | `tag:delete` | `tag:delete` | explicit |
| `inboxTags.list` | `GET /v1/workspaces/:workspaceId/settings/inbox-tags` | human, agent, personal_api_key | `tag:read` | `tag:read` | none |
| `inboxTags.update` | `PATCH /v1/workspaces/:workspaceId/settings/inbox-tags/:tagId` | human, agent, personal_api_key | `tag:update` | `tag:update` | none |
| `inboxWarmupSettings.get` | `GET /v1/workspaces/:workspaceId/inboxes/:inboxId/warmup-settings` | human, agent, personal_api_key | `inbox:warmup_manage` | `inbox:read`, `inbox:warmup_manage` | none |
| `inboxWarmupSettings.sendTest` | `POST /v1/workspaces/:workspaceId/inboxes/:inboxId/warmup-settings/test` | human, agent, personal_api_key | `inbox:warmup_manage` | `inbox:warmup_manage` | explicit |
| `inboxWarmupSettings.update` | `PATCH /v1/workspaces/:workspaceId/inboxes/:inboxId/warmup-settings` | human, agent, personal_api_key | `inbox:warmup_manage` | `inbox:update`, `inbox:warmup_manage` | explicit |
| `infrastructure.explore` | `POST /v1/workspaces/:workspaceId/infrastructure/explore` | human, agent, personal_api_key | `inbox:read` | `inbox:read`, `domain:read`, `analytics:read` | none |
| `infrastructure.nameservers` | `GET /v1/workspaces/:workspaceId/infrastructure/domains/:hostname/nameservers` | human, agent, personal_api_key | `domain:read` | `domain:read` | none |
| `integrationCatalog.list` | `GET /v1/workspaces/:workspaceId/integrations` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `integrationRequests.create` | `POST /v1/workspaces/:workspaceId/integration-requests` | human, agent, personal_api_key | `support:create` | `support:create` | none |
| `integrationShares.create` | `POST /v1/workspaces/:workspaceId/integration-shares` | human, agent, personal_api_key | `integration:create` | `integration:create` | explicit |
| `integrationShares.detach` | `POST /v1/workspaces/:workspaceId/integration-shares/:shareId/detach` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | explicit |
| `integrationShares.detachPreview` | `GET /v1/workspaces/:workspaceId/integration-shares/:shareId/detach-preview` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `integrationShares.list` | `GET /v1/workspaces/:workspaceId/integration-shares` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `integrationShares.options` | `GET /v1/workspaces/:workspaceId/integration-shares/options` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `integrationShares.reattach` | `POST /v1/workspaces/:workspaceId/integration-shares/:shareId/reattach` | human, agent, personal_api_key | `integration:create` | `integration:create` | explicit |
| `integrationShares.revoke` | `DELETE /v1/workspaces/:workspaceId/integration-shares/:shareId` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | explicit |
| `integrationShares.update` | `PATCH /v1/workspaces/:workspaceId/integration-shares/:shareId` | human, agent, personal_api_key | `integration:create` | `integration:create` | explicit |
| `invitationTokens.acceptUrl` | `GET /invitations/accept-url` | | No resource permission; endpoint policy still applies | None | none |
| `jobProgress.stream` | `GET /v1/workspaces/:workspaceId/job-progress/:kind/:resourceId` | human, agent, personal_api_key | `workspace:read` | `workspace:read`, `dialer:read`, `domain:read`, `emailVerification:read`, `phoneVerification:read`, `workflow:read`, `inbox:read` | none |
| `leadLists.create` | `POST /v1/workspaces/:workspaceId/lead-lists` | human, agent, personal_api_key | `leadList:create` | `leadList:create` | explicit |
| `leadLists.createFolder` | `POST /v1/workspaces/:workspaceId/lead-lists/folders` | human, agent, personal_api_key | `leadList:create` | `leadList:create` | explicit |
| `leadLists.delete` | `DELETE /v1/workspaces/:workspaceId/lead-lists/:listId` | human, agent, personal_api_key | `leadList:delete` | `leadList:delete` | explicit |
| `leadLists.deleteFolder` | `DELETE /v1/workspaces/:workspaceId/lead-lists/folders/:folderId` | human, agent, personal_api_key | `leadList:delete` | `leadList:delete` | explicit |
| `leadLists.get` | `GET /v1/workspaces/:workspaceId/lead-lists/:listId` | human, agent, personal_api_key | `leadList:read` | `leadList:read` | none |
| `leadLists.list` | `GET /v1/workspaces/:workspaceId/lead-lists` | human, agent, personal_api_key | `leadList:read` | `leadList:read` | none |
| `leadLists.move` | `PUT /v1/workspaces/:workspaceId/lead-lists/parent` | human, agent, personal_api_key | `leadList:update` | `leadList:update` | explicit |
| `leadLists.tree` | `GET /v1/workspaces/:workspaceId/lead-lists/tree` | human, agent, personal_api_key | `leadList:read` | `leadList:read` | none |
| `leadLists.update` | `PATCH /v1/workspaces/:workspaceId/lead-lists/:listId` | human, agent, personal_api_key | `leadList:update` | `leadList:update` | explicit |
| `leadLists.updateFolder` | `PATCH /v1/workspaces/:workspaceId/lead-lists/folders/:folderId` | human, agent, personal_api_key | `leadList:update` | `leadList:update` | explicit |
| `leads.addEmail` | `POST /v1/workspaces/:workspaceId/leads/:leadId/emails` | human, agent, personal_api_key | `lead:update` | `lead:update` | none |
| `leads.bulkCreate` | `POST /v1/workspaces/:workspaceId/leads/bulk` | human, agent, personal_api_key | `lead:create` | `lead:create` | explicit |
| `leads.contactPoints` | `GET /v1/workspaces/:workspaceId/leads/:leadId/contact-points` | human, agent, personal_api_key | `lead:read` | `lead:read` | none |
| `leads.get` | `GET /v1/workspaces/:workspaceId/leads/:leadId` | human, agent, personal_api_key | `lead:read` | `lead:read` | none |
| `leads.import` | `POST /v1/workspaces/:workspaceId/leads/import` | human, agent, personal_api_key | `lead:import` | `lead:import` | explicit |
| `leads.list` | `GET /v1/workspaces/:workspaceId/leads` | human, agent, personal_api_key | `lead:read` | `lead:read` | none |
| `leads.listByCampaign` | `GET /v1/workspaces/:workspaceId/leads/by-campaign/:campaignId` | human, agent, personal_api_key | `lead:read` | `lead:read`, `campaign:read` | none |
| `leads.listByList` | `GET /v1/workspaces/:workspaceId/leads/by-list/:leadListId` | human, agent, personal_api_key | `lead:read` | `lead:read`, `leadList:read` | none |
| `leads.notes.add` | `POST /v1/workspaces/:workspaceId/leads/:leadId/notes` | human, agent, personal_api_key | `lead:update` | `lead:update` | none |
| `leads.notes.list` | `GET /v1/workspaces/:workspaceId/leads/:leadId/notes` | human, agent, personal_api_key | `lead:read` | `lead:read` | none |
| `leads.notes.remove` | `DELETE /v1/workspaces/:workspaceId/leads/:leadId/notes/:noteId` | human, agent, personal_api_key | `lead:update` | `lead:update` | none |
| `leads.reorderContactPoints` | `POST /v1/workspaces/:workspaceId/leads/:leadId/contact-points/reorder` | human, agent, personal_api_key | `lead:update` | `lead:update` | explicit |
| `leads.search` | `POST /v1/workspaces/:workspaceId/leads/search` | human, agent, personal_api_key | `lead:read` | `lead:read` | none |
| `leads.setContactPointStatus` | `POST /v1/workspaces/:workspaceId/leads/:leadId/contact-points/status` | human, agent, personal_api_key | `lead:update` | `lead:update` | explicit |
| `leads.timeline` | `GET /v1/workspaces/:workspaceId/leads/:leadId/timeline` | human, agent, personal_api_key | `lead:read` | `lead:read` | none |
| `leads.update` | `PATCH /v1/workspaces/:workspaceId/leads/:leadId` | human, agent, personal_api_key | `lead:update` | `lead:update` | explicit |
| `legacyInvitationRedirect.show` | `GET /auth/api/invitations/:id` | | No resource permission; endpoint policy still applies | None | none |
| `mcpCatalog.page` | `GET /mcp/catalog` | | No resource permission; endpoint policy still applies | None | none |
| `mcpConsent.authorize` | `GET /mcp/authorize` | | No resource permission; endpoint policy still applies | None | none |
| `mcpConsent.decide` | `POST /mcp/consent` | human | `agent:identity` | None | none |
| `me.acceptInvitation` | `POST /v1/me/invitations/accept` | human | No resource permission; endpoint policy still applies | None | none |
| `me.activateWorkspace` | `POST /v1/me/active-workspace` | human | No resource permission; endpoint policy still applies | None | none |
| `me.activeWorkspace` | `GET /v1/me/active-workspace` | human | No resource permission; endpoint policy still applies | `workspace:read` | none |
| `me.allWorkspacesAccounts` | `GET /v1/me/all-workspaces/accounts` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `inbox:read` | none |
| `me.allWorkspacesOverview` | `GET /v1/me/all-workspaces/overview` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `workspace:read`, `analytics:read` | none |
| `me.allWorkspacesUniboxFilters` | `GET /v1/me/all-workspaces/unibox-filters` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `unibox:read`, `inbox:read`, `campaign:read`, `replyLabel:read` | none |
| `me.ensureActiveWorkspace` | `POST /v1/me/active-workspace/ensure` | human, personal_api_key | No resource permission; endpoint policy still applies | None | none |
| `me.invitationPreview` | `GET /v1/me/invitations/preview` | human | No resource permission; endpoint policy still applies | None | none |
| `me.listInvitations` | `GET /v1/me/invitations` | human | No resource permission; endpoint policy still applies | None | none |
| `me.listWorkspaces` | `GET /v1/me/workspaces` | human | No resource permission; endpoint policy still applies | `workspace:read` | none |
| `me.permissions` | `GET /v1/me/permissions` | agent, personal_api_key | No resource permission; endpoint policy still applies | `workspace:read` | none |
| `me.resolveLegacyRoute` | `POST /v1/me/legacy-route` | human | No resource permission; endpoint policy still applies | None | none |
| `me.restoreActiveWorkspace` | `POST /v1/me/active-workspace/restore` | human | No resource permission; endpoint policy still applies | None | none |
| `me.session` | `GET /v1/me/session` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | None | none |
| `me.updateProfile` | `PATCH /v1/me/profile` | human | No resource permission; endpoint policy still applies | None | none |
| `me.whoami` | `GET /v1/me` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `workspace:read` | none |
| `me.workspaceCount` | `GET /v1/me/workspace-count` | human, personal_api_key | No resource permission; endpoint policy still applies | `workspace:read` | none |
| `microsoft.callback` | `GET /oauth/microsoft/callback` | | No resource permission; endpoint policy still applies | None | none |
| `notifications.getState` | `GET /v1/me/notification-devices` | human | `workspace:read` | None | none |
| `notifications.registerDevice` | `PUT /v1/me/notification-devices` | human | `workspace:read` | None | none |
| `notifications.rotateDeviceToken` | `POST /v1/me/notification-devices/rotation` | human | `workspace:read` | None | none |
| `notifications.touchDevice` | `POST /v1/me/notification-devices/touch` | human | `workspace:read` | None | none |
| `notifications.unregisterDevice` | `POST /v1/me/notification-devices/unregister` | human | `workspace:read` | None | none |
| `notifications.updateDevice` | `PATCH /v1/me/notification-devices/:deviceId` | human | `workspace:read` | None | none |
| `organizationAccess.leave` | `POST /v1/organizations/:organizationId/leave` | human | No resource permission; endpoint policy still applies | None | explicit |
| `organizationAccess.listMembers` | `GET /v1/organizations/:organizationId/members` | human, agent, personal_api_key | `orgMember:read` | `orgMember:read` | none |
| `organizationAccess.listWorkspaceMembers` | `GET /v1/organizations/:organizationId/workspaces/:workspaceId/members` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `workspaceMember:read` | none |
| `organizationAccess.removeMember` | `DELETE /v1/organizations/:organizationId/members/:userId` | human, agent, personal_api_key | `orgMember:remove` | `orgMember:remove` | explicit |
| `organizationAccess.removeWorkspaceMember` | `DELETE /v1/organizations/:organizationId/workspaces/:workspaceId/members/:userId` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `orgMember:remove`, `workspaceMember:remove` | explicit |
| `organizationAccess.updateMemberGrants` | `PUT /v1/organizations/:organizationId/members/:userId/grants` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `orgMember:update`, `workspaceMember:update` | explicit |
| `organizationApiKeys.block` | `POST /v1/organizations/:organizationId/api-keys/:apiKeyId/block` | human, agent, personal_api_key | `orgApiKey:manage` | `orgApiKey:manage` | preview_token |
| `organizationApiKeys.get` | `GET /v1/organizations/:organizationId/api-keys/:apiKeyId` | human, agent, personal_api_key | `orgApiKey:manage` | `orgApiKey:manage` | none |
| `organizationApiKeys.list` | `GET /v1/organizations/:organizationId/api-keys` | human, agent, personal_api_key | `orgApiKey:manage` | `orgApiKey:manage` | none |
| `organizationApiKeys.previewBlock` | `POST /v1/organizations/:organizationId/api-keys/:apiKeyId/block-preview` | human, agent, personal_api_key | `orgApiKey:manage` | `orgApiKey:manage` | preview_token |
| `organizationApiKeys.unblock` | `DELETE /v1/organizations/:organizationId/api-keys/:apiKeyId/block` | human, agent, personal_api_key | `orgApiKey:manage` | `orgApiKey:manage` | explicit |
| `organizationDashboards.delete` | `DELETE /v1/organizations/:organizationId/dashboards/:dashboardId` | human, agent, personal_api_key | `orgAnalytics:manage` | `orgAnalytics:manage` | none |
| `organizationDashboards.get` | `GET /v1/organizations/:organizationId/dashboards/:dashboardId` | human, agent, personal_api_key | `orgAnalytics:read` | `orgAnalytics:read` | none |
| `organizationDashboards.list` | `GET /v1/organizations/:organizationId/dashboards` | human, agent, personal_api_key | `orgAnalytics:read` | `orgAnalytics:read` | none |
| `organizationDashboards.save` | `PUT /v1/organizations/:organizationId/dashboards/:dashboardId` | human, agent, personal_api_key | `orgAnalytics:manage` | `orgAnalytics:manage` | none |
| `organizationInvitations.create` | `POST /v1/organizations/:organizationId/invitations` | human, agent | `workspaceMember:invite` | `orgMember:invite`, `workspaceMember:invite` | explicit |
| `organizationInvitations.list` | `GET /v1/organizations/:organizationId/invitations` | human, agent | `workspaceMember:read` | `orgMember:read`, `workspaceMember:read` | none |
| `organizationInvitations.options` | `GET /v1/organizations/:organizationId/invitations/options` | human, agent | `workspaceMember:read` | `orgMember:read`, `workspaceMember:read` | none |
| `organizationInvitations.resend` | `POST /v1/organizations/:organizationId/invitations/:invitationId/resend` | human, agent | `workspaceMember:invite` | `orgMember:invite`, `workspaceMember:invite` | explicit |
| `organizationInvitations.revoke` | `DELETE /v1/organizations/:organizationId/invitations/:invitationId` | human, agent | `workspaceMember:invite` | `orgMember:invite`, `workspaceMember:invite` | explicit |
| `organizationRoles.create` | `POST /v1/organizations/:organizationId/roles` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `role:manage` | explicit |
| `organizationRoles.delete` | `DELETE /v1/organizations/:organizationId/roles/:roleId` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `role:manage` | explicit |
| `organizationRoles.dependents` | `GET /v1/organizations/:organizationId/roles/:roleId/dependents` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `role:read` | none |
| `organizationRoles.list` | `GET /v1/organizations/:organizationId/roles` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `role:read` | none |
| `organizationRoles.update` | `PATCH /v1/organizations/:organizationId/roles/:roleId` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `role:manage` | explicit |
| `organizations.create` | `POST /v1/organizations` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `workspace:create` | explicit |
| `organizations.delete` | `POST /v1/organizations/:organizationId/delete` | human | No resource permission; endpoint policy still applies | None | explicit |
| `organizations.deletionPreview` | `GET /v1/organizations/:organizationId/deletion-preview` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `org:read` | none |
| `organizations.get` | `GET /v1/organizations/:organizationId` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `org:read` | none |
| `organizations.list` | `GET /v1/organizations` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `org:read` | none |
| `organizations.listAuditEvents` | `GET /v1/organizations/:organizationId/audit-events` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `audit:read` | none |
| `organizations.myPermissions` | `GET /v1/organizations/:organizationId/permissions` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `org:read` | none |
| `organizations.transferOwnership` | `POST /v1/organizations/:organizationId/ownership-transfer` | human | No resource permission; endpoint policy still applies | None | explicit |
| `organizations.update` | `PATCH /v1/organizations/:organizationId` | human, agent, personal_api_key | `org:update` | `org:update` | explicit |
| `organizationSql.query` | `POST /v1/organizations/:organizationId/sql/query` | human, agent, personal_api_key | `orgAnalytics:read` | `orgAnalytics:read`, `sql:query` | none |
| `organizationSql.schema` | `GET /v1/organizations/:organizationId/sql/schema` | human, agent, personal_api_key | `orgAnalytics:read` | `orgAnalytics:read`, `sql:query` | none |
| `organizationVariables.create` | `POST /v1/workspaces/:workspaceId/settings/variables` | human, agent, personal_api_key | `workspace:update` | `workspace:update` | none |
| `organizationVariables.delete` | `DELETE /v1/workspaces/:workspaceId/settings/variables/:variableId` | human, agent, personal_api_key | `workspace:update` | `workspace:update` | explicit |
| `organizationVariables.list` | `GET /v1/workspaces/:workspaceId/settings/variables` | human, agent, personal_api_key | `workspace:read` | `workspace:read` | none |
| `organizationVariables.update` | `PATCH /v1/workspaces/:workspaceId/settings/variables/:variableId` | human, agent, personal_api_key | `workspace:update` | `workspace:update` | none |
| `organizationWorkspaces.acceptTransfer` | `POST /v1/organizations/:organizationId/workspace-transfers/:transferId/accept` | human | No resource permission; endpoint policy still applies | None | explicit |
| `organizationWorkspaces.cancelTransfer` | `POST /v1/organizations/:organizationId/workspace-transfers/:transferId/cancel` | human | No resource permission; endpoint policy still applies | None | explicit |
| `organizationWorkspaces.create` | `POST /v1/organizations/:organizationId/workspaces` | human, personal_api_key | No resource permission; endpoint policy still applies | `workspace:create` | explicit |
| `organizationWorkspaces.delete` | `DELETE /v1/organizations/:organizationId/workspaces/:workspaceId` | human | `workspace:delete` | None | explicit |
| `organizationWorkspaces.initiateTransfer` | `POST /v1/organizations/:organizationId/workspaces/:workspaceId/transfer` | human | `workspace:transfer` | None | explicit |
| `organizationWorkspaces.list` | `GET /v1/organizations/:organizationId/workspaces` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `org:read` | none |
| `organizationWorkspaces.listTransfers` | `GET /v1/organizations/:organizationId/workspace-transfers` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `org:read` | none |
| `partnerships.list` | `GET /partnerships` | | No resource permission; endpoint policy still applies | `workspace:read` | none |
| `partnerships.memberList` | `GET /v1/partnerships/member` | human | `workspace:read` | None | none |
| `permissionRequests.approve` | `POST /v1/workspaces/:workspaceId/permission-requests/:requestId/approve` | human, agent | `workspaceMember:update` | `workspaceMember:update` | explicit |
| `permissionRequests.cancel` | `POST /v1/workspaces/:workspaceId/permission-requests/:requestId/cancel` | human, agent | `workspace:read` | `workspace:read` | none |
| `permissionRequests.create` | `POST /v1/workspaces/:workspaceId/permission-requests` | human, agent | `workspace:read` | `workspace:read` | explicit |
| `permissionRequests.deny` | `POST /v1/workspaces/:workspaceId/permission-requests/:requestId/deny` | human, agent | `workspaceMember:update` | `workspaceMember:update` | explicit |
| `permissionRequests.get` | `GET /v1/workspaces/:workspaceId/permission-requests/:requestId` | human, agent, personal_api_key | `workspace:read` | `workspace:read` | none |
| `permissionRequests.list` | `GET /v1/workspaces/:workspaceId/permission-requests` | human, agent, personal_api_key | `workspace:read` | `workspace:read` | none |
| `permissionRequests.updatePolicy` | `PUT /v1/workspaces/:workspaceId/permission-requests/policy` | human, agent | `workspaceMember:update` | `workspaceMember:update` | explicit |
| `personalApiKeys.create` | `POST /v1/me/api-keys` | human | No resource permission; endpoint policy still applies | None | none |
| `personalApiKeys.get` | `GET /v1/me/api-keys/:apiKeyId` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `apiKey:read` | none |
| `personalApiKeys.issuance` | `GET /v1/me/api-key-issuance` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `apiKey:read` | none |
| `personalApiKeys.list` | `GET /v1/me/api-keys` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `apiKey:read` | none |
| `personalApiKeys.previewRevoke` | `POST /v1/me/api-keys/:apiKeyId/revocation-preview` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `apiKey:delete` | preview_token |
| `personalApiKeys.revoke` | `DELETE /v1/me/api-keys/:apiKeyId` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `apiKey:delete` | preview_token |
| `personalApiKeys.rotate` | `POST /v1/me/api-keys/:apiKeyId/rotation` | human | No resource permission; endpoint policy still applies | None | none |
| `personalApiKeys.update` | `PATCH /v1/me/api-keys/:apiKeyId` | human, agent, personal_api_key | No resource permission; endpoint policy still applies | `apiKey:update` | explicit |
| `phoneVerification.bulk` | `POST /v1/workspaces/:workspaceId/phone-verification/verify/bulk` | human, agent, personal_api_key | `phoneVerification:verify` | `phoneVerification:verify` | none |
| `phoneVerification.connectKey` | `POST /v1/workspaces/:workspaceId/phone-verification/keys` | human | `phoneVerification:manage_keys` | None | none |
| `phoneVerification.disconnectKey` | `DELETE /v1/workspaces/:workspaceId/phone-verification/keys/:keyId` | human | `phoneVerification:manage_keys` | `phoneVerification:manage_keys` | explicit |
| `phoneVerification.getResult` | `GET /v1/workspaces/:workspaceId/phone-verification/results/:phone` | human, agent, personal_api_key | `phoneVerification:read` | `phoneVerification:read` | none |
| `phoneVerification.getResults` | `POST /v1/workspaces/:workspaceId/phone-verification/results/batch` | human, agent, personal_api_key | `phoneVerification:read` | `phoneVerification:read` | none |
| `phoneVerification.getRun` | `GET /v1/workspaces/:workspaceId/phone-verification/runs/:runId` | human, agent, personal_api_key | `phoneVerification:read` | `phoneVerification:read` | none |
| `phoneVerification.history` | `GET /v1/workspaces/:workspaceId/phone-verification/results/:phone/history` | human, agent, personal_api_key | `phoneVerification:read` | `phoneVerification:read` | none |
| `phoneVerification.listKeys` | `GET /v1/workspaces/:workspaceId/phone-verification/keys` | human, agent, personal_api_key | `phoneVerification:read` | `phoneVerification:read` | none |
| `phoneVerification.listProviders` | `GET /v1/workspaces/:workspaceId/phone-verification/providers` | human, agent, personal_api_key | `phoneVerification:read` | `phoneVerification:read` | none |
| `phoneVerification.listRuns` | `GET /v1/workspaces/:workspaceId/phone-verification/runs` | human, agent, personal_api_key | `phoneVerification:read` | `phoneVerification:read` | none |
| `phoneVerification.single` | `POST /v1/workspaces/:workspaceId/phone-verification/verify` | human, agent, personal_api_key | `phoneVerification:verify` | `phoneVerification:verify` | explicit |
| `phoneVerification.status` | `GET /v1/workspaces/:workspaceId/phone-verification/runs/:runId/status` | human, agent, personal_api_key | `phoneVerification:read` | `phoneVerification:read` | none |
| `plusvibe.campaigns` | `GET /v1/workspaces/:workspaceId/integrations/plusvibe/:connectionId/workspaces/:providerWorkspaceId/campaigns` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `plusvibe.connect` | `POST /v1/workspaces/:workspaceId/integrations/plusvibe/connection` | human | `integration:create` | None | none |
| `plusvibe.disconnect` | `POST /v1/workspaces/:workspaceId/integrations/plusvibe/:connectionId/disconnect` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | none |
| `plusvibe.labels` | `GET /v1/workspaces/:workspaceId/integrations/plusvibe/:connectionId/workspaces/:providerWorkspaceId/labels` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `plusvibe.reconcile` | `POST /v1/workspaces/:workspaceId/integrations/plusvibe/reconcile` | human, agent, personal_api_key | `integration:update` | `integration:update` | none |
| `plusvibe.status` | `GET /v1/workspaces/:workspaceId/integrations/plusvibe` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `plusvibe.workspaces` | `GET /v1/workspaces/:workspaceId/integrations/plusvibe/:connectionId/workspaces` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `realtime.issueTicket` | `POST /v1/realtime/tickets` | human | No resource permission; endpoint policy still applies | None | none |
| `reminders.cancel` | `POST /v1/workspaces/:workspaceId/reminders/:reminderId/cancel` | human, agent, personal_api_key | `unibox:reply` | `unibox:reply` | none |
| `reminders.create` | `POST /v1/workspaces/:workspaceId/reminders` | human, agent, personal_api_key | `unibox:reply` | `unibox:reply` | none |
| `reminders.getForThread` | `GET /v1/workspaces/:workspaceId/reminders/thread/:threadId` | human, agent, personal_api_key | `unibox:read` | `unibox:read` | none |
| `reminders.list` | `GET /v1/workspaces/:workspaceId/reminders` | human, agent, personal_api_key | `unibox:read` | `unibox:read` | none |
| `replyLabels.create` | `POST /v1/workspaces/:workspaceId/settings/reply-labels` | human, agent, personal_api_key | `replyLabel:create` | `replyLabel:create` | none |
| `replyLabels.delete` | `DELETE /v1/workspaces/:workspaceId/settings/reply-labels/:labelId` | human, agent, personal_api_key | `replyLabel:delete` | `replyLabel:delete` | explicit |
| `replyLabels.list` | `GET /v1/workspaces/:workspaceId/settings/reply-labels` | human, agent, personal_api_key | `replyLabel:read` | `replyLabel:read` | none |
| `replyLabels.listDefaults` | `GET /v1/workspaces/:workspaceId/settings/reply-labels/defaults` | human, agent, personal_api_key | `replyLabel:read` | `replyLabel:read` | none |
| `replyLabels.update` | `PATCH /v1/workspaces/:workspaceId/settings/reply-labels/:labelId` | human, agent, personal_api_key | `replyLabel:update` | `replyLabel:update` | none |
| `sharedRecordings.getWorkspace` | `GET /dialer/workspace-shared-recordings/:token` | human | No resource permission; endpoint policy still applies | None | none |
| `sms.conversation` | `GET /v1/workspaces/:workspaceId/sms/conversations/:numberId/:counterpartyE164` | human, agent | `unibox:read` | `unibox:read`, `dialer:read` | none |
| `sms.conversations` | `GET /v1/workspaces/:workspaceId/sms/conversations` | human, agent | `unibox:read` | `unibox:read`, `dialer:read` | none |
| `sms.markRead` | `POST /v1/workspaces/:workspaceId/sms/conversations/read` | human, agent | `unibox:read` | `unibox:read`, `dialer:read` | none |
| `sms.numbers` | `GET /v1/workspaces/:workspaceId/sms/numbers` | human, agent | `unibox:read` | `unibox:read`, `dialer:read` | none |
| `sms.send` | `POST /v1/workspaces/:workspaceId/sms/messages` | human, agent | `unibox:reply` | `unibox:reply`, `dialer:dial` | none |
| `sms.setArchived` | `POST /v1/workspaces/:workspaceId/sms/conversations/archive` | human, agent | `unibox:read` | `unibox:read`, `dialer:read` | none |
| `sql.query` | `POST /v1/workspaces/:workspaceId/sql/query` | human, agent, personal_api_key | `sql:query` | `sql:query` | none |
| `sql.schema` | `GET /v1/workspaces/:workspaceId/sql/schema` | human, agent, personal_api_key | `sql:query` | `sql:query` | none |
| `support.createAttachmentUpload` | `POST /v1/workspaces/:workspaceId/support/attachments/uploads` | human, agent | `support:create` | `support:create` | none |
| `support.finalizeAttachment` | `POST /v1/workspaces/:workspaceId/support/attachments/finalize` | human, agent | `support:create` | `support:create` | none |
| `support.identity` | `GET /v1/workspaces/:workspaceId/support/identity` | human | `support:read` | None | none |
| `support.submitFeedback` | `POST /v1/workspaces/:workspaceId/support/feedback` | human, agent | `support:create` | `support:create` | none |
| `supportAccess.grant` | `POST /v1/workspaces/:workspaceId/support-access` | human, agent | `workspaceMember:invite` | `workspaceMember:invite` | explicit |
| `supportAccess.list` | `GET /v1/workspaces/:workspaceId/support-access` | human, agent, personal_api_key | `workspaceMember:read` | `workspaceMember:read` | none |
| `supportAccess.revoke` | `POST /v1/workspaces/:workspaceId/support-access/:grantId/revoke` | human, agent, personal_api_key | `workspaceMember:remove` | `workspaceMember:remove` | none |
| `system.docs` | `GET /docs` | | No resource permission; endpoint policy still applies | None | none |
| `system.health` | `GET /health` | | No resource permission; endpoint policy still applies | None | none |
| `system.llmsFullTxt` | `GET /llms-full.txt` | | No resource permission; endpoint policy still applies | None | none |
| `system.llmsTxt` | `GET /llms.txt` | | No resource permission; endpoint policy still applies | None | none |
| `system.openapi` | `GET /openapi.json` | | No resource permission; endpoint policy still applies | None | none |
| `system.ready` | `GET /ready` | | No resource permission; endpoint policy still applies | None | none |
| `tasks.assignableMembers` | `GET /v1/workspaces/:workspaceId/tasks/assignable-members` | human, agent, personal_api_key | `task:read` | `task:read` | none |
| `tasks.create` | `POST /v1/workspaces/:workspaceId/tasks` | human, agent, personal_api_key | `task:create` | `task:create` | none |
| `tasks.delete` | `DELETE /v1/workspaces/:workspaceId/tasks/:taskId` | human, agent, personal_api_key | `task:delete` | `task:delete` | none |
| `tasks.list` | `GET /v1/workspaces/:workspaceId/tasks` | human, agent, personal_api_key | `task:read` | `task:read` | none |
| `tasks.respond` | `POST /v1/workspaces/:workspaceId/tasks/:taskId/response` | human | `task:update` | None | explicit |
| `tasks.setAssignees` | `POST /v1/workspaces/:workspaceId/tasks/:taskId/assignees` | human, agent, personal_api_key | `task:update` | `task:update` | none |
| `tasks.setCompleted` | `POST /v1/workspaces/:workspaceId/tasks/:taskId/completed` | human, agent, personal_api_key | `task:update` | `task:update` | none |
| `tasks.update` | `PATCH /v1/workspaces/:workspaceId/tasks/:taskId` | human, agent, personal_api_key | `task:update` | `task:update` | none |
| `templates.categories` | `GET /v1/workspaces/:workspaceId/templates/categories` | human, agent, personal_api_key | `template:read` | `template:read` | none |
| `templates.create` | `POST /v1/workspaces/:workspaceId/templates` | human, agent, personal_api_key | `template:create` | `template:create` | explicit |
| `templates.delete` | `DELETE /v1/workspaces/:workspaceId/templates/:templateId` | human, agent, personal_api_key | `template:delete` | `template:delete` | explicit |
| `templates.get` | `GET /v1/workspaces/:workspaceId/templates/:templateId` | human, agent, personal_api_key | `template:read` | `template:read` | none |
| `templates.list` | `GET /v1/workspaces/:workspaceId/templates` | human, agent, personal_api_key | `template:read` | `template:read` | none |
| `templates.update` | `PATCH /v1/workspaces/:workspaceId/templates/:templateId` | human, agent, personal_api_key | `template:update` | `template:update` | explicit |
| `tracking.click` | `GET /t/c/:token` | | No resource permission; endpoint policy still applies | None | none |
| `tracking.clickProbe` | `POST /t/c/:token` | | No resource permission; endpoint policy still applies | None | none |
| `tracking.legacyClick` | `GET /c/:token` | | No resource permission; endpoint policy still applies | None | none |
| `tracking.legacyClickProbe` | `POST /c/:token` | | No resource permission; endpoint policy still applies | None | none |
| `tracking.legacyOpen` | `GET /o/:token` | | No resource permission; endpoint policy still applies | None | none |
| `tracking.open` | `GET /t/o/:token` | | No resource permission; endpoint policy still applies | None | none |
| `uniboxContacts.get` | `GET /v1/workspaces/:workspaceId/unibox/threads/:threadId/contact` | human, agent, personal_api_key | `unibox:read` | `unibox:read`, `lead:read` | none |
| `uniboxContacts.getPhoto` | `GET /v1/workspaces/:workspaceId/unibox/threads/:threadId/contact/photo` | human, agent, personal_api_key | `unibox:read` | `unibox:read` | none |
| `uniboxMessages.commitReply` | `POST /v1/workspaces/:workspaceId/unibox/messages/:messageId/reply` | human, agent, personal_api_key | `unibox:reply` | `unibox:reply` | preview_token |
| `uniboxMessages.createAttachmentDownload` | `POST /v1/workspaces/:workspaceId/unibox/messages/:messageId/attachments/:attachmentId/download` | human, agent, personal_api_key | `unibox:read` | `unibox:read` | none |
| `uniboxMessages.delete` | `DELETE /v1/workspaces/:workspaceId/unibox/messages/:messageId` | human, agent, personal_api_key | `unibox:archive` | `unibox:archive` | explicit |
| `uniboxMessages.get` | `GET /v1/workspaces/:workspaceId/unibox/messages/:messageId` | human, agent, personal_api_key | `unibox:read` | `unibox:read` | none |
| `uniboxMessages.getBody` | `GET /v1/workspaces/:workspaceId/unibox/messages/:messageId/body` | human, agent, personal_api_key | `unibox:read` | `unibox:read` | none |
| `uniboxMessages.getReplyPersonalization` | `GET /v1/workspaces/:workspaceId/unibox/messages/:messageId/reply-personalization` | human, agent, personal_api_key | `unibox:reply` | `unibox:reply`, `lead:read` | none |
| `uniboxMessages.previewReply` | `POST /v1/workspaces/:workspaceId/unibox/messages/:messageId/reply-preview` | human, agent, personal_api_key | `unibox:reply` | `unibox:reply` | preview_token |
| `uniboxMessages.update` | `PATCH /v1/workspaces/:workspaceId/unibox/messages/:messageId` | human, agent, personal_api_key | `unibox:label` | `unibox:label` | none |
| `uniboxSuggestions.apply` | `POST /v1/workspaces/:workspaceId/unibox/contact-suggestions/:suggestionId/apply` | human, agent, personal_api_key | `lead:update` | `lead:update` | explicit |
| `uniboxSuggestions.createLead` | `POST /v1/workspaces/:workspaceId/unibox/contact-suggestions/:suggestionId/create-lead` | human, agent, personal_api_key | `lead:create` | `lead:create`, `lead:update` | explicit |
| `uniboxSuggestions.dismiss` | `POST /v1/workspaces/:workspaceId/unibox/contact-suggestions/:suggestionId/dismiss` | human, agent, personal_api_key | `lead:update` | `lead:update` | none |
| `uniboxSync.getHistoryImportOptions` | `GET /v1/workspaces/:workspaceId/unibox/messages/:messageId/history-import/options` | human, agent, personal_api_key | `inbox:update` | `inbox:update` | none |
| `uniboxSync.getStatus` | `GET /v1/workspaces/:workspaceId/unibox/sync/status` | human, agent, personal_api_key | `unibox:read` | `unibox:read` | none |
| `uniboxSync.startHistoryImport` | `POST /v1/workspaces/:workspaceId/unibox/messages/:messageId/history-import` | human, agent, personal_api_key | `inbox:update` | `inbox:update` | none |
| `uniboxSync.syncOlder` | `POST /v1/workspaces/:workspaceId/unibox/sync/older` | human, agent, personal_api_key | `unibox:read` | `unibox:read` | none |
| `uniboxThreads.archive` | `POST /v1/workspaces/:workspaceId/unibox/threads/:threadId/archive` | human, agent, personal_api_key | `unibox:archive` | `unibox:archive` | none |
| `uniboxThreads.batchArchive` | `POST /v1/workspaces/:workspaceId/unibox/threads/batch/archive` | human, agent, personal_api_key | `unibox:archive` | `unibox:archive` | none |
| `uniboxThreads.batchDelete` | `POST /v1/workspaces/:workspaceId/unibox/threads/batch/delete` | human, agent, personal_api_key | `unibox:archive` | `unibox:archive` | explicit |
| `uniboxThreads.batchMarkRead` | `POST /v1/workspaces/:workspaceId/unibox/threads/batch/read` | human, agent, personal_api_key | `unibox:read` | `unibox:read` | none |
| `uniboxThreads.batchRestore` | `POST /v1/workspaces/:workspaceId/unibox/threads/batch/restore` | human, agent, personal_api_key | `unibox:archive` | `unibox:archive` | none |
| `uniboxThreads.batchStar` | `POST /v1/workspaces/:workspaceId/unibox/threads/batch/star` | human, agent, personal_api_key | `unibox:read` | `unibox:read` | none |
| `uniboxThreads.delete` | `DELETE /v1/workspaces/:workspaceId/unibox/threads/:threadId` | human, agent, personal_api_key | `unibox:archive` | `unibox:archive` | explicit |
| `uniboxThreads.get` | `GET /v1/workspaces/:workspaceId/unibox/threads/:threadId` | human, agent, personal_api_key | `unibox:read` | `unibox:read` | none |
| `uniboxThreads.list` | `GET /v1/workspaces/:workspaceId/unibox/threads` | human, agent, personal_api_key | `unibox:read` | `unibox:read` | none |
| `uniboxThreads.listContactSuggestions` | `GET /v1/workspaces/:workspaceId/unibox/threads/:threadId/contact-suggestions` | human, agent, personal_api_key | `unibox:read` | `unibox:read` | none |
| `uniboxThreads.listLabelHistory` | `GET /v1/workspaces/:workspaceId/unibox/threads/:threadId/label-history` | human, agent, personal_api_key | `unibox:read` | `unibox:read` | none |
| `uniboxThreads.listMessages` | `GET /v1/workspaces/:workspaceId/unibox/threads/:threadId/messages` | human, agent, personal_api_key | `unibox:read` | `unibox:read` | none |
| `uniboxThreads.restore` | `POST /v1/workspaces/:workspaceId/unibox/threads/:threadId/restore` | human, agent, personal_api_key | `unibox:archive` | `unibox:archive` | none |
| `uniboxThreads.setLabels` | `PUT /v1/workspaces/:workspaceId/unibox/threads/:threadId/labels` | human, agent, personal_api_key | `unibox:label` | `unibox:label` | none |
| `uniboxThreads.unarchive` | `POST /v1/workspaces/:workspaceId/unibox/threads/:threadId/unarchive` | human, agent, personal_api_key | `unibox:archive` | `unibox:archive` | none |
| `uniboxThreads.update` | `PATCH /v1/workspaces/:workspaceId/unibox/threads/:threadId` | human, agent, personal_api_key | `unibox:read` | `unibox:read` | none |
| `unsubscribe.legacyOneClick` | `POST /unsubscribe/:token` | | No resource permission; endpoint policy still applies | None | none |
| `unsubscribe.legacyPage` | `GET /unsubscribe/:token` | | No resource permission; endpoint policy still applies | None | none |
| `unsubscribe.oneClick` | `POST /u/:token` | | No resource permission; endpoint policy still applies | None | none |
| `unsubscribe.page` | `GET /u/:token` | | No resource permission; endpoint policy still applies | None | none |
| `userPreferences.get` | `GET /v1/me/preferences` | human | `workspace:read` | None | none |
| `userPreferences.update` | `PATCH /v1/me/preferences` | human | `workspace:read` | None | none |
| `warmupProviders.connect` | `POST /v1/workspaces/:workspaceId/warmup/providers` | human | `integration:read` | None | none |
| `warmupProviders.disconnect` | `DELETE /v1/workspaces/:workspaceId/warmup/providers/:integrationId` | human | `integration:read` | `integration:read` | explicit |
| `warmupProviders.list` | `GET /v1/workspaces/:workspaceId/warmup/providers` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `warmupProviders.testApiKey` | `POST /v1/workspaces/:workspaceId/warmup/providers/test` | human | `integration:read` | None | none |
| `warmupProviders.toggle` | `PATCH /v1/workspaces/:workspaceId/warmup/providers/:integrationId/toggle` | human | `integration:read` | `integration:read` | explicit |
| `warmupProviders.usage` | `GET /v1/workspaces/:workspaceId/warmup/providers/:integrationId/usage` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `warmupStats.inbox` | `GET /v1/workspaces/:workspaceId/warmup/stats/inboxes/:inboxId` | human, agent, personal_api_key | `inbox:read` | `inbox:read` | none |
| `warmupStats.organization` | `GET /v1/workspaces/:workspaceId/warmup/stats/organization` | human, agent, personal_api_key | `inbox:read` | `inbox:read` | none |
| `webhooks.create` | `POST /v1/workspaces/:workspaceId/webhooks` | human, agent, personal_api_key | `webhook:create` | `webhook:create` | explicit |
| `webhooks.delete` | `DELETE /v1/workspaces/:workspaceId/webhooks/:webhookId` | human, agent, personal_api_key | `webhook:delete` | `webhook:delete` | preview_token |
| `webhooks.deliveries` | `GET /v1/workspaces/:workspaceId/webhook-deliveries` | human, agent, personal_api_key | `webhook:read` | `webhook:read` | none |
| `webhooks.delivery` | `GET /v1/workspaces/:workspaceId/webhook-deliveries/:deliveryId` | human, agent, personal_api_key | `webhook:read` | `webhook:read` | none |
| `webhooks.list` | `GET /v1/workspaces/:workspaceId/webhooks` | human, agent, personal_api_key | `webhook:read` | `webhook:read` | none |
| `webhooks.previewDelete` | `POST /v1/workspaces/:workspaceId/webhooks/:webhookId/deletion-preview` | human, agent, personal_api_key | `webhook:delete` | `webhook:delete` | preview_token |
| `webhooks.retry` | `POST /v1/workspaces/:workspaceId/webhook-deliveries/:deliveryId/retry` | human, agent, personal_api_key | `webhook:update` | `webhook:update` | explicit |
| `webhooks.rotateSecret` | `POST /v1/workspaces/:workspaceId/webhooks/:webhookId/secret-rotation` | human, agent, personal_api_key | `webhook:update` | `webhook:update` | explicit |
| `webhooks.test` | `POST /v1/workspaces/:workspaceId/webhooks/test-delivery` | human, agent, personal_api_key | `webhook:create` | `webhook:create` | explicit |
| `webhooks.update` | `PATCH /v1/workspaces/:workspaceId/webhooks/:webhookId` | human, agent, personal_api_key | `webhook:update` | `webhook:update` | explicit |
| `websiteRoutes.check` | `POST /v1/workspaces/:workspaceId/domains/website-routes/:routeId/check` | human, agent | `domain:manage_dns` | `domain:manage_dns` | explicit |
| `websiteRoutes.create` | `POST /v1/workspaces/:workspaceId/domains/website-routes` | human, agent | `domain:manage_dns` | `domain:manage_dns` | explicit |
| `websiteRoutes.get` | `GET /v1/workspaces/:workspaceId/domains/website-routes/:routeId` | human, agent, personal_api_key | `domain:manage_dns` | `domain:manage_dns` | none |
| `websiteRoutes.list` | `GET /v1/workspaces/:workspaceId/domains/website-routes` | human, agent, personal_api_key | `domain:manage_dns` | `domain:manage_dns` | none |
| `websiteRoutes.save` | `PUT /v1/workspaces/:workspaceId/domains/website-routes/:routeId` | human, agent | `domain:manage_dns` | `domain:manage_dns` | explicit |
| `workflowConnectors.apollo` | `GET /v1/workspaces/:workspaceId/workflows/integrations/apollo` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflowConnectors.apolloCallback` | `POST /workflows/apollo/callback` | | No resource permission; endpoint policy still applies | None | none |
| `workflowConnectors.conductor` | `GET /v1/workspaces/:workspaceId/workflows/integrations/conductor` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflowConnectors.conductorProjects` | `GET /v1/workspaces/:workspaceId/workflows/options/conductor-projects` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflowConnectors.connectApollo` | `POST /v1/workspaces/:workspaceId/workflows/integrations/apollo` | human | `integration:create` | None | none |
| `workflowConnectors.connectConductor` | `POST /v1/workspaces/:workspaceId/workflows/integrations/conductor` | human | `integration:create` | None | none |
| `workflowConnectors.connectExternal` | `POST /v1/workspaces/:workspaceId/workflows/integrations/external/:provider` | human | `integration:create` | None | none |
| `workflowConnectors.connectProspeo` | `POST /v1/workspaces/:workspaceId/workflows/integrations/prospeo` | human | `integration:create` | None | none |
| `workflowConnectors.describeExternalTarget` | `GET /v1/workspaces/:workspaceId/workflows/integrations/external/:provider/:connectionId/routines/:targetId` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflowConnectors.disconnectApollo` | `DELETE /v1/workspaces/:workspaceId/workflows/integrations/apollo` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | explicit |
| `workflowConnectors.disconnectConductor` | `DELETE /v1/workspaces/:workspaceId/workflows/integrations/conductor` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | explicit |
| `workflowConnectors.disconnectExternal` | `DELETE /v1/workspaces/:workspaceId/workflows/integrations/external/:provider/:connectionId` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | explicit |
| `workflowConnectors.disconnectProspeo` | `DELETE /v1/workspaces/:workspaceId/workflows/integrations/prospeo` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | explicit |
| `workflowConnectors.external` | `GET /v1/workspaces/:workspaceId/workflows/integrations/external/:provider` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflowConnectors.prospeo` | `GET /v1/workspaces/:workspaceId/workflows/integrations/prospeo` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflowConnectors.refreshExternalCatalog` | `POST /v1/workspaces/:workspaceId/workflows/integrations/external/:provider/:connectionId/refresh` | human, agent, personal_api_key | `integration:update` | `integration:update` | explicit |
| `workflowDomainHealth.connectMxtoolbox` | `POST /v1/workspaces/:workspaceId/workflows/integrations/mxtoolbox` | human | `integration:create` | None | none |
| `workflowDomainHealth.disconnectMxtoolbox` | `DELETE /v1/workspaces/:workspaceId/workflows/integrations/mxtoolbox/:connectionId` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | explicit |
| `workflowDomainHealth.domainReport` | `GET /v1/workspaces/:workspaceId/workflows/:workflowId/domain-report` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflowDomainHealth.mxtoolbox` | `GET /v1/workspaces/:workspaceId/workflows/integrations/mxtoolbox` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflowDomainHealth.refreshCatalog` | `POST /v1/workspaces/:workspaceId/workflows/integrations/mxtoolbox/:connectionId/refresh` | human, agent, personal_api_key | `integration:update` | `integration:update` | explicit |
| `workflowFollowUps.decide` | `POST /v1/workspaces/:workspaceId/workflows/follow-ups/:draftId/decide` | human | `workflow:run` | None | explicit |
| `workflowFollowUps.pending` | `GET /v1/workspaces/:workspaceId/workflows/follow-ups/pending` | human | `workflow:read` | None | none |
| `workflowIntegrations.catalog` | `GET /v1/workspaces/:workspaceId/workflows/integrations/apps` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `workflowIntegrations.connect` | `POST /v1/workspaces/:workspaceId/workflows/integrations/apps` | human, agent, personal_api_key | `integration:create` | `integration:create` | human_completion |
| `workflowIntegrations.disconnect` | `DELETE /v1/workspaces/:workspaceId/workflows/integrations/apps/:connectionId` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | explicit |
| `workflowIntegrations.permissions` | `PUT /v1/workspaces/:workspaceId/workflows/integrations/apps/:connectionId/permissions` | human, agent, personal_api_key | `integration:update` | `integration:update` | explicit |
| `workflowIntegrations.sync` | `POST /v1/workspaces/:workspaceId/workflows/integrations/apps/:connectionId/sync` | human, agent, personal_api_key | `integration:update` | `integration:update` | explicit |
| `workflowIntegrations.tools` | `GET /v1/workspaces/:workspaceId/workflows/integrations/apps/:connectionId/tools` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `workflowMcpServers.create` | `POST /v1/workspaces/:workspaceId/workflows/mcp-servers` | human | `integration:create` | None | none |
| `workflowMcpServers.list` | `GET /v1/workspaces/:workspaceId/workflows/mcp-servers` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `workflowMcpServers.remove` | `DELETE /v1/workspaces/:workspaceId/workflows/mcp-servers/:serverId` | human, agent, personal_api_key | `integration:delete` | `integration:delete` | explicit |
| `workflowMcpServers.test` | `POST /v1/workspaces/:workspaceId/workflows/mcp-servers/:serverId/test` | human, agent, personal_api_key | `integration:read` | `integration:read` | none |
| `workflowMcpServers.update` | `PUT /v1/workspaces/:workspaceId/workflows/mcp-servers/:serverId` | human | `integration:update` | None | none |
| `workflowOptions.callLists` | `GET /v1/workspaces/:workspaceId/workflows/options/call-lists` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflowOptions.enrollmentTargets` | `GET /v1/workspaces/:workspaceId/workflows/options/enrollment-targets` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflowOptions.inboxScopes` | `GET /v1/workspaces/:workspaceId/workflows/options/inbox-scopes` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflowOptions.sequences` | `GET /v1/workspaces/:workspaceId/workflows/options/sequences` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflows.alerts` | `GET /v1/workspaces/:workspaceId/workflows/:workflowId/alerts` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflows.create` | `POST /v1/workspaces/:workspaceId/workflows` | human, agent, personal_api_key | `workflow:create` | `workflow:create` | explicit |
| `workflows.enrollLeads` | `POST /v1/workspaces/:workspaceId/workflows/:workflowId/enrollments` | human, agent, personal_api_key | `workflow:publish` | `workflow:publish`, `lead:read`, `dialer:read` | none |
| `workflows.enrollThread` | `POST /v1/workspaces/:workspaceId/workflows/:workflowId/enroll-thread` | human, agent, personal_api_key | `workflow:run` | `workflow:run` | none |
| `workflows.get` | `GET /v1/workspaces/:workspaceId/workflows/:workflowId` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflows.list` | `GET /v1/workspaces/:workspaceId/workflows` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflows.publish` | `POST /v1/workspaces/:workspaceId/workflows/:workflowId/publish` | human, agent, personal_api_key | `workflow:publish` | `workflow:publish` | explicit |
| `workflows.remove` | `DELETE /v1/workspaces/:workspaceId/workflows/:workflowId` | human, agent, personal_api_key | `workflow:delete` | `workflow:delete` | explicit |
| `workflows.resumeRun` | `POST /v1/workspaces/:workspaceId/workflows/:workflowId/runs/:runId/resume` | human, agent, personal_api_key | `workflow:run` | `workflow:run`, `workflow:publish` | explicit |
| `workflows.runs` | `GET /v1/workspaces/:workspaceId/workflows/:workflowId/runs` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflows.save` | `PUT /v1/workspaces/:workspaceId/workflows/:workflowId` | human, agent, personal_api_key | `workflow:update` | `workflow:update` | explicit |
| `workflows.setStatus` | `PATCH /v1/workspaces/:workspaceId/workflows/:workflowId/status` | human, agent, personal_api_key | `workflow:publish` | `workflow:publish` | explicit |
| `workflows.simulate` | `POST /v1/workspaces/:workspaceId/workflows/:workflowId/simulate` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflows.stopThreadRun` | `POST /v1/workspaces/:workspaceId/workflows/runs/:runId/stop` | human, agent, personal_api_key | `workflow:run` | `workflow:run` | explicit |
| `workflows.testReplies` | `GET /v1/workspaces/:workspaceId/workflows/test-replies` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflows.testRun` | `POST /v1/workspaces/:workspaceId/workflows/:workflowId/test` | human, agent, personal_api_key | `workflow:run` | `workflow:run` | none |
| `workflows.threadAutomation` | `GET /v1/workspaces/:workspaceId/workflows/threads/:threadId` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workflows.triggerLogs` | `GET /v1/workspaces/:workspaceId/workflows/:workflowId/trigger-logs` | human, agent, personal_api_key | `workflow:read` | `workflow:read` | none |
| `workspaces.create` | `POST /v1/workspaces` | human | No resource permission; endpoint policy still applies | None | explicit |
| `workspaces.delete` | `DELETE /v1/workspaces/:workspaceId` | human | `workspace:delete` | None | explicit |
| `workspaces.deleteLogo` | `DELETE /v1/workspaces/:workspaceId/logo` | human, agent, personal_api_key | `workspace:update` | `workspace:update` | explicit |
| `workspaces.gettingStarted` | `GET /v1/workspaces/:workspaceId/getting-started` | human, agent, personal_api_key | `workspace:read` | `workspace:read` | none |
| `workspaces.leave` | `POST /v1/workspaces/:workspaceId/leave` | human | `workspaceMember:remove` | None | explicit |
| `workspaces.myPermissions` | `GET /v1/workspaces/:workspaceId/my-permissions` | human | `workspace:read` | None | none |
| `workspaces.onboarding.complete` | `POST /v1/workspaces/:workspaceId/onboarding/complete` | human, agent, personal_api_key | `workspace:update` | `workspace:update` | none |
| `workspaces.onboarding.get` | `GET /v1/workspaces/:workspaceId/onboarding` | human, agent, personal_api_key | `workspace:read` | `workspace:read` | none |
| `workspaces.onboarding.saveStep` | `POST /v1/workspaces/:workspaceId/onboarding/steps` | human, agent, personal_api_key | `workspace:update` | `workspace:update` | none |
| `workspaces.onboarding.skip` | `POST /v1/workspaces/:workspaceId/onboarding/skip` | human, agent, personal_api_key | `workspace:update` | `workspace:update` | none |
| `workspaces.setLogo` | `PUT /v1/workspaces/:workspaceId/logo` | human, agent, personal_api_key | `workspace:update` | `workspace:update` | explicit |
| `workspaces.update` | `PATCH /v1/workspaces/:workspaceId` | human, agent, personal_api_key | `workspace:update` | `workspace:update` | explicit |
| `workspaces.usage` | `GET /v1/workspaces/:workspaceId/usage` | human, agent, personal_api_key | `usage:read` | `usage:read` | none |
| `workspaceSettings.get` | `GET /v1/workspaces/:workspaceId/settings` | human, agent, personal_api_key | `workspace:read` | `workspace:read` | none |
| `workspaceSettings.update` | `PATCH /v1/workspaces/:workspaceId/settings` | human, agent, personal_api_key | `workspace:update` | `workspace:update`, `lead:update` | none |
## Documentation
- [Architecture](https://docs.schedulerzero.com/architecture)
- [MCP tools](https://docs.schedulerzero.com/mcp/tools)
- [REST reference](https://docs.schedulerzero.com/rest-api/reference)
- [Agent index](https://docs.schedulerzero.com/llms.txt)
- [Complete documentation](https://docs.schedulerzero.com/llms-full.txt)