Calendly
Automatically sync demo bookings from Calendly into Pana’s Demo Bookings dashboard.
What you get
- Calendly invitees appear as demo bookings with name, email, time, and meeting links.
- Event types sync for scheduling URLs and QR codes on event landing pages.
- Real-time updates via Calendly webhooks (invitee created, updated, canceled).
- Optional auto-conversion of bookings to leads when a booking is created.
Calendly is connected per user — each team member who schedules demos should connect their own Calendly account.
Before you start
- A Calendly account with event types you use for demos.
- Workspace membership in Pana.
- Platform operator: a Calendly OAuth app with the backend callback URL registered — Calendly Developer / your Calendly integration settings.
- Backend env:
CALENDLY_CLIENT_ID,CALENDLY_CLIENT_SECRET, and optionallyCALENDLY_WEBHOOK_SIGNING_KEY.
Step 1 — Configure your Calendly OAuth app (platform operator)
Calendly OAuth uses a backend callback URL, not the frontend /auth/oauth/callback path used by HubSpot, Pipedrive, Salesforce, and Google Calendar.
Redirect URI (OAuth callback)
In your Calendly OAuth app, set the Redirect URI to your public API origin + /api/v1/integrations/calendly/callback/ (must match exactly, including trailing slash).
Production (events.pana.space):
https://eventsapi.pana.space/api/v1/integrations/calendly/callback/
Staging (mathiverse.gridapps.in):
https://api.mathiverse.gridapps.in/api/v1/integrations/calendly/callback/
Local development:
http://localhost:8000/api/v1/integrations/calendly/callback/
:::caution Backend URL, not frontend
The callback hits the API host (eventsapi.pana.space), not events.pana.space. Trailing slash is required.
:::
Backend environment (Railway)
CALENDLY_CLIENT_ID=<Client ID from Calendly app>
CALENDLY_CLIENT_SECRET=<Client secret from Calendly app>
API_BASE_URL=https://eventsapi.pana.space
CALENDLY_WEBHOOK_SIGNING_KEY=<optional signing key from Calendly developer settings>
API_BASE_URL ensures OAuth and webhooks use the public API origin when the app runs behind a proxy. Alternatively set an explicit override:
CALENDLY_CALLBACK_URL=https://eventsapi.pana.space/api/v1/integrations/calendly/callback/
Redeploy the backend after changing credentials.
Inbound webhook URL
Pana registers this webhook automatically when a user connects. It must be reachable from Calendly:
https://eventsapi.pana.space/api/v1/integrations/calendly/webhook/
Set CALENDLY_WEBHOOK_SIGNING_KEY so Pana can verify webhook signatures from Calendly.
Step 2 — Connect in Pana
- Go to Settings → Integrations.
- Find Calendly under Calendar (or All).
- Click Connect.
- Sign in to Calendly and approve access.
- Calendly redirects to the backend callback; Pana then sends you back to Settings → Integrations with a success message.
The connect flow stores your workspace in OAuth state and registers organization webhooks for invitee events.
After connecting
Manual sync
Click Sync on the Calendly card to pull the latest bookings and event types from your Calendly account.
Use this after connecting for the first time or if a booking is missing.
Demo Bookings
Open Demo Bookings in the sidebar to see synced meetings. Bookings include:
- Lead name and email
- Start and end time
- Calendly meeting, cancel, and reschedule links
- Link to a workspace event when UTM parameters on the scheduling URL identify one
Link bookings to events
Add UTM parameters to your Calendly scheduling URL (for example utm_content=<event-uuid>) so bookings attach to the correct Pana event. Event type scheduling_url is updated when you run Sync.
Webhooks
On successful connect, Pana registers a Calendly webhook for:
invitee.createdinvitee.updatedinvitee.canceled
If bookings stop updating in real time, disconnect and reconnect Calendly, or run Sync manually.
Disconnect
Turn off the toggle on the Calendly card. This revokes the connection for your user in the current workspace and removes the Calendly webhook subscription when possible.
Troubleshooting
| Issue | What to try |
|---|---|
redirect_uri_mismatch | Calendly Redirect URI must be https://eventsapi.pana.space/api/v1/integrations/calendly/callback/ exactly (API host, trailing slash). |
| Connect returns to Pana with an error | Check Railway CALENDLY_CLIENT_ID matches the Calendly app; verify API_BASE_URL or CALENDLY_CALLBACK_URL. |
| Connect button does nothing | Confirm you are in the correct workspace; refresh and try again. |
| Bookings not appearing | Click Sync on the integration card; check the Calendly account you connected. |
| Webhooks not firing | Confirm https://eventsapi.pana.space/api/v1/integrations/calendly/webhook/ is reachable; set CALENDLY_WEBHOOK_SIGNING_KEY; reconnect Calendly. |
| Wrong event on a booking | Verify UTM parameters on the Calendly scheduling link (utm_content=<event-uuid>). |
Callback URL checklist
-
https://eventsapi.pana.space/api/v1/integrations/calendly/callback/ - Registered on Calendly OAuth app (not Google/HubSpot-style frontend callback)
- Same app as
CALENDLY_CLIENT_IDon Railway -
API_BASE_URL=https://eventsapi.pana.space(or explicitCALENDLY_CALLBACK_URL)