> ## Documentation Index
> Fetch the complete documentation index at: https://support.configview.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Calendly setup

ConfigView reads your Calendly organization through Calendly's API v2, using a **personal access token** created by one of your organization's Owners or Admins.

You will end up with **1 secret** in ConfigView (`CALENDLY_API_TOKEN`) when setup is complete.

> **Scope of this integration today.** ConfigView reads who is in your Calendly organization and with what role, invitations that are still open, groups and their admins, every meeting type (event type) with its owner and the meeting tools it uses, routing forms, the webhooks that send booking data to other systems, and, on the Enterprise plan, the activity log of who changed what. ConfigView only reads. It never creates, changes or cancels anything, and it never reads bookings, the people who booked, their answers, or anything submitted through a routing form.

***

## Step 1: Open the Calendly page in ConfigView

Open ConfigView in a second browser tab and leave it open:

`https://{companyname}.configview.com/admin/integrations/calendly`

Calendly shows the token once, when you create it, so paste it straight into ConfigView instead of keeping it in a notes file.

***

## Step 2: Create a personal access token in Calendly

A personal access token acts as the person who created it. To read the whole organization, that person must be an organization **Owner** or **Admin**. A token from a plain User only sees that user's own data, and ConfigView's health check fails it.

1. Sign in to [Calendly](https://calendly.com/login) as an Owner or Admin
2. Open **Integrations & apps → API and webhooks** ([direct link](https://calendly.com/integrations/api_webhooks))
3. Under **Personal access tokens**, click **Generate new token** (or **Get a token now** if you have none yet)
4. Name it `ConfigView`
5. Tick only these scopes. They are all read-only:

| Scope | What ConfigView reads with it |
| - | - |
| `users:read` | Whose token this is, to find your organization |
| `organizations:read` | Members, their roles, and invitations |
| `groups:read` | Groups and who is in them (Enterprise) |
| `event_types:read` | Event types |
| `webhooks:read` | Webhook subscriptions |
| `routing_forms:read` | Routing forms (not their submissions) |
| `activity_log:read` | The activity log (Enterprise) |

6. Click **Create token**, then **Copy token**
7. Switch to the ConfigView tab, paste it into `CALENDLY_API_TOKEN` under **Credentials**, and click the save icon

You can't add a scope to a token after it is created. If you missed one, generate a new token and replace the old one in ConfigView.

### Which person owns the token

Calendly revokes a personal access token when its owner changes their **login email**, **password** or **sign-in method**, and it stops working if they are removed from the organization. A shared admin account that won't leave and doesn't rotate its password is the safest owner. Otherwise, expect to create a new token whenever that person's sign-in changes.

### Plan requirements

| Data | Calendly plan |
| - | - |
| Members, invitations, event types | Any plan with more than one seat (Standard, Teams, Enterprise) |
| Webhooks | Standard, Teams or Enterprise |
| Routing forms | Plans that include routing forms |
| Groups, activity log | Enterprise |

When a feature isn't on your plan, its table stays empty, the health check marks it **skipped**, and nothing fails.

***

## Step 3: Connect and verify

1. Back on `https://{companyname}.configview.com/admin/integrations/calendly`, confirm the credential shows as saved
2. Click **Connect**. ConfigView creates its tables and schedules every collector at your default run time. Stop any you don't want under **Collectors**:

| Script | Notes |
| - | - |
| **Organization** | The Calendly organization: its name, plan (Standard, Teams, Enterprise and so on), whether it is on a trial, and which person's token ConfigView is using and that person's role. |
| **Members** | Everyone in the Calendly organization: name, email, role (owner, admin or user), time zone, and when they joined. |
| **Invitations** | Invitations to join the Calendly organization: the email invited, whether it is still pending, was accepted or declined, and when it was sent and last re-sent. |
| **Groups** | Calendly groups (Enterprise): each group's name and how many people are in it. |
| **Group Members** | Who is in each Calendly group and whether they are a group admin or a member, including invited people who have not joined yet. Runs after **Groups**. |
| **Event Types** | The meeting types people can be booked for: name, owner, whether it is active, hidden or managed by an admin, solo or team (round robin, collective), length, whether it takes payment, and which meeting tools it uses (Zoom, Google Meet, Microsoft Teams, Webex, phone, in person). Descriptions, notes, addresses, meeting links and booking questions are not stored. Runs after **Members**. |
| **Webhooks** | Webhooks that send booking data out of Calendly to another system: organization-wide, group and personal webhooks, which events they send, whether they are active, who created them and the host the data goes to. The full URL and signing key are not stored. Runs after **Members** and **Groups**. |
| **Routing Forms** | Calendly routing forms - the forms that qualify a visitor and send them to the right person's calendar: name, draft or published, how many questions and whether they ask for an email or phone number. Answers people submitted are never read. |
| **Activity Log** | Who changed what in Calendly (Enterprise plan): people added, removed or given a new role, sign-ins, event types and settings changed - with the time, who did it and their role. Kept as a growing history. |

3. Click **Verify now**. The health check confirms the token works, that its owner is an Owner or Admin, then reads one record from each kind of data.

If a check fails:

* **"Calendly token" fails with 401.** The token is wrong, or it was revoked because its owner changed their login email, password or sign-in method. Generate a new token (Step 2).
* **"Token owner is an Owner or Admin" fails.** The token was created by a User. Have an Owner or Admin create it instead.
* **A check says "token is missing scope ...".** That scope wasn't ticked when the token was created. Generate a new token with every scope in Step 2.
* **"Groups" or "Activity log" is skipped with "upgrade ... to Enterprise".** Those are Enterprise features. Everything else still works.
* **"Webhooks" is skipped.** Webhooks aren't on your plan. The table stays empty.

***

## Data Tables

Once the scripts run, these tables are created in your database. Each includes a `run_at` column. Every table keeps only the newest run, except `calendly_activity_log`, which keeps every entry ever collected.

| Table | Source | Key Columns |
| - | - | - |
| `calendly_organization` | `GET /users/me`, `GET /organizations/{uuid}` | org\_uuid, name, kind, plan, stage, token\_user\_email, token\_user\_role |
| `calendly_members` | `GET /organization_memberships` | membership\_uuid, user\_uuid, email, name, slug, org\_role, timezone, locale, joined\_at, membership\_updated\_at |
| `calendly_invitations` | `GET /organizations/{uuid}/invitations` | invitation\_uuid, email, status, created\_at, last\_sent\_at, accepted\_user\_uuid |
| `calendly_groups` | `GET /groups` | group\_uuid, name, member\_count, created\_at |
| `calendly_group_relationships` | `GET /group_relationships` | relationship\_uuid, group\_uuid, group\_name, group\_role, owner\_type, email, user\_uuid, org\_role, invitation\_status |
| `calendly_event_types` | `GET /event_types` | event\_type\_uuid, name, slug, active, admin\_managed, kind, pooling\_type, secret, duration, is\_paid, profile\_type, profile\_name, owner\_user\_uuid, owner\_email, location\_kinds, custom\_question\_count, deleted\_at |
| `calendly_webhooks` | `GET /webhook_subscriptions` | webhook\_uuid, scope, state, events, callback\_host, group\_name, user\_email, creator\_email, created\_at, retry\_started\_at |
| `calendly_routing_forms` | `GET /routing_forms` | form\_uuid, name, status, question\_count, question\_types, asks\_for\_email, asks\_for\_phone |
| `calendly_activity_log` | `GET /activity_log_entries` | entry\_uuid, occurred\_at, event\_name, event\_namespace, event\_action, actor\_name, actor\_email, actor\_org\_role, target\_email, details |

***

## Things worth knowing

**Calendly doesn't report sign-ins on members.** There is no last-login or last-active time for a member in Calendly's API, so ConfigView can't tell you who stopped using Calendly. Comparing members against Okta or Google Workspace finds the leavers instead.

**Webhooks are found at three levels.** Organization-wide webhooks receive every booking in the company; group webhooks receive a group's bookings; personal webhooks receive one person's. ConfigView lists all three. If Calendly won't show an Admin the personal webhooks of other users, those are skipped and the rest are still collected.

**Webhook destinations are stored as hosts.** `callback_host` is the host booking data is sent to, never the full URL, which can carry a token. The signing key is never read.

**Event types keep their meeting tool, not the meeting.** `location_kinds` lists the kinds of location an event type offers (`zoom_conference`, `google_conference`, `microsoft_teams_conference`, `webex_conference`, `gotomeeting_conference`, `physical`, `outbound_call` and so on). Addresses, phone numbers, meeting links, descriptions, internal notes and the wording of booking questions are dropped.

**The activity log is incremental.** The first run reads up to a year back. Each later run reads from the newest stored entry, and entries are never deleted from the table. Each entry's details are kept with any field that could hold booking or invitee content removed.

**Rate limits.** Calendly allows 500 requests a minute per user on paid plans (50 on Free), and the token shares that with everything else its owner uses. ConfigView paces itself at 120 a minute, slows down further if Calendly reports a lower limit, and waits for the reset when it is nearly used up.

## What isn't collected

* The personal access token, webhook signing keys, or any other credential
* Scheduled events, invitees (names, emails, answers to booking questions), no-shows and cancellations
* Routing form submissions and contacts
* Meeting recaps and transcripts from Calendly Notetaker
* Event type descriptions, internal notes, meeting links, addresses and phone numbers
* Full webhook URLs (only the host)
* Connected calendars and other apps a member has linked to their own Calendly account: Calendly's API has no list of them


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.