OAuth scopes

The 62 scopes Whippy's authorization server offers, and how they combine with your role.

Scopes limit what an OAuth token can do. They work together with your Whippy role:

  • A tool call succeeds only if your role allows the action and, for scope-protected endpoints, the token has the matching scope.
  • A scope never gives you more access than your role. A user without permission to delete contacts can't delete them through MCP, even with contacts:delete.

Scopes use the format resource:permission, the same resources and permissions as Whippy roles.

Which scopes your client gets

MCP clients read the scope list from https://api.whippy.co/.well-known/oauth-authorization-server and usually request all of them. Claude, ChatGPT, and Cursor all do this.

If a client requests no scopes, the token has none. Read and write calls on unprotected endpoints (such as conversations and messages) still work, but every scope-protected tool fails with:

{"error": "Token does not have the required scope for this action."}

If you see this error, check that your client requests scopes, then disconnect it from Connected apps and sign in again.

Endpoints without a scope

Some endpoints aren't scope-protected. Your role alone decides access. These include conversations, messages, calls, reading channels, users, organization details, and contact lists.

list_organization_variables always returns built-in variables. It includes custom object and form variables only when the token also has custom_data_types:read or forms:read.

Scope list

ResourceScopes
Contacts (also leads and segments)contacts:read, contacts:create, contacts:update, contacts:delete
Campaignscampaigns:create, campaigns:update
Sequencessequences:read
AI Agents (also knowledge bases, LLMs, agent tools, and tests)ai_agents:read, ai_agents:create, ai_agents:update, ai_agents:delete
Automation templatesautomation_templates:read
Tagstags:create, tags:update, tags:delete
Custom object definitionscustom_data_types:read, custom_data_types:create, custom_data_types:update, custom_data_types:delete
Custom object propertiesproperties:create, properties:update, properties:delete
Custom object recordscustom_data:read, custom_data:create, custom_data:update, custom_data:delete
Developer applicationsapplications:read, applications:create, applications:update
Webhook endpointsendpoints:read, endpoints:create, endpoints:update
Metricsmetrics:read, metrics:create, metrics:update, metrics:delete
Reports and dashboardscustom_reports:read, custom_reports:create, custom_reports:update, custom_reports:delete
Teams (also team members and schedules)teams:read, teams:create, teams:update, teams:delete
Message templatesmessage_templates:create, message_templates:update, message_templates:delete
Invitesinvites:create, invites:delete
Workflowsworkflows:read, workflows:create, workflows:update
Skillsagent_skills:read, agent_skills:create, agent_skills:update, agent_skills:delete
Formsforms:read, forms:create, forms:update, forms:delete
Audit logsaudit_logs:read
Channelschannels:update
🚧

Known gap

delete_developer_application and delete_developer_endpoint require applications:delete and endpoints:delete, which the authorization server doesn't offer yet. Over OAuth these two tools always return the insufficient-scope error. Delete applications and webhook endpoints in the Whippy app, or with an API key.


Did this page help you?