Help API

Scopes

Every endpoint declares a required scope. The bearer token must hold that scope or the request fails with 403 insufficient_scope and a WWW-Authenticate: Bearer error="insufficient_scope" scope="<scope>" header.

Scopes are granted when:

  • the user approves the OAuth consent screen for a third-party client,
  • the admin selects scopes when minting a PAT, or
  • the user connects an AI assistant, and the MCP consent screen grants the two mcp:scheduling:* aliases below.

Active scopes

ScopeWhat it grants
user:readRead the authenticated user's profile (/v1/me).
users:readList and search organization members. (MCP only.)
event_types:readList and read event types.
event_types:createCreate event types. (Reserved; no public write endpoints yet.)
event_types:updateModify event types. (MCP only.)
event_types:deleteDelete event types. (Reserved.)
slots:readCheck slot availability.
bookings:readList and read bookings.
bookings:createCreate bookings.
bookings:cancelCancel bookings.
bookings:rescheduleReschedule bookings.
bookings:updatePatch booking metadata, responses, and attendee name.
webhooks:readList and read webhook subscriptions, and their recent deliveries (/v1/webhooks).
webhooks:writeCreate, edit, delete, rotate the secret of, and test webhooks.
availability:readRead schedules. (MCP only.)
availability:writeModify schedules. (MCP only.)
meetings:readRead the host-side meetings view. (MCP only.)
meetings:writeMark meetings as no-show. (MCP only.)
series:readList and read recurring meeting series.
series:writeCreate recurring series, and pause, resume, end, edit, or change their host.
contacts:readSearch contacts and read meeting history. (MCP only.)
single_use_links:readList secret links. (MCP only.)
single_use_links:writeGenerate and delete secret links. (MCP only.)
roundtables:readList and read roundtables (group scheduling polls). (MCP only.)
roundtables:writeCreate and publish roundtables. (MCP only.)

"Reserved" scopes are recognized by the auth server but nothing consumes them yet, but they exist so apps can request the right surface ahead of the endpoints landing. "MCP only" scopes are consumed by the MCP server's tools (the /mcp endpoint for AI assistants); no /v1/* REST endpoint reads them yet.

Alias scopes

Some commonly-bundled scopes are exposed as aliases. When a token is granted with an alias, the alias is expanded at grant time into its constituent granular scopes, and runtime checks always read the expanded set.

AliasExpands to
event_types:writeevent_types:create, event_types:update, event_types:delete
bookings:writebookings:create, bookings:cancel, bookings:reschedule, bookings:update
mcp:scheduling:readuser:read, event_types:read, slots:read, bookings:read, meetings:read, contacts:read, availability:read, single_use_links:read, roundtables:read, users:read
mcp:scheduling:writeeverything in mcp:scheduling:read, plus event_types:update, bookings:create, bookings:cancel, bookings:reschedule, meetings:write, availability:write, single_use_links:write, roundtables:write

The two mcp:scheduling:* aliases are what the AI-assistant consent screen grants. They are OAuth-only: they never appear in the PAT scope picker, and are only valid for tokens addressed to the MCP endpoint.

Practical consequence: a token granted bookings:write carries four granular scopes, and that's the set you'll see in meta.request_id audit logs, in the /v1/_ping response, and in the scope claim of an issued OAuth token.

Reserved scopes (not yet active)

These appear in discovery but no endpoint currently consumes them:

routing_forms:read    routing_forms:create   routing_forms:update
routing_forms:delete  routing_forms:write    teams:read
teams:write           calendars:read         calendars:write
analytics:read

Required scope per endpoint

Method · PathScope
GET /v1/_pingnone (auth only)
GET /v1/meuser:read
GET /v1/event-typesevent_types:read
GET /v1/event-types/:idOrSlugevent_types:read
GET /v1/slotsslots:read
GET /v1/slots/checkslots:read
GET /v1/bookingsbookings:read
GET /v1/bookings/:uidbookings:read
POST /v1/bookingsbookings:create
POST /v1/bookings/:uid/cancelbookings:cancel
POST /v1/bookings/:uid/reschedulebookings:reschedule
PATCH /v1/bookings/:uidbookings:update
GET /v1/webhookswebhooks:read
GET /v1/webhooks/:idwebhooks:read
GET /v1/webhooks/:id/deliverieswebhooks:read
POST /v1/webhookswebhooks:write
PATCH /v1/webhooks/:idwebhooks:write
DELETE /v1/webhooks/:idwebhooks:write
POST /v1/webhooks/:id/rotate-secretwebhooks:write
POST /v1/webhooks/:id/testwebhooks:write

Requesting scopes

OAuth: include them on /v1/oauth/authorize as a space-separated scope parameter. The set must be a subset of the client's registered allowed_scopes, otherwise 400 invalid_scope. The user can narrow further from the consent screen; granted scopes are the user's choice intersected with the request.

PAT: select scopes in the New API key dialog in Admin Center → API. Expanding the scope set on an existing key requires re-confirming your account password; narrowing does not.

Insufficient scope

{
  "error": {
    "code": "insufficient_scope",
    "message": "This action requires the 'bookings:create' scope",
    "details": { "required_scope": "bookings:create" },
    "request_id": "req_…"
  }
}

The remedy is always: mint or re-authorize a token that holds the required scope. Scopes cannot be elevated mid-session.

Last updated September 21, 2026.