#4392·composio

[Bug]: Calendly auth configs are unconnectable — derived scopes are refused by the bundled Calendly OAuth app

Author: decknamecCreated Sep 9, 2026Updated Sep 12, 2026
Labelssupport

A Calendly auth config derives its scope set from the tools it is given, and the resulting authorization request is one the bundled Calendly OAuth application is not allowed to make. Calendly rejects it at /oauth/authorize before any consent screen is shown, so the connect never completes. 37 of the toolkit's 52 tools land in this state.

The scope set is refused by Calendly

Same authorize URL, same Calendly OAuth client (the one an auth config for the calendly toolkit produces, redirecting to https://backend.composio.dev/api/v1/auth-apps/add), same logged-in Calendly session. Only scope varies:

scope Result
(omitted) consent screen — "Connect Composio to Calendly"
default consent screen
default groups:read The requested scope is invalid, unknown, or malformed.
scheduled_events:read same error
users:read same error
routing_forms:read same error
event_types:read same error
organizations:read same error
webhooks:read same error
availability:read same error

Every one of those seven is a documented Calendly scope (https://developer.calendly.com/scopes), so this is not a spelling problem. The application is refused for granular scopes as such, and a single granular scope is enough — default does not rescue a request it appears in.

Calendly's own documentation explains the shape: OAuth applications predating scoped permissions keep full access and accept only the unscoped grant, while granular scopes have to be requested and approved per application. The bundled Calendly app behaves exactly like one of those, so the scope metadata describes a permission model the app is not enrolled in.

The blast radius is most of the toolkit

POST /api/v3.1/tools/scopes/required over all 52 Calendly tools:

  • 15 tools require only default — an auth config restricted to those connects
  • 37 tools require at least one granular scope — any auth config containing one cannot be connected

Since the scope set is derived from the tool list, picking almost any useful Calendly tool produces an auth config that no user can complete.

Five of the derived scope names do not exist

The union over all 52 tools is 17 scopes. Alongside default, these five have no counterpart in Calendly's list:

Returned Calendly's actual scope
user:read users:read
user
group groups:read
organization organizations:read
organization:read organizations:read

Bare object names without a permission suffix suggest the set is assembled without validation against the provider's published scopes.

Why this is expensive to find

The rejection happens in Calendly's window and never returns to Composio, so no callback is made and the connected account stays INITIATED until it expires ten minutes later with Authorization was started but not completed within 10 minutes. From the API surface it is indistinguishable from a user who walked away — an integrator sees abandoned authorizations, not a toolkit that cannot work.

What would resolve it

Either enroll the Calendly OAuth application in Calendly's scoped permissions so the documented scopes can actually be requested, or derive the scope request from what the application is permitted to send — for this app today that is the unscoped grant.

The five non-existent names are worth correcting independently of that, and it seems worth checking whether other toolkits carry the same shape: a mismatch between derived scopes and what the bundled OAuth app may request is invisible to any check that compares Composio's metadata against itself.