Skip to main content

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 optionally CALENDLY_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​

  1. Go to Settings → Integrations.
  2. Find Calendly under Calendar (or All).
  3. Click Connect.
  4. Sign in to Calendly and approve access.
  5. 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

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.created
  • invitee.updated
  • invitee.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​

IssueWhat to try
redirect_uri_mismatchCalendly Redirect URI must be https://eventsapi.pana.space/api/v1/integrations/calendly/callback/ exactly (API host, trailing slash).
Connect returns to Pana with an errorCheck Railway CALENDLY_CLIENT_ID matches the Calendly app; verify API_BASE_URL or CALENDLY_CALLBACK_URL.
Connect button does nothingConfirm you are in the correct workspace; refresh and try again.
Bookings not appearingClick Sync on the integration card; check the Calendly account you connected.
Webhooks not firingConfirm https://eventsapi.pana.space/api/v1/integrations/calendly/webhook/ is reachable; set CALENDLY_WEBHOOK_SIGNING_KEY; reconnect Calendly.
Wrong event on a bookingVerify 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_ID on Railway
  • API_BASE_URL=https://eventsapi.pana.space (or explicit CALENDLY_CALLBACK_URL)

API reference​

Integrations API — Calendly