# Integrate with Calendly

> Calendly  is an app that lets you save time scheduling meetings by removing the need for the usual back-and-forth you encounter when deciding on a convenient...

Source: https://help.kustomer.com/en_us/integrate-with-calendly-SkjppgFpv

Last updated: 2026-06-10T23:40:19.470Z

[Calendly](https://calendly.com/) is an app that lets you save time scheduling meetings by removing the need for the usual back-and-forth you encounter when deciding on a convenient time. The Calendly 2.0 upgrade brings our app up to speed with the latest Calendly API v2, which opens the door for future improvements. New users installing Calendly for the first time as well as existing users can upgrade to version 2.0 and later of the Calendly app using the same steps.

**Who can access this feature?**

**User types**

Admins can set up this integration.

  

### In this article

*   [Prerequisites](#Prerequisites)
*   [How does Calendly work with Kustomer?](#Work)
*   [Do existing users need to upgrade?](#Upgrade)
*   [Initializing the Calendly app in Kustomer](#initializing)
    *   [Installing the Calendly app within Kustomer](#install-calendly-app)
    *   [Configuring an inbound webhook for use with Calendly](#calendly-webhook)
*   [Configuring Calendly with Kustomer](#Configuring)

### Prerequisites

Before you begin this integration, you must have:

*   A paid [_Premium_ or _Pro_](https://calendly.com/pages/pricing) Calendly account.
*   A Calendly API key. You can follow their documentation to [Get Your Authentication Token](https://calendly.com/integrations/api_webhooks).

Only organization admins need to configure Calendly using these steps, each individual  human rep must set their own personal availability through Calendly.

### How does Calendly work with Kustomer?

All meetings scheduled with Calendly are shown within Kustomer in the customer's timeline and as an insight card. Here, you will be able to see meeting information such as, the event name, start and end time, and any answers the meeting participant may have responded to when setting up the meeting.

![](https://cdn.kustomerhostedcontent.com/media/570fad9d9001bc1000163b28/2563a2e780319dac4261acafd739bbf4.png)

**Note:** Meeting details do not represent or show a live calendar feed of upcoming events that exist outside of the meeting booked via Kustomer. 

Event details include:

**Invitation Information**

*   Event Type
*   Event Name
*   Event Description
*   Event Duration, shown in minutes
*   Start Time
*   End Time

These are rendered from the `calendly-event` kObject custom fields.

**Cancelation Details**  
It displays:

*   Canceled
*   Cancel Reason
*   Canceled Date

Those map to `canceledStr`, `cancelReasonStr`, and `canceledDateStr`.

**Questions / Answers**  
These loop through `kobject.data.payload.questions_and_answers`, and display each Calendly invitee question with its corresponding answer.

### Do existing users need to upgrade?

Yes. The original version of the Calendly app was built around a version of Calendly's Developer API that is no longer maintained, and which will be retired in the future. The Legacy API v1 was officially deprecated by Calendly with the release of their newer Calendly API v2 which will be required for future improvements.

Calendly has not shared a timeframe for when the legacy API will be fully retired, but when that occurs, older versions of the Calendly app will stop functioning and teams using the outdated app may experience downtime. To avoid future disruptions to your team's integration with Calendly, we recommend you follow this procedure to upgrade to Calendly 2.0 or later at your earliest convenience.

### Initializing the Calendly app in Kustomer

This two-step process both installs the Calendly application from the Kustomer Application store, and will create an internal webhook you can use to configure Calendly via Postman (or via API call).

#### Installing the Calendly application within Kustomer 

To integrate Calendly with Kustomer, install the Calendly app from within the Kustomer App Directory.

1.  Go to the **Application Store** and search for **Calendly** in the App Directory.
2.  Click **Install** and enter your **Calendly API token**. You can use an existing personal access token, or generate a new one on [Calendly's API & Webhooks](https://calendly.com/integrations/api_webhooks) settings page.

#### Configuring an inbound webhook from Kustomer

With the application installed, your next step is to configure an **Inbound Webhook.**

To configure this inbound webhook:

1.  From the left side navigation, click **Settings.**
2.  From the **Settings** page, beneath **Platform**, click **Inbound Webhooks**. 
3.  At the top right side of the page, click **Add Inbound Webhook**. Enter the following required values for this webhook:
    1.  Enter a **Name**. 
    2.  Enter a **Description**. 
    3.  Select **Web** as the hook **Type**.
4.  Click **Create** to create the webhook. 
5.  In the table of **Inbound Webhooks**, [locate the webhook you created](#calendly-webhook). In the **Hook Address** column, click the url that was created. 

![](https://cdn.kustomerhostedcontent.com/media/570fad9d9001bc1000163b28/e31488713e3e96c1bd7045d4262efcd4.png)

### 

### Configuring Calendly with Kustomer

After you install the Calendly app, you need to make requests using Postman to [get the current user API](https://calendly.stoplight.io/docs/api-docs/reference/calendly-api/openapi.yaml/paths/~1users~1me/get), and then to [create a webhook subscription](https://calendly.stoplight.io/docs/api-docs/reference/calendly-api/openapi.yaml/paths/~1webhook_subscriptions/post).

> **Note:** These steps only need to be completed by the org admin, not by each individual user. 

**To make the request:**

1.  Open Postman.
2.  Using your Calendly API token, send a `GET` request to `https://api.calendly.com/users/me`, and copy the and copy the `current_organization` value from the response.  
    ![](https://cdn.kustomerhostedcontent.com/media/570fad9d9001bc1000163b28/13f3500cbd0e57e2118e24526456e11e.png)
3.  Send a `POST` request to `https://api.calendly.com/webhook_subscriptions` with the following payload entered in the **Body** tab:
    
    {
     "url": "<Kustomer Hook URL>",
     "events": \[
       "invitee.canceled",
       "invitee.created"
     \],
     "organization": "<Calendly Organization URL>",
     "scope": "organization"
    }
    
    Substitute your organization's details into the payload as follows:
    *   **Kustomer Hook URL****:** [the inbound webhook URL configured.](#calendly-webhook)
    *   **Calendly Organization URI**: the `current_organization` value from step 2
4.  Select **Send** to submit the request. If the post was successful, an integer ID is returned.

Now, any meeting created in Calendly will be shown in Kustomer under a customer's timeline and an insight card.

### 

### FAQ

**Can I reschedule events using the Calendly application in Kustomer?**

The Calendly application in Kustomer supports `invitee.canceled` and `invitee.created`, which are used to populate fields in your Calendly insights card. These fields provide details on the invite, if it was cancelled, and for what reason. To reschedule events, you must reschedule through Calendly where you can set a new time, or email your invitee to arrange a new time. 

**My Calendly syncing stopped working.** 

If your Calendly sync stops working, the current account owner should generate a new API key. Paste this key into the **Calendly** application. Click **Application Store > Calendly**, then pase the API key in the **Calendly API key** field. 

**What do JSON payloads look like for reference?**

1.   Scheduled / created invitee event

```
{
  "attributes": {
    "data": {
      "event": "invitee.created",
      "payload": {
        "uri": "https://api.calendly.com/scheduled_events/AAAAAAAAAAAAAAAA/invitees/BBBBBBBBBBBBBBBB",
        "event": "https://api.calendly.com/scheduled_events/AAAAAAAAAAAAAAAA",
        "name": "Jane Customer",
        "email": "jane.customer@example.com",
        "created_at": "2026-06-10T17:45:00.000000Z",
        "updated_at": "2026-06-10T17:45:00.000000Z",
        "status": "active",
        "text_reminder_number": null,
        "timezone": "America/Los_Angeles",
        "questions_and_answers": [
          {
            "question": "What can we help you with?",
            "answer": "I need help understanding my subscription options."
          },
          {
            "question": "Company size?",
            "answer": "51-200"
          }
        ],
        "tracking": {
          "utm_campaign": "support-demo",
          "utm_source": "website",
          "utm_medium": "cta",
          "utm_content": "book-demo-button",
          "utm_term": "customer-support"
        }
      }
    }
  }
}
```

2.  Canceled invitee event

This shape should populate the cancellation section on the card because the workflow checks for `payload.cancellation`, `payload.cancellation.reason`, and `payload.updated_at`.

```
{
  "attributes": {
    "data": {
      "event": "invitee.canceled",
      "payload": {
        "uri": "https://api.calendly.com/scheduled_events/AAAAAAAAAAAAAAAA/invitees/BBBBBBBBBBBBBBBB",
        "event": "https://api.calendly.com/scheduled_events/AAAAAAAAAAAAAAAA",
        "name": "Jane Customer",
        "email": "jane.customer@example.com",
        "created_at": "2026-06-10T17:45:00.000000Z",
        "updated_at": "2026-06-11T15:20:00.000000Z",
        "status": "canceled",
        "timezone": "America/Los_Angeles",
        "cancellation": {
          "canceled_by": "Jane Customer",
          "reason": "Need to reschedule for next week",
          "canceler_type": "invitee",
          "created_at": "2026-06-11T15:20:00.000000Z"
        },
        "questions_and_answers": [
          {
            "question": "What can we help you with?",
            "answer": "I need help understanding my subscription options."
          }
        ]
      }
    }
  }
}
```

3.  Example Calendly scheduled event resource returned by `payload.event`

The workflow calls `kustomer.app.calendly.get.request` using `payload.event`, then stores values from `body.resource.name`, `body.resource.start_time`, `body.resource.end_time`, `body.resource.location`, and `body.resource.event_type`.

```
{
  "resource": {
    "uri": "https://api.calendly.com/scheduled_events/AAAAAAAAAAAAAAAA",
    "name": "Support Consultation",
    "status": "active",
    "start_time": "2026-06-17T18:00:00.000000Z",
    "end_time": "2026-06-17T18:30:00.000000Z",
    "event_type": "https://api.calendly.com/event_types/CCCCCCCCCCCCCCCC",
    "location": {
      "type": "zoom",
      "location": "https://zoom.us/j/1234567890"
    },
    "created_at": "2026-06-10T17:45:00.000000Z",
    "updated_at": "2026-06-10T17:45:00.000000Z"
  }
}
```

4.  Example Calendly event type resource returned by `resource.event_type`

The workflow calls the event type URL and stores `type`, `name`, `description_plain`, and `duration`.

```
{
  "resource": {
    "uri": "https://api.calendly.com/event_types/CCCCCCCCCCCCCCCC",
    "type": "StandardEventType",
    "name": "Support Consultation",
    "description_plain": "A 30-minute consultation with the support team.",
    "duration": 30,
    "slug": "support-consultation",
    "active": true
  }
}
```
