---
title: "Calendly Scheduler"
description: "Calendly Scheduler is a Joomla system plugin that shows a live Calendly booking calendar inside an article or a contact page. Visitors choose a meeting type, a day and a time and enter their details…"
url: "https://docs.j2commerce.com/v6/apps-and-extensions/plugins/calendlyscheduler"
markdown_url: "https://docs.j2commerce.com/v6/apps-and-extensions/plugins/calendlyscheduler.md"
last_updated: "2026-11-12T17:58:51+00:00"
version: "J2Commerce 6"
breadcrumbs:
  - title: "Home"
    url: "https://docs.j2commerce.com/"
  - title: "J2Commerce 6"
    url: "https://docs.j2commerce.com/v6"
  - title: "Apps and Extensions"
    url: "https://docs.j2commerce.com/v6/apps-and-extensions"
  - title: "Plugins"
    url: "https://docs.j2commerce.com/v6/apps-and-extensions/plugins"
  - title: "Calendly Scheduler"
    url: "https://docs.j2commerce.com/v6/apps-and-extensions/plugins/calendlyscheduler"
---

# Calendly Scheduler

Calendly Scheduler is a Joomla system plugin that shows a live Calendly booking calendar inside an article or a contact page. Visitors choose a meeting type, a day and a time and enter their details.

You choose how the booking is made: in your page through the Calendly Scheduling API, or through a single-use Calendly link where the visitor finishes on Calendly. The plugin connects with a Personal Access Token, does not need J2Commerce and includes translations for 22 languages.

## Requirements

- Joomla 6.x.
- A Calendly account and a Personal Access Token.
- A paid Calendly plan (Standard or above) for booking inside your page. Plans without the Scheduling API can use Single-Use Link mode instead.

---

## Installation

1. In Joomla, open **System** -> **Install** -> **Extensions** and upload the plugin package.
2. Open **System** -> **Plugins** and search for **System - Calendly Scheduler**.
3. Make sure the plugin is enabled, then open it.

---

## Connecting Calendly

1. In Calendly, open **Integrations and Apps** -> **API and Webhooks** -> **Personal Access Tokens** and create a token.
2. Copy the whole token. Do not cut it short.
3. In the plugin, open the **Connection** tab and paste it into **Personal Access Token**.
4. Click **Save**.
5. Click **Test Connection**. **Connection Status** shows **Connected**, your **Account**, the **Time Zone**, the **Booking Method** and the number of **Bookable Event Types**.

> **Important:** Keep the token private. Anyone who holds it can act as your Calendly account.

---

## Adding the Calendar

Put the `{calendlyscheduler}` tag where the calendar should appear. It works in the text of an article and in the **Miscellaneous Information** field of a contact. Anywhere else the tag is removed and nothing shows.

```
{calendlyscheduler}
{calendlyscheduler event=ABC123 days=21 title="Book a Call" intro="Pick a time that suits you."}
```

| Attribute | What It Does | Default | Options |
| --- | --- | --- | --- |
| **event** | Offers only these event types. Separate several ids with commas. | The event types chosen in the plugin | Up to 10 ids of letters, numbers, hyphens and underscores |
| **days** | How many days ahead visitors can book. | Days Ahead setting | 3 to 30 |
| **title** | Heading shown above the calendar. | None | Text, up to 120 characters |
| **intro** | Short text shown under the heading. | None | Text, up to 300 characters |

Put a value that contains spaces in double quotes. Other attributes are ignored.

> **Tip:** The **Event Types** list in the plugin shows the event types in your account. Pick the ones to offer there, or leave it empty to offer every active, free event type.

---

## Settings

### Connection

| Setting | What It Does | Default | Options |
| --- | --- | --- | --- |
| **Connection Status** | A live check of your Calendly account, run each time the form opens. **Test Connection** refreshes it. | None | Read only |
| **Personal Access Token** | The token from Calendly. | Empty | Up to 2048 characters |
| **Booking Method** | How a booking is made. Book in This Page creates it through the Calendly Scheduling API. Single-Use Calendly Link creates a one-time link and the visitor finishes on Calendly. | Book in This Page (Scheduling API) | Book in This Page (Scheduling API), Single-Use Calendly Link |

### Booking Defaults

| Setting | What It Does | Default | Options |
| --- | --- | --- | --- |
| **Event Types** | Event types offered when a tag does not choose its own. Save the token first to load the list. Paid and secret event types are never offered. If Calendly cannot be reached when the settings open, the event types you saved stay in the list, so saving does not clear them. | Empty (every active, free event type) | Event types in your account |
| **Event Type Choice Style** | How visitors pick an event type when there are several. | Radio Buttons | Radio Buttons, Select Field |
| **Days Ahead** | How many days into the future visitors can book. | 14 | 3 to 30 |
| **Time Slot Spacing** | Thins out the list of times. | All Times from Calendly | All Times from Calendly, Every 15 Minutes, Every 30 Minutes, Every Hour |
| **Time Zone Shown First** | The time zone used when the calendar opens. Visitors can switch with a button under the time zone line. | Visitor's Browser Time Zone | Visitor's Browser Time Zone, Calendly Account Time Zone |
| **Require Phone Number** | Makes the phone number required. A number that starts with a plus sign and country code is also sent to Calendly for text reminders. | No | Yes, No |
| **Show Question Field** | Shows the event type's own custom question as a text box. A question Calendly marks as required is always shown. | Yes | Yes, No |
| **Confirmation Message** | An extra sentence shown after a booking succeeds. | Empty | Text |
| **Consent Checkbox Text** | When filled in, visitors must tick a box with this text before booking. | Empty | Text |
| **Captcha** | Asks visitors to pass a captcha before the booking is made. See [Captcha](https://docs.j2commerce.com/v6/apps-and-extensions/plugins/calendlyscheduler#captcha). | Do Not Use | Do Not Use, or an enabled captcha plugin |
| **Show Cancellation Policy** | Shows your cancellation policy in the details step, above the book button. | No | Yes, No |
| **Require Agreement** | Visitors must tick a box agreeing to the policy. Shown when **Show Cancellation Policy** is Yes. If the policy text is empty, booking is never blocked. | No | Yes, No |
| **Policy Text** | The policy itself. Calendly has no policy text to pull, so write it here. Basic formatting is kept. | Empty | Editor text |
| **Lookup Cache (Minutes)** | How long the event type list and account time zone are remembered. Available times are cached for one minute only. | 10 | 1 to 120 |

### Display

| Setting | What It Does | Default | Options |
| --- | --- | --- | --- |
| **Load Default Styles** | Loads the plugin stylesheet. Turn it off if your template already styles the calendar through a layout override. | Yes | Yes, No |
| **Fallback Contact Text** | Shown instead of the calendar when online booking is unavailable, for example your phone number. | Empty | Text |

### Troubleshooting

| Setting | What It Does | Default | Options |
| --- | --- | --- | --- |
| **Debug Log** | Writes each request to Calendly and its reply to a log file. See [Troubleshooting](https://docs.j2commerce.com/v6/apps-and-extensions/plugins/calendlyscheduler#troubleshooting). | No | Yes, No |

---

## How Visitors Book

1. If there is more than one event type, the visitor picks one under **Choose a Meeting Type**.
2. The visitor picks a day under **Choose a Day** and a time under **Choose a Time**.
3. The visitor enters their details under **Your Details** and clicks **Book This Time**.

A note above the fields reads **All fields are required unless marked optional.** The phone field is marked **Phone (Optional)** unless **Require Phone Number** is Yes.

A confirmation, **You Are Booked**, replaces the form. Calendly emails the details.

A visitor can make 3 bookings in 10 minutes. After that the form asks them to wait and try again.

---

### Temporary Errors

If Calendly is briefly unavailable while a visitor loads times, the calendar shows a message and keeps the meeting type picker on screen. The visitor can choose again without reloading the page. When the page offers only one meeting type, the picker is hidden and the visitor sees the error instead.

### Keyboard and Screen Readers

- The whole calendar works from the keyboard.
- After an error, or when a day has no times, focus moves to the status message so a screen reader reads it.
- An invalid field, such as a badly formed email address, shows an error linked to the field.
- The days and the previous and next buttons have names a screen reader can read.

---

## Link Mode

Set **Booking Method** to **Single-Use Calendly Link** if your Calendly plan cannot use the Scheduling API.

The visitor picks an event type, a day and a time as usual. **One More Step** then shows a **Continue to Calendly (Opens in a New Tab)** link. The visitor finishes the booking there, with name and email filled in. Each link works once.

---

## Captcha

Enable a captcha plugin under **System** -> **Plugins** first. Then choose it in **Captcha**. Visitors must pass it before booking.

> **Warning:** Keep the captcha plugin's **Access** set to **Public**. If it is limited to some access groups, the captcha stays required for everyone else and their bookings fail.

---

## Template Override

To change the markup of the calendar, copy the layout into your template:

```
plugins/system/calendlyscheduler/layouts/calendlyscheduler/calendar.php
templates/YOUR_TEMPLATE/html/layouts/calendlyscheduler/calendar.php
```

Your copy wins over the plugin's own file. If you use a captcha, keep the captcha block from the plugin's layout in your copy. Set **Load Default Styles** to No if your template supplies the styling.

---

## Languages

The plugin includes translations for 22 languages: Arabic, Chinese (Traditional), Danish, Dutch, English (UK), English (US), Finnish, French, German, Greek, Hebrew, Italian, Japanese, Norwegian Bokmål, Persian, Polish, Portuguese (Brazil), Portuguese (Portugal), Russian, Spanish, Swedish and Turkish. The calendar and the plugin settings use the translation that matches the language Joomla is showing.

---

## Troubleshooting

| What You See | Meaning | Fix |
| --- | --- | --- |
| Not connected yet. Add your token, save, and the status appears here. | No token is saved. | Paste the token and save. |
| Calendly rejected this token. Check it, then save again. | Calendly answered 401. | Paste the complete token again. Create a new one if it was revoked. |
| Calendly could not be reached or returned an error. Try again in a moment. | Any other error code from Calendly, or no reply. | Click **Test Connection** again. Turn on **Debug Log** to see the code. |
| Calendar missing, only the fallback text shows | The plugin is not connected, or the account cannot serve bookings. | Open the plugin and check **Connection Status**. |
| The yellow message The "System - Calendly Scheduler" plugin is not connected yet | You are logged in as a user who can manage plugins. Visitors do not see it. | Add the token. |
| That time was just taken. Please choose another. | Calendly answered 409, or 400 for a time that is gone. | Choose another time. |
| Too many attempts. Please wait a few minutes and try again. | The booking limit, or Calendly answered 429. | Wait and try again. |
| Something went wrong on our side. | Calendly returned another error, such as 403 (the plan does not allow the Scheduling API) or 404. | Check your Calendly plan. Switch **Booking Method** to **Single-Use Calendly Link** if the plan has no Scheduling API. |
| Your session expired. Please reload the page and try again. | The booking form token was not accepted. | Reload the page. |

### Page Cache

The calendar works with Joomla page caching or a cache plugin on. After changing the plugin settings, clear the Joomla cache and any server or CDN cache so the page shows the new settings.

### Debug Log

1. Set **Debug Log** to **Yes** and save.
2. Repeat the action that fails.
3. Open `administrator/logs/calendlyscheduler-debug.log.php`. Each request to Calendly and its reply is listed with the status code.
4. Set **Debug Log** back to **No**.

The token, names, email addresses, phone numbers and answers are masked, including email addresses inside error details. Replies longer than 2 KB are cut. Errors are also written to `administrator/logs/calendlyscheduler.log.php`, with the same masking.

---

## Uninstalling

Open **System** -> **Manage** -> **Extensions**, search for **System - Calendly Scheduler** and click **Uninstall**. Remove any `{calendlyscheduler}` tags from your content first. Without the plugin the tag shows as plain text.
