diff --git a/docs.json b/docs.json index e336f1d..b801127 100644 --- a/docs.json +++ b/docs.json @@ -181,6 +181,23 @@ } ] }, + { + "group": "Events", + "icon": { + "style": "solid", + "name": "ticket", + "library": "fontawesome" + }, + "pages": [ + "events/what-is-a-cal-event", + "events/create-an-event", + "events/registration-and-capacity", + "events/manage-guests", + "events/paid-events", + "events/public-event-page", + "events/troubleshooting-events" + ] + }, { "group": "Availabilities", "icon": { diff --git a/events/create-an-event.mdx b/events/create-an-event.mdx new file mode 100644 index 0000000..5e34d7b --- /dev/null +++ b/events/create-an-event.mdx @@ -0,0 +1,80 @@ +--- +title: "Create and publish an event" +sidebarTitle: "Create and publish" +description: "Set up an event, fill in the editor, publish it, and understand what happens when you cancel or delete." +--- + +## Create the event + +Go to **Events** in the left sidebar and select **+ Create Event**. The dialog collects only the basics. Everything else is filled in afterwards in the editor. + +1. **Event name.** +2. **Event URL (slug)**, suggested from the name. It must be at least 10 characters, use only lowercase letters, numbers, and dashes, and be unique across Cal.com. It is checked against usernames, reserved routes, and other events. If it is already in use, the app tells you the URL is taken. +3. **Starts**, **Ends**, and **Timezone**. The end must be after the start, and the start must be in the future. For in-person events, use the venue's local time. +4. **Private event**, an optional toggle that keeps the event reachable by its URL but hides it from your public event listing. + + + If you type a link into the event name, it is removed from the saved title, and the URL is never allowed to spell out the removed link. If this forces the URL to change, you are told the new URL and that the old one no longer works. The editor always shows the URL the event is actually saved under. + + +## Fill in the editor + +The editor is grouped into sections. A live preview of the public page sits alongside the form. + +### Setup: Basics + +The event name, the event URL (read-only once published), an **About the event** description with a **Translate using AI** option, the date, time and timezone, the **Private event** toggle, and a cover image. + +The cover image can be dragged in or browsed for. The ideal size is 800x800 and the maximum is 10 MB. You can replace or remove it later. There is also an option to generate a cover image with AI, which is uploaded when the event is saved. + +### Setup: Location + +Choose in-person or virtual. + +- **In-person** is an address. A map preview is generated automatically after the event is saved, and guests get an **Open in maps** action. Changing the address regenerates the map. +- **Virtual** is either Cal Video, another connected conferencing option, or a custom meeting link. + +The exact join link or address is only revealed to a guest after they register. + +### Setup: Hosts + +You are always listed as a host. Team members can be added, and people outside your team can be invited as external co-hosts by email. Co-hosts accept or decline, and you can see their Invited, Declined, or accepted state, revoke access at any time, or watch a co-host leave the event themselves. + +A co-host can edit event details and manage attendees. A co-host **cannot** change the host roster, cancel, delete, or publish the event, or change who appears on the public guest list. Locked controls tell them to contact the main host. + +### The remaining sections + +- **Registration experience** and **Attendance**: see [Registration, approval and capacity](/events/registration-and-capacity). +- **Attendance → Guests**: available only after the event is published. See [Invite guests and manage the roster](/events/manage-guests). +- **Automation → Workflows and Webhooks**: events use the same editors as bookings. + +## Publish the event + +An event moves through four statuses: + +| Status | What it means | +| --- | --- | +| Draft | Created but not published. Not publicly reachable, and no registrations or invitations are possible yet. | +| Published | Live at its public URL, with registration open. | +| Past | The start time has passed, so registration is closed. | +| Cancelled | You cancelled it. The page stays online marked as cancelled and registration is closed. | + +To publish, make sure the form has no errors and all changes are saved. If you cannot publish, check for unsaved changes or form errors first. + +On publish, the event is added to your connected calendar and to those of any accepted co-hosts. If that fails, the event still publishes and you are asked to reconnect your calendar. A calendar problem never blocks publishing. + + + The event URL becomes permanent once published, because links and invites are already circulating. The slug can only be changed while the event is still a draft. + + +## Cancel or delete an event + +**Cancelling** cannot be undone from the app. It closes registration, leaves the page online marked as cancelled, and notifies registered guests. Free confirmed guests receive the standard booking cancellation email. Paid and pending guests receive a dedicated Cal Events cancellation email covering any refund, or a note that nothing was charged. Guests who had already declined or cancelled are not notified again. + +**Deleting** removes the event entirely. + +## Related + +- [What is a Cal Event](/events/what-is-a-cal-event) +- [Registration, approval and capacity](/events/registration-and-capacity) +- [Troubleshooting events](/events/troubleshooting-events) diff --git a/events/manage-guests.mdx b/events/manage-guests.mdx new file mode 100644 index 0000000..b825b79 --- /dev/null +++ b/events/manage-guests.mdx @@ -0,0 +1,61 @@ +--- +title: "Invite guests and manage the roster" +sidebarTitle: "Guests and roster" +description: "Send invitations, approve or decline registrations, work the waitlist, and export your guest list." +--- + +**Attendance → Guests** becomes available once the event is published. It is where you invite people and manage everyone who has registered. + +## Invite guests + +Select **Invite guests**, paste in email addresses, and optionally add a personal note that is included in the invitation email. + +Invitations are separate from registrations. Someone who is invited but never responds does not appear on the roster and does not count toward capacity. + +**Sending limits** + +- Up to 15 emails per send +- Up to 200 invitations per event +- Up to 50 invitation emails per host per day + +Duplicate, already-registered, and invalid addresses are skipped. After sending, you are told how many were invited, skipped, and failed. + + + Each invitation link is personal to the guest it was sent to and should not be shared or forwarded. + + +**Invitation statuses** are Pending, Responded (set automatically when that email RSVPs), and Revoked. You can resend an invitation after a one-hour cooldown, or revoke it. + +## Work the roster + +The roster is split into segments for **Pending**, **Approved**, **Waitlist**, **Declined**, and **All**, with search and summary counts. + +Registration statuses are Pending approval, Waitlisted, Payment pending, Approved, Declined, and Cancelled. + +From here you can: + +- Approve or decline individual registrations, or approve all pending at once. If the event is full, the app reports how many could not be seated. +- Move a guest to the waitlist. +- Promote a waitlisted guest into a seat. This is allowed to go over capacity. +- Reject a waitlist entry. +- Remove an attendee, or **Mark not going**, which takes them off the confirmed list and frees the seat. +- Change a guest's registration status or RSVP response manually. +- View a guest's answers to the registration form. + +When you approve someone and the event is already full, the app offers the waitlist instead, or warns you that approving will overbook by one spot. + +## Export the roster + +You can export the roster to CSV. Invitations are not included, and the export is capped at 4,000 rows. If it was cut off, you are told. + +## A note on "attendance" + +In the roster, attendance means the guest's RSVP response: Going, Maybe, or Not going. + +Cal Events do not have no-show marking or post-event attendance tracking. If you need to record who actually turned up, do it outside Cal.com. + +## Related + +- [Registration, approval and capacity](/events/registration-and-capacity) +- [The public event page](/events/public-event-page) +- [Paid events with Cal Pay](/events/paid-events) diff --git a/events/paid-events.mdx b/events/paid-events.mdx new file mode 100644 index 0000000..d39e553 --- /dev/null +++ b/events/paid-events.mdx @@ -0,0 +1,55 @@ +--- +title: "Paid events with Cal Pay" +sidebarTitle: "Paid events" +description: "Charge for tickets on an event, hold seats while guests check out, and handle refunds." +--- + + + Paid ticketing is a newer, gated feature and may not be enabled on your account yet. + + +## Events use Cal Pay, not Stripe + +Payments on events run through **Cal Pay only**. Stripe and PayPal are not options for events, so there is no need to install Stripe to charge for one. + +The payment option lives inside the event's **registration experience**. If you are looking for a **Booking experience → Payments and Seats** tab on an event and cannot find it, that is why: events use the registration experience layout instead. That tab belongs to Links. + +## Turn on payment + +Switch on **Paid event**, then set a price and currency. The price must be at least the currency's minimum charge. + + + Paid events cannot be combined with approval or a waitlist. Turn both off before you can charge for an event. On an event that is already paid, those options are unavailable. If you could not enable payment until you disabled approval or the waitlist, that is expected behaviour. + + +**Payment deadline** sets how long a seat is held while a guest checks out. The form accepts anything from 10 minutes up to 7 days. If you do not set one, your account default applies. + +## What the guest experiences + +1. The guest RSVPs and their seat is held as **Payment pending**. +2. They receive a "complete your payment" email showing the pay-by deadline. +3. They check out through Cal Pay. +4. Once paid, they are confirmed and receive a paid confirmation and receipt showing the amount paid. + +If the deadline passes, the seat is released. The guest is emailed to say their spot was released, that nothing was charged, and that they can register again. + +On the public page, the registration button reads **Get your ticket** for paid events. + +## Refunds + +On the roster, paid guests show as **Paid**, **Awaiting payment**, or **Refunded**. You have two actions: + +- **Refund payment** refunds the guest but keeps their registration. +- **Refund and remove guest** refunds them and releases the seat. + +If a refund fails, you are emailed so you can refund the guest manually from your payment provider. + +## Setting up Cal Pay + +Cal Pay setup, payouts, identity verification, fees, and supported payment methods are covered separately. Payouts run through Whop and require identity verification before any money can reach you, so complete that before your first paid event. + +## Related + +- [Registration, approval and capacity](/events/registration-and-capacity) +- [Invite guests and manage the roster](/events/manage-guests) +- [Troubleshooting events](/events/troubleshooting-events) diff --git a/events/public-event-page.mdx b/events/public-event-page.mdx new file mode 100644 index 0000000..b421df3 --- /dev/null +++ b/events/public-event-page.mdx @@ -0,0 +1,71 @@ +--- +title: "The public event page" +sidebarTitle: "Public event page" +description: "What guests see at your event's URL, how the registration button changes, and where published events are listed." +--- + +Your event's public page lives at `cal.com/`. + +## What the page shows + +- The cover image, title, and description +- The date and time, in the viewer's local time +- The location, or a note that it is revealed after registration +- The hosts +- The guest section, according to your **Public guests** setting +- A registration button + +The page can also show scarcity messages, such as how many spots are left or **Near capacity**. + +## The registration button + +The button changes with the situation: + +| What the button says | When | +| --- | --- | +| **Register** | The standard state | +| **Register in one click** | A signed-in Cal.com user, on an event with no extra registration questions, no approval, and no captcha | +| **Request to join** | Approval is required | +| **Join waitlist** | The event is full and the waitlist is on | +| **Sold out** | The event is full and there is no waitlist | +| **Get your ticket** | A paid event | + +Returning guests see their own state instead: **You're going**, **Pending approval**, or **You're on the waitlist**. As the host, you see **You're hosting, manage event**. + +When the event has ended, has already started, or was cancelled, the page says so and registration is closed. + +## What guests should know + +- Guests do not need a Cal.com account to register. +- Only one registration per email address per event. Trying again shows that they are already registered. +- Registrants get a personal status link to view or manage their registration. + +## Share the event + +The **Share event** dialog gives you the link and a QR code, which is useful for posters and slides. + +## Where published events are listed + +Published events appear in public per-profile event directories: + +- `cal.com//events` +- `cal.com/team//events` +- `cal.com/org///events` + +Each lists that profile's public events. + +To keep a specific event out of that listing, turn on the **Private event** toggle. The event stays reachable by its direct link but does not appear in the directory. + + + This is separate from the public profile visibility toggle used for Links, which does not apply to events. + + +## Embedding + +The event page can be embedded. When you view your own embedded event, you see a **You're hosting this event** note. + +## Related + +- [Registration, approval and capacity](/events/registration-and-capacity) +- [Invite guests and manage the roster](/events/manage-guests) +- [What is a Cal Event](/events/what-is-a-cal-event) diff --git a/events/registration-and-capacity.mdx b/events/registration-and-capacity.mdx new file mode 100644 index 0000000..817c835 --- /dev/null +++ b/events/registration-and-capacity.mdx @@ -0,0 +1,52 @@ +--- +title: "Registration, approval and capacity" +sidebarTitle: "Registration and capacity" +description: "Control what guests are asked, whether you approve them, how many can come, and what the public page reveals about who is attending." +--- + +## The registration form + +Under **Registration experience → Registration form**, choose what information guests provide when they register. These questions are specific to event registration and are separate from the booking questions used on Links. + +## Require approval + +Under **Policies → Privacy and security**, turn on **Requires confirmation** so registrations wait for you to approve them before they are confirmed. + +Guests waiting for approval see **Pending approval**, and the public registration button reads **Request to join**. + +## Capacity and waitlist + +Under **Attendance → Settings**: + +- **Limit capacity** with an **Available spots** number, up to 100,000. Capacity is unlimited when the limit is off. +- **Waitlist** lets guests join a waitlist once the event is full. + +A few rules are worth knowing before you set these: + +- The waitlist is only available together with a capacity limit. Turning capacity off clears the waitlist. +- The waitlist is not available on paid events. Charging for an event means turning approval and the waitlist off first. See [Paid events with Cal Pay](/events/paid-events). + +When the event is full, the public page shows **Join waitlist** if the waitlist is on, or **Sold out** if it is not. + +## Who guests can see + +Also under **Policies → Privacy and security**: + +- **Hide host's email** removes it from the event page, the emails, and the calendar events. +- **Public guests** controls whether visitors see who is coming. This setting is owner-only, so a co-host cannot change it. + +**Public guests** has three options: + +| Option | What visitors see | +| --- | --- | +| Don't show guests | Nothing about who is attending | +| Show guest names | A public list of confirmed guests. Guests can hide their own name | +| Show a going count | "N people are going!" with no names | + +The public list shows names and initials only, never emails or photos. A guest who hides their name still counts as going, and the going count excludes anyone who answered **Not going**. + +## Related + +- [Create and publish an event](/events/create-an-event) +- [Invite guests and manage the roster](/events/manage-guests) +- [Paid events with Cal Pay](/events/paid-events) diff --git a/events/troubleshooting-events.mdx b/events/troubleshooting-events.mdx new file mode 100644 index 0000000..3e818c6 --- /dev/null +++ b/events/troubleshooting-events.mdx @@ -0,0 +1,52 @@ +--- +title: "Troubleshooting events" +sidebarTitle: "Troubleshooting" +description: "Fixes for the cover image upload, and a plain list of what the Events feature does not do yet." +--- + +## The cover image will not upload + +If you see **Unable to import the image, please try again** or **Could not upload image**, work through these in order. + + + + Select or drag in the image, then scroll down and select **Save** (or **Update**) in the editor. The upload only takes effect once the event is saved, and this button is easy to miss. This resolves most reports. + + + Confirm the file is under 10 MB and in a standard format such as PNG or JPG. Try **Browse** instead of drag and drop, or try a different browser. Some people hit this on Microsoft Edge specifically. + + + If the upload still fails with a valid file after saving, this is a known issue our engineering team is working on. Contact support with the exact error message, the file format and size, your browser and operating system, and a screenshot or short screen recording. + + + +## What events do not support yet + +| Not supported | Detail | +| --- | --- | +| Recurring events | Events are one-time by design. There are no multiple dates and no slot picking. Use a [recurring Link](/event-types/create-recurring) if you need something that repeats | +| A management API | Events are managed through the web app only. The Platform API's event-type endpoints do not cover events | +| Stripe or PayPal | Paid events run through Cal Pay only | +| Paid events with approval or a waitlist | Turn both off before charging for an event | +| No-show or attendance tracking | The roster records the guest's RSVP response, not who actually attended | +| Changing the URL after publishing | The slug is fixed once the event goes live. It can only be changed while the event is a draft | + +AI cover images and **Translate using AI** exist in the editor but are gated by plan or organization, and may show an upgrade prompt where they are not enabled. + +If you need something on this list, let our support team know. Feature requests are shared with the product team. + +## When to contact support + +Get in touch if you hit an error that persists after the steps above, for example: + +- An event that will not publish after form errors are fixed and changes are saved +- A payment section that stays greyed out after Cal Pay is set up correctly +- A registration or RSVP that fails +- A map or calendar sync that keeps failing +- A refund that failed and cannot be completed from your side + +## Related + +- [Create and publish an event](/events/create-an-event) +- [Paid events with Cal Pay](/events/paid-events) +- [What is a Cal Event](/events/what-is-a-cal-event) diff --git a/events/what-is-a-cal-event.mdx b/events/what-is-a-cal-event.mdx new file mode 100644 index 0000000..abe3407 --- /dev/null +++ b/events/what-is-a-cal-event.mdx @@ -0,0 +1,51 @@ +--- +title: "What is a Cal Event" +sidebarTitle: "What is a Cal Event" +description: "Events are for a single, fixed-date happening that guests register for, such as a workshop, meetup, dinner, or launch party." +--- + +An **Event** is a one-time happening on a fixed date that people register or RSVP for: a workshop, a meetup, a dinner, a launch party. + +This is different from a **Link** (previously called an event type), where a booker picks a slot from your availability. Events and Links sit side by side and do not affect each other. + +You will find events in the left sidebar under **Events**, or at `app.cal.com/events`. Select **+ Create Event** to make one. + +## Events compared with Links + +| | Events | Links | +| --- | --- | --- | +| When it happens | One fixed date and time that you set | Any slot the booker picks from your availability | +| Repeats | No, events are one-time only | Recurring events are supported | +| Who picks the time | You do | The booker does | +| Public URL | `cal.com/` | `cal.com//` | +| Guests | Many guests share one booking | Usually one booker per booking | +| Managed at | `app.cal.com/events` | `app.cal.com/event-types` | + +## Which one am I looking at? + +If you are not sure whether you created an Event or a Link, check the URL in your browser's address bar: + +- `app.cal.com/events/...` means you are working with an Event +- `app.cal.com/event-types/...` means you are working with a Link + +## Event URLs do not include your username + +An event's public URL is top level. It looks like `cal.com/breathwork-session`, with no `//` segment. + +This is expected. Being asked to set a URL without your username does not mean a second account was created, and it is not a signup problem. It is simply how the Events feature works. Links keep the `cal.com//` format. + +## What events have in common with the rest of Cal.com + +- Confirmed guests share one booking, so calendar invites and workflows behave the way they do for bookings. +- Events use the same Workflows and Webhooks editors as bookings. Reminders before and after the event are scheduled once for the whole event, not once per guest. +- Publishing adds the event to your connected calendar, and to the calendars of any co-hosts who accepted their invitation. + + + Some parts of Events, including paid ticketing, AI cover images, and AI description translation, are gated and may not be enabled on every account yet. + + +## Related + +- [Create and publish an event](/events/create-an-event) +- [Registration, approval and capacity](/events/registration-and-capacity) +- [The public event page](/events/public-event-page)