Caddi connects to Calendly through an OAuth app you create in the Calendly developer portal. Creating the app doesn't require a paid Calendly plan, though some features your loops might use do.
Two things to plan for:
Sandbox and Production are separate apps with separate credentials. Calendly recommends building against Sandbox and creating a second Production app when you're ready.
Webhooks require a paid Calendly subscription on the end user's account — Professional, Standard, Standard Plus, Teams, Teams Plus, or Enterprise. If a loop needs to react the moment a booking happens rather than on a schedule, check the plan first.
Before you start
You'll need:
A Calendly developer portal account — sign up with GitHub or Google. This is separate from your Calendly user account.
Owner or Admin access to your Caddi organization
Creating an OAuth app works on any Calendly subscription. A few endpoints are Enterprise-only (activity logs, invitee data deletion, scheduled event data deletion), and webhooks need a paid plan.
Step 1: Create the OAuth app in the Calendly developer portal
The Client Secret and Webhook signing key are shown only once and cannot be retrieved afterwards. Copy both before you leave the page, even if you don't plan to use webhooks yet.
Go to developer.calendly.com and Sign Up with GitHub or Google.
Create a new OAuth application.
Application name —
CaddiApplication type — web
Environment — choose Production for live use, or Sandbox to test first.
Redirect URI — enter
https://app.trycaddi.com/oauth-callback. Production requires HTTPS; Sandbox also permitshttp://localhostaddresses.Select the scopes (see below).
On creation, copy all three values: Client ID, Client Secret, and Webhook signing key.
Step 2: Choose scopes
In Calendly, a :write scope implicitly includes the matching :read scope, so you don't need to select both.
Leave organizations:read, organizations:write, groups:read, activity_log:read, and data_compliance:write off. Those are the organization-administration and compliance tier.
scheduled_events:write— read and manage scheduled eventsevent_types:write— read and manage event typesavailability:write— read and manage availabilityscheduling_links:write— create scheduling linksusers:read— identify the connecting userlocations:read— read event locationswebhooks:write— only if using webhooks, and only on a paid plan
Step 3: Configure Calendly in Caddi
This step must be completed by a Caddi organization owner or admin.
In Caddi, open Integrations in the left sidebar, then click the Integration Setup tab at the top of the page. This tab is only visible to organization owners and admins.
Find Calendly in the list and click Configure.
Enter the following values:
Client ID — from your Calendly OAuth app
Client Secret — the value shown once at creation
OAuth Scopes — space-separated list matching what you selected on the app. Leave blank to use Caddi's defaults.
Click Save Configuration. Caddi validates the credentials immediately — if something is wrong you'll see an error right away, and nothing is stored until validation passes.
Step 4: Connect your account
Go back to the My Connections tab and find Calendly.
Click Connect + and sign in to Calendly.
Approve the request. You'll be returned to Caddi with the connection active.
How the connection behaves
Each user connects their own Calendly account. Caddi sees that user's event types and bookings.
Sandbox and Production credentials are not interchangeable. Pasting Sandbox credentials into a production configuration will fail in ways that look like a permissions problem.
A custom connection replaces the standard one. Members of your organization will only see the option to connect through your app.
Revoking access. Delete the OAuth app in the developer portal, or have users revoke Caddi from their Calendly integrations page.
Troubleshooting
Authentication fails with credentials that look correct
Check whether the app is a Sandbox app. Sandbox and Production apps have separate credentials and cannot be mixed.
A redirect error at sign-in
The Redirect URI on the app doesn't match https://app.trycaddi.com/oauth-callback. Note that Production requires HTTPS.
A loop that should react to new bookings never fires
Webhooks require a paid Calendly plan on the connecting user's account, and the webhooks:write scope on the app. Check both, or switch the loop to a schedule.
The client secret was lost
Calendly secrets cannot be retrieved after creation. Create a new app and update the configuration in Caddi.
Still stuck? Contact Caddi support with the exact error message you're seeing and the time it occurred.
Automation ideas
Law Firms
Consultation booked → intake prep
When a consultation is booked, Caddi creates the prospect record, sends the intake questionnaire, and puts the prep task on the attorney's list.
Meeting completed → follow-up chain
After the meeting, Caddi logs it against the matter, drafts the follow-up email, and creates the next task.
RIAs
Review meeting booked → briefing assembly
When a client books a review, Caddi assembles the portfolio brief and recent activity so the advisor walks in prepared.
Meeting completed → CRM and compliance record
Caddi updates the CRM with what was discussed and files the meeting summary to your compliance archive.
