# Calendly

Read and cancel Calendly bookings, book invitees, mark no-shows, make single-use scheduling links, and read event types and availability.

## Connect Calendly

1. In the sidebar, open **Connections** and press **Add connection**.
2. Type `calendly` and choose **Calendly**.
3. Choose **Sign in with Calendly**.
4. Press **Sign in with Calendly** at the bottom of the sheet, then choose your account in Calendly’s window and allow access.

Or choose **Paste your personal access token**, paste it, and press **Test and save**. It stays until someone deletes it.

Sign in with Calendly, or paste a personal access token (Calendly → Integrations & apps → API and webhooks → Personal access tokens). Booking an invitee and Calendly’s webhooks need a paid Calendly plan (Standard or above).

**What if it says “Sign-in isn’t set up here yet”?**

Signing in with Calendly needs a Calendly app on this installation, and it has none yet. Until it is set up, **Paste your personal access token** works without it.

**On Cloud:** The sheet says “It’s set up once for everyone who uses this service, not by an organization.”

**Self-hosted:** An admin of the installation sees **Set up Calendly sign-in** instead, and sets it up once for everyone. Everyone else sees who to ask.

1. Create an app in Calendly’s developer settings ([Calendly’s guide](https://calendly.com/integrations/api_webhooks)).
2. In GoRunner, copy the **Redirect address to add in Calendly’s developer settings**, and add it to the app.
3. Paste the **Client ID** and **Client secret**, then press **Save and sign in**.

[Set up a sign-in app](https://docs.gorunner.io/self-host/oauth-apps#other-providers)

**Can I use my own Calendly app?**

Yes. In the sheet, open **Use your own Calendly app** and paste its **Client ID** and **Client secret**. Add the redirect address it shows to your app first. The connection then signs in through your app instead of the installation’s.

[Connections](https://docs.gorunner.io/build/connections) says how to sign in again, rename or delete it. In a product that embeds GoRunner, **Add connection** can be missing: then [your provider makes connections](https://docs.gorunner.io/embed/customer-connections) for you.

## Start a workflow

Add a trigger and choose **Calendly**. The trigger uses the same connection as the steps.

### On Calendly Event

Starts a run when Calendly reports one of the events picked, for your own meetings or the whole organization's. Publishing the workflow creates the Calendly webhook subscription (with a signing key kept encrypted); unpublishing removes it. Every delivery's Calendly-Webhook-Signature is checked, with a timestamp no older than 5 minutes, and an unsigned or wrongly signed one is refused; a delivery Calendly sends again starts no second run. Webhooks need a paid Calendly plan; the organization scope needs an admin or owner.

- **Scope · Required**: Your own meetings, or every meeting in the organization (needs a Calendly admin or owner). Options: Mine, The organization's. Default: Mine.
- **Events · Required**: Which events start a run. Options: Meeting booked, Meeting cancelled, Invitee marked a no-show, No-show mark removed, Routing form submitted (organization only), Event type created, Event type changed, Event type deleted.

A later step can use its data, such as `{{trigger.created_at}}`, `{{trigger.created_by}}`, `{{trigger.event}}` and 1 more. See [Use data from earlier steps](https://docs.gorunner.io/build/use-data-from-earlier-steps).

## Do things in Calendly

Add a **Calendly** step, choose a **Resource**, then an **Operation**. Choose a row to see its fields.

- [Scheduled Event](https://docs.gorunner.io/apps/calendly#fields-f-scheduledevent): Get · Get Many · Cancel
- [Invitee](https://docs.gorunner.io/apps/calendly#fields-f-invitee): Book · Get · Get Many · Mark No-Show · Undo No-Show
- [Event Type](https://docs.gorunner.io/apps/calendly#fields-f-eventtype): Get · Get Many · Get Available Times
- [Scheduling Link](https://docs.gorunner.io/apps/calendly#fields-f-schedulinglink): Create
- [Availability](https://docs.gorunner.io/apps/calendly#fields-f-availability): Get Schedules · Get Busy Times
- [User](https://docs.gorunner.io/apps/calendly#fields-f-user): Get Me · Get · Get Many

Later steps read a step’s output by its name: see [Use data from earlier steps](https://docs.gorunner.io/build/use-data-from-earlier-steps).

## Limits

- A reply from Calendly can be up to 16 MB (a file download can have its own limit). A larger one fails the step; it is never cut short.
- When Calendly says to slow down (429), the step waits as long as it asks, if the step’s time allows. Otherwise it fails and says when to try again.

Not in your list? See [When an app isn’t here](https://docs.gorunner.io/apps/when-an-app-isnt-here#q-not-in-list).

## For developers

In the API, which calls apps pieces, Calendly is `pieceId: "calendly"` with `actionId: "calendly"`, set by `resource` and an `operation_…` field, such as `operation_availability`. Its trigger is `calendlytrigger` / `calendly_event`. [Get an app](https://docs.gorunner.io/api/apps/get-app) returns every field.

It can change something outside the run (`writes_external`). See [How versions and side effects work](https://docs.gorunner.io/apps#q-versions).

### Calendly › Scheduled Event

### Get

- **Scheduled Event · Required**: The scheduled event's uuid or uri.

### Get Many

- **Whose · Optional**: Your own events, another user's, or the whole organization's (another user's and the organization's need a Calendly admin or owner). Options: Mine, A user's, The organization's. Default: Mine.
- **User · Required**: The user's uuid or uri (User › Get Many lists the organization's). Shows when **Whose** is **A user's**.
- **Status · Optional**: Active or cancelled events, or both. Options: Both, Active, Cancelled.
- **Starting After · Optional**: Only events that start at or after this time (ISO 8601).
- **Starting Before · Optional**: Only events that start before this time (ISO 8601).
- **Invitee Email · Optional**: Only events this person is invited to.
- **Order · Optional**: By start time. Options: Soonest first, Latest first. Default: Soonest first.
- **Return All · Optional**: Read every event, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many events to return (1–2000). Default: 50. Shows when **Return All** is off.

### Cancel

- **Scheduled Event · Required**: The scheduled event's uuid or uri.
- **Reason · Optional**: Why it is cancelled; Calendly includes it in the cancellation email.

### Calendly › Invitee

### Book

- **Event Type · Required**: The event type to book.
- **Start Time · Required**: When the meeting starts (ISO 8601). It must be an open time (Event Type › Get Available Times).
- **Name · Required**: The invitee's full name.
- **Email · Required**: The invitee's email.
- **Time Zone · Required**: The invitee's time zone (IANA name).
- **Location · Optional**: The location kind, when the event type offers more than one (physical, outbound_call, zoom_conference, google_conference …). Empty: the event type's.
- **Location Details · Optional**: The address for an in-person meeting, or the phone number for a call the host makes.
- **Answers · Optional**: Answers to the event type's questions, such as [{"question": "What should we cover?", "answer": "Pricing", "position": 0}].
- **Guests · Optional**: More people to invite: emails separated by commas (at most 10).

### Get, Mark No-Show and Undo No-Show

- **Scheduled Event · Required**: The scheduled event the invitees belong to (uuid or uri).
- **Invitee · Required**: The invitee's uuid or uri.

### Get Many

- **Scheduled Event · Required**: The scheduled event the invitees belong to (uuid or uri).
- **Status · Optional**: Active or cancelled invitees, or both. Options: Both, Active, Cancelled.
- **Email · Optional**: Only the invitee with this email.
- **Return All · Optional**: Read every invitee, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many invitees to return (1–2000). Default: 50. Shows when **Return All** is off.

### Calendly › Event Type

### Get

- **Event Type · Required**: The event type.

### Get Many

- **Whose · Optional**: Your own event types, another user's, or the whole organization's (another user's and the organization's need a Calendly admin or owner). Options: Mine, A user's, The organization's. Default: Mine.
- **User · Required**: The user's uuid or uri (User › Get Many lists the organization's). Shows when **Whose** is **A user's**.
- **Active · Optional**: Only active (bookable) event types, only inactive ones, or both. Options: Both, Active, Inactive.
- **Return All · Optional**: Read every event type, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many event types to return (1–2000). Default: 50. Shows when **Return All** is off.

### Get Available Times

- **Event Type · Required**: The event type.
- **From · Required**: The start of the range (ISO 8601; not in the past).
- **To · Required**: The end of the range (ISO 8601; at most 31 days after From).

### Calendly › Scheduling Link

### Create

- **Event Type · Required**: The event type the link books.

### Calendly › Availability

### Get Schedules

- **User · Optional**: The user's uuid or uri. Empty: your own (the user who signed in or made the token).

### Get Busy Times

- **User · Optional**: The user's uuid or uri. Empty: your own (the user who signed in or made the token).
- **From · Required**: The start of the range (ISO 8601).
- **To · Required**: The end of the range (ISO 8601; at most 7 days after From).

### Calendly › User

### Get Me

Nothing to fill in.

### Get

- **User · Required**: The user's uuid or uri.

### Get Many

- **Email · Optional**: Only the member with this email.
- **Role · Optional**: Only members with this role. Options: Any, Owner, Admin, User.
- **Return All · Optional**: Read every member, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many members to return (1–2000). Default: 50. Shows when **Return All** is off.

Source: https://docs.gorunner.io/apps/calendly
