OAuth Readiness
Scheduling·calendly.com·generated live by the agent, 2026-10-30

Calendly

Calendly OAuth is self-serve. You create Sandbox and Production apps in the Developer page, PKCE (S256) is mandatory, and no app review is documented, so your own account can connect in about 30 minutes and launch can follow within days. The main catches are legal and plan-related: the Developer Policy may require Calendly's written consent before you send invitee data to an LLM sub-processor, and webhooks only work for clinics on paid Calendly plans.

Difficulty
easy
First token
30 min
Real users
1-14 days
Cost
free

Review: No app review is documented. Production is a self-serve environment setting.

Timing: There is no documented review, so the range depends mainly on how long Calendly takes to reply to a written-consent request for LLM sub-processing and on updating your privacy policy.

Cost: There is no developer fee. Webhooks need the connecting clinic to have a paid Standard, Teams or Enterprise plan, and activity log and data-compliance endpoints are Enterprise-only.

Verdict evidence inferreds1s2s9s7

Before you start

Iskaria readiness: 5 of 6 profile items in place
edit profile
  • for buildCalendly user account with access to the Developer page (calendly.com/app/developer)sourceds1s2
  • for buildOne redirect URI per app: localhost for the Sandbox app, https for the Production app✓ Iskaria has itsourceds1
  • for buildApp name using only letters, numbers, hyphens and spaces (Iskaria qualifies)✓ Iskaria has itsourceds1
  • for launchIndustry-standard privacy policy that covers Calendly data and AI processing✓ Iskaria has itsourceds10
  • for launchEncryption of stored Calendly data (Iskaria encrypts tokens per tenant)✓ Iskaria has itsourceds10
  • for launchCustomer support info shown in the app. Your profile has no shared support mailbox; a personal address works but is fragile.✗ missing in profileinferreds10
  • for launchCalendly's written consent if invitee data goes to LLM sub-processors✓ Iskaria has itinferreds10
Test mode:availablesourceds1s12

Sandbox apps allow an http://localhost redirect. No user cap, tenant restriction or expiry is documented. Sandbox uses real Calendly accounts and there is no separate test-data tenant.

Who does what

Agentcan do for you
  • Implement the PKCE auth code flow, refresh-token rotation and reconnect handling
  • Pick the scopes and handle 403s from declined scopes
  • Draft the privacy policy section and the consent email to Calendly
  • Build rate-limit (429) handling
Youmust take over
  • Log in to Calendly and create the Sandbox and Production apps
  • Save the one-time credentials
  • Send the sub-processor consent request and keep the reply
  • Approve the privacy policy changes

Steps

Buildcreate the app and credentials
  1. 1Open the Developer page in CalendlyYou5 minsourceds1s2

    Log in to Calendly, then go to Profile menu → Developer → OAuth apps. If your account has not been migrated yet, use developer.calendly.com/login instead.

    https://calendly.com/app/developer
  2. 2Create the Sandbox OAuth appAgent drafts, you submit10 minsourceds1

    Click Create OAuth app. Enter the app name Iskaria, set Environment type to Sandbox, set the redirect URI to http://localhost:3000/api/oauth/calendly/callback, and select the scopes listed below.

    https://calendly.com/app/developer
    App nameIskaria
    Redirect URI["https://app.iskaria.com/api/oauth/{provider}/callback","http://localhost:3000/api/oauth/{provider}/callback"]Exactly one URI: http://localhost:3000/api/oauth/calendly/callback
    Environment typeSandbox
    Scopes{"google":"Read Search Console, GA4 and Business Profile data for a clinic's own properties (webmasters.readonly, analytics.readonly, business.manage)","gmail":"Draft and send patient follow-up emails from the clinic's mailbox","meta":"Reply to WhatsApp, Instagram and Messenger messages for a clinic; publish the clinic's own posts","slack":"Post lead alerts and daily summaries into the clinic team's Slack","github":"Developer tooling: open issues/PRs from voice-note tasks","hubspot":"Sync leads and bookings into the clinic's CRM","default":"Let the clinic's AI assistant read and act on the clinic's own data in this app"}
  3. 3Save the credentials immediatelyYou5 minsourceds1

    The client ID, client secret and webhook signing key are shown only once. Copy all three straight into your secret store.

  4. 4Implement the auth code flow with PKCEAgent2-4 hsourceds1s5s6s7s14

    Use the documented auth.calendly.com endpoints and allow the 301 redirect to calendly.com/oauth/*. Always send a code_challenge (S256). At the token endpoint, send the code_verifier plus HTTP Basic auth (client_id as username, secret as password). Access tokens last 2 hours. Refresh tokens are single-use, so store the new one on every refresh. Build a reconnect flow for invalid_grant and for tokens revoked by password or login changes. Handle 403s from declined scopes.

Testworks for you and test users
  1. 5Test with your own and a clinic accountYou30 minsourceds4s7

    Connect through the Sandbox app. Call GET /users/me, list scheduled events, and create a webhook (this needs a paid plan). Watch the per-user rate limits.

Launchreview and approval for real users
  1. 6Draft the privacy policy section and the sub-processor consent requestAgent drafts, you submit1 hinferreds10

    Add a Calendly section to iskaria.com/privacy that covers AI processing. Draft an email to support+developer@calendly.com asking for written consent for LLM sub-processing, and keep the reply.

  2. 7Create the Production OAuth appYou10 minsourceds1

    Create a second app with Environment type set to Production and the redirect URI https://app.iskaria.com/api/oauth/calendly/callback (https only). Use the same scopes and save the new credentials.

    https://calendly.com/app/developer
    Redirect URI["https://app.iskaria.com/api/oauth/{provider}/callback","http://localhost:3000/api/oauth/{provider}/callback"]https://app.iskaria.com/api/oauth/calendly/callback
    Environment typeProduction

Scopes an agent typically needs

ScopeUsed forReview tierEvidence
users:readGet the owner and organization URIs via GET /users/mebasicsourceds3
event_types:readList the clinic's bookable servicesbasicsourceds3
availability:readAnswer availability questions from patientsbasicsourceds3
scheduled_events:writeBook via POST /invitees, cancel bookings and mark no-shows (includes read access)
Booking through the API has extra limits on the Create Event Invitee endpoint.
basicsourceds3s4
scheduling_links:writeCreate one-off booking linksbasicsourceds3
routing_forms:readRead lead intake formsbasicsourceds3
contacts:writeSync leads (includes read access)basicsourceds3
webhooks:writeReal-time lead and booking alerts
The clinic needs a paid Calendly plan, and the matching read scopes must also be granted.
paidsourceds3s7
organizations:readSupport multi-practitioner clinicsbasicsourceds3

What can slow you down or block approval

can block launchSub-processor consent for the LLM vendorinferreds10

The Developer Policy forbids subcontracting data processing to a third-party sub-processor without Calendly's prior written consent. Sending invitee data to an LLM vendor may count.

Workaround: Email support+developer@calendly.com before launch and keep the written reply.

slows you downWebhooks need a paid plansourceds7s4

Clinics on the Free plan cannot get webhook subscriptions. Free plans are also limited to 50 requests/min per user, versus 500/min on paid plans.

Workaround: Poll scheduled events for clinics on the Free plan.

slows you downCredentials are shown only oncesourceds1

The client secret, signing key and (currently) the client ID cannot be viewed again after creation.

Workaround: Save them to your secret store immediately.

slows you downToken revocation and rotationsourceds7s6

Tokens are revoked when a user changes their password, login email or login method. Refresh tokens are single-use, and reusing an old one returns invalid_grant.

Workaround: Build a reconnect flow and store the rotated refresh token atomically.

infoDynamic client registration on the MCP surfacetesteds14s8

The probe found registration_endpoint https://calendly.com/oauth/register with public clients and S256 only. This is the Calendly MCP server path (mcp.calendly.com), where an agent may be able to register a client itself with no manual app. It is not available for the REST API, and it only offers the coarse scopes mcp:scheduling:read and mcp:scheduling:write, with no webhooks.

Workaround: Use the console-created app for REST and webhooks.

slows you downNo shared support mailboxinferreds10

The policy requires support info in your app, and your profile's sharedSupportMailbox is null.

Workaround: Create a support@iskaria.com mailbox.

slows you downHealth datainferreds10

Patient booking data is health-related, and whether a BAA or Calendly's health-data terms apply was not checked.

What we checked

ClaimHowResult
No review gate for production
Consistent absence; never stated outright.
Checked 4 official pages (creating-an-oauth-app, legacy developer account page, Developer Policy, FAQ)unverified
Access token lifetime is 2 hours
Single source.
Token endpoint reference; FAQ is silentunverified
8 token requests per user per minute; 500/50 per-user request limitsRate-limits page and token endpoint reference agreeconfirmed
PKCE required for all apps
The current official doc makes PKCE mandatory; always send it.
Official creating-an-oauth-app page vs older text quoted by unified.tocorrected
Scopes required for new apps since 2026-03-03Changelog entry and scopes pageconfirmed
One redirect URI per app; Sandbox allows localhostNew and legacy registration pagesconfirmed
Dynamic client registration endpoint existsprobe_oauth of /.well-known/oauth-authorization-server on calendly.comconfirmed
Still uncertain
  • The absence of a review gate is inferred, never stated outright.
  • Whether LLM inference counts as sub-processing that needs written consent.
  • Whether org-wide queries need an admin or owner role.
  • How an unknown client is rejected at the authorize endpoint (the probe did not follow the 301).
  • The 2-hour token lifetime rests on a single page.
  • BAA and health-data terms were not analysed.
  • The 2026-04-15 rate-limit change for Create Event Invitee was not read in full.

Sources

  1. s1
    Creating an OAuth app · official-docs · accessed 2026-10-30
    “Every OAuth app must use Proof Key for Code Exchange (PKCE) with the S256 method.”
  2. s2
    Create a developer account (legacy) · official-docs · accessed 2026-10-30
  3. s3
    Authorization Scopes · official-docs · accessed 2026-10-30
    “no API access is granted until scopes are explicitly requested and approved”
  4. s4
    Rate Limits · official-docs · accessed 2026-10-30
    “Only 8 OAuth tokens per user can be requested within a span of 1 minute.”
  5. s5
    Get Access Token · official-docs · accessed 2026-10-30
    “Access Tokens expire after 2 hours.”
  6. s6
    Refresh token rotation guide · official-docs · accessed 2026-10-30
  7. s7
    FAQ · official-docs · accessed 2026-10-30
    “the Calendly user account for which the webhook subscription is being made will need a paid subscription”
  8. s8
    Calendly MCP Overview · official-docs · accessed 2026-10-30
    “you do not need to pre-register an OAuth application”
  9. s9
    Changelog · official-docs · accessed 2026-10-30
  10. s10
    Developer Policy · provider-policy · accessed 2026-10-30
    “All Developers must have an industry standard privacy policy in place that accurately describes the specifics of data usage”
  11. s11
    Calendly Partner Program listing · community · accessed 2026-10-30
    “New partners apply through the Calendly partner portal”
  12. s12
    Calendly OAuth app skill (unified.to) · community · accessed 2026-10-30
  13. s13
    Changelog 2026-03-03 (scopes launch) · official-docs · accessed 2026-10-30
  14. s14
    probe_oauth: calendly.com OAuth discovery and authorize test · our-test · accessed 2026-10-30
    “registration_endpoint https://calendly.com/oauth/register”
Something wrong or outdated? Re-run the agent for Calendly