# Adding Calendars to Lunacal
Source: https://help.lunacal.ai/adding-calendars
Connect your calendar to sync availability and automatically add bookings. This prevents double-booking and lets you choose which calendar receives new events.
Adding your calendar lets Lunacal check your real availability and prevent double-booking by syncing your existing events.
Connected calendars also ensure that new bookings are automatically added to the correct calendar so you can see them alongside your personal or work events.
> If you disconnect a calendar, previously added bookings remain in that calendar, but new bookings won’t sync until a calendar is reconnected.
## Step 1
Go to "settings" → "[Calendar](http://app.lunacal.ai/apps?tab=install\&category=calendar)" → "**Connect calendar apps**".
## Step 2
Choose the calendar you want and click "**connect**" (e.g., Google Calendar).\
**Example**: You primarily use Google Calendar for work—pick Google and continue
> lunacal supports Google Calendar, Outlook Calendar, and Apple Calendar apps. You can connect one or multiple calendars to ensure availability is synced from all of them.
## Step 3
Select your Google account.\
**Example**: If you have personal and work Google accounts, choose the work one to avoid mixing events.
> **Note:** When connecting your calendar, grant all calendar permissions (read/write) so lunacal can both check availability and add new events.
> This setting determines which of your connected calendars new bookings will be saved to. For example, you can keep your “Personal” calendar separate but save all new bookings to your “Work” calendar so they are easier to manage.
## Step 4
Your calendar is now connected. If you have multiple calendars, pick where new events should be added. For example, switch the target to your “Calendar 2.0” if that’s your main booking calendar.\
Example: Keep personal events on “Personal” but set bookings to land on “Team Bookings” so your team sees them.
> Events allow you to choose which connected calendar to add bookings to on a per-event basis. You can change that setting in the event’s "Advanced" -> Calendar Selection DropDown.
## Step 5
Add more calendars if needed. You can connect another Google Calendar or install new calendar apps like Apple Calendar or Outlook Calendar.\
Example: Connect Outlook Calendar from your employer and Google Calendar from your freelance work to prevent double-booking across both..
> Lunacal checks all connected calendars for conflicts. If a timeslot is busy in any connected calendar, it will be blocked for new bookings to prevent double-booking.
## Common mistakes to avoid
* Connecting a personal account instead of your work account, leading to missing availability or wrong event destinations.
* Forgetting to change the destination calendar after connecting, so bookings land in the default calendar you don’t check.
* Denying requested permissions during connect, which can block availability sync or event creation.
* Assuming two-way sync without connecting every calendar you actively use (e.g., Google + Outlook).
## Good defaults to start with
* Connect only your main work account first; confirm availability sync before adding more.
* Set a single destination calendar (e.g., “Calendar 2.0”) for all new bookings.
* Keep one calendar app connected per ecosystem (Google or Outlook) to reduce conflicts.
* Recheck destination settings after adding a new calendar to ensure events still go to the right place.
## Troubleshooting
* If Lunacal isn’t blocking a booked time slot, confirm all relevant calendars are connected.
* If bookings aren’t being added to the calendar you expect, check which calendar is selected as the destination.
* If your calendar provider prompts for additional permissions, allow all requested permissions so sync works fully.
# Voice Agent for Meeting Reminders
Source: https://help.lunacal.ai/ai-call-workflows
Voice Agent Calls allow you to automatically trigger AI-powered phone calls to attendees after a meeting is booked. These calls help, reschedule, or cancel meetings, improving attendance.
***
## Voice Agent For Meeting Reminders
Voice Agent Calls let you trigger an outbound AI call as part of a workflow after a meeting is booked.
The agent can call the attendee and help confirm the meeting, reschedule it, or cancel it
Voice Agent Calls are available inside Workflows.
***
## Current availability
Voice Agent Calls are currently available only for US, Australia, Canada and UK\
We expect this to be available for all countries by April 7, 2026.
***
## Pricing
Voice Agent Calls are priced at \$0.15 per minute.\
In the coming weeks, the pricing may vary slightly by country because outbound calling charges are different across destinations.\
Each call is capped at 3 minutes maximum.\
The same credits balance can be used for both Voice Agent Calls and SMS. This means your AI and messaging usage draw from the same
***
## What the Voice Agent can do
The Voice Agent can:
* remind the attendee of the meeting
* reschedule if they ask for it
* cancel if they ask for it
* provide basic details about the meeting
***
## How to create AI Call Workflow
* Go to the [Workflows](https://app.lunacal.ai/new-settings?tabName=workflows) tab and click **Create New Workflow**
* Provide a unique name for your workflow in the designated field.
* Determine the event type to which the workflow will apply.
* Choose when the workflow should be triggered, for now AI Call available for - **Before an event starts**
* Change send email to attendee to Send AI call to attendee.
Read this if you stuck when creating workflow : [https://help.lunacal.ai/sms-and-email-workflows](https://help.lunacal.ai/sms-and-email-workflows)
***
## Important notes
This feature is being rolled out gradually.\
We'll launch major updates to it every week
***
## Additional context
* Voice Agent Calls are triggered through workflows after a booking is created.
* Behavior may vary slightly as the feature is actively evolving.
* Availability and pricing are subject to change as the rollout expands globally.
# Setup Your Availability
Source: https://help.lunacal.ai/availability-configuration
You can set up your regular availability for bookings, add exceptions for times when you’re not available, and customize availability for specific event types from the event settings.
## Step 1
To create a new availability, go to [**Availability**](https://app.lunacal.ai/new-settings?tabName=availability).
## Step 2
You’ll see a default schedule. Click “**Create New Availability**”.
## Step 3
Enter a name (for example, “**Introduction**”) and click “**Continue**”.
## Step 4
Adjust your default working hours (for example, **9:00 AM–5:00 PM**) and turn specific days on or off.\
Any day you disable won’t appear on your booking page.\
**Example:** If you work **Monday** to **Thursday**, disable Friday to Sunday so no one can book on those days.
## Step 5
If you work in multiple shifts, click the **plus (+)** icon to add separate time slots.\
For example, if your schedule is **8:00 AM–11:30 AM** and **12:00 PM–2:00 PM**, add both time slots to define your availability clearly. Attendees will then be able to book during those time slots only.
## Step 6
You can copy your working hours to other days if the schedule is the same.\
Click the **copy** icon, select the days you want to apply the same hours, and click **Apply**.
**Example:**\
If your Monday schedule is **9:00 AM–5:00 PM**, and you work the same hours Tuesday to Thursday, copy Monday’s timings to those days instead of adding them manually.
## Step 7
Availability Exception : This lets you block specific dates or times when you’re unavailable, even if those fall within your regular working hours. It’s useful for holidays, breaks, or one-off days off.
To add an exception, click **Add Exception**.
## Step 8
A calendar view will appear where you can select specific dates and set the times you’re unavailable for that day.\
**Example**: If you’re unavailable the entire day, check the **Mark Unavailable (All Day)** option.
## Step 10
Click “**Save**” to store your changes.
## Step 11
Your availability configuration is now completed.\
\
On the **Availability Dashboard**, you’ll see all the availabilities you’ve set up.\
Click the **three dots (⋮)** next to any availability to:
1. **Set as Default** – Make it your default availability.
2. **Duplicate** – Create a copy from an existing availability.
3. **Delete** – Remove an availability you no longer need.
## Step 12
You can also update availability settings directly from your **Event Types**.\
Go to the **Event Types** section, select the event you want, and adjust its availability as needed.
## Step 13
Use the dropdown to select one of your saved availabilities — for example, **“Introduction.”**\
The selected availability will apply to the specific event type you’re configuring, so that event will follow the same working hours and rules.
## Step 14
Review your settings and click "**Save**."
**Common mistakes to avoid :**\
• Forgetting to click “Apply” before “Save”, which can discard your latest hour edits.\
• Leaving a day toggled on with empty hours, which can hide availability or cause confusion.\
• Forgetting to set an availability exception for holidays or one-off days off. If you skip this, attendees may still be able to book meetings on days you’re actually unavailable.\
• Using “Mark Unavailable” on the wrong date when adding an exception.\
• Not selecting your new availability in the event type dropdown, so the event still uses an old schedule.
**Good defaults to start with :**\
• Hours: **10:00 AM–6:00 PM**, Mon–Fri; turn Sat–Sun off.\
• Split day: add a 30-minute mid-day break to avoid back-to-backs.\
• Exceptions: add known holidays and travel days for the next 60–90 days now.\
• Event types: map “**Introduction**” to short meetings; use a separate availability for longer sessions.
# Availability Exception
Source: https://help.lunacal.ai/availability-exception
Learn how to set availability exceptions for specific dates and times in your events.
**Availability exceptions** override your base weekly availability for specific dates, such as one-off days off, vacations, or custom hours on a single day. They ensure your booking page blocks those times accurately, even if your calendar or weekly schedule shows open slots.
**Examples**
| Scenario | Steps | Result |
| ------------------- | ----------------------------------------------- | ------------------------------------------- |
| Off Dec 24-25 | Add exception: Dec 24-25, Mark Unavailable | Booking page hides all slots those days. |
| Short day Dec 20 | Add exception: Dec 20, Custom Hours 9 AM-4 PM | Only shows up to 4 PM; later slots blocked. |
| Friday shift change | Add exception: This Friday, Custom Hours 2-4 PM | Overrides weekly 9-5 to just 2-4 PM. |
## Step 1
Navigate to "[Event Types](https://app.lunacal.ai/event-types)" in your dashboard sidebar. This section lists all your configured event types, such as "Meeting", If no events exist, create one first via the "+ New Event Type" button.
***
## Step 2
Select the event for which you want to set an availability exception and click on the **Settings** ⚙️ icon on that event card.
***
## Step 3
Choose **Edit** from the dropdown.
***
## Step 4
Click on the **Availability** section.
***
## Step 5
Scroll down and click on **Add exception**
***
## Step 6
Select the dates you want to set an exception.
***
## Step 7
Scroll down and set the time range you’re available for that date.
***
## Step 8
Click the "+" button to add multiple time ranges if you’re available at different slots during the same day.
# Client Portal
Source: https://help.lunacal.ai/client-portal
The Client Portal is a branded space where your guests sign in to manage everything tied to working with you — their bookings, packages, resources, and notes — all under _your_ brand instead of Lunacal's.
This guide has two parts:
1. [**For Organizers**](#part-1--for-organizers-setting-up-your-client-portal) — how to set up and customize your portal.
2. [**For Guests**](#part-2--for-guests-using-the-client-portal) — how attendees sign in and use it.
***
## Part 1 — For Organizers (Setting up your Client Portal)
> In Lunacal, *you* are the **Organizer**. The people who book with you are your **guests** (the portal calls them your clients).
### What guests can do in your portal
Once it's live, your guests get a single, branded home for:
* **Bookings** — view upcoming, past, cancelled, and unconfirmed bookings; reschedule or cancel.
* **Packages** — browse the packages you offer and book sessions from them.
* **Resources** — view and download files you've shared.
* **Notes** — see notes you've shared with them (and add their own).
* **Overview** — a branded homepage with your bio, logo, and custom content widgets.
No Lunacal branding is shown to your guests — they see *your* name, logo, and colors.
### Step 1 — Open your portal settings
Go to **Settings → Client Portal**, then click **Customize** to open the full-screen editor with a live preview.
### Step 2 — Set your branding
In the **Portal Styles** panel you can configure:
| Setting | What it does |
| ------------------------------ | --------------------------------------------------------------------------------------------- |
| **Background / Sidebar color** | The sidebar and background color (solid color or gradient). |
| **Text color** | Color of text shown against your background. |
| **Company logo** | Upload an image (max **5 MB**, with a crop tool) **or** use your company name as a text logo. |
### Step 3 — Edit your section
In the preview, click into the area at the top of the portal to edit:
* **Name** — pre-filled from your profile.
* **Bio** — a short welcome message for your guests.
* **Profile picture** — pre-filled from your avatar.
### Step 4 — Add content widgets (optional)
You can add up to **4 widgets** to your portal homepage. Available widget types:
* **Text** — written content with tabs (e.g. an "About" section).
* **Video** — an embedded video.
* **Gallery** — a set of images.
* **Document** — downloadable files (e.g. PDFs).
* **Audio** — audio files.
* **Social media** — embedded Instagram, TikTok, LinkedIn, or Facebook posts.
### Step 5 — Save and publish
* Your changes **auto-save as a draft** while you work, so you won't lose anything.
* When you're happy with it, click **Publish** to make the changes live for your guests.
* You can keep editing a draft after publishing — guests only ever see the published version until you publish again.
> **First time?** If you've never customized your portal, Lunacal sets up a default for you automatically — your name and bio, a default gradient background, and a starter "About" widget — so the portal works even before you touch it.
### Step 6 — Get the portal to your guests
Guests reach your portal through a secure access link that Lunacal emails them when a booking is created. The link is valid for **7 days**. (See Part 2 for what they experience.)
***
## Part 2 — For Guests (Using the Client Portal)
> The Client Portal is where you manage everything for your sessions with your organizer — in one branded place. **You don't need to create a Lunacal account.**
### Signing in
There are two simple ways in:
**1. From your email link**
When your organizer books a session with you, you'll receive an email with a secure link to the portal. Click it and you're in — no password needed. The link is valid for **7 days**.
**2. With a one-time code (OTP)**
If your link has expired, or you're returning later:
1. Go to the portal and enter your **email address**.
2. We'll email you a **6-digit code**.
3. Enter the code to sign in.
After signing in, you stay logged in for **7 days** on that device. After that, just request a new code with your email.
### What you can do in the portal
Once signed in, you'll see a sidebar with these sections:
| Section | What you can do |
| --------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| **Overview** | Your organizer's branded homepage — bio, logo, and content they've shared. |
| **My Packages** | Browse the packages your organizer offers and book sessions. |
| **Bookings** | View your **upcoming**, **past**, **cancelled**, and **unconfirmed** bookings. Search them, and **reschedule** or **cancel** as needed. |
| **Resources** | View and download files your organizer has shared with you (and upload your own). |
| **Notes** | Read notes your organizer has shared, and add your own. |
### Managing a booking
* Open any booking to see its full details.
* If a booking is **awaiting confirmation**, you can **accept or decline** it.
* For confirmed bookings, use the booking's options to **reschedule** or **cancel**.
## **FAQ & Troubleshooting (Clients)**
**Q: I don’t have a password. Is that normal?**\
A: Yes. The portal uses email verification codes instead of passwords. No Lunacal signup is needed.
**Q: I entered my email but didn’t get a code.**\
A: Wait a minute and check spam. Make sure you’re using the exact email from your booking. Contact your host if it still doesn’t arrive.
**Q: My verification code doesn’t work.**\
A: Codes are 6 digits and expire after a short time \[VERIFY exact OTP expiry]. Request a new code by going back and clicking **Get OTP** again.
**Q: The portal link in my email expired.**\
A: Links expire after 7 days. Use the login page and **Get OTP** instead.
**Q: I don’t see any packages.**\
A: You may not have purchased a multi-session package yet, or you may need to select the correct host on the **Choose your coach** screen. Single bookings still appear under **Bookings**.
**Q: I can’t reschedule or cancel.**\
A: Your host may have disabled these options for that event. Email them directly to request a change.
**Q: I uploaded a file but my host can’t see it.**\
A: Confirm the upload completed and you selected the correct package. Try refreshing the page. Large files over 10 MB will be rejected.
**Q: Why does the portal look different from Lunacal’s website?**\
A: That’s intentional — your host customized the portal with their own branding so it feels like their business, not a generic scheduling tool.
# How to Use lunacal if You Have Multiple Companies
Source: https://help.lunacal.ai/company-setup
You can manage scheduling for multiple companies using Lunacal.
## Use Cases
> This guide is useful if you want to manage scheduling for more than one business or client under a single lunacal account.
Using the **Teams** feature, you can create multiple companies, each of which can have its own users and scheduling pages.
Common use cases:
* You have multiple independent companies that require independent scheduling pages.
* You run an agency with multiple clients, who each need their own scheduling options.
* You’re a consultant/freelancer working with several companies.
> In lunacal, each company is represented as a separate **Team**. Each team has its own members, events, scheduling pages, and settings.
## This help doc is divided into 4 sections:
1. **Section 1:** Create a new team for Company 1 and invite members
2. **Section 2:** Members will accept the invite and join the team
3. **Section 3:** Repeat this process for Company 2
4. **Section 4:** Create events and scheduling pages for each company
## Section 1: Create a New Team for every company and invite Members
## Step 1
Navigate to the **Teams Section** and click on **“Create a New Team.”**
## Step 2
Enter the name of your company, for example **“Company 1”**, then click **Continue.**
## Step 3
Enter the email address (or multiple addresses) of the team members you want to add.
**Note:** Every email ID you invite consumes 1 license/user from your plan. You must have enough users in your plan to invite multiple members.
***
## Section 2: Members Will Accept the Invite and Join the Team
## Step 4
All invited members will receive an email to join the team.
## Step 5
If they are not already on Lunacal, they need to click **“Create your account”** to join your team.
## Step 6
After clicking **“Create your account,”** they just need to complete the sign-up process to join lunacal.
## Step 7
Important: After creating their account, the user must go to the **Teams** section and click **Accept** to join the team.
***
## Section 3: Repeat This Process for Company 2 (If You Have More Than One Company)
## Step 8
Go to **Teams → “Create a New Team.”**
## Step 9
Enter the name of your other company, for example **“Company 2”**, then click **Continue.**
## Step 10
**Invite members** for this company as you did earlier. They will accept the invite, create an account (if needed), and join the team.
## Step 11
Now you have multiple companies set up: your primary account + 2 (or more) new teams.
***
## Section 4: Create Events and Scheduling Pages for Each Company
## Step 12
Each member has their own subscription and can create their own scheduling pages and events.
To do this, they can go to **“Event Types”** and create a new event.\\
They will also have their own settings, scheduling pages, availability, integrations, etc.
**Important:** Every member you add consumes a license and can create their own events.
***
## Example
Say you run an agency and have 2 clients:
* **New Age Salon** with 4 barbers (Jeff, Linda, Tara, Amy)
* **Dr. Dave Matthews**, an individual doctor
Setup process:
* Create **Team 1 (New Age Salon)** → invite all 4 barbers → consumes 4 licenses.
* Create **Team 2 (Dr. Dave)** → invite Dr. Dave → consumes 1 license.
Total = 5 licenses (4 + 1).
### How it works:
* Members of **New Age Salon** cannot see Dr. Dave’s details, and vice versa.
* When members accept the invite, they are upgraded to the paid plan automatically.
For Dr. Dave:
* Dr. Dave goes to **Event Types** and creates his own events.
* No need for Team events.
For New Age Salon:
* Each barber can create their own events (just like Dr. Dave).
* You can also create a **Team Booking Page** where all 4 members are listed. Clients can select a barber directly.
* If you don’t want clients to choose, you can create a **Round Robin Event** so barbers are automatically assigned whenever someone books.
***
## Related Docs
* [Event Setup](https://help.lunacal.ai/event-types/event-setup)
* [Team Booking Page](https://help.lunacal.ai/Teambooking-page)
* [Round Robin](https://help.lunacal.ai/Round-Robin)
* [Change Meta Title and Social Preview Image](https://help.lunacal.ai/seo-web)
* [Manage Bookings](https://help.lunacal.ai/manage-bookings)
* [Adding or Removing Team Members](https://help.lunacal.ai/company-setup)
* [Using Custom Domain with Team](https://help.lunacal.ai/company-setup)
# Why Do My Time Slots Show as Booked?
Source: https://help.lunacal.ai/conflict-slot
Learn how to troubleshoot when your time slots appear as unavailable even though you’re free.
If you see time slots marked as unavailable on your booking page even though you think you’re free, it’s usually because Lunacal is protecting you from double-bookings or availability rules you’ve configured. This guide helps you identify the most common causes and how to fix them.
## Step 1
"**Calendar Conflicts**" - If one of your connected calendars already has a booking at that time, lunacal will automatically block that slot to avoid double-booking.
> A “calendar conflict” means lunacal detected an existing event in one of your connected calendars during that time — so it blocks that slot on your booking page to prevent overlapping bookings.
Learn how to connect or manage your calendars in the “[Adding Calendars to Lunacal](https://help.lunacal.ai/adding-calendars)” help doc.
lunacal checks availability across all calendars you’ve connected (Google, Outlook, Apple, etc.). Even if one calendar shows free, a conflicting event in another calendar can block the slot.
How to find ? Go to Settings → Calendar → Calendars and review all synced calendars.
## Step 2
"**Booking Limits**" - Check if you’ve set any daily, weekly, or per-event booking limits. These limits can restrict availability even if your calendar is technically open.
> Booking limits include things like “maximum bookings per day” or “Advance Bookin Limit” rules. Even if the time is free on your calendar, booking limits may prevent a slot from showing.
How to find ? Go to [**Event Types**](https://app.lunacal.ai/event-types) → Select your event → **Booking Limits**.
## Step 3
" Time Interval Between Slots"- Adjust the setting (e.g., 30 minutes).
This setting decides the spacing between slots. A larger interval may make it look like more unavailable time than you expect — even though it’s intentional to give you a buffer.
How to find ? Go to "Event Types" → Select your event → Advanced → Time interval between slots. Note: This only changes the gap between slots, not the actual event duration.
## Step 4
"**Availability & Exceptions**"- Make sure your weekly availability is set correctly and that no exceptions (like holidays or custom rules) are blocking your time.
> Availability Exceptions include days off, holidays, or custom rules that block specific dates/times even if your weekly schedule looks open.
How to find ? Go to [**Event Types**](https://app.lunacal.ai/event-types) → Select your event → Availability.
## Quick troubleshooting
* **Double-booked calendar event:** Check all connected calendars for hidden or recurring events.
* **Booking limits seem off:** Review your event’s booking limits and notice settings.
* **Availability looks wrong:** Check weekly availability and exceptions like holidays.
* **Calendar permissions:** Make sure calendars are fully synced and permissions are granted.
# Custom SMTP
Source: https://help.lunacal.ai/custom-smtp
Custom SMTP lets you send booking confirmation emails, reminders, and workflow notifications from your own email server instead of lunacal's default mailer.
Your guests and clients will see your domain in the sender address, keeping your brand consistent.
> **Note:** Custom SMTP is available on **Enterprise plan**. If the section does not appear in your settings, check your current plan.
***
## Where to configure it
**Personal account:**\
Go to **Settings → Profile** and scroll down to the **SMTP Configuration** section.
**Team workspace:**\
Go to **Settings → Teams → \[Your Team] → Settings → Advanced** and scroll down to the **SMTP Configuration** section.
## Setting up Custom SMTP
1. Click **Configure** in the SMTP Configuration section.
2. Fill in the following fields:
| Field | Description | Example |
| :------------- | :---------------------------------------------------------- | :------------------------ |
| **Host** | Your SMTP server hostname | `smtp.gmail.com` |
| **Port** | SMTP port (commonly 587 for TLS, 465 for SSL, 25 for plain) | `587` |
| **Email** | The SMTP login/username (usually your email address) | `you@yourdomain.com` |
| **Password** | The SMTP password or app-specific password | `uirt-beoa-opqz` |
| **From Name** | The sender name your recipients will see | `Acme Support` |
| **From Email** | The sender email address your recipients will see | `bookings@yourdomain.com` |
3. Click **Save**. The section will show a **Configured** badge when saved successfully.
> **Note:** The password cannot be edited after saving. To update it, delete the current configuration and add it again.
***
## Common SMTP settings by provider
**Gmail / Google Workspace**
* Host: `smtp.gmail.com`
* Port: `587`
* Use an [App Password](https://support.google.com/accounts/answer/185833) if 2-Step Verification is enabled.
**Outlook / Microsoft 365**
* Host: `smtp.office365.com`
* Port: `587`
***
## Disconnecting Custom SMTP
Click the **Delete** button in the SMTP Configuration section to disconnect your SMTP server.
**What happens when you disconnect:**
* **Emails stop sending** — all workflows that were created or updated while SMTP was connected will stop sending emails.
* **Workflows are disabled** — those workflows will be disabled for all event types they are attached to.
* **Re-verification required** — you will need to re-verify the email content of these workflows before they can send again.
Reconnecting SMTP will not automatically re-enable disabled workflows. You will need to re-attach them to your event types manually.
# Data Control & Retention (GDPR)
Source: https://help.lunacal.ai/data-control-retention-gdpr
Understand how lunacal handles personal data, your rights under GDPR, and how to request data access or deletion.
## Overview
lunacal is committed to protecting personal data and complying with the **General Data Protection Regulation (GDPR)**.
This section explains:
* What data Lunacal stores
* Who can request access or deletion
* How long data is retained
* How to submit a GDPR request
You can find this section at:
**Settings → General → Data Control & Retention (GDPR)** or directly via: `https://app.lunacal.ai/new-settings?tabName=general`
## Your information (individual users)
If you use Lunacal as an individual user, you have the right to:
* Request access to the personal data we hold about you
* Request deletion of your personal data
### Data covered
This may include:
* Account details
* Booking history
* Any other data associated with your lunacal account
### How to make a request
Send an email to [**hi@lunacal.live**](mailto:hi@lunacal.live) from the email address linked to your Lunacal account. This helps us verify your identity and process your request securely.
## Your team’s information (team owners)
If you are a **team owner**, you can request access to or deletion of your team’s data.
### Data covered
This may include:
* Team bookings
* Team member profiles
* Team-level settings and configurations
### Important notes
* Only **verified team owners** can submit requests for team data
* Team data is retained while the team account is active
* Once a deletion request is confirmed, team data is deleted within **30 days**
## Booker information (your guests)
Bookers (or hosts submitting on their behalf) can request access to or deletion of booking-related data.
### Data covered
This may include:
* Booker name
* Contact information
* Event details (date, time, event type)
### Submitting a request for a booker
If you are submitting a request on behalf of a booker, please include identifying details such as:
* Event link
* Booking timestamp
Booker data is retained as long as the event exists and can be deleted earlier upon request.
## Request processing & retention
* All valid GDPR requests are processed within **30 days**
* In certain cases, data may be retained longer if required by:
* Law or regulatory obligations
* Security, abuse prevention, or fraud detection
## Account deletion
You can permanently delete your lunacal account from this page.
### Important
* **Account deletion is irreversible**
* All associated data will be scheduled for deletion according to GDPR guidelines
Before deleting your account, make sure you have exported or saved any data you may need in the future.
If you have any questions about data privacy or GDPR, feel free to contact the Lunacal team at [**hi@lunacal.live**](mailto:hi@lunacal.live).
# Disable Cancellation / Rescheduling
Source: https://help.lunacal.ai/disable-cancel-reschedule
Learn how to prevent bookers from cancelling or rescheduling their meetings.
What “Disable Cancellation / Rescheduling” Means
* By default, clients may be allowed to cancel or reschedule their booked events. With these settings:
“**Disable Cancelling**” — prevents clients from canceling once a booking is confirmed.
“**Disable Rescheduling**” — prevents clients from changing the time/date of a confirmed booking.
## Step 1
Go to [Event Types](https://app.lunacal.ai/event-types).
***
## Step 2
Select the event for which you want to disable **cancellation** or **rescheduling** and click on the Settings icon on that event card.
***
## Step 3
Choose **Edit** from the dropdown.
***
## Step 4
In the "**Event Types**" section, scroll down to find "**Advanced.**"
***
## Step 5
"**Disable Cancelling**" → Toggle this **ON** to prevent the booker from cancelling the meeting.
***
## Step 6
"**Disable Rescheduling**" → Toggle this **ON** to prevent the booker from rescheduling the meeting.
***
## Step 7
Click "**Save**" to apply the changes.
🔄 **What Happens to Existing Bookings & How It Affects Clients**
* For new bookings after you enable the toggle: Clients will not see options to cancel or reschedule.
* For existing bookings (before you enabled the toggle): They remain unaffected and attendee can reschedule/cancel bookings.
* Clients trying to cancel/reschedule: They will not have the option on their booking page (or the links/buttons will be disabled).
* If a booking needs to be rescheduled/cancelled by you (**the host**), you can still do it via your [bookings](https://app.lunacal.ai/bookings/upcoming).
# Using Dynamic Links
Source: https://help.lunacal.ai/dynamic-links
Use “Using Dynamic Links” to find a common time across time zones without back-and-forth. On “Dynamic Bookings” pages, you can combine teammates’ schedules by adding their usernames to one link.
## Step 1
Open one teammate’s scheduling link. Append the other teammates’ username with a plus sign, then press Enter to view shared availability (e.g., …/millie+carter+john). Example: Your team sits in New York, London, and Bengaluru. Add +london\_teammate and +blr\_teammate to Millie’s link to see only slots that work for everyone.
## Step 2
Review the combined availability shown on the page. Pick a slot that fits all the selected teammates.
**Example:** If mornings are busy for London, scan for early afternoon IST which overlaps late morning UK and early morning ET.
## Step 3
Pick a time (e.g., 8 August, 11:00). Enter your name in the field.
**Example:** If you’re booking for a client, type the client’s name here so the event shows the right attendee.
## Step 4
Enter your **email** address and hit **confirm**.
Example: Use your work email so calendar invites land on your primary calendar.
## Step 5
You’ll see a confirmation screen—your booking is complete.
**Example**: Need to align three teammates and an external partner? Add only your two teammates’ usernames; share the confirmed time with the partner afterward.
**Common mistakes to avoid**
• Typing @ or spaces instead of + between usernames (use + only).
• Mixing display names with usernames; dynamic links require exact usernames.
• Adding people who don’t have any working hours set, which can hide all slots.
• Forgetting to press Enter after editing the URL, so the page doesn’t refresh.
**Good defaults to start with**• Start with 2 usernames (+teammate1+teammate2) to keep availability broad; add more only if needed.
• Prefer 30–45 minute slots when aligning 3+ people; they’re easier to match.
• Book within the next 7–14 days to maximize overlap and reduce reschedules.
# Edit Booking Page
Source: https://help.lunacal.ai/edit-booking-page
Edit your booking page, adding and modifying widgets, and customizing the appearance of your page.
# Embed Your Event In Mails
Source: https://help.lunacal.ai/email-embed
Use this to add clickable time slots inside emails so recipients can confirm a meeting in one step. You’ll work from “Embed” and use “Add to Email” to generate slots that open your booking flow.
## Step 1
Navigate to [event types](https://app.lunacal.ai/event-types) (e.g., a 30-minute meeting). Click the settings button, then choose “**Embed**”.
## Step 2
Next, you will be presented with 4th options, Click on "**Add to Email**" to proceed to the relevant page.

## Step 3
Select the date(s) and time slots you want to share (e.g., 12th at 9:00, 09:30, 10:00), then click “**Copy**”.\
**Example**: A consultant shares three morning slots for quick discovery calls so clients can choose without back-and-forth.
## Step 4
Paste the copied slots into your email body where you want them to appear.\
**Example**: A recruiter pastes two days of options near the top of the email so candidates see them immediately.
## Step 5
Recipients click a time slot in the email to select their preference.\
**Example**: A support lead drops slots into a follow-up email—users click once and skip manual coordination.
## Step 6
After clicking a slot, recipients enter their name and email, then click “**Confirm**” to finalize the booking.\
**Example**: An agency sends options to a new lead; once they hit “Confirm,” the calendar invite is created automatically.
**Common mistakes to avoid**
* Pasting into a plain-text email (links may break). Use a rich-text editor or your email tool’s default compose window.
* Sharing too many slots across many days, which overwhelms the reader. Keep choices focused.
* Reusing old slot blocks after you change availability; always generate fresh slots from “Add to Email”.
* Mixing different event types in one email, which confuses recipients about duration and details.
**Good defaults to start with**
* Offer 3–5 slots across 1–2 days to keep decisions simple.
* Place the slot block high in the email so it’s visible without scrolling.
* If most clients prefer mornings, share slots in your best-responding hours first.
* Test by sending the email to yourself once to confirm links and formatting.
# Email Theme
Source: https://help.lunacal.ai/email-theme
Email Theme lets Lunacal hosts customize the look and feel of attendee- and booker-facing booking emails — confirmations, reschedules, cancellations, and related updates. You can pick a visual style, adjust brand colors, and control some content visibility so emails feel professional and on-brand.
This guide has two parts:
* **Part 1** — for **hosts** (Lunacal customers) who configure Email Theme
* **Part 2** — for **recipients** (clients and bookers) who receive those emails
***
# **Part 1 — For Hosts**
## **What is Email Theme?**
Email Theme controls the **visual design** of booking emails sent to people who book with you — your clients, customers, and guests. It does **not** change the underlying booking information (date, time, links, etc.); it changes how that information is presented.
### **Emails it affects (attendee/booker-facing)**
When a theme is active, these **attendee/booker** emails use your chosen design:
| **Email type** | **When it’s sent** |
| :----------------------- | :----------------------------------------------- |
| **Booking confirmation** | After a booking is confirmed |
| **Booking rescheduled** | When a booking time changes |
| **Booking cancelled** | When a booking is cancelled |
| **Seat cancelled** | When a seat is removed from a group/seated event |
| **Booking requested** | When a booking needs host approval |
| **Booking declined** | When a host declines a booking request |
| **Awaiting payment** | When payment is required to confirm |
| **Reschedule requested** | When you ask an attendee to pick a new time |
| **Location updated** | When the meeting location changes |
***
## **Prerequisites**
Before you can use Email Theme, make sure:
1. **Feature availability** — Email Theme is controlled by feature flags in Lunacal:
* **Personal accounts:** the `email_templates` feature must be enabled for your workspace.
* **Team workspaces:** the `email_templates_teams` feature must be enabled, in addition to the personal flag where applicable. If you don’t see an **Email Theme** tab in Settings, the feature may not be enabled for your account yet. Contact Lunacal support if you believe you should have access.
2. **Permissions (team workspaces)** — Only **team Owners and Admins** can view and edit team Email Theme settings. Regular team members do not see the Email Theme tab.
3. **Plan requirements** — Email Theme is not tied to a specific billing plan in the product UI. Access is primarily determined by the feature flags above.
***
## **How to access Email Theme settings**
### **Personal account**
1. Open **Settings** (from the main navigation).
2. Select the **Email Theme** tab.
Direct link format: `/new-settings?tabName=email-theme`
### **Team workspace**
1. Go to **Manage Teams** and open the team you want to configure.
2. Open **Team Settings**.
3. Select the **Email Theme** tab.
Direct link format: `/manage-teams/{teamId}/settings?tabName=email-theme`
> **Note:** The Email Theme tab appears only for **Owners and Admins**. Other team members won’t see it.
***
## **How to choose a theme**
On the Email Theme page, you’ll see four theme options as preview cards:
| **Theme** | **Description** |
| :---------- | :-------------------------------------------------------- |
| **Default** | Standard Lunacal booking emails (no custom theme saved) |
| **Minimal** | Clean layout with serif headings and a colored accent bar |
| **Modern** | Bright, contemporary card-style layout |
| **Bold** | Dark background with high-contrast accent colors |
**To select a theme:**
1. Click the preview card for the theme you want.
2. Click **Save**.
The selected card is highlighted with a border when active.
***
## **How to customize a theme**
After selecting **Minimal**, **Modern**, or **Bold** (not Default), click **Customize Email** to open the visual editor.
### **Colors**
In the **Color Styles** panel on the left, you can adjust:
| **Setting** | **What it controls** |
| :----------------------------- | :---------------------------------------------------------------- |
| **Background Color** | Main email background / canvas |
| **Secondary Background Color** | Accent areas such as the footer bar and action-button backgrounds |
| **Text Color** | Body and label text |
| **Highlighted Text Color** | Large heading text and emphasized elements |
Changes preview live in the editor. Click **Save** in the editor (or on the main Email Theme page) to apply them.
### **Content visibility**
Under the **Content** section of the Color Styles panel:
| **Setting** | **Available in UI?** | **What it does** |
| :------------------------- | :---------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Show Booking Questions** | ✅ Yes | When enabled, booking question responses appear in the email. When disabled, they are hidden. |
| **Show Description** | ❌ Not currently exposed | Supported in the backend, but the toggle is not shown in the Customize Email UI at this time. Event descriptions follow your event-type settings instead. |
> **Note:** A “hide attendees” option exists in the system but is **not** exposed in the Customize Email UI. Attendee visibility for seated events is handled by event-type settings (e.g., “show attendees on booking page”).
### **Reset options**
You have two ways to reset:
1. **Reset within Customize Email** — Click **Reset** in the Color Styles panel header. This restores the selected theme’s **default colors and content toggles** without changing which theme is selected.
2. **Revert to Lunacal default emails** — Select the **Default** theme card on the main Email Theme page and click **Save**. This removes your saved custom theme and returns attendee emails to standard Lunacal formatting.
When you revert to Default, you’ll see a confirmation toast: *“Reset to default emails.”*
***
## **How to save changes**
1. Make your selections on the Email Theme page and/or in **Customize Email**.
2. Click **Save** on the Email Theme page.
The **Save** button is enabled only when you have unsaved changes. If you customize inside the editor, saving there also persists your settings.
***
## **How theme priority works**
When a booking email is sent, Lunacal resolves the theme in this order:
1. **Team theme** — If the event belongs to a team that has saved an Email Theme, the **team theme is used**.
2. **Organizer personal theme** — If there is no team theme (or the booking is on a personal event type), the **organizer’s personal Email Theme** is used.
3. **Lunacal default** — If neither a team nor a personal theme is saved, attendees receive **standard Lunacal booking emails** (the Default option).
**Examples:**
* You have a personal Minimal theme, but your team has a Bold theme → team bookings use **Bold**.
* Your team has no theme, but you have a personal Modern theme → your solo bookings use **Modern**.
* Neither you nor your team has a saved theme → attendees get **Default** Lunacal emails.
***
## **Which emails are themed vs. not themed**
### **✅ Themed (attendee/booker booking emails)**
* Booking confirmation
* Booking rescheduled
* Booking cancelled
* Seat cancelled
* Booking requested (pending approval)
* Booking declined
* Awaiting payment
* Reschedule requested
* Location updated
### **❌ Not themed**
| **Category** | **Examples** |
| :------------------------ | :--------------------------------------------------------------------------------------------------- |
| **Organizer/host emails** | Confirmation, reschedule, cancellation, and request notifications sent **to you** (and team members) |
| **Workflow emails** | Reminders and custom workflow messages |
| **OTP & verification** | Package dashboard OTP, account verification, password reset |
| **Account & admin** | Team invites, organization emails, billing notices, monthly digest |
| **Other attendee emails** | Video recording/transcript download links, no-show fee charged |
| **Phone-only bookings** | Attendees on phone-only bookings receive **SMS** instead of email |
***
## **Tips for brand consistency**
1. **Match your Client Portal** — Use the same primary and background colors as your **Client Portal** customization (Settings → Client Portal) so the booking experience feels consistent from email to portal.
2. **Test with a real booking** — Create a test event, book it with your own email address, and review the confirmation on desktop and mobile.
3. **Check contrast and accessibility** — Especially with the **Bold** theme, verify that text remains readable against your background colors. Avoid very light text on light backgrounds or dark text on dark backgrounds.
4. **Use Secondary Background Color for CTAs** — Reschedule, cancel, and “Pay now” buttons use your secondary/primary accent color. Pick a color that stands out clearly.
5. **Team vs. personal branding** — If you work in a team, set the team theme once so all team event bookings look consistent, regardless of which member is assigned.
***
# **Part 2 — For Recipients (Clients & Bookers)**
## **What you’ll see**
When a Lunacal host or team has Email Theme enabled, the booking emails you receive will look **branded** — custom colors, styled headings, and a polished layout — instead of the plain default Lunacal format.
The email still comes from the host’s booking system and contains the same essential information.
## **What information appears in themed emails**
Depending on the booking and the host’s settings, you may see:
* **Event name** and a clear status heading (e.g., “Booking Confirmed.”, “Booking Rescheduled.”)
* **Date and time** in your timezone
* **Location** or meeting link (Zoom, Google Meet, in-person address, etc.)
* **Organizer name** and other attendees/guests (when applicable)
* **Booking question responses** (if the host has chosen to show them)
* **Reschedule** and **Cancel** links (when allowed for that event)
* **Payment details** and a **Pay now** button (for paid events awaiting payment)
* **Client Portal** link — to view and manage your bookings with that host
* **Package links** — if the booking is part of a session package
## **You don’t need to enable anything**
Email Theme is applied **automatically** by the host or team. You don’t sign up for it, install anything, or change any settings. If the host uses a custom theme, your emails simply arrive styled that way.
## **If something doesn’t look right**
### **Email looks broken or unstyled**
* Some email clients (especially older ones) may render colors or layouts differently. Try opening the email in a different client (Gmail, Outlook, Apple Mail).
* If images or layout appear broken, forward the email to the host and let them know which email app you’re using.
### **Email landed in spam**
* Add the sender to your contacts or mark the email as “Not spam.”
* Themed emails are still standard transactional messages; spam filters sometimes flag unfamiliar senders regardless of styling.
### **Email doesn’t match what you expected**
* The host controls the theme, colors, and what information is shown. Contact the host directly if details are missing or incorrect.
* Reschedule and cancel links only appear when the host has allowed those actions for the event.
### **Can you opt out of styled emails?**
**No.** There is no separate setting for recipients to disable Email Theme or receive plain-text-only versions. Styled emails are part of how the host sends booking notifications. Standard email rules apply — you receive transactional booking emails as part of making a booking; unsubscribe options, if any, follow Lunacal’s and the host’s normal email policies, not a separate “theme off” toggle.
***
# **FAQ & Troubleshooting**
### **I don’t see the Email Theme tab. Why?**
* The feature may not be enabled for your account (feature flag).
* For teams: you must be an **Owner** or **Admin**. Regular members won’t see the tab.
* For teams: the `email_templates_teams` flag must be enabled.
### **I saved a theme but my test email looks like the old default.**
* Confirm you clicked **Save** after selecting a theme.
* For team events, check whether a **team theme** is set (it overrides your personal theme).
* Allow a minute and try a **new** test booking — already-queued emails won’t update retroactively.
### **My personal theme isn’t applying to team bookings.**
This is expected. **Team theme takes priority** over your personal theme when the event belongs to a team.
### **Do workflow reminder emails use my theme?**
**No.** Workflow emails (reminders, follow-ups, etc.) use the standard workflow email format, not Email Theme.
### **Do emails sent to me as the host use my theme?**
**No.** Email Theme applies to **attendee/booker** emails only. Notifications sent to you and your team use the standard organizer email format.
### **What’s the difference between “Reset” in the editor and selecting “Default”?**
* **Reset** (in Customize Email) restores the current theme’s default colors and toggles.
* **Default** (on the main page) removes your saved theme entirely and reverts all attendee emails to standard Lunacal formatting.
### **Can I show or hide the event description in emails?**
The system supports a “Show Description” setting, but it is **not currently available** in the Customize Email UI. Description visibility is primarily controlled by your **event type** settings.
### **Will changing my theme affect past bookings?**
No. Theme changes apply to **new emails sent after you save**. Previously sent emails are not resent or restyled.
# Event-Specific Widgets
Source: https://help.lunacal.ai/event-specific-widgets
Event-Specific Widgets let you control which widgets appear on which event types on your booking page. By default, all widgets (Gallery, Videos, Audio, Documents, About section, Testimonials, etc.) appear across every event type. This feature gives you granular control — so each event can have its own customized experience.
## Overview
By default, all widgets (Gallery, Videos, About, Testimonials, Documents, etc.) are shown across **every event type**.
If you have multiple events, they all share the same widget layout.
Event-Specific Widgets allow you to decide:
> Which widget appears on which event.
## Where to Find It
1. Open your **Edit Booking Page** Editor
1. Click **Settings** in the top navigation bar
You’ll see:
* **Show Widgets**
* **Allow Event-Specific Widgets**
## Setting 1: Show Widgets (Global Toggle)
This controls widgets for the entire booking page.
* **Enabled** → All added widgets are visible
* **Disabled** → No widgets appear on any event and your calendar will be center alligned.
This is the master visibility switch.
## Setting 2: Allow Event-Specific Widgets
When disabled (default):
* Every event type shows the same widgets.
When **enabled**:
* An **eye icon** appears on each widget.
* You can control visibility per event type.
## How It Works
After enabling **Allow Event-Specific Widgets**:
1. Go to your widgets list.
2. Click the 👁 icon on a widget.
3. Select the event types where it should appear.
4. **Publish**.
That widget will now appear only on selected events.
## Example
You have 4 events:
* 1:1 Consultation
* Webinar
* Portfolio Review
* Corporate Demo
You can configure:
* Consultation → About + Testimonials
* Webinar → Videos + Documents
* Portfolio Review → Gallery only
* Corporate Demo → About + Documents
Each event now has a tailored booking experience.
## When to Use This
Use Event-Specific Widgets if:
* You run different types of events
* Each event needs different supporting content
* You want cleaner, more focused booking pages
* You want higher conversion through relevance
## Summary
| Setting | Function |
| :--------------------------- | :------------------------------- |
| Show Widgets | Turns all widgets on or off |
| Allow Event-Specific Widgets | Enables per-event widget control |
If you want, tell me what tone Lunacal uses (technical, friendly, startup-style, minimal), and I’ll rewrite it properly aligned with your product voice.
# Booking Questions
Source: https://help.lunacal.ai/event-types/booking-questions
Use Booking Questions to collect the key details you need before a meeting. You’ll find this under the “Event Types” you want to configure.
> Note: You can reset Booking Questions to default
**Step 1**
On “[**Event Types**](https://app.lunacal.ai/event-types)”, select the event type you want to edit. You can click anywhere on the square box or use the **gear button**.
**Step 2**
Navigate to the **Booking Questions** tab.
**Step 3**
**Add/Edit your booking question** **:** \
Note: You can’t delete or change the question type of **default questions**.\
\
To create a new question, click **Add/Edit Booking Question**, then choose the question type from the dropdown.\
Here are the available question types and their use cases:
| **Question Type** | **Description / Use Case** |
| :------------------------------- | :---------------------------------------------------------------------------------------------------------------------------- |
| **Email** | Collects a single email address from the attendee. |
| **Phone** | Collects a phone number with country code. |
| **Short Text** | Accepts short, one-line answers (e.g., name, company, comments). |
| **Long Text** | For longer responses or open-ended questions (e.g., “Tell us more about your project”). |
| **Dropdown** | Displays a list of predefined options — users can select one. |
| **Multiple Emails** | It allows attendee to input more than one email address (useful for group invites & every email will get confirmation email). |
| **Check Box (Multi Select)** | Lets users select multiple options from a list. |
| **Multi Choice (Single Select)** | Lets users choose only one option from multiple choices (radio-button style). |
| **Pipedrive Custom Field** | Links a question directly to a custom field in your connected Pipedrive account. |
| **Consent Checkbox** | Used for consent or agreement confirmations (e.g., “I agree to the terms and conditions”). |
| **Attachment** | Lets users upload file eg.(Images, Docs, sheets etc.) |
**When adding a new question:**
| **Field** | **Description** |
| :-------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Mandatory** | When enabled, attendees must answer this question before completing their booking. |
| **Internal Label** | A private tag for question (not shown to the booker). Whatever you enter here can also be used in workflows — for example, if the internal label is **Phone\_Number**, you can reference it as to display the attendee’s phone number in your workflow. |
| **Answer Suggestion** | Optional preset text or examples shown inside the input field to attendees on what to enter. |
When editing the **Name** question, you can use the **Split** option to ask the booker to enter their first and last name separately.
> **Please don't edit the default booking questions that you see. It might lead to unexpected behaviour. You can turn them off if you don't want to use it.**
**Step 4**
Use the toggle to “**Hide/Unhide**” any question, hidden questions aren't going to show on your public booking page to attendee.
**Common mistakes to avoid**
* Editing **default booking** questions instead of turning them off, which can cause unexpected behavior.
* Forgetting to click “**Save**”, so new fields don’t appear on the booking page.
* Using the wrong question type (e.g., Short text for multi-choice answers), leading to messy data.
* Hiding required info by mistake with “**Hide/Unhide**”, causing gaps in submissions.
**Good defaults to start with**
* Keep “**Name**” (with “split”), “**Email**”, and one qualifier (e.g., “Short text” for goal).
* Use “**Mandatory**” only for must-have fields; keep the form short.
* Prefer “**Dropdown**” or “**Multi Choice**” for standardized answers; use “Long text” sparingly.
* Add a “**Consent Checkbox**”, It's used for consent or agreement confirmations (e.g., “I agree to the terms and conditions”).
# Coupons
Source: https://help.lunacal.ai/event-types/coupons
Coupons allow you to offer discounts on paid event types, making it easier to run promotions or provide special pricing to selected attendees.
Coupons allow you to offer discounts on paid events so you can run promotions, reward specific customers, or temporarily reduce prices. They are ideal for limited-time offers, seasonal deals, customer perks, and special campaigns.
* **Prerequisite**: You need a payment app before creating coupon, Connect **Paypal** OR **Stripe** from [Integrations](https://app.lunacal.ai/apps?category=payment) -> [payment](https://app.lunacal.ai/apps?category=payment)
## Step 1.
Navigate to [Event Types](https://app.lunacal.ai/event-types) & Open the event type you want to configure by clicking on (⚙️) icon.
## Step 2.
Navigate to **Payments** & toggle **ON** "Charge for this event"
> If the **Payment App** toggle is turned **off**, you will not be able to **create coupons**.

## Step 3.
Inside Payments, you’ll find the **Coupons**, Click **Create Coupon** to open the coupon creation modal.
> **Important:** Coupons are available only for paid events.

## Creating a Coupon
You’ll need to fill in the following details:
| **Coupon Code** | **Discount Type & Value** | **Expiration Date** | **Usage Limit** | [**Minimum Booking Price (Optional)**](https://help.lunacal.ai/event-types/create-special-coupons-for-packages) |
| :-------------------------------------------------------------------- | :---------------------------------------------------------------------- | :-------------------------------------------------- | :-------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| Unique promo code entered by attendees at checkout (e.g. `WELCOME80`) | Percentage-based discount (**e.g. 80%**). **100% discount not allowed** | Date after which the coupon becomes invalid/expired | Number of times the coupon can be used. | Minimum total price required for the coupon to apply. ( Best suited for package-based or multi-slot bookings.) |

**Discount types explained**
* **Percentage discount** – Reduces the event price by a percentage (e.g., 80% off).
* **Fixed amount discount** – Deducts a fixed amount from the event price (e.g., \$10 off).
> Note: You cannot combine percentage and amount discounts in a single coupon.
## Minimum Booking Price (Special Coupons)
The **Minimum Booking Price** lets you control when a coupon becomes valid. This is useful when your event supports **multi-slot or package bookings**.
### Example
> COUPON50 Set to 50% discount.
* Price per slot: **\$20**
* Attendee selects **2 slots** → Total = **\$40**
* Coupon minimum booking price = **\$50** → ❌ Coupon will **not** apply
* Attendee selects **3 slots** → Total = **\$60**
* Coupon minimum booking price = **\$50** → ✅ Coupon \*\*applies successfully \*\*and the final price will be **30\$**
This ensures discounts are applied **only when the total booking value meets your criteria**, helping you avoid very small discounted bookings.
## How Coupons Work for Attendees
* Attendees can apply the coupon code during checkout
* The discount is applied instantly to the final price
* If the coupon is expired or usage limit is exceeded, it won’t be accepted
* A coupon will be rejected if:
* It has expired.
* It has reached its usage limit.
* It’s entered in the wrong event’s checkout (coupons are event-specific).
* When a coupon is applied:
* The discounted price is shown before checkout.
* The final amount charged reflects the discount.
* The coupon label appear in confirmation emails of attendees.
## Things to Keep in Mind
* Coupons work only when payments are enabled for the event
* 100% discount coupons are not supported
* Coupons are specific to the event type they are created for
This helps you control pricing while still keeping payments and access secure.
## Troubleshooting
* **Coupon not applied?** Confirm payments are enabled and the coupon is created for the correct event type.
* **Discount doesn’t show at checkout?** Double-check the coupon code spelling and expiration date.
* **Coupon already used?** Check the usage limit — it may have been reached.
* **Coupon reduced price less than expected?** Make sure the discount type (percent vs amount) matches your intention.
# Create Special Coupons for Different Packages
Source: https://help.lunacal.ai/event-types/create-special-coupons-for-packages
This guide explains how minimum price–based coupons work and how you can use them to control which packages or slot combinations a coupon applies to.
If you don't know how to create coupons, see the [Creating coupons](https://help.lunacal.ai/event-types/coupons) guide and then return here to set up special minimum-price coupons.
## Overview
Special coupons allow you to apply discounts **only when the booking total meets a minimum price**. This is useful when you want to:
* Prevent coupons from being used on smaller or cheaper packages
* Encourage users to book **more slots** or **higher-value packages**
* Create targeted offers without creating multiple coupons
## Key Concept: Minimum Price
When creating a coupon, you can set a **Minimum Price**.
* The coupon will **only apply if the total booking amount is equal to or greater than this minimum price**.
* If the booking total is **below** the minimum price, the coupon will **not apply**.
## How It Works (With Example)
### Example Setup
* **Price per slot:** \$20
* **Coupon minimum price:** \$50
* **Coupon discount:** 50%
### Booking Scenarios
#### ❌ 2-Slot Booking
* Total price: 2 × \$20 = **\$40**
* Minimum required: **\$50**
* Result: ❌ Coupon **will not apply**
Reason: The total booking value is below the minimum price set for the coupon.
#### ✅ 3-Slot Booking
* Total price: 3 × \$20 = **\$60**
* Minimum required: **\$50**
* Result: ✅ Coupon **will apply**
Discount calculation:
* 50% of \$60 = **\$30 discount**
* Final price: **\$30**
## Why Use Minimum Price Coupons?
Using minimum price–based coupons helps you:
* 🚫 Block discounts on low-value bookings
* 📈 Increase average booking value
* 🎯 Target specific packages or slot counts
* 🧠 Avoid creating separate coupons for each package
## Common Use Cases
* Allow coupons only on **3+ slot bookings**
* Offer discounts on **premium or higher-value packages**
* Run promotions like:
* “Get 50% off on bookings above \$50”
* “Special discount for bulk bookings”
## Important Notes
* The minimum price is checked **after slots are selected** and **before the discount is applied**.
* If the total booking amount changes and falls below the minimum price, the coupon will automatically become invalid.
* The coupon discount (percentage or flat) is applied **only when the minimum price condition is satisfied**.
## Summary
By setting a minimum price on coupons, you can control exactly **which booking sizes qualify for discounts**. This ensures coupons are used strategically and only on bookings that meet your business goals.
Need help setting up your first special coupon? Follow the coupon creation steps and make sure to define the right minimum price based on your package structure.
# Event Setup
Source: https://help.lunacal.ai/event-types/event-setup
This document will guide you through adding event details and specifying the event location.
## Step 1
Start by opening the event type you want to configure.
## Step 2
In this view, you'll see options to further customize your event details and settings, fill the basic details such as the title, description, duration. To help attendees clearly understand your event, use concise and descriptive titles.\
The event description should briefly communicate the purpose of the meeting, any expectations, and important details attendees need to know. (Description is Optional)\
All information entered here is visible to attendees on the booking page, so ensure the content is clear and professional.
## Step 3
Click on drop-down to add "**Meeting location**".
## Step 4
You can choose **location** from the dropdown, such as, In-Person (Location of your choice), In-Person (Organizer Adress), Link Meeting, Attendee phone number, organizer phone number, and your confrencing apps such as ( Google Meet, MS-Teams, Facetime & Zoom).
## Step 5
If you want to add another location, Click on "Add another location" again and specify the location. When you add more than one meeting location to an event type, attendees will be able to **choose their preferred location** during the booking process.\
To avoid confusion, it’s recommended to clearly define each location (e.g., “Zoom Video Call”, “In-Person – Office”).\
At this time, all added locations display equally on the booking page, and no default is automatically selected by the system.
## Step 6
After creating an event type, you can make changes at any time using the **Edit** option available on when you click on gear icon on dashboard. If an event type is no longer needed, you can remove it using the **Delete** option. Deleting an event type immediately removes it and its booking page link, so ensure it is no longer in use before deleting.
***
# Group Booking
Source: https://help.lunacal.ai/event-types/group-bookings
Learn how to enable group booking so multiple participants can book the same time slot.
## Step 1
Go to [Event Types](https://app.lunacal.ai/event-types) on your dashboard.
***
## Step 2
Select the event for which you want to enable group booking and click the settings ⚙️ icon on that event card.
***
## Step 3
Choose "**Edit**" from the dropdown menu.
***
## Step 4
In the "**Event Setup**" section, scroll down to find "**Group Bookings**".
***
## Step 5
Toggle **ON** to allow multiple people to book the same time slot.
***
## Step 6
Enter the maximum number of participants you want to allow per slot.
***
## Step 7
Click "**Save**" to apply the changes.
| **What Attendees Will See** | **How Capacity Works** | **What Happens When Someone Cancels** |
| -------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| Attendees see all available time slots normally. | Each time slot has a fixed maximum capacity set by the organizer. | If a cancellation reduces capacity, the slot becomes available again automatically. |
| For group slots, they see the number of remaining seats (if enabled). Example: **“3 spots left”**. | Every new booking reduces the available seats for that particular time slot. | Seat count automatically increases by one. |
| Once a slot is fully booked, the attendee will **no longer see that time slot**. | When capacity reaches zero, the slot is marked as full and hidden from the booking page. | If the slot was hidden because it was full, it becomes *visible again* with updated availability. |
| They can only book up to the maximum number of seats allowed per booking (if you set a limit). | The system prevents bookings beyond the per-slot capacity. | The slot instantly reopens without you doing anything manually. |
| If multiple slots have availability, attendees can choose any of them. | Capacity is managed individually per time slot, not globally across the event. | Updated availability is shown in real time to the next attendee. |
# Limits and Buffer
Source: https://help.lunacal.ai/event-types/limits
Set booking limits and buffer times to control how often people can book you and to give yourself prep/transition time. You’ll find these controls under “Event Types” → “Booking Limits” inside “Booking Limits”.
Not all fields under Limits & Buffer are mandatory. you can configure only the options needed for event type. Fields such as Advance Notice, Buffer Time, and Advance Booking Limit are optional, and leaving them at the default value will not prevent the event type from functioning.\
**Relation to Other Configurations:**\
**Note** : Limits & Buffer work alongside other parts of event configuration such as availability schedules, calendar sync, and meeting duration. review these areas after setting limits and buffers.
## Step 1
On “[Event Types](https://app.lunacal.ai/event-types)”, select the event type you want to edit. You can click anywhere on the square box or use the gear button.
## Step 2
Click “**Booking Limits**”.
## Step 3
In “**Booking Limits**”, set a buffer before event and buffer after event meetings. You can choose up to 120 minutes for both before and after buffers.\
Recommended default value : Buffer Before: **10 minutes**\
**Example**: Add a 10-minute buffer before a demo to review notes and open your deck. 🕒
## Step 4
Set a buffer after event to avoid back-to-back calls.\
Recommended default value : Buffer After: **15 minutes**\
**Example**: Add 15–20 minutes after a sales call to write follow-up points and reset.
## Step 5
In the **Advance Notice** section, define the minimum notice lead time before someone can book you. This prevents last-minute bookings (for example, within the next hour). You can set the notice in minutes, hours, or days. \
Recommended default value : Advance Notice: **2 hours**\
**Example**: Require at least 2 hours’ notice so you’re not surprised by immediate bookings.
## Step 6
Limit booking frequency on "**Max Bookings per Event**" to control how many times someone can book you within a period. You can restrict to one booking per day, week, month, or year, and you can add multiple limits (up to 4) for an event.\
Recommended default value : Advance Booking Limit: **30 days**\
**Example**: Cap coaching to 2 sessions per week per person to manage workload.
## Step 7
Set the “**Advance Booking Limit**” to control how far into the future people can see and book. You can allow booking within 30 days or specify the exact days you want open.\
**Note** : When limits such as Advance Booking Limit or Advance Notice are updated, the changes apply only to new bookings. Existing bookings remain unaffected.\
**Example**: Show only the next 30 days so your calendar doesn’t get locked months ahead.
## Step 8
Once all settings are in place, click the "**Save**" button to apply your limits and buffer settings.
**Common mistakes to avoid :**\
• Forgetting to click “Save”, which leaves old settings active.\
• Setting buffers but leaving the advance notice at “0”, allowing last-minute bookings anyway.\
• Adding overlapping frequency limits (e.g., 1 per day and 1 per 24 hours) that confuse availability.\
• Setting a very short “Advance Booking Limit” (e.g., 3 days) and then wondering why next week looks unavailable.
**Good defaults to start with :**\
• Buffers: 10 minutes before, 15 minutes after.\
• Advance notice: 2 hours (same-day safety net).\
• Booking frequency: 1 per day per person for longer sessions; none for quick 15-minute chats.\
• “Advance Booking Limit”: 30 days (opens rolling availability without overcommitting).
# Meeting Duration
Source: https://help.lunacal.ai/event-types/meeting-duration
Learn how to update or customize the duration of your meetings, including flexible options.
## Step 1
Go to "[Event Types](https://app.lunacal.ai/event-types)" in your dashboard.
***
## Step 2
Select the event for which you want to change the duration and click the settings ⚙️ icon on that event card.
***
## Step 3
Choose **Edit** from the dropdown menu.
***
## Step 4
In the "**Event Setup**" section, you'll see **Duration** \
**Note**: Pricing doesn’t change with duration
Currently, duration selection doesn’t affect pricing: even if invitees choose a longer meeting duration under Flexible Duration, the price remains the same. if you need different pricing for different durations, you must create separate event types (or wait for future feature updates).\\
* To update the "**Duration**" field with the desired time.
***
## Step 5
### Flexible Duration
Toggle **ON** → Instead of a fixed duration, invitees can choose the meeting length.
***
## Step 6
You can add **multiple time** options. Invitees can then select their preferred duration from the list when booking.
***
## Step 7
The **Default Value** under the list of durations is the pre-selected meeting length when someone opens your booking page.
***
## Step 8
Click "**Save**" to apply the changes.
Tip :
1. Double-check buffer and limit settings (from [Limits & Buffer](https://help.lunacal.ai/event-types/limits) page) for compatibility.
2. Save changes and preview booking page to confirm duration dropdown behaves as expected.
# One-time & Limited-use Booking Links
Source: https://help.lunacal.ai/event-types/one-time-link
One-time (or limited-use) booking links let you share a unique booking URL that can be used only a specific number of times. This is useful when you want to control exactly how many bookings happen from a shared link.
## What is a One-time / Limited-use Booking Link?
When enabled, Lunacal generates a **unique booking link** for your event type. You can decide how many bookings are allowed through this link:
* **One-time link** → Only 1 booking allowed
* **Limited-use link** → Allow multiple bookings by increasing the usage limit
Once the usage limit is reached, the link automatically becomes inactive.
> ⚠️ Note: Only the **host** can create and manage one-time or limited-use booking links.
## How to Create a One-time or Limited-use Booking Link
1. Go to your [**Event Type**](https://app.lunacal.ai/event-types), Click on the **Share** button.

2. Enable **Create a single-use or limited-use Booking Link**.

3. A **unique booking URL** will be generated automatically, **Copy** it to share.

4. Under **Max Booking Limit**, set how many bookings are allowed:
* Set it to **1** for a one-time booking link
* Increase the number if you want multiple bookings using the same link.

## How It Works for Attendees
* Attendees can book normally using the shared link.
* Each successful booking reduces the available usage count.
* Once the limit is reached, no further bookings can be made using that link.
## Viewing & Managing Past Booking Links
You can view all previously generated unique booking links:
1. Open the **Share** modal for the event type.
2. Click on **Past links**.
3. Here you can see:
* The unique booking link
* Usage count (e.g., `0 / 1`, `1 / 3`)
4. You can also **delete** a link if it’s no longer needed.

## Common Use Cases
* Sharing a **private booking link** with a specific client
* Sending a **one-time meeting link** via email or DM
* Limiting bookings for **exclusive sessions or trials**
* Preventing overbooking when sharing links publicly
If you need to allow more bookings later, simply generate a new limited-use link or increase the usage limit while creating the link.
# Package Booking
Source: https://help.lunacal.ai/event-types/package-booking
Allow attendees to book multiple time slots in a single booking using Package Booking. Learn how fixed and flexible slot packages work and when to use each.
## What is Package Booking?
Package Booking lets hosts offer **multiple time slots as part of a single booking**.\
Instead of booking one meeting at a time, attendees can select several slots in one flow.
Package Booking can be enabled for:
* **Individual (normal) events**
* **Team events** (except **Collective Scheduling** events)
> **Note:** Package Booking does **not** work with Collective Scheduling events
## Step 1
Navigate to [Event Types](https://app.lunacal.ai/event-types).
## Step 2
Select the event for which you want to enable package booking OR click the **settings icon** (⚙️) on that event card.
## Step 3
Choose "**Edit**" from the dropdown menu.
## Step 4
In the "**Event Setup**" section, scroll down to find "**Create a Multi-Session Package**" & **Toggle ON**.

| Feature | Fixed Slot | Flexible Range |
| :----------------------- | :----------------------------------------------------- | :--------------------------------------------------- |
| Slot count | Host sets an **exact number** of slots | Host sets a **minimum and maximum range** |
| Attendee choice | Must select **exactly the defined number** of slots | Can select **any number within the allowed range** |
| Booking condition | Booking completes **only when all slots are selected** | Booking completes once selection is within the range |
| Example setup | 4 slots | 2–6 slots |
| Example attendee action | Must book **exactly 4 sessions** | Can book **2, 3, 4, 5, or 6 sessions** |
| Flexibility for attendee | ❌ Low | ✅ High |
| Best for | Fixed programs, paid bundles, structured courses | Coaching, mentoring, flexible engagement packages |
| Pricing alignment | Easy to price per package | Useful when pricing depends on session count |
| Risk of partial booking | None (strict requirement) | Possible if expectations aren’t clearly communicated |
> For example In Flexible Range 2-6, I selected 6 sessions below.

## Recurring Bookings (within a Package)
Once Package Booking is enabled, you can also allow attendees to fill their package slots using a **recurring pattern** — instead of picking each session date manually, they choose a frequency (e.g., every week) and the system generates the slots automatically.
> **Note:** Recurring bookings require Package Booking to be enabled first. Recurring is **not** available for Collective Scheduling events, and it **cannot** be used when Seats are enabled on the event.
### How to Enable Recurring Bookings
After enabling Package Booking (Step 4 above), stay in the same settings area and look for the **"Allow Recurring Bookings"** toggle. Turn it on.
Once enabled, you can select which **recurrence patterns** attendees are allowed to choose from:
| Pattern | What it means |
| :--------------------- | :------------------------------------------------ |
| Daily | Repeats every day |
| Weekly | Same day every week (e.g., every Tuesday) |
| Biweekly | Same day every 2 weeks |
| Every 3 weeks | Same day every 3 weeks |
| Every 4 weeks | Same day every 4 weeks |
| Monthly (same date) | Same date each month (e.g., the 22nd) |
| Monthly (same weekday) | Same weekday each month (e.g., the 4th Wednesday) |
You can enable one or more patterns — attendees will pick from whichever patterns you allow.
***
### How Attendees Use Recurring Bookings
When an attendee is building their package and clicks on a time slot, they see two options:
* **Add this slot to package** — adds just that one slot manually
* **Make this slot recurring** — opens the recurring sessions dialog
In the recurring dialog, the attendee:
1. Selects a recurrence pattern from the ones you've allowed (e.g., "Every Wednesday")
2. Selects how many times it should repeat (up to the remaining slots in their package)
3. Reviews a preview summary — e.g., *"Every Wednesday starting June 11 for 4 sessions"*
4. Confirms — all generated slots are added to their package at once
> If some generated dates are unavailable, those slots are flagged with an **"Unavailable"** badge. The attendee must adjust those before they can complete the booking.
***
### Recurring vs. Manual Slot Selection — Which to Use?
| | Manual Selection | Recurring |
| :------------------- | :------------------------------------------------------- | :----------------------------------------------------------------------- |
| How slots are chosen | Attendee picks each date individually | Attendee picks a pattern; dates are generated automatically |
| Best for | Irregular schedules, attendees with varying availability | Regular cadences — weekly coaching, biweekly check-ins, monthly sessions |
| Attendee effort | Higher (must find and click each slot) | Lower (one pattern fills all slots instantly) |
| Flexibility | Maximum — any available slot | Limited to the selected recurrence pattern |
Both methods can be used together in a single package — an attendee can add some slots manually and fill the rest with a recurring pattern.
***
### What to Know
* **Only the first session** in a recurring series triggers a confirmation email to both you and your attendee. Subsequent sessions in the series are booked silently.
* Recurring series integrate with external calendars (Google Calendar, Outlook) as a **single recurring calendar event** using the recurrence rule — not separate events.
* Attendees can **remove individual slots** from a recurring series after it's been added to their package. Removing a slot from the middle of a series splits it into two separate groups automatically.
* Recurring slot selection is **not available during rescheduling** — attendees must adjust slots manually if they are rescheduling an existing booking.
# How to Add Zoom as the Meeting Location
Source: https://help.lunacal.ai/event-types/setup-zoom-video
Learn how to integrate Zoom and set it as the default meeting location for your events.
## Step 1
Go to "[Integrations](https://app.lunacal.ai/apps)" in your dashboard.
***
## Step 2
Click on "[Conferencing](https://app.lunacal.ai/apps?tab=apps\&category=conferencing)"
***
## Step 3
Select "**Zoom Video**" and choose whether you want to install it for:
* A team event type (e.g., Sales North America), or
* Your personal account (e.g., Prince Bhatt).
***
## Step 4
Enter your **Zoom credentials** to connect your account.
***
## Step 5
**Important:** When connecting Zoom, make sure to select the "View user" option\
This permission allows Lunacal to access your Zoom profile and automatically create Zoom meetings for your bookings.
### **Steps to connect:**
1. Click **“I understood”** to proceed.
2. You’ll be redirected to the **Zoom authorization page**.
3. When prompted, choose **“View user”** as the permission option.
4. Click **Authorize** to complete the connection.
Once connected, Zoom will automatically link to your account, and you’ll see a Connected status.
**Important** : For each event, you must manually select "**Zoom Video**" in the "Meeting Location" field.
***
## Step 6
Go to "**Event Types**" in your dashboard.
***
## Step 7
Select the event for which you want to enable **Zoom** and click the "**Settings icon**" on that event card.
***
## Step 8
Choose "**Edit**" from the dropdown menu.
***
## Step 9
In the "**Event Setup**" section, scroll down to find "**Meeting Location**".
Select "**Zoom Video**" from the options.
***
## Step 10
Click "**Save**" to apply the changes.
# Google Tag Manager (GTM) Integration with lunacal.ai
Source: https://help.lunacal.ai/google-tag-manager-integration
Lunacal allows you to track user interactions and bookings using Google Tag Manager (GTM).
## **1. Understanding GTM Container ID in Lunacal**
A GTM Container ID looks like:`GTM-XXXXXXXX`
lunacal requires this ID to load your GTM container and trigger your tags.\
You can set this ID at multiple levels depending on your tracking needs:
### **(A) Account-level (User Profile)**
* This is the **default container** for your personal events.
* It loads on all booking pages unless overridden by a specific container set for your Event Types.
### **(B) Team-level**
* Each team can have its **own GTM Container ID**.
* When added here, It loads on all team events, it didn't **overrides the account-level ID**.
### Installing GTM
* Go-to: **Integrations** > [Analytics](https://app.lunacal.ai/apps?tab=apps\&category=analytics)
* Find **Google Tag Manager (GTM)**.
* Click **Connect**.

## Step 2: Choose Installation Scope
When you click **Connect**, you will see:
**Option A – Connect GTM for your Account**
* This makes GTM available for all event types in your workspace.
**Option B – Connect GTM for a specific Team**
* Choose this if you only want GTM for selected teams. Select your preferred option and continue.

## Step 3: Enter Your GTM Container ID
* After selecting **Account** or **Team**, you will see an input box.
* Enter your GTM container ID (example: GTM-XXXXX123).
* Click **Save**.

GTM is now installed.
`The GTM ID you enter here becomes the default ID shown inside event types (when you enable GTM for them).`
## 2. Enabling GTM for Individual Event Types
Installing GTM does **not automatically enable it** for all event types.\
You must activate GTM for each event type you want to track.
* Go to [Event Types](https://app.lunacal.ai/event-types)
* Click the gear ⚙️ icon.
* Click **Edit**.

* Go to **Integrations** Section.
* You will see a GTM toggle in **off** state.
* To Enable GTM Turn **ON** the GTM toggle

`You will see the same GTM ID you entered during installation (auto-filled)`
Click **SAVE**
That's it — GTM is now active for this event type.
You can repeat these same steps for your team events.
## 3. Datalayer Events Triggered by Lunacal
When GTM is enabled for an event type, lunacal automatically fires these datalayer events on booking interactions:
| **Event Name** | **Fires When…** | **Suggested GTM Trigger Category** |
| :-------------------- | :-------------------------------------------- | :--------------------------------- |
| `navigatedToCalendar` | User lands on the calendar view | Custom Event |
| `navigatedToTeam` | User views team booking options | Custom Event |
| `navigatedToUser` | User views a specific user/host profile | Custom Event |
| `eventSelected` | User clicks to select a specific event type | Custom Event |
| `memberSelected` | In a team booking, user selects a team member | Custom Event |
| **Event Name** | **Fires When…** | **Example GTM Use Case** |
| :------------------------------- | :------------------------------------------------------- | :---------------------------- |
| `timeSlotSelected` | User clicks an available time slot | Funnel step in GA4 |
| `bookingRequested` | User submits booking request (before final confirmation) | Track partial conversions |
| `bookingFailed` | Booking fails due to conflict/validation | Conversion abort tracking |
| `paymentSuccessfull` | User completes payment (if booking is paid) | Purchase conversion |
| `couponApplied` | Coupon/discount code successfully applied | Promo effectiveness analytics |
| `bookingSuccessfull` | Booking fully completed (alternate or older naming) | Conversion tracking |
| `bookingSuccessfullV2` | Updated booking success event (improved schema) | Use for enriched payload |
| `rescheduleBookingSuccessfull` | Booking was rescheduled successfully | Conversion path analysis |
| `rescheduleBookingSuccessfullV2` | New version of reschedule success event | New schema tracking |
# HubSpot Integration With Lunacal.ai Guide
Source: https://help.lunacal.ai/hubspot-integration
Lunacal's HubSpot integration connects your meetings with your CRM. It automatically adds or updates contacts and meeting activity in HubSpot.
## **Who can use this**
* Plans: ~~Standard~~, Teams, Enterprise
* Roles: Owners, Admins
## **Overview**
Connect Lunacal with HubSpot to keep contacts and meeting activity in sync. New meetings, cancellations, and reschedules in Lunacal are logged to HubSpot automatically.
## **What you’ll need**
* A Lunacal account with admin access
* A [HubSpot account](https://www.hubspot.com/pricing/marketing/enterprise?term=annual) (free or paid) with admin access
Note: HubSpot’s Free plan allows only 10 custom properties. Going over this limit can cause sync failures.
## **What the integration does**
* Creates a HubSpot contact when the invitee’s email doesn’t exist.
* Logs/updates a meeting activity on the contact timeline.
If the contact already exists, the meeting activity is added without changing contact fields or ownership. If your Lunacal email doesn’t match your HubSpot email, the contact owner is set to “unassigned.”
## **What HubSpot logs on the contact**
* A timeline activity with:
* Type: Meeting
* Meeting name
* Owner
* Contact
* Duration
* Attendee count
## **When meetings change**
* Canceled or rescheduled events update the existing activity, and both parties are notified
* Canceled meetings disappeared.
* Past meetings remain for reference
* Editing duration in HubSpot won’t change it in Lunacal
## **Connect HubSpot to Lunacal**
1. Open [Integrations](https://app.lunacal.ai/apps) > [CRM](https://app.lunacal.ai/apps?category=crm) in Lunacal
2. HubSpot → Click on Connect.
3. Authenticate with HubSpot and select Connect App.
## **Custom questions**
* Lunacal sends invitee responses to HubSpot. You’ll see them on the contact’s Activity tab.
## **Mapping answers to HubSpot properties**
* Use HubSpot Workflows to map specific Lunacal responses (e.g., job title, company) to HubSpot properties.
## **Sync meeting outcome**
* You can push the invitee’s Lunacal meeting status to HubSpot’s meeting outcome field (scheduled, completed, no-show, canceled). Enable this on the HubSpot integration page in Lunacal: “Push meeting status to HubSpot meeting outcome field.”
## **Routing with HubSpot**
With HubSpot forms or ownership lookup (Teams and Enterprise), route leads to the right teammate by expertise, availability, or account ownership. See: Routing from HubSpot forms and Routing with HubSpot lookup.
## **Disconnect the integration**
* **Step 1 — Disconnect in Lunacal**
1. Go to Integrations > CRM > [Active Integrations](https://app.lunacal.ai/apps?tab=install\&category=crm).
2. Select Disconnect
After this, new Lunacal meetings stop syncing to HubSpot.
* **Step 2 — Uninstall in HubSpot**
1. In HubSpot, Hover the Marketplace (main nav) Icon.
2. Under Manage, select Connected apps
3. On Lunacal, choose Actions → Uninstall
4. Type uninstall and confirm.
Note: Uninstalling doesn’t remove existing Lunacal data from HubSpot.
* **Step 3 — Optional: remove Lunacal properties in HubSpot**
1. In HubSpot, go to Settings (main nav)
2. Open Properties (left sidebar)
3. Select Groups.
4. Hover “Details from Lunacal meetings,” choose View details
5. Select all properties → Archive
6. Return to the group and delete it.
Note: Deleting properties removes stored values but not the contacts.
# Import Calendly Settings in lunacal.ai
Source: https://help.lunacal.ai/import-calendly
Use “Import Calendly Settings in lunacal.ai” to bring your Calendly event types and bookings into lunacal. Follow these steps to avoid conflicts and keep data clean.
Use this feature to bring your **Calendly event types and existing bookings** into lunacal so you don’t have to recreate everything manually. This helps you transition scheduling without losing existing events or attendee data.
## Step 1
Verify there are no upcoming bookings visible in the “**booking section**”. Then start the importing process.\
**Example**: You paused new bookings for the week; check the “**booking section**” to ensure nothing is scheduled before you import.
> **Imported data includes:**
>
> * Event types you created in Calendly
> * Scheduled bookings associated with those event types\
> Calendly questions, custom fields, or advanced settings may not be fully imported and may require manual adjustment afterward.
## Step 2
Ensure you are signed into Calendly with your correct account credentials to proceed.\
**Example**: If you manage multiple Calendly accounts (agency and personal), confirm you’re logged into the right one to avoid importing the wrong data.
> **Permissions:**\
> You must be logged into the correct Calendly account that owns the event types you want to import. If you manage multiple Calendly accounts (e.g., personal and work), make sure you’re signed into the right one before importing.
## Step 3
Navigate to the “**settings**” section. In the “**import calendly settings**” feature, click “**Import**” to initiate the process.\
**Example**: Testing first? Create a temporary team in Lunacal and run “**Import**” there so you can review event types safely before using them live.
> **Conflict handling:**\
> If Lunacal already has events with the same names or settings, imported events may create duplicates. After the import, review your Lunacal events and adjust titles or settings to avoid confusion.
## Step 4
Once the import is complete, you’ll see your Calendly event types and bookings appear in lunacal.\
Example: After import, open a migrated event type and check its duration, buffers, and location details match your original setup. If needed, adjust and save
## After Import — Validate Your Setup
After the import finishes:
* Open the migrated event types in Lunacal and **verify durations, buffers, locations, and availability** match your Calendly settings.
* Confirm imported bookings appear correctly under **Bookings**.
* If needed, update individual event settings and buffers to align with your scheduling rules.
> ## Limitations
>
> * Custom booking questions or form logic from Calendly may not transfer perfectly and may need manual setup in lunacal.
>
> * Workflows or automations configured in Calendly do not automatically migrate; recreate them using lunacal workflows if needed.
>
> ## Re-Import or Undo
>
> If the import didn’t go as expected:
>
> * Duplicate event types can be deleted in Lunacal manually.
>
> * Remove imported bookings from the **Bookings** section if needed.
>
> * You can re-run the import after cleaning up or in a test team before a live run.
>
> Always test imports in a separate team first if you’re unsure.
# Integrations & Managing Apps
Source: https://help.lunacal.ai/integration
Use the “Integrations” page to connect tools you already use—conferencing, calendars, CRM, messaging, automation, and payments. This walkthrough shows how to browse categories and remove installed apps when needed.
Integrations extend lunacal by syncing calendars, adding conferencing links, automating workflows, and collecting payments. Connected apps directly affect availability, booking confirmations, and post-meeting actions.
## Step 1
Navigate to the [Integrations](https://app.lunacal.ai/apps) tab.
> **Note:** Integrations are applied to the selected team. Make sure you’re selecting to the correct team before connecting or disconnecting apps.
## Step 2
Explore categories: “Conferencing”, “Calendar”, “Automation”, “CRM”, “Messaging”, and “Payment”. Click “Conferencing” to view options.\
Example: You host client demos on Zoom—open “Conferencing” to connect Zoom so links are auto-added to meetings.
> During connection, make sure to grant all requested permissions so this prevents broken setups.
## Step 3
In “Conferencing”, you’ll find FaceTime, Google Meet, MS Teams, and Zoom Video.
## Step 4
In “Calendar”, available calendars include Apple Calendar, Google Calendar, and Outlook Calendar.\
Example: If your main schedule lives in Google Calendar, connect it so Lunacal avoids double-booking.
> Your connected calendar is used to check availability and prevent double-bookings. Without a calendar integration, lunacal cannot block busy times reliably.
## Step 5
For Automation, Zapier is available.
## Step 6
In “CRM”, you can integrate HubSpot CRM and Pipedrive CRM.\
Example: After each meeting, push attendees into your CRM pipeline automatically to save manual data entry.
## Step 7
In “Messaging”, WhatsApp is available.\
Example: Send a quick WhatsApp confirmation for high-no-show meetings to reduce last-minute drop-offs.
## Step 8
In the Payment category, you'll see PayPal.
## Step 9
> Disconnecting an app stops future syncing but does not remove past bookings or events.
To remove any application, go to “Installed Apps”, click the 3 dotes, then click “Disconnect” to uninstall.\
Example: During testing, disconnect a sandbox Zoom app from “Installed Apps” so only your live Zoom stays connected.
**Common mistakes to avoid**
* Connecting the wrong account (personal instead of work) under “Calendar” or “Conferencing”, which breaks availability or links.
* Skipping required permissions during connect, leading to missing conference links or failed calendar sync.
* Expecting double-booking protection without connecting your primary “Calendar”.
* Removing an app only from the provider’s site and not clicking “Disconnect” in “Installed Apps”.
**Good defaults to start with**
* Connect your main “Calendar” first; then add one preferred “Conferencing” app.
* If you use a CRM, connect “HubSpot CRM” or “Pipedrive CRM” early so new meetings flow into your pipeline.
* Add “Zapier” later for automations once basic scheduling works.
* Keep only one active app per category to reduce conflicts.
# Language Settings
Source: https://help.lunacal.ai/language-settings
Learn how to choose the language your guests see on booking pages and the language you use inside the Lunacal dashboard.
## Overview
Lunacal lets you control language at two different levels:
1. **Visitor Language** – the language your guests see on your booking pages and emails.
2. **App Interface Language** – the language used inside your Lunacal dashboard (admin view).
This ensures a smooth experience for both you and your attendees, especially if you work with an international audience.
You can find these settings at:
[Settings -> General](https://app.lunacal.ai/new-settings?tabName=general)
## Visitor Language (visible to your guests)
The **Visitor Language** controls the language shown to your attendees across all customer-facing surfaces.
### Where it applies
The selected visitor language is used in:
* Booking pages
* Booking confirmation pages
* Confirmation and notification emails sent to guests
* Calendar invites sent to attendees
### Available languages
You can choose from the following languages:
* العربية (Arabic)
* Deutsch (German)
* English
* Español (Spanish)
* Français (French)
* ภาวม
* Italiano (Italian)
* Nederlands (Dutch)
* Polski (Polish)
* Português (Portuguese)
* Русский (Russian)
* Svenska (Swedish)
* Tiếng Việt (Vietnamese)
### How to change visitor language
1. Go to [**Settings → General**](https://app.lunacal.ai/new-settings?tabName=general)
2. Find **Visitor Language (visible to your guests)**
3. Select your preferred language from the dropdown
4. Click **Update** to save changes
Once saved, all future bookings will reflect the selected language for your guests.

## App Interface Language (visible only to you)
The **App Interface Language** controls the language used inside your Lunacal dashboard.
### Where it applies
This setting affects:
* Dashboard labels
* Settings pages
* Admin controls
> This language is **only visible to you** and does not affect what your guests see.
### Current availability
* **English** (currently the only available option)
More languages for the app interface will be added in the future.
### How to change app interface language
1. Go to **Settings → General**
2. Scroll to **App Interface Language (visible only to you)**
3. Select a language (English)
4. Click **Update**
## Important notes
* Visitor Language and App Interface Language are independent of each other.
* Changing Visitor Language does not change your dashboard language.
* Changes apply to new bookings immediately after saving.
If you notice any translation issues, feel free to contact the Lunacal team for support.
# Manage Bookings
Source: https://help.lunacal.ai/manage-bookings
Use the “Bookings” page to view and manage all meetings in one place. You can see “Upcoming”, “Unconfirmed”, “Past”, and “Canceled” lists and make quick changes like reschedule, cancel, or update “Location”.
The "**Bookings**" page is your central place to see and manage all meetings scheduled through lunacal.\
Use it to track upcoming meetings, complete pending bookings(Unconfirmed), review past meetings, or handle cancellations — all from one dashboard.
> **Note:** Only team owners, admins, or event owners can edit or update bookings, permissions matter (especially in teams).
## Step 1
Click “**Bookings**” in the left menu. The page shows client names and event details grouped under “**Upcoming**”, “**Unconfirmed**”, “**Past**”, and “**Canceled**”.
* **Upcoming:** Confirmed meetings scheduled in the future.
* **Unconfirmed:** Meetings that need action (e.g., payment pending or manual approval required).
* **Past:** Meetings that have already occurred.
* **Canceled:** Meetings that were canceled by you or the attendee.
## Step 2
Use the “**Edit**” drop-down on any meeting to **cancel**, **reschedule**, **request a reschedule**, or change the “**Location**”. **Example**: A client asks to meet 30 minutes later—choose “**Reschedule**”, pick a new time, and send the update.
> After you reschedule, cancel, or update the location, Lunacal automatically sends updated invites and confirmation emails to the attendees.
## Step 3
To change where the meeting happens, select a new “**Location**” (e.g., Zoom, Google Meet, Phone, Office) and save. **Example**: You switch from in-person to Zoom because you’re traveling—set “Location” to Zoom so the link is included.
## Step 4
Click a specific booking to see full details: **event name, date and time, attendees**, and “**Location**”. **Example**: Before the call, open the booking to copy the meet link and confirm the attendee’s email.
> Inside the booking detail view, you can:
* See attendee contact info
* Copy conferencing links
## Step 5
“**Unconfirmed**” shows bookings that haven’t been finalized yet—this includes cases where payment is pending. Example: Someone started booking a paid session but didn’t complete the payment—follow up or resend the link.
> “Unconfirmed” may also include bookings awaiting manual approval (if enabled) or missing required attendee actions like payment. Always review this section regularly.
## Step 6
“**Past**” lists meetings that already happened so you can review what’s done or add notes to your CRM.
## Step 7
“**Canceled**” lists meetings that were called off; use it to confirm no-show trends or to restore context if a client rebooks later.
> **Note:** The booking list updates automatically, but you can refresh the page if changes don’t appear immediately.
**Common mistakes to avoid**
* Editing a calendar entry directly instead of using “**Edit**” on the “**Bookings**” page, which can cause mismatched invites.
* Forgetting to update “**Location**” after switching from in-person to online, leading to missing links.
* Ignoring “**Unconfirmed**”, so pending payments or partial bookings go unnoticed.
* Rescheduling without sending the update, leaving attendees on the old time.
**Good defaults to start with**
* Review “**Unconfirmed**” once daily to clear pending items.
* Prefer “**Request a reschedule**” over canceling when timing slips by less than a day.
* Standardize “**Location**” (**e.g**., Zoom for all first calls) to reduce errors.
* Check “**Canceled**” weekly to spot patterns and improve show rates.
# Manual Booking Approval
Source: https://help.lunacal.ai/manual-approval-booking
Learn how to enable manual booking approval for your events.
When you enable **Manual Booking**, all booking requests for this Event Type will require your approval before they are confirmed.
This gives you full control over who gets approved, ideal for high-value sessions, limited seats, or situations where you want to screen attendees before confirming.
when **Manual Booking** is turned on:
* Client sends a booking request
* The booking stays in Pending state
* You (the host) must **manually Approve** or **Reject** it from email and [bookings section](https://app.lunacal.ai/bookings/upcoming)
* Only after approval the client receives the confirmation email & calendar invite
* This prevents unwanted or spam bookings from being auto-confirmed.
Step 1\
Go to "[Event Types](https://app.lunacal.ai/event-types)" in your dashboard.
Step 2\
Select the event for which you want to enable manual booking approval and click on the **Settings** icon on that event card.
***
Step 3\
Choose **Edit** from the dropdown.
***
Step 4\
In the "**Event Types**" section, scroll down to find "**Advanced.**"
***
Step 5\
In "**Advanced**" scroll down and toggle on "**Approve bookings manually.**"
***
Step 6\
Click "**Save**" to apply the changes.
📥 What Happens After Enabling Manual Approval?
* Every new booking enters Pending Approval status
* You’ll see the request under your Bookings page
* You’ll receive an email notification
* The client sees a message like "Booking request sent"
* No calendar invite is sent yet
* No reminders are sent until you approve
# Meeting Location
Source: https://help.lunacal.ai/meeting-location
Learn how to set up different meeting location types for your events in Lunacal — including Zoom, addresses, and phone numbers.
Step 1
Go to [**Event Types**](https://app.lunacal.ai/event-types) in your dashboard.
Step 2
Select the event for which you want to set up a meeting location OR click on the Settings icon ⚙️ on that event card.
Step 3
Choose **Edit** from the dropdown.
Step 4
In the **Event Setup** section, scroll down to find "Meeting Location."
**Different types of meeting locations available in Lunacal are:**
* **Google Meet** - Automatically integrates Google Meet for virtual meetings.
* **Zoom Video** – Automatically integrates Zoom for virtual meetings.
* **MS Teams** – Automatically integrates Microsoft Teams for virtual meetings.
* **FaceTime** – Automatically integrates FaceTime for virtual meetings.
* **Guest Address** – Collect the guest's location for in-person services.
* **Organizer Address** – Show your address so attendees know where to meet you.
* **Guest Phone Number** – Collect the guest's phone number during booking.
* **Organizer Phone Number** – Share your number with attendees after booking.
* **Link Meeting** - Allows you to add a custom online meeting link for any meeting platform or URL.
1. For **Link Meeting**, you can add a **Custom Label** so instead of showing the raw URL, it shows a clean name like ***Join Meeting***.
2. When "**Display on booking page**" is on, **Custom Label** will not work.
For both **Organizer's Address** and **Custom Link Meeting**, you will see an option:
☑ Display on booking page
When this option is enabled, the meeting location (your address / your custom meeting link) will be **shown directly on the booking page before the attendee confirms the meeting**.
| Section | Details |
| :-------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **What this means for attendees** | • They can see the location **before booking**.• Lets them decide if the meeting format (in-person, link, office, etc.) works for them.• Provides full transparency about where the meeting will happen. |
| **When you should enable it** | • When you want guests to know the address **before confirming** (e.g., office visits).• When using a **Custom Link** (Google Meet, Teams, personal link) and want attendees to verify the platform in advance. |
| **When you should NOT enable it** | • When the address/link should only be shared **after booking** for privacy or security.• When only confirmed attendees should see the location (via email/calendar invite). |
Step 5
From the dropdown, choose the preferred location type:
Step 6
Eg. **Zoom Video** - Refer to the [Zoom help guide](https://help.lunacal.ai/event-types/Zoom-Video) for instructions on integrating Zoom with Lunacal.
Step 7
"**Microsoft Teams**" – Use this option to add your MS Teams meeting link so attendees can join the session online.
Step 8
"**FaceTime**" – Add your FaceTime link for video calls with Apple users.
Step 9
"**Guest Address**" - The guest enters their address while booking your page.This is useful for in-person services or sessions held at the guest's location.
Booker View:
Step 10
"**Organizer Address**" - You can set your own address, which will be shown on the booking page so attendees know exactly where to meet you. ⚠️ Warning: Organizer Address Will be visible on the booking page. Enable only if you're okay sharing your location publicly.
Step 11
"**Guest Phone Number**" - The system collects the guest's phone number at the time of booking, which you can use to connect directly.
Step 12
"**Organizer Phone Number**" - Your phone number will be shared with attendees after booking the slot, so they can reach you if needed.
Add Another Location
You can add **multiple meeting location** types to the same event — for example Google Meet, Microsoft Teams, Zoom, or any other location option.
When you add 2 or more locations, the attendee will see all available options on the booking page, each with a checkbox or selection option. They can then choose the meeting location they prefer before confirming the booking.
***
# Out-Of-Office Setup
Source: https://help.lunacal.ai/out-of-office
Set up time away so bookings pause or forward to a teammate. This covers “Out-Of-Office Setup” and how to use “Settings” → “Out of Office”.
Use **Out of Office** to prevent new bookings during your absence or to automatically forward those bookings to a teammate for coverage. This ensures clients can’t accidentally book time when you’re unavailable, and that urgent requests still get handled.
## Step 1
Open “[**Settings**](https://app.lunacal.ai/new-settings?tabName=general)”, scroll to “**Out of Office**”, and click “**Add**”.
## Step 2
Select your away dates (start and end).\
**Example**: You’re off from 1 July to 10 July—set those dates so no one books you during that period.
## Step 3
If you’re in a team, choose a member to receive your bookings while you’re away.\
**Example**: Forward sales calls to your teammate who covers your region to keep deals moving.
> **Note:** Only the team owner or admins can set or edit out-of-office settings for other team members. If you don’t have the right permissions, you may need to ask a team admin to configure this for you.
***
## Step 4
Click “**Create**” to confirm.\
**Example**: Traveling without reliable internet? Create the **out-of-office** now so reminders and invites route correctly.
## Step 5
Your out of office is **active**.\
**Example**: Midweek return? Set the end date to Wednesday so Thursday and Friday reopen automatically.
When **Out of Office** is active:
* Your booking page will block new bookings for the selected dates.
* If you selected a team member for coverage, booking requests will be routed to them instead.
* Calendar integrations and reminders remain active — only scheduling availability is paused.
## Edit or Remove Out of Office
If your plans change:
1. Open **Settings → Out of Office**.
2. Click on the active out of office period.
3. Update the start/end dates or remove it entirely. This immediately re-opens your availability if the dates are changed or removed.
### Troubleshooting
* **Still seeing availability on your booking page?** Make sure the start/end dates are correct and that the Out of Office was saved.
* **Coverage not forwarding bookings?** Confirm the teammate you selected is active and has availability.
* **Bookings still go through for certain slots?** Check if minimum notice settings or booking limits override the out-of-office block.
### **Common mistakes to avoid**
* Leaving the end date blank or incorrect, which keeps your calendar blocked longer than intended.
* Forgetting to pick a teammate when coverage is needed, causing missed calls or delays.
* Setting dates in the wrong order (end before start), which prevents activation.
### **Good defaults to start with**
* Start date = first full day you’re unavailable; End date = last day you’re away.
* If you handle time-sensitive leads, select a teammate for coverage by default.
* Create the out-of-office a day before travel to catch last-minute bookings.
# PayPal Setup Integration
Source: https://help.lunacal.ai/paypal-integration
Use this guide to connect PayPal so you can accept payments for specific events or teams. It covers the “Integrations” → “Payment” flow, required credentials, and pricing.
Use PayPal integration if you want to collect payments before a booking is confirmed. You can enable payments for specific events or across an entire team.
> **Before you start:** Make sure you have a PayPal Business account. You’ll need access to the Client ID and Secret Key from your PayPal dashboard.
>
> Use a separate Client ID and Secret Key for each lunacal account or teams.
## Step 1
Go to [Integrations](https://app.lunacal.ai/apps) → “[Payment](https://app.lunacal.ai/apps?category=payment)”, then click “connect” to start PayPal setup.
## Step 2
Choose where to install PayPal: a specific event or your teams.\
Example: You run free intro calls but paid workshops. Install PayPal only on the “Workshop” event so intro calls stay free.
## Step 3
> **Security note:** Never share your Secret Key publicly or store it in unsecured documents.
Enter your “**Client ID**” and “**Secret Key**”, then click “**Save**”.\
Example: If your developer manages credentials, ask them for the “**Client ID**” and “**Secret Key**” from PayPal. Keep the “**Secret Key**” private **Note**: To Get Your PayPal Client ID and Secret Key refer to these [Docs](https://developer.paypal.com/api/rest/) OR [Tutorial](https://youtu.be/povhVRdCExc)
## Step 4
After install, open the event app where you want payments and click the event.
## Step 5
In “**Payments**”, enable the “**Paypal**” button.

## Step 6
Set a price (e.g., \$5) and select the currency.\
Example: If your audience is global, set USD. If most clients are in the EU, pick EUR to reduce conversion fees.

## Step 7
Click "**Save**" to confirm your settings.
## Step 8
Your setup is complete. You’ll see a price tag on that event type.\
Example: A client books the “Workshop” and sees the price on the scheduling page—no surprises, fewer drop-offs
> During booking, attendees must complete payment via PayPal before the meeting is confirmed. If payment fails or is cancelled, the booking is not created.
**Common mistakes to avoid**
* Using same Client ID and Secret Key for each lunacal account or teams.
* Entering the wrong “Client ID”“Secret Key” (typos break checkout).
* Forgetting to enable the “paypal” toggle under “integrations” for the event.
* Setting price but not saving; the event remains free.
* Installing PayPal at team level when you meant to apply it only to one event.
* If payments don’t appear during booking, confirm PayPal is enabled for the correct event and the price is saved.
**Good defaults to start with**
* Install PayPal on one paid event first (keep trial/intro events free).
* Use a single common currency for your main audience.
* Start with a round price (for example, \$25) to simplify checkout and reporting.
* Test one real booking end-to-end before promoting the link.
# Pipedrive Integration With lunacal
Source: https://help.lunacal.ai/pipedrive-integration
Connect Lunacal with Pipedrive and verify contacts and activities.
## How to Connect
1. Go to **Integrations > CRM > Pipedrive**
2. Click **Connect**
3. Click on **Personal** **Account** (e,g. Payal Singh )
4. Enter **Client id** & **Secret key**
5. before clicking **SAVE** Copy Callback URL shown in attached image.
**Paste Callback URL Here ( while you creating app inside pipedrive):**
**Make sure these scopes are enabled in Pipedrive:**
* Access to information
* Contacts → Full access
* Activities → Full access
* Click **SAVE**
* Setup **Completed.**
***
# How to Enable Pipedrive Inside Your Events
* Go to **Event Types**
* Click on your event
* go to **integrations**
* Enable **Pipedrive**
## Make a Booking with Custom Question
1. Open **Booking questions** inside your event.
2. Click **Add / Edit booking question**.
3. Select **Pipedrive Custom Field**.
4. Enter **API Key** & **Setup your booking question**
4. **Save** the question.
5. Open your booking link.
6. Fill in the form and submit.
***
## New Contact Created
If the email does not exist in Pipedrive:
* A new **Person** record is automatically created.
* Name, email, phone, and mapped custom fields are populated.
## Existing Contact Updated
If the email already exists:
* The existing **Person** record is updated.
***
## Pipedrive Activity Section
1. Go to **Activities** in Pipedrive.
2. A new meeting activity is created automatically.
# Prefilling Lunacal Booking Form
Source: https://help.lunacal.ai/pre-filling-booking-form
If you collect attendee details (like name, email, phone, etc.) on your own website form and then redirect users to a lunacal.ai booking embed, you can pre-populate the lunacal booking form with those values so attendees don't have to re-enter them. This makes scheduling smoother and increases conversions.
## How It Works
Lunacal supports prefilling booking fields by passing values either:
1. via **URL query parameters**
2. via **embed configuration** (if you embed lunacal directly on your site)
### A sample booking form with various fields prefilled

## Step 1 — Find the Internal Label of a Field
Every booking question has an **internal label** (also called an identifier). This is the key you'll use in query parameters or embed config.
**For custom questions you've added:** Go to **Event Settings → Booking Questions**, open any question, and copy its **Internal Label**.
**For built-in system fields**, the internal labels are fixed:
| Field | Internal Label |
| :----------------------- | :--------------- |
| Name (full name) | `name` |
| First Name | `firstName` |
| Last Name | `lastName` |
| Email | `email` |
| Phone (booking question) | `attendee-phone` |
| Location (Guest Phone) | `location` |
| Additional Guests | `guests` |
| Meeting Notes | `notes` |
| Meeting Title | `title` |
## 2. Prefill via URL Parameters
Append fields as query parameters to your booking URL:
`https://lunacal.ai/your-username/your-event?key=value&key2=value2`
### A. Name
**Full name (single field):** `?name=Jane%20Smith`
**First name + Last name (if your event uses split name fields):** `?firstName=Jane&lastName=Smith`
> If both `firstName` and `lastName` are present, they are combined into a single full name automatically.
***
### B. Email
`?email=jane@example.com`
***
### C. Phone Number
There are **two separate cases** for phone, depending on how your event is set up:
**Case 1 — Phone as a booking question**
If you added a **Phone Number** question under Booking Questions, use `attendee-phone`:
`?attendee-phone=%2B919999999999`
The `+` in a country code must be URL-encoded as `%2B`.
**Case 2 — Phone as the meeting location (Guest Phone Number)**
If your event uses **Guest Phone Number** as the location type, pass a `location` JSON object:
`?location={"value":"phone","optionValue":"%2B919999999999"}`
> In this case, `%2B` replaces `+` in the phone number inside the JSON value.
***
### D. Short Text Question
Use the question's internal label directly:
`?your-internal-label=Your%20answer%20here`
Example — if the internal label is `company-name`: `?company-name=Acme%20Corp`
***
### E. Long Text / Paragraph Question
Same as short text — use the internal label:
`?your-internal-label=This%20is%20a%20longer%20answer%20spanning%20multiple%20sentences.`
***
### F. Dropdown (Single Select) Question
Pass the **exact option value** (case-sensitive) that matches one of the dropdown choices:
`?your-internal-label=Option%20One`
Example — if the internal label is `meeting-type` and the option is `"Product Demo"`: `?meeting-type=Product%20Demo`
***
### G. Multiple Choice — Single Answer (Radio)
Same format as dropdown. Pass the exact label of the option you want pre-selected:
`?your-internal-label=Option%20Label`
***
### H. Checkbox / Multi-Select Question
Pass multiple values for the same key to pre-check multiple options:
`?your-internal-label=Option%20One&your-internal-label=Option%20Two`
Example — if the internal label is `topics`: `?topics=Design&topics=Engineering&topics=Marketing`
***
### I. Consent Checkbox (Boolean)
Pass `true` or `false`:
`?your-internal-label=true`
***
### J. Additional Guests (Multi-Email)
Pass multiple emails using `guests` (or the legacy alias `guest`):
`?guests=alice@example.com&guests=bob@example.com`
***
### K. Notes / Meeting Title
`?notes=Please%20bring%20the%20Q2%20report`
`?title=Strategy%20sync%20-%20Q3`
***
### URL Encoding Rules
| Character | Encoded As |
| :------------- | :--------- |
| Space | `%20` |
| `+` (in phone) | `%2B` |
| `@` | `%40` |
| `"` | `%22` |
***
## 3. Prefill in an Embedded Lunacal Calendar
When embedding Lunacal with the JavaScript snippet, you can pass prefill values directly in the `config` object — no query params needed.
Use the question's **internal label** as the key, and the prefill value as the value.
### Inline Embed Example
```javascript theme={null}
Lunacal.ai["your-event-slug"]("inline", {
elementOrSelector: "#your-event-slug",
config: {
layout: "",
// System fields
name: "Jane Smith",
email: "jane@example.com",
// Custom booking questions — use the internal label as key
"company-name": "Acme Corp",
"meeting-type": "Product Demo",
"topics": ["Design", "Engineering"], // multi-select: pass an array
"consent": true, // boolean: pass true/false
// Phone as a booking question
"attendee-phone": "+919999999999",
// Additional guests
guests: ["alice@example.com", "bob@example.com"],
},
calLink: "your-username/your-event-slug",
});
```
### Popup / Float Embed Example
```javascript theme={null}
Lunacal.ai["your-event-slug"]("floatingButton", {
calLink: "your-username/your-event-slug",
config: {
name: "Jane Smith",
email: "jane@example.com",
"company-name": "Acme Corp",
},
});
```
***
## Quick Reference — All Field Types
| Question Type | URL Parameter Format | Embed Config Format |
| :---------------------- | :--------------------------------------------------- | :------------------------------------- |
| Full Name | `?name=Jane%20Smith` | `name: "Jane Smith"` |
| First + Last Name | `?firstName=Jane&lastName=Smith` | `firstName: "Jane", lastName: "Smith"` |
| Email | `?email=jane@example.com` | `email: "jane@example.com"` |
| Phone (question) | `?attendee-phone=%2B919999999999` | `"attendee-phone": "+919999999999"` |
| Phone (location) | `?location={"value":"phone","optionValue":"%2B91…"}` | Not supported via config |
| Short Text | `?internal-label=value` | `"internal-label": "value"` |
| Long Text | `?internal-label=value` | `"internal-label": "value"` |
| Dropdown | `?internal-label=Option%20Name` | `"internal-label": "Option Name"` |
| Radio (single choice) | `?internal-label=Option%20Name` | `"internal-label": "Option Name"` |
| Checkbox / Multi-select | `?label=Opt1&label=Opt2` | `"internal-label": ["Opt1", "Opt2"]` |
| Consent Checkbox | `?internal-label=true` | `"internal-label": true` |
| Additional Guests | `?guests=a@x.com&guests=b@x.com` | `guests: ["a@x.com", "b@x.com"]` |
| Notes | `?notes=value` | `notes: "value"` |
| Meeting Title | `?title=value` | `title: "value"` |
## Common Issues
**Q: My dropdown prefill isn't working.** Make sure the value you're passing exactly matches the option label, including capitalization and spacing.
**Q: My phone number prefill shows up without the + sign.** The `+` must be URL-encoded as `%2B` in query parameters. For embed config, pass the `+` directly as a string (e.g., `"+919999999999"`).
**Q: The name field isn't being filled.** Check whether your event uses a single Full Name field or split First Name / Last Name fields. Use `?name=` for the combined field, or `?firstName=&lastName=` for the split version.
**Q: Checkbox options aren't being selected.** For multi-select and checkbox fields, each option must be passed as a separate parameter with the same key: `?topics=Design&topics=Engineering`. In embed config, pass an array.
***
## 4. Prefill via URL Parameters (Scheduling Page & Embedded Page)
You can pre-fill all the booking questions on the booking form by using their corresponding internal label that you can see in the booking question tab.
For example, for the question shown in the screenshot below, the question would show up as "What's the main goal of this meeting?" and its internal label is `main-goal`. So we would use `main-goal` as the query param name to prefill the field.

🔗 Example URL
> `https://lunacal.ai/your-username/your-event?main-goal=Consultation`
`{yourFieldIdentifier}`
> Spaces must be URL-encoded (`%20`), and `+` in phone numbers must be URL-encoded as `%2B`.
## 5. Pre-filling Phone Number Fields
Phone numbers can be pre-filled in two different ways, depending on how the phone field is set up:
**1. Phone as a booking question**
If you've added a **Phone Number** booking question, use the `attendee-phone` parameter:
> `attendee-phone=9999999999`
**2. Phone as the meeting location (Guest Phone Number)**
If your event uses **Guest Phone Number** as the location, pass a `location` object instead. The country code's `+` must be URL-encoded as `%2B`:
> `location={"value":"phone","optionValue":"%2B919999999999"}`
## 6. Pre-fill in an Embedded Lunacal Calendar
You can use the same query parameter method in the embed as well.
Alternatively, if you prefer not to use query parameters, you can configure the values directly in the embed settings.
**You have to use the booking question identifier (internal label) as the key.**
### Inline Embed Example (JavaScript)
```html theme={null}
Lunacal.ai["your-event-slug"]("inline", {
elementOrSelector: "#your-event-slug",
config: {
layout: "",
// Add your booking questions here.
// Use the question's internal label as the key,
// and set the value to the prefill text you want to pass.
name: "pre-fill-name",
email: "pre-fill-email",
"custom-question": "pre-fill-custom-question",
check: "pre-fill-check",
},
calLink: "your-event-slug",
});
```
# Redirect Attendees to a URL After Booking
Source: https://help.lunacal.ai/redirect-url
Learn how to automatically redirect attendees to a specific URL once their booking is confirmed.
When a attendee completes a booking, lunacal allows you to automatically redirect them to any URL you choose — for example, a custom “Thank You” page, or a confirmation screen on your own website.
## Step 1
Go to [Event Type](https://app.lunacal.ai/event-types) in your dashboard.
***
## Step 2
Select the event for which you want to set up a redirect after booking and click on the Settings (⚙️) icon on that event card.
***
## Step 3
Choose "**Edit**" from the dropdown.
***
## Step 4
In the "**Event Types**" section, scroll down to find "**Advanced.**"
***
## Step 5
Toggle ON "**Send to a URL after booking.**"
***
## Step 6
**Enter** or **Paste** the link you want attendees to be redirected to after booking is confirmed.
## Examples
* [https://yourwebsite.com/thank-you](https://yourwebsite.com/thank-you)
* [https://yourwebsite.com/instructions?utm\_source=lunacal](https://yourwebsite.com/instructions?utm_source=lunacal)
* [https://payment-page.com/checkout](https://payment-page.com/checkout)
When entering the redirect URL, you will see an option\
☑️ Forward parameters such as ?email=...\&name=... and more
If you enable this checkbox, Lunacal will automatically append the attendee’s booking details to your redirect URL as query parameters.
This means the page you redirect to will receive booking information such as: `
email
name
timezone
eventName
startTime
endTime`
### When to Use This Option
**Enable this when:**
* You want to pre-fill a form on your website
* You want to track user details in analytics
* You want to pass booking information to your CRM
* You want personalized “Thank You” pages
**Keep it disabled if:**
* You don’t need attendee details
* Your redirect page does not accept parameters
* You want a clean URL
## Step 7
Click "**Save**" to apply the changes.
# Responsible Disclosure
Source: https://help.lunacal.ai/responsible-disclosure
At lunacal.ai, protecting our users' data and maintaining the security of our products and services is a top priority. We are committed to collaborating with the security research community to identify and address potential vulnerabilities responsibly and promptly.
## Our Commitment
We actively work to safeguard our systems against the latest security threats. Despite our best efforts, vulnerabilities may occasionally be discovered. When this happens, we encourage security researchers, customers, and partners to report these issues to us responsibly.
## How to Report a Vulnerability
If you believe you have found a security issue affecting lunacal.ai products, services, or infrastructure, please contact us immediately with the relevant details. This allows us to analyze and resolve the vulnerability before any public disclosure.
### Reporting Process
* Please send a detailed report to our dedicated security disclosure email: [support@lunacal.ai](mailto:support@lunacal.ai).
* Include a clear description of the vulnerability, the affected systems or products, and step-by-step instructions to reproduce the issue.
* We recommend avoiding attachments and including most of the information directly in your email.
* For proof-of-concept demonstrations, recorded videos can be shared as private links from trusted platforms like YouTube or Vimeo.
## In-scope
* `app.lunacal.ai/*`
* `lunacal.ai/*`
## Report Eligibility
* Be the first to report a vulnerability.
* Submit one vulnerability per report, unless you need to chain vulnerabilities to provide impact.
* If multiple vulnerabilities reported from the same root cause, they will be considered a single issue, and only the first valid report will qualify for the Hall of Fame, If the root cause is the same and endpoints are different within the same application, it will be treated as a duplicate.
* Provide high quality reports with clear and comprehensive reproducible steps. High quality submissions allow our team to better understand the issue and relay the bug to the internal teams to fix it quickly.
## How to write report
```text theme={null}
Hello lunacal.ai Security Team,
## 1. Vulnerability Summary
Brief description of the security issue.
## 2. Affected Asset(s)
- Domain / Application:
- Endpoint / Feature (if applicable):
## 3. Steps to Reproduce
1. Step one
2. Step two
3. Step three
## 4. Impact
Explain what an attacker could achieve by exploiting this vulnerability.
## 5. Proof of Concept
- Screenshots / logs (if applicable)
- Private video link (optional):
## 6. Suggested Fix (Optional)
Any mitigation or fix suggestions, if available.
## 7. Researcher Details (Optional)
- Name / Alias:
- LinkedIn / Website:
- Preferred credit name (if any):
I confirm that this research was conducted in good faith and in accordance with lunacal.ai’s Responsible Disclosure Policy.
Thank you for your time and consideration.
Best regards,
```
## Our Request to Researchers
* Please give us a reasonable time to investigate and address the reported vulnerability before publicly disclosing any details.
* Avoid testing beyond what is necessary to confirm the vulnerability to prevent disruption to our services.
* Do not share vulnerabilities or exploit details publicly until we have resolved the issue.
* Any testing, exploitation, or disclosure that is not conducted in good faith, exceeds what is necessary to demonstrate a vulnerability, results in service disruption, data access, or user harm, or violates applicable laws may lead to legal action by lunacal.ai.
## Out of scope vulnerabilities
* Username Enumeration via signup and account & recovery forms
* Vulnerabilities regarding SPF/DMARC/DKIM records without verifiable proof of spoofing to a major mail client
* Best practice concerns like cookie is not marked secure and http only, missing HSTS, SSL/TLS configuration, missing security headers.
* Vulnerabilities reported by automated tools and scanners without additional proof of concept
* Vulnerabilities that only affect outdated app versions.
* Denial of Service(DoS) and Distributed Denial of Service(DDoS) attacks
* Exploits that need MITM or physical access to the victim’s device
* Clickjacking on pages with no sensitive actions.
* Unauthenticated/logout/login CSRF
* Previously known vulnerable libraries without a working Proof of Concept
* Content spoofing and text injection issues without showing an attack vector/without being able to modify HTML/CSS
* Open redirect vulnerabilities are out-of-scope by default, If you chain it with a different vulnerability and make it impactful we would be interested.
* Stack traces, directory listings or path disclosures
* Self XSS
* Social engineering attacks, both against users, employees
## Hall of Fame
We recognize and appreciate researchers who responsibly disclose valid security issues, including acknowledgements on Lunacal.ai’s LinkedIn and features in website testimonials.
| Full Name | LinkedIn | Bugs Reported |
| ------------- | ---------------------------------------------------------------------------------------------------------- | ------------- |
| Husnain Iqbal | [https://linkedin.com/in/husnain-iqbal-431728223](https://linkedin.com/in/husnain-iqbal-431728223) | 3 |
| Kunal Mhaske | [https://www.linkedin.com/in/kunal-mhaske-59928a170/](https://www.linkedin.com/in/kunal-mhaske-59928a170/) | 4 |
| Mohammad Zain | [https://www.linkedin.com/in/mohammad-zain-585b9a175](http://www.linkedin.com/in/mohammad-zain-585b9a175) | 1 |
# Routing Forms
Source: https://help.lunacal.ai/routing-forms
Routing Forms help you collect information from invitees and automatically route them to the right event or person based on their responses.
## Who can use this?
**Available on**
* Teams
* Enterprise
**Available to**
* Owners
* Admins
## What are Routing Forms?
With **Routing Forms**, you can direct visitors to the right person, team, or destination based on their responses—such as industry, company size, or specific needs.
Once your routing form and logic are set up, **lunacal collects visitor details and automatically routes them** to the correct event type or destination based on the rules you define.
This article explains how to **create a routing form from scratch** in Lunacal.
## How to Create a Routing Form
### Step 1 : Open Routing Forms
1. Go to [Event Types](https://app.lunacal.ai/event-types):
2. From the **left sidebar**, click on [Routing Forms](https://app.lunacal.ai/apps/routing-forms/forms)
3. Click **New** and choose whether to create the routing form for your personal account or for your team.
4. Enter **Title** & **Description**
### Step 2 : Edit form settings and add questions
Inside your routing form, you can:
1. Click **Create Field** to add question.
1. Enter the question name.
2. Select the question type (e.g. short text, number, dropdown, Long Text, multiple choice, Phone, Email).
3. Configure the question settings ( Deleting Question, Make Question Mandatory )
1. Select **Save**.
When you’re done adding questions, click **Routing**.
### Step 3 – Set up routing logic
#### Create a route
1. Open the **Routing Logic** tab.
2. Select **Add Route**.
1. Choose **Use form answers** to route based on visitor responses.
2. Set your conditions by selecting:
* A **question**
* A **qualifier** (equals, contains, etc.)
* An **answer**
1. To refine your logic:
* Use **AND / OR** to add more conditions
* Click **Add another question** to include additional criteria
#### Choose a destination
For each route, select where qualified visitors should go:
* **Event Type** – Route visitors to a specific Lunacal event
* **Custom Message** – Show a message for unqualified visitors
* **External URL** – Redirect visitors to another webpage
* Click **Save** when finished.
### Fallback route
Every routing form includes a **fallback route**.
* This route applies when a visitor’s answers don’t match any defined rules.
* By default, it displays a **custom message**.
* You can edit the message or change the destination by clicking the fallback route settings.
### Step 4 – Preview and publish your form
Before publishing, we recommend testing your routing form.
1. Click **Preview Form**.
2. Fill out the form to test routing behavior.
* Responses submitted during preview are **not recorded**.
3. Once everything looks correct, select **Publish Form**.
### Step 5 – Share your routing form
After publishing, you’ll see sharing options including:
* **Share a link** – Copy and share the form URL
* **Add to website** – Embed the routing form directly
# Change Meta Title and Social Preview Image
Source: https://help.lunacal.ai/seo-web
Learn how to update the SEO meta title and social preview image for your event booking page.
**What this feature does (and why use it)**
Improve how your booking page appears on Google and social media by customizing your **Meta Title**, **Meta Description**, and **Social Preview Image**.\
These settings help you stand out in search results, increase click-through rates, and control how your link looks when shared anywhere online.
## Step 1
Go to [Event Types](https://app.lunacal.ai/event-types) in your dashboard.
## Step 2
Select the event for which you want to update the SEO details and click on the Settings (⚙️) icon on that event card.
## Step 3
Choose "**Edit**" from the dropdown.
## Step 4
In Your "**Event Type**", scroll down to find "**Advanced.**"
## Step 5
In "**Advanced**" scroll down and update the following fields in "**Webpage SEO & Branding**":
**"Meta Title"** → Keep it under 55–60 characters so it doesn’t get cut in Google. Put the event name first, then your name/brand or location for context.
* **Example** (agency): “Strategy Call — Brand Positioning Audit | BrightLabs”
**"Meta Description"** → Aim for 140–160 characters. State who it’s for, what happens on the call, and any key qualifier (duration, format, outcome). Example (coach): “Book a 45-minute career coaching session. Get role clarity, resume fixes, and an action plan.”
"**Social Preview Image**"→ Use 1200×630 px (or similar 1.91:1) with readable text. Include your logo, event name, and a short benefit. Keep margins wide so text isn’t cropped. Example (therapist): A calm background with “Intro Therapy Session — 30 min” + clinic logo.
## Step 6
Click "**Save**" to apply the changes.
## Step 7
Copy your event link and paste it on the channel you want to share (WhatsApp, LinkedIn, X, Facebook, email). The "Social Preview Image" and "Meta Title"/"Meta Description" will render automatically.
**Preview-**
| **Startup Demo** | **Common Mistakes to Avoid** |
| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Meta Title**: “Product Demo — AI Reporting \| Acme Analytics”
**Meta Description**: “Live 30-minute walkthrough. See automated dashboards, alerts, and team sharing.”
**Social Preview Image**: Product UI screenshot with “Live Demo” tag. | • Stuffing keywords in **Meta Title** — makes it hard to read and reduces clicks. Use a clear event name + brand/location.
• Writing vague **Meta Description** (e.g., “Best service ever”). Instead, describe the session, duration, and outcome.
• Using a low-contrast **Social Preview Image** with tiny text — becomes unreadable on mobile.
• Forgetting to **Save** and then testing the old cached preview. • Reusing the same **Meta Title** for multiple events — looks duplicate in search results. |
# SMS & Email Workflows
Source: https://help.lunacal.ai/sms-and-email-workflows
Use “Workflows” to automate notifications for your personal events & team events - set a trigger, pick recipients, and send a template. Keep steps the same; only fill in names, timing, and recipients.
lunacal supports both **email and SMS workflows** so you can automate reminders, confirmations, and follow-ups via text message in addition to email. SMS workflows are especially helpful for reducing no-shows by delivering reminders directly to attendees' phones.
## Step 1
Go to the [Workflows](https://app.lunacal.ai/new-settings?tabName=workflows) tab and click **Create New Workflow**
> Note: You can't create more than 10 Workflows
### Creating workflows for yourself or a team
When you click **Create New Workflow**, a dropdown appears if:
* You are part of one or more teams, or
* You are a team admin
From this dropdown, you can choose:
* **Your personal account** → creates a personal workflow
* **A team** → creates a team-level workflow for that team
> Once selected, the workflow setup process is exactly the same as described below.

## Step 2
Provide a unique name for your workflow in the designated field.
## Step 3
Determine the event type to which the workflow will apply. For instance i'm selecting "**Meeting**", You can also select **multiple events**.
## Step 4
Choose when the workflow should be triggered
## Step 5
Pick a trigger:
* **Before an event starts**
* **When event is canceled**
* **When new event is booked**
* **After event ends**
* **When event is rescheduled**
> **Example**: Send a reminder “Before an event starts” so attendees don’t miss the call.
Workflows can send either email or SMS messages. When you select an action like “Send message”, you’ll be able to choose whether the notification is sent via email, SMS, or both.
* Keep in mind that SMS messages are billed based on message length and destination country — longer messages or certain carriers may use more than one SMS segment. [SMS Pricing](https://help.lunacal.ai/sms-workflows-reminder)
> **Triggers** are events in lunacal that start an automated workflow (for example, when a new booking occurs, when an event is canceled, when an event is rescheduled, or a set time before an event starts).
> **Actions** are what your workflow does after it’s triggered — like sending an email or SMS reminder.
**Common workflow examples**
* Send an **SMS** + **email** reminder **24 hours before a meeting**
* Notify the host via **email** when a booking is canceled
* Send an **SMS** follow-up after a meeting ends
***
## Step 6
If using a “**Before an event starts**” trigger, you have to set the time (**e.g., 2 Hours**).
* **Example**: For first-time “**Meeting**” calls, set 24 Hours so people prep earlier.
## Step 7
Specify the recipients of the workflow trigger.
## Step 8
Select “**attendees**”, “**host**”, or add a **specific email**, and for **sms** currently there's only one option **Send SMS to attendee**.
* **Example**: Add your coordinator’s email so they get alerts for last-minute changes.

## Step 9
There are multiple **templates** options to set for attendee workflow emails.
> **Note**: You can't edit SMS template.
## Step 10
Insert variables as needed **Variable examples**
* `ATTENDEE_NAME` — the name of the attendee
* `EVENT_TIME` — the scheduled time of the event
* `LOCATION_LINK` — conferencing link or location
## Step 11
Click “**Save**” to activate the workflow.
**Testing your workflow** After saving, perform a real or test booking that matches the trigger conditions (for example, book a meeting or cancel one). Check that the email or SMS messages are sent as expected to all recipients. Adjust timing, variables, or recipients if needed.
**Tips for SMS workflows**
* Keep SMS messages concise to reduce cost (short messages are typically 1 segment, long messages may cost more).
* Include key details like date, time, and event name in your SMS.
* Test SMS workflows with a real booking to verify delivery before rolling them out broadly.
**Example SMS workflows**
* Send an SMS reminder 24 hours before the event start.
* Send a confirmation SMS immediately after booking is completed.
* Deliver a follow-up SMS after the meeting ends.
**Common mistakes to avoid**
* Picking a trigger but forgetting to set time for “Before an event starts”, which sends nothing.
* Selecting “host” only when you meant to notify “attendees” as well.
* Leaving variables blank (for example, missing LOCATION\_LINK) so emails are unclear.
* Creating overlapping reminders (for example, two reminders at 1 Hour) and spamming recipients.
**Good defaults to start with**
* Triggers: “When new event is booked” (instant confirmation) and “Before an event starts” at 24 Hours + 1 Hour.
* Recipients: “attendees” for reminders, “host” for reschedule/cancel alerts.
* Variables: always include ATTENDEE\_NAME, EVENT\_TIME, LOCATION\_LINK.
* Naming: include event and timing in the name (for example, “Meeting — Reminder 24h”).
# SMS Pricing and Message Length Guide
Source: https://help.lunacal.ai/sms-pricing
Understand how lunacal calculates SMS costs based on message length, country, and carrier, including segment rules and pricing details.
# SMS Pricing
Lunacal SMS costs are determined by the **length of the final message** and the **destination country/carrier**.
## How Message Length Affects Cost
The actual SMS length can vary depending on details like attendee names, organizer names, or event titles.
Example messages:
* Short message:
> "Hi Alex, your event Demo with Jordan has been scheduled for 25 Oct at 10:00 AM (IST)."\
> This message may fit within one segment.
* Long message:
> "Hi Alexandra Thompson, your event Quarterly Performance Review with Jonathan Williams has been scheduled for 25 Oct at 10:00 AM (IST)."\
> This message may exceed the segment limit and require multiple segments.
The longer the final message, the more segments it uses, and the higher the cost.
## SMS Length and Segment Cost
SMS messages are billed using a **segment-based system**. Each segment has a character limit:
| Type | Characters per Segment | Example |
| ------------------------- | ------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------- |
| Standard SMS | 70 characters = 1 segment | A 70-character message = 1 segment |
| Multi-part SMS | Based on number of segments. For example, a 134-character message = 134 ÷ 70 ≈ 1.9, rounded up to 2 segments | 134 characters → 2 segments |
| Unicode / Multi-part | English: 1 segment = 70 characters, 2 segments = 134 characters, etc. | Longer Unicode messages may require multiple segments |
| Unicode / Other languages | 1 segment = 70 characters, 2 segments = 134 characters, etc. | Same rules apply as English Unicode |
> Messages with emojis or non-English characters may reduce the number of characters per segment, resulting in more segments.
## Pricing
Each country and carrier has its own **price per segment**. Lunacal calculates the total number of segments required for each message and applies the corresponding rate.
You can view the current **price per segment** for each country/carrier in the table below:
**SMS Pricing**
| Destination Country | Code | Price per Segment (in USD) |
| ------------------------ | ---- | -------------------------- |
| Afghanistan | 93 | 0.51480 |
| Albania | 355 | 0.14040 |
| Algeria | 213 | 0.35100 |
| Andorra | 376 | 0.13338 |
| Angola | 244 | 0.14508 |
| Antigua and Barbuda | 1268 | 0.23400 |
| Argentina | 54 | 0.12636 |
| Armenia | 374 | 0.29016 |
| Aruba | 297 | 0.34866 |
| Australia | 61 | 0.04338 |
| Austria | 43 | 0.03510 |
| Azerbaijan | 994 | 0.53820 |
| Bahamas | 1242 | 0.06084 |
| Bahrain | 973 | 0.04680 |
| Bangladesh | 880 | 0.53118 |
| Barbados | 1246 | 0.33228 |
| Belarus | 375 | 0.27612 |
| Belgium | 32 | 0.14040 |
| Belize | 501 | 0.43056 |
| Benin | 229 | 0.34632 |
| Bermuda | 1441 | 0.32760 |
| Bhutan | 975 | 0.46800 |
| Bolivia | 591 | 0.26910 |
| Bosnia and Herzegovina | 387 | 0.07974 |
| Botswana | 267 | 0.12636 |
| Brazil | 55 | 0.04338 |
| Brunei | 673 | 0.08190 |
| Bulgaria | 359 | 0.18954 |
| Burkina Faso | 226 | 0.24804 |
| Burundi | 257 | 0.43290 |
| Cambodia | 855 | 0.56394 |
| Cameroon | 237 | 0.34398 |
| Canada | 1 | 0.03042 |
| Cape Verde | 238 | 0.28080 |
| Cayman Islands | 1345 | 0.34398 |
| Central African Republic | 236 | 0.21528 |
| Chad Republic | 235 | 0.37440 |
| Chile | 56 | 0.03510 |
| China | 86 | 0.02898 |
| Colombia | 57 | 0.04680 |
| Comoros | 269 | 0.45864 |
| Congo | 242 | 0.40482 |
| Congo Democratic | 243 | 0.38610 |
| Cook Islands | 682 | 0.16848 |
| Costa Rica | 506 | 0.21294 |
| Cote divoire | 225 | 0.30420 |
| Croatia | 385 | 0.14742 |
| Cuba | 53 | 0.10872 |
| Cyprus | 357 | 0.01638 |
| Czech Republic | 420 | 0.08190 |
| Denmark | 45 | 0.07722 |
| Djibouti Republic | 253 | 0.18252 |
| Dominican Republic | 18 | 0.15210 |
| Ecuador | 593 | 0.32598 |
| Egypt | 20 | 0.53820 |
| El Salvador | 503 | 0.10296 |
| Equatorial Guinea | 240 | 0.28080 |
| Estonia | 372 | 0.07020 |
| Ethiopia | 251 | 0.50310 |
| Falkland Islands | 500 | 0.12636 |
| Faroe Islands | 298 | 0.08424 |
| Fiji | 679 | 0.26910 |
| Finland | 358 | 0.11232 |
| France | 33 | 0.09360 |
| French Guiana | 594 | 0.18252 |
| French Polynesia | 689 | 0.14490 |
| Gabon | 241 | 0.41886 |
| Gambia | 220 | 0.12870 |
| Georgia | 995 | 0.19422 |
| Germany | 49 | 0.13104 |
| Ghana | 233 | 0.44928 |
| Gibraltar | 350 | 0.11466 |
| Greece | 30 | 0.07236 |
| Greenland | 299 | 0.03870 |
| Grenada | 1473 | 0.38610 |
| Guadeloupe | 590 | 0.20826 |
| Guam | 1671 | 0.04104 |
| Guatemala | 502 | 0.29718 |
| Guernsey | 44 | 0.09414 |
| Guinea | 224 | 0.29484 |
| Guinea-Bissau | 245 | 0.36270 |
| Guyana | 592 | 0.30186 |
| Haiti | 509 | 0.46332 |
| Honduras | 504 | 0.32526 |
| Hong Kong | 852 | 0.07488 |
| Hungary | 36 | 0.10134 |
| Iceland | 354 | 0.09666 |
| India | 91 | 0.10296 |
| Indonesia | 62 | 0.54990 |
| Iran | 98 | 0.39078 |
| Iraq | 964 | 0.56160 |
| Ireland | 353 | 0.07956 |
| Isle of Man | 44 | 0.09414 |
| Israel | 972 | 0.29718 |
| Italy | 39 | 0.06768 |
| Jamaica | 1876 | 0.39780 |
| Japan | 81 | 0.08424 |
| Jersey | 44 | 0.09126 |
| Jordan | 962 | 0.57096 |
| Kazakhstan | 7 | 0.53118 |
| Kenya | 254 | 0.37440 |
| Kosovo | 383 | 0.28548 |
| Kuwait | 965 | 0.38376 |
| Kyrgyzstan | 996 | 0.46098 |
| Latvia | 371 | 0.07956 |
| Lebanon | 961 | 0.42120 |
| Lesotho | 266 | 0.16182 |
| Liberia | 231 | 0.32526 |
| Libya | 218 | 0.59670 |
| Liechtenstein | 423 | 0.04680 |
| Lithuania | 370 | 0.06318 |
| Luxembourg | 352 | 0.12564 |
| Macau | 853 | 0.03870 |
| Madagascar | 261 | 0.53820 |
| Malawi | 265 | 0.37440 |
| Malaysia | 60 | 0.33228 |
| Maldives | 960 | 0.43290 |
| Mali | 223 | 0.35334 |
| Malta | 356 | 0.07488 |
| Martinique | 596 | 0.20124 |
| Mauritania | 222 | 0.29250 |
| Mauritius | 230 | 0.22230 |
| Mexico | 52 | 0.35100 |
| Moldova | 373 | 0.10530 |
| Monaco | 377 | 0.12798 |
| Mongolia | 976 | 0.45396 |
| Montenegro | 382 | 0.23400 |
| Morocco | 212 | 0.35334 |
| Mozambique | 258 | 0.14238 |
| Myanmar | 95 | 0.58500 |
| Namibia | 264 | 0.06786 |
| Nauru | 674 | 0.28314 |
| Nepal | 977 | 0.46800 |
| Netherlands | 31 | 0.14742 |
| New Caledonia | 687 | 0.11934 |
| New Zealand | 64 | 0.10296 |
| Nicaragua | 505 | 0.21060 |
| Niger | 227 | 0.41886 |
| Nigeria | 234 | 0.60840 |
| Norfolk Island | 672 | 0.07236 |
| North Macedonia | 389 | 0.06084 |
| Norway | 47 | 0.07488 |
| Oman | 968 | 0.22932 |
| Pakistan | 92 | 0.57798 |
| Palau | 680 | 0.11232 |
| Palestinian Territory | 970 | 0.49140 |
| Panama | 507 | 0.19890 |
| Papua New Guinea | 675 | 0.23400 |
| Paraguay | 595 | 0.11934 |
| Peru | 51 | 0.04104 |
| Philippines | 63 | 0.28548 |
| Poland | 48 | 0.03276 |
| Portugal | 351 | 0.03132 |
| Qatar | 974 | 0.33228 |
| Reunion | 262 | 0.08190 |
| Romania | 40 | 0.08208 |
| Russia | 7 | 0.53118 |
| Rwanda | 250 | 0.42822 |
| Saint Kitts and Nevis | 1869 | 0.24570 |
| Saint Lucia | 1758 | 0.32760 |
| Samoa | 685 | 0.39780 |
| Saudi Arabia | 966 | 0.25974 |
| Senegal | 221 | 0.40014 |
| Serbia | 381 | 0.45630 |
| Seychelles | 248 | 0.42120 |
| Sierra Leone | 232 | 0.34164 |
| Singapore | 65 | 0.08190 |
| Sint Maarten | 1721 | 0.07236 |
| Slovakia | 421 | 0.08694 |
| Slovenia | 386 | 0.17316 |
| Solomon Islands | 677 | 0.11232 |
| Somalia | 252 | 0.23400 |
| South Africa | 27 | 0.14976 |
| South Korea | 82 | 0.02574 |
| South Sudan | 211 | 0.43758 |
| Spain | 34 | 0.07236 |
| Sri Lanka | 94 | 0.53586 |
| Sudan | 249 | 0.44226 |
| Suriname | 597 | 0.26442 |
| Sweden | 46 | 0.08190 |
| Switzerland | 41 | 0.05850 |
| Syria | 963 | 0.59436 |
| Taiwan | 886 | 0.07956 |
| Tajikistan | 992 | 0.51480 |
| Tanzania | 255 | 0.48438 |
| Thailand | 66 | 0.02898 |
| Timor-Leste | 670 | 0.24336 |
| Togo | 228 | 0.44226 |
| Tonga | 676 | 0.15912 |
| Trinidad and Tobago | 1868 | 0.39780 |
| Tunisia | 216 | 0.53820 |
| Turkey | 90 | 0.01170 |
| Turkmenistan | 993 | 0.38844 |
| Uganda | 256 | 0.40014 |
| Ukraine | 380 | 0.24570 |
| United Arab Emirates | 971 | 0.15210 |
| United Kingdom | 44 | 0.06318 |
| United States | 1 | 0.01404 |
| Uruguay | 598 | 0.07956 |
| Uzbekistan | 998 | 0.63180 |
| Vanuatu | 678 | 0.21996 |
| Venezuela | 58 | 0.30186 |
| Vietnam | 84 | 0.27846 |
| Yemen | 967 | 0.33930 |
| Zambia | 260 | 0.42822 |
| Zimbabwe | 263 | 0.25740 |
# Set Up Stripe Payments
Source: https://help.lunacal.ai/stripe-integration
This guide explains how to connect Stripe with lunacal so you can accept payments for your events and bookings.
## Overview
lunacal allows you to accept payments using **Stripe** for paid events and bookings.\
The Stripe setup flow is almost identical to [**PayPal**](https://help.lunacal.ai/paypal-integration) — the only difference is selecting **Stripe** as the payment method and entering your Stripe credentials.
Once connected, attendees can pay securely using Stripe during booking.
## Step 1
* Go to [**Integrations**](https://app.lunacal.ai/apps) → “[**Payment**](https://app.lunacal.ai/apps?category=payment)”, then click “**connect**” to start Stripe setup.

## Step 2
* Choose where to install **Stripe** : a specific **event** or your **teams**.\
**Example**: You run free intro calls but paid workshops. Install Stripe only on the “**Workshop**” event so intro calls stay free.

## Step 3
* Enter your **Stripe credentials**

## 4. Enable Stripe for an Event
> Choose Where Stripe Applies You can choose Stripe to **specific events only** This is useful if you want some events to remain **free**.
1. Open the event you want to charge for
2. Go to the **Payments** section
3. Enable the **payment toggle**
4. select stripe as payment method.
5. Set:
* Event price
* Currency

6. **Save** the event
## 5. Confirm Your Setup
Once enabled:
* Your booking page will display the **price**
* Attendees will be asked to **pay via Stripe** before confirming the booking
Stripe payments are processed securely and funds are sent directly to your Stripe account.
## Common Issues & Tips
* Make sure you selected **Stripe** (not PayPal) in the payment dropdown
* Double-check your Stripe keys if payments fail
* Don’t forget to **enable Stripe inside the event**, even after connecting it
* Test the flow by making a **test booking** before sharing the link
## What’s Next?
After setting up Stripe, you can:
* Combine Stripe with **coupons**
* Use it with **package bookings**
* Enable payments for **team or individual events**
# Team Members Onboarding
Source: https://help.lunacal.ai/team-members-onboarding
This guide helps new team members get started on lunacal.ai after they are invited to an organization or workspace. By the end of this guide, you’ll be ready to create your booking page, connect your calendar, and start accepting meetings smoothly.
## We've Moved to Workspace
We’ve upgraded Teams to our new **Workspace** interface.
Go to your **Dashboard** → click **Learn More** on the banner → select **Switch to New UI**.
Your existing data remains unchanged.
***
## 1. Accept Your Invitation
Once an team owner/admin adds you to a lunacal workspace:
1. Check your email for an **invitation from lunacal.ai**
2. Click **Accept Invitation**
3. You’ll be asked to:
* Sign up for a new lunacal account, or
* Log in to an existing account
After Onboarding, you have to go to [teams section](https://app.lunacal.ai/teams)\
You'll see invitation from team.\
4\. Click "**Accept**"
## 2. Complete Your Profile
Your profile information helps attendees know who they’re booking with.
Go to [**Profile Settings**](https://app.lunacal.ai/new-settings?tabName=general) and update:
* Full name
* Profile photo
* Role or designation
* Time zone (auto-detected, but editable)
This information appears on your booking page and confirmation emails.
## 3. Connect Your Calendar
To avoid double bookings, Lunacal needs access to your calendar.
1. Navigate to \*\*Integrations → \*\*[**Calendar**](https://app.lunacal.ai/apps?category=calendar)
2. Connect your preferred calendar:
* Google Calendar
* Outlook / Microsoft Calendar
3. Choose:
* Which calendars Lunacal should **check for conflicts**
* Which calendar new bookings should be **added to**
Only your availability is shared — your private events remain hidden.
## 4. Set Your Availability
Availability controls when others can book meetings with you.
1. Go to [**Availability Settings**](https://app.lunacal.ai/new-settings?tabName=availability)
2. Define:
* Working days
* Working hours
* Breaks or buffer times
3. Save your availability
## 5. Create or Manage Event Types
Event types define what kind of meetings people can book.
Go to **Event Types** and:
* Create a new event, or
* Edit an existing one assigned by your owner/admin
You can configure:
* Event duration
* Meeting location (Zoom, Google Meet, phone, in-person, etc.)
* Slot limits
* Booking rules (advance notice, buffers)
## 6. Share Your Booking Link
Once your event type is ready, share your booking link.
You can use it in:
* Email signatures
* WhatsApp or Slack
* Social media
* Website buttons
Example:
```text theme={null}
https://lunacal.ai/your-username/meeting-name
```
For team or round-robin bookings, owner may provide shared booking links.
## 7. Notifications & Reminders
lunacal automatically sends:
* Booking confirmations
* Cancellation emails
* Reminder notifications
Depending on your organization:
* Workflows may already be set by owner, or
* You can customize reminders in **Workflow Settings**
## 8. Manage Your Bookings
From your dashboard, you can:
* View upcoming meetings
* See past bookings
* Cancel or reschedule events
* Track attendee details
All updates sync automatically with your connected calendar.
## Need Help?
If you face any issues during onboarding:
* Check other Lunacal help articles
* Contact your workspace admin
* Reach out to Lunacal support
## You’re Ready
Once onboarding is complete, you can start sharing your booking link and accepting meetings through lunacal.ai.
# Track UTM Parameters on Booking Pages
Source: https://help.lunacal.ai/utm-setup
Learn how to capture UTM parameters like utm_source through booking forms on Lunacal.ai. This allows you to track where your bookings are coming from (e.g., LinkedIn, Twitter, etc.).
## **Step 1 – Open the Event Type**
Start by logging in to your Lunacal dashboard.\
Navigate to the **Event Types** section and choose the event type where you want to track UTM parameters. Click the settings icon (⚙️) or open the event type directly.
## **Step 2 – Go to Booking Questions**
Once inside the event setup, look at the left-hand sidebar.
Click on **Booking questions** to view and manage the questions that appear on the booking form. These questions help you collect custom data manually or through URL params when someone books your event.
## **Step 3 – Add a New Booking Question**
Click on the **Add / Edit booking question** button.
In the popup form:
* **Question:**\
Enter a user-friendly label like: `UTM Source`
> This is the label that would normally be shown on the booking form (but we’ll hide it later).
* **Question Type:**\
Choose `Short Text` from the dropdown. This allows UTM values (like `linkedin`, `newsletter`, `twitter`) to be entered or passed via URL.
* **Mandatory:**\
Leave this **disabled**, since we’ll be populating it via URL and not asking users to fill it out.
* **Internal Label:**\
Enter: `utm_source`
> This label is important — it gets used in the booking URL as the query param key. Always advised to start it with `utm_` to maintain clarity and consistency in your tracking.
* **Answer Suggestion:**\
(Optional) Add common values you expect like: `linkedin`, `instagram`, `email`.
Click the **Add** button to save the booking question.
## **Step 4 – Hide the Question**
Once the UTM Source question has been added, toggle the switch to **Hide** the field.\
This ensures it doesn’t appear on the public booking form, but it will still be processed if passed through a URL query parameter.
> Hidden questions can still capture values passed via URL, making this ideal for tracking marketing sources without disrupting the booking flow.
***
## **Step 5 – Generate Your Booking URL with UTM Parameters**
Next, go to your **View Booking Page** for the event.
To pass UTM data, simply append it to the end of your booking URL as query parameters.
For example:
`https://lunacal.ai/{username}/{event-name}?utm_source=linkedin`
> ✅ Make sure the keys in the URL match the **internal labels** you’ve set in your booking questions (e.g. `utm_source`, `utm_campaign`, etc.).
## **Step 6 – Book and Verify**
Book a meeting using the updated booking link with UTM parameters.
After a successful booking:
* As the **event admin**, you can view the UTM value (e.g., `linkedin`) under the booking details in your Lunacal dashboard.
* Additionally, if booking notifications are enabled, the UTM values will appear in your confirmation email.
* These utm related fields can also be accessed via webhooks in **"responses"** key which contains responses for all booking questions.
***
## ✅ Summary
By following this guide, you can:
* Track the source of your bookings (e.g., LinkedIn, newsletter, website).
* Capture UTM data without showing fields to users.
* Use it to evaluate marketing channels and attribution.
You can extend this setup to include `utm_medium`, `utm_campaign`, or custom fields in same way!
# Zapier Integration for UTM Tracking
Source: https://help.lunacal.ai/utm-zapier-integration
Learn how to automatically send UTM parameters and booking data from Lunacal.ai to Google Sheets using Zapier.
## Overview
With Lunacal.ai’s Zapier integration, you can automate workflows that respond to booking events. This guide walks you through setting up a Zap that captures UTM data from your booking form and writes it directly into a Google Sheet — helping you keep track of marketing sources effortlessly.
## ✅ Prerequisites
Before you start:
* A [Zapier](https://zapier.com) account
* A [Lunacal.ai](https://lunacal.ai) account
* A Google account with access to Google Sheets
* A sheet already created with columns like: `Name`, `UTM Source`, `Email`
## 🔌 Step 1: Connect Zapier in Lunacal.ai
1. Log in to your Lunacal dashboard.
2. In the left sidebar, click on **Integrations**.
3. Select **Automation** from the integration categories.
4. Click the **Connect** button on the **Zapier** card to initiate the connection.
***
## 🔑 Step 2: Generate and Save Your API Key
After clicking **Connect**:
1. Lunacal.ai will generate a unique **API Key**.
2. Copy the API key — **you won’t be able to view it again**.
3. Paste and save it in a secure place (we will be needing it in next step).
4. Click **Done** to complete the setup on Lunacal.
## 🧠 Step 3: Link Lunacal.ai to Zapier
1. Open [Zapier](https://zapier.com) and go to **My Apps**.
2. Click **+ Add Connection**.
3. Search for **Lunacal.ai** and click on it.
4. When prompted, paste the **API key** you saved earlier.
5. Zapier will verify and establish the connection to Lunacal.
***
## ⚙️ Step 4: Build Your Zap Workflow
### 4.1 Set up the Trigger
1. Click **+ Create Zap** in Zapier.
2. In the **Trigger** step, search and select `Lunacal.ai`.
3. Under **Event**, choose `Booking Created`.
4. Choose the Lunacal account you just connected.
5. Click **Test Trigger** to ensure data is received correctly.
* This helps Zapier fetch a sample payload for configuration.
* Make sure you have at least one booking in Lunacal to test with
### 4.2 Set up the Action with Google Sheets
Now we’ll write this booking data to a Google Sheet.
1. In the **Action** step, search for and select `Google Sheets`.
2. Choose the action event: **Create Spreadsheet Row**.
3. Connect your Google account if you haven’t already.
4. Select the spreadsheet and worksheet where the data should go.
5. Ensure the sheet has the following columns created beforehand:
* `Name`
* `UTM Source`
* `Email`
> **Note:** You can add more fields like `UTM Campaign`, `UTM Medium`, etc. These must exist in the sheet before proceeding.
### 4.3 Configure Data Mapping
You’ll now map Lunacal.ai booking fields to the Google Sheet columns:
| Google Sheet Column | Lunacal.ai Field Example |
| ------------------- | ---------------------------------------------- |
| Name | `1. Responses Name Value` |
| UTM Source | `1. Responses Utm Source Value` |
| Email | `1. Responses Email Value` |
| UTM Campaign | `1. Responses Utm Campaign Value` *(optional)* |
| UTM Medium | `1. Responses Utm Medium Value` *(optional)* |
| UTM Term | `1. Responses Utm Term Value` *(optional)* |
| Company | `1. Responses Company Value` *(optional)* |
## 🧪 Step 5: Test and Publish
1. Click **Test Action** in Zapier to send a test row to your sheet.
2. Confirm that the data appears in the correct cells.
3. Once validated, click **Publish** to activate your Zap.
4. You’re done — future bookings will now be pushed to Google Sheets automatically!
## 📌 Supported UTM & Custom Fields
These are the UTM fields supported by Lunacal.ai in Zapier:
* `utm_source`
* `utm_medium`
* `utm_campaign`
* `utm_term`
* `utm_extra`
* `utm_referral`
> UTM Fields **not listed above** will not be sent to Zapier. Make sure any custom questions or UTM fields on your booking form align with these names.
***
## ✅ Outro
You’ve now connected Lunacal.ai and Zapier to:
* Trigger workflows when bookings are created
* Automatically capture and store UTM data
* Push data to Google Sheets without manual work
# Webhooks
Source: https://help.lunacal.ai/webhooks
Webhooks can let your integrations take an action in response to events that occur on Lunacal.ai. This document will guide you through adding webhooks.
## **Step 1**
Start by opening the event type you want to configure.
## **Step 2**
Proceed by clicking on the “Advaced” tab and click on button to add “New Webhook”.
## **Step 3**
You can create webhooks to subscribe to specific events on Lunacal. The **Subscriber URL** should point to your API endpoint that will receive HTTP requests from our platform. If you our new to webhooks you can use API from [webhook.site](http://webhook.site) to try these webhooks.
Lunacal currently supports the following webhook events:
1. **Booking Created** — Triggered when a new booking is created by any user.
2. **Booking Cancelled** — Triggered when a booking is cancelled.
3. **Booking Rescheduled** — Triggered when an existing booking is rescheduled.
4. **Booking Requested** — Triggered when a booking is created but requires organizer approval before confirmation.
5. **Booking Rejected** — Triggered when a booking request is rejected by the organizer.
6. **Booking Payment Initiated** — Triggered when a user initiates a payment for a paid event.
7. **Booking Paid** — Triggered after successful payment for a booking.
## **Step 4**
You can test your webhook using the **Ping Test** button. This will send sample data to your webhook endpoint to verify that it’s functioning properly. If everything is set up correctly, you will receive a `200 OK` response with the following payload:
```
{ "ok": true, "status": 200, "message": "Webhook received" }
```
## Response Format and Fields
```json BOOKING_CREATED theme={null}
{
"triggerEvent": "BOOKING_CREATED",
"createdAt": "2025-07-02T07:14:48.795Z",
"payload": {
"bookerUrl": "https://lunacal.ai",
"type": "quint",
"title": "quick chat between Ayush Gupta and Anupam.",
"description": "",
"additionalNotes": "",
"customInputs": {},
"startTime": "2025-07-16T23:30:00Z",
"endTime": "2025-07-17T00:00:00Z",
"organizer": {
"id": 584,
"name": "Ayush Gupta",
"email": "ayush4002gupta@gmail.com",
"username": "ayush-gupta-57m",
"timeZone": "Asia/Srednekolymsk",
"language": {
"locale": "en"
},
"timeFormat": "h:mma",
"utcOffset": 660
},
"responses": {
"name": {
"label": "your_name",
"value": "Anupam",
"isHidden": false
},
"email": {
"label": "email_address",
"value": "anupam@lunacal.onmicrosoft.com",
"isHidden": false
},
"location": {
"label": "location",
"isHidden": false
},
"Please-share-anything-that-will-help-prepare-for-our-meeting-": {
"label": "Please share anything that will help prepare for our meeting.",
"isHidden": true
},
"guests": {
"label": "Add Guests",
"value": [],
"isHidden": false
}
},
"userFieldsResponses": {
"Please-share-anything-that-will-help-prepare-for-our-meeting-": {
"label": "Please share anything that will help prepare for our meeting.",
"isHidden": true
},
"guests": {
"label": "Add Guests",
"value": [],
"isHidden": false
}
},
"attendees": [
{
"email": "anupam@lunacal.onmicrosoft.com",
"name": "Anupam",
"firstName": "",
"lastName": "",
"timeZone": "Asia/Tashkent",
"language": {
"locale": "en"
},
"utcOffset": 300
}
],
"location": "",
"destinationCalendar": null,
"hideCalendarNotes": false,
"requiresConfirmation": false,
"eventTypeId": 975,
"seatsShowAttendees": true,
"seatsPerTimeSlot": null,
"seatsShowAvailabilityCount": true,
"schedulingType": null,
"iCalUID": "r543Dk3BeyfTafREgkSU8v@Lunacal.ai",
"iCalSequence": 0,
"uid": "r543Dk3BeyfTafREgkSU8v",
"eventTitle": "quick chat",
"eventDescription": "",
"price": 0,
"currency": "usd",
"length": 30,
"bookingId": 3899,
"metadata": {},
"status": "ACCEPTED"
}
}
```
```json BOOKING_CANCELLED theme={null}
{
"triggerEvent": "BOOKING_CANCELLED",
"createdAt": "2025-07-02T07:19:25.308Z",
"payload": {
"title": "quick chat between Ayush Gupta and Anupam.",
"type": "quick chat",
"customInputs": {},
"eventTypeId": 975,
"userFieldsResponses": {
"Please-share-anything-that-will-help-prepare-for-our-meeting-": {
"label": "Please share anything that will help prepare for our meeting.",
"isHidden": true
},
"guests": {
"label": "Add Guests",
"value": [],
"isHidden": false
}
},
"responses": {
"name": {
"label": "your_name",
"value": "Anupam",
"isHidden": false
},
"email": {
"label": "email_address",
"value": "anupam@lunacal.onmicrosoft.com",
"isHidden": false
},
"location": {
"label": "location",
"isHidden": false
},
"Please-share-anything-that-will-help-prepare-for-our-meeting-": {
"label": "Please share anything that will help prepare for our meeting.",
"isHidden": true
},
"guests": {
"label": "Add Guests",
"value": [],
"isHidden": false
}
},
"startTime": "2025-07-18T00:00:00+00:00",
"endTime": "2025-07-18T00:30:00+00:00",
"organizer": {
"id": 584,
"username": "ayush-gupta-57m",
"email": "ayush4002gupta@gmail.com",
"name": "Ayush Gupta",
"timeZone": "Asia/Srednekolymsk",
"timeFormat": "h:mma",
"language": {
"locale": "en"
},
"utcOffset": 660
},
"attendees": [
{
"name": "Anupam",
"email": "anupam@lunacal.onmicrosoft.com",
"timeZone": "Asia/Tashkent",
"language": {
"locale": "en"
},
"utcOffset": 300
}
],
"uid": "tzaCPKTHa9TMpGvpbFc4Rm",
"bookingId": 3901,
"location": "",
"destinationCalendar": [],
"cancellationReason": "some urgent work needs to be taken care of",
"team": {
"name": "Nameless",
"members": []
},
"seatsPerTimeSlot": null,
"seatsShowAttendees": false,
"iCalUID": "tzaCPKTHa9TMpGvpbFc4Rm@Lunacal.ai",
"iCalSequence": 1,
"eventTitle": "quick chat",
"eventDescription": null,
"requiresConfirmation": null,
"price": null,
"currency": "usd",
"length": 30,
"status": "CANCELLED"
}
}
```
```json BOOKING_RESCHEDULED theme={null}
{
"triggerEvent": "BOOKING_RESCHEDULED",
"createdAt": "2025-07-02T07:15:53.255Z",
"payload": {
"bookerUrl": "https://lunacal.ai",
"type": "quint",
"title": "quick chat between Ayush Gupta and Anupam.",
"description": "",
"additionalNotes": "",
"customInputs": {},
"startTime": "2025-07-25T00:00:00Z",
"endTime": "2025-07-25T00:30:00Z",
"organizer": {
"id": 584,
"name": "Ayush Gupta",
"email": "ayush4002gupta@gmail.com",
"username": "ayush-gupta-57m",
"timeZone": "Asia/Srednekolymsk",
"language": {
"locale": "en"
},
"timeFormat": "h:mma",
"utcOffset": 660
},
"responses": {
"name": {
"label": "your_name",
"value": "Anupam",
"isHidden": false
},
"email": {
"label": "email_address",
"value": "anupam@lunacal.onmicrosoft.com",
"isHidden": false
},
"location": {
"label": "location",
"isHidden": false
},
"Please-share-anything-that-will-help-prepare-for-our-meeting-": {
"label": "Please share anything that will help prepare for our meeting.",
"isHidden": true
},
"guests": {
"label": "Add Guests",
"value": [],
"isHidden": false
}
},
"userFieldsResponses": {
"Please-share-anything-that-will-help-prepare-for-our-meeting-": {
"label": "Please share anything that will help prepare for our meeting.",
"isHidden": true
},
"guests": {
"label": "Add Guests",
"value": [],
"isHidden": false
}
},
"attendees": [
{
"email": "anupam@lunacal.onmicrosoft.com",
"name": "Anupam",
"firstName": "",
"lastName": "",
"timeZone": "Asia/Tashkent",
"language": {
"locale": "en"
},
"utcOffset": 300
}
],
"location": "",
"destinationCalendar": null,
"hideCalendarNotes": false,
"requiresConfirmation": false,
"eventTypeId": 975,
"seatsShowAttendees": true,
"seatsPerTimeSlot": null,
"seatsShowAvailabilityCount": true,
"schedulingType": null,
"iCalSequence": 1,
"uid": "kqYN7oz5x9h11Jxx8bDMAM",
"appsStatus": [],
"eventTitle": "quick chat",
"eventDescription": "",
"price": 0,
"currency": "usd",
"length": 30,
"bookingId": 3900,
"rescheduleId": 3899,
"rescheduleUid": "r543Dk3BeyfTafREgkSU8v",
"rescheduleStartTime": "2025-07-16T23:30:00Z",
"rescheduleEndTime": "2025-07-17T00:00:00Z",
"metadata": {},
"status": "ACCEPTED"
}
}
```
```json BOOKING_PAYMENT_INITIATED theme={null}
{
"triggerEvent": "BOOKING_PAYMENT_INITIATED",
"createdAt": "2025-11-07T04:55:49.061Z",
"payload": {
"bookerUrl": "https://lunacal.co",
"type": "webhooks",
"title": "Webhooks between Anupam Singh and webhook paid event",
"eventTypeTitle": "Webhooks",
"customCalendarInviteHeading": null,
"description": "",
"additionalNotes": "",
"customInputs": {},
"startTime": "2025-11-07T07:30:00Z",
"endTime": "2025-11-07T07:45:00Z",
"organizer": {
"id": 3539,
"name": "Anupam Singh",
"email": "theanupamsingh01@gmail.com",
"username": "the-anupam-singh",
"timeZone": "Asia/Calcutta",
"language": {
"locale": "en"
},
"timeFormat": "h:mma",
"utcOffset": 330
},
"responses": {
"name": {
"label": "your_name",
"value": "webhook paid event",
"isHidden": false
},
"email": {
"label": "email_address",
"value": "jake.tessy.blosi@gmail.com",
"isHidden": false
},
"location": {
"label": "location",
"value": {
"optionValue": "",
"value": "integrations:google:meet"
},
"isHidden": false
},
"title": {
"label": "what_is_this_meeting_about",
"isHidden": true
},
"attendee-phone": {
"label": "Your Phone Number",
"isHidden": true
},
"guests": {
"label": "additional_guests",
"value": [],
"isHidden": false
},
"notes": {
"label": "form_comments",
"isHidden": false
},
"rescheduleReason": {
"label": "reason_for_reschedule",
"isHidden": true
}
},
"userFieldsResponses": {
"title": {
"label": "what_is_this_meeting_about",
"isHidden": true
},
"attendee-phone": {
"label": "Your Phone Number",
"isHidden": true
},
"guests": {
"label": "additional_guests",
"value": [],
"isHidden": false
},
"notes": {
"label": "form_comments",
"isHidden": false
},
"rescheduleReason": {
"label": "reason_for_reschedule",
"isHidden": true
}
},
"attendees": [
{
"email": "jake.tessy.blosi@gmail.com",
"name": "webhook paid event",
"firstName": "",
"lastName": "",
"timeZone": "Asia/Calcutta",
"language": {
"locale": "en"
},
"utcOffset": 330
}
],
"location": "integrations:google:meet",
"destinationCalendar": [
{
"id": 5082,
"integration": "google_calendar",
"externalId": "theanupamsingh01@gmail.com",
"userId": 3539,
"eventTypeId": null,
"credentialId": 12673,
"primaryEmail": "theanupamsingh01@gmail.com"
}
],
"hideCalendarNotes": false,
"requiresConfirmation": true,
"eventTypeId": 9695,
"seatsShowAttendees": true,
"seatsPerTimeSlot": null,
"seatsShowAvailabilityCount": true,
"schedulingType": null,
"iCalUID": "wKzN5eZ4gwmskm1gr8S5rh@Lunacal",
"iCalSequence": 0,
"disableCancelling": false,
"disableRescheduling": false,
"uid": "wKzN5eZ4gwmskm1gr8S5rh",
"eventTitle": "Webhooks",
"eventDescription": "",
"price": 400,
"currency": "inr",
"length": 15,
"bookingId": 40489,
"metadata": {},
"status": "ACCEPTED",
"paymentId": 625,
"couponData": {
"couponCode": "FIFTY50",
"discountType": "PERCENTAGE_OFF",
"discountValue": 50,
"discountedPrice": 2.5,
"guestEmail": "rober.sullivan.rmv@gmail.com",
"usedAt": "2025-11-21T08:09:28.929Z"
},
"rescheduleUrl": "https://lunacal.co/reschedule/wKzN5eZ4gwmskm1gr8S5rh",
"cancelUrl": "https://lunacal.co/booking/wKzN5eZ4gwmskm1gr8S5rh?cancel=true&allRemainingBookings=false"
}
}
```
```json BOOKING_PAID theme={null}
{
"triggerEvent": "BOOKING_PAID",
"createdAt": "2025-11-07T04:57:23.891Z",
"payload": {
"type": "webhooks",
"title": "Webhooks between Anupam Singh and webhook paid event",
"eventTypeTitle": "Webhooks",
"bookerUrl": "https://lunacal.ai",
"startTime": "2025-11-07T07:30:00.000Z",
"endTime": "2025-11-07T07:45:00.000Z",
"customInputs": {},
"userFieldsResponses": {
"title": {
"label": "what_is_this_meeting_about",
"isHidden": true
},
"attendee-phone": {
"label": "Your Phone Number",
"isHidden": true
},
"guests": {
"label": "additional_guests",
"value": [],
"isHidden": false
},
"notes": {
"label": "form_comments",
"isHidden": false
},
"rescheduleReason": {
"label": "reason_for_reschedule",
"isHidden": true
}
},
"responses": {
"title": {
"label": "what_is_this_meeting_about",
"isHidden": true
},
"attendee-phone": {
"label": "Your Phone Number",
"isHidden": true
},
"guests": {
"label": "additional_guests",
"value": [],
"isHidden": false
},
"notes": {
"label": "form_comments",
"isHidden": false
},
"rescheduleReason": {
"label": "reason_for_reschedule",
"isHidden": true
}
},
"organizer": {
"email": "theanupamsingh01@gmail.com",
"name": "Anupam Singh",
"timeZone": "Asia/Calcutta",
"timeFormat": "h:mma",
"language": {
"locale": "en"
},
"id": 3539,
"utcOffset": 330
},
"attendees": [
{
"name": "webhook paid event",
"email": "jake.tessy.blosi@gmail.com",
"timeZone": "Asia/Calcutta",
"status": true,
"referenceUid": null,
"language": {
"locale": "en"
},
"utcOffset": 330
}
],
"location": "integrations:google:meet",
"uid": "wKzN5eZ4gwmskm1gr8S5rh",
"destinationCalendar": [
{
"id": 5082,
"integration": "google_calendar",
"externalId": "theanupamsingh01@gmail.com",
"userId": 3539,
"eventTypeId": null,
"credentialId": 12673,
"primaryEmail": "theanupamsingh01@gmail.com"
}
],
"recurringEvent": null,
"seatsShowAttendees": false,
"seatsPerTimeSlot": null,
"conferenceData": {
"createRequest": {
"requestId": "8a0ce172-f69a-51b5-8481-93feb73d58e2"
}
},
"iCalUID": "uv3d365gcsrn89r7m0q833nlp0@google.com",
"eventTitle": "Webhooks",
"eventDescription": "",
"requiresConfirmation": null,
"price": 400,
"currency": "inr",
"length": 15,
"bookingId": 40489,
"eventTypeId": 9695,
"status": "ACCEPTED",
"paymentId": 625,
"metadata": {
"identifier": "lunacal.ai",
"bookingId": 40489,
"eventTypeId": 9695,
"bookerEmail": "jake.tessy.blosi@gmail.com",
"eventTitle": "Webhooks",
"externalId": "pi_3SQhiCSpZXWWqjds0BSudOwq"
},
"couponData": {
"couponCode": "FIFTY50",
"discountType": "PERCENTAGE_OFF",
"discountValue": 50,
"discountedPrice": 2.5,
"guestEmail": "rober.sullivan.rmv@gmail.com",
"usedAt": "2025-11-21T08:09:28.929Z"
},
"rescheduleUrl": "https://lunacal.ai/reschedule/wKzN5eZ4gwmskm1gr8S5rh",
"cancelUrl": "https://lunacal.ai/booking/wKzN5eZ4gwmskm1gr8S5rh?cancel=true&allRemainingBookings=false"
}
}
```
```json BOOKING_REQUESTED theme={null}
{
"triggerEvent": "BOOKING_REQUESTED",
"createdAt": "2025-11-07T05:05:18.108Z",
"payload": {
"bookerUrl": "https://lunacal.co",
"type": "manual-approval",
"title": "manual approval between Anupam Singh and jake",
"eventTypeTitle": "manual approval",
"customCalendarInviteHeading": null,
"description": "",
"additionalNotes": "",
"customInputs": {},
"startTime": "2025-11-07T07:15:00Z",
"endTime": "2025-11-07T07:30:00Z",
"organizer": {
"id": 3539,
"name": "Anupam Singh",
"email": "theanupamsingh01@gmail.com",
"username": "the-anupam-singh",
"timeZone": "Asia/Calcutta",
"language": {
"locale": "en"
},
"timeFormat": "h:mma",
"utcOffset": 330
},
"responses": {
"name": {
"label": "your_name",
"value": "jake",
"isHidden": false
},
"email": {
"label": "email_address",
"value": "jake.tessy.blosi@gmail.com",
"isHidden": false
},
"location": {
"label": "location",
"value": {
"optionValue": "",
"value": "integrations:google:meet"
},
"isHidden": false
},
"title": {
"label": "what_is_this_meeting_about",
"isHidden": true
},
"attendee-phone": {
"label": "Your Phone Number",
"isHidden": true
},
"guests": {
"label": "additional_guests",
"value": [],
"isHidden": false
},
"notes": {
"label": "form_comments",
"isHidden": false
},
"rescheduleReason": {
"label": "reason_for_reschedule",
"isHidden": true
}
},
"userFieldsResponses": {
"title": {
"label": "what_is_this_meeting_about",
"isHidden": true
},
"attendee-phone": {
"label": "Your Phone Number",
"isHidden": true
},
"guests": {
"label": "additional_guests",
"value": [],
"isHidden": false
},
"notes": {
"label": "form_comments",
"isHidden": false
},
"rescheduleReason": {
"label": "reason_for_reschedule",
"isHidden": true
}
},
"attendees": [
{
"email": "jake.tessy.blosi@gmail.com",
"name": "jake",
"firstName": "",
"lastName": "",
"timeZone": "Asia/Calcutta",
"language": {
"locale": "en"
},
"utcOffset": 330
}
],
"location": "integrations:google:meet",
"conferenceCredentialId": 12674,
"destinationCalendar": [
{
"id": 5082,
"integration": "google_calendar",
"externalId": "theanupamsingh01@gmail.com",
"userId": 3539,
"eventTypeId": null,
"credentialId": 12673,
"primaryEmail": "theanupamsingh01@gmail.com"
}
],
"hideCalendarNotes": false,
"requiresConfirmation": true,
"eventTypeId": 9393,
"seatsShowAttendees": true,
"seatsPerTimeSlot": null,
"seatsShowAvailabilityCount": true,
"schedulingType": null,
"iCalUID": "qQzq1sFewdm6bpMTVk9QCE@Lunacal",
"iCalSequence": 0,
"disableCancelling": false,
"disableRescheduling": false,
"uid": "qQzq1sFewdm6bpMTVk9QCE",
"eventTitle": "manual approval",
"eventDescription": "",
"price": 0,
"currency": "usd",
"length": 15,
"bookingId": 40490,
"metadata": {},
"status": "PENDING",
"rescheduleUrl": "https://lunacal.co/reschedule/qQzq1sFewdm6bpMTVk9QCE",
"cancelUrl": "https://lunacal.co/booking/qQzq1sFewdm6bpMTVk9QCE?cancel=true&allRemainingBookings=false"
}
}
```
```json BOOKING_REJECTED theme={null}
{
"triggerEvent": "BOOKING_REJECTED",
"createdAt": "2025-11-07T05:05:30.526Z",
"payload": {
"type": "manual-approval",
"title": "manual approval between Anupam Singh and jake",
"eventTypeTitle": "manual approval",
"bookerUrl": "https://lunacal.ai",
"userFieldsResponses": {
"title": {
"label": "what_is_this_meeting_about",
"isHidden": true
},
"attendee-phone": {
"label": "Your Phone Number",
"isHidden": true
},
"guests": {
"label": "additional_guests",
"value": [],
"isHidden": false
},
"notes": {
"label": "form_comments",
"isHidden": false
},
"rescheduleReason": {
"label": "reason_for_reschedule",
"isHidden": true
}
},
"responses": {
"title": {
"label": "what_is_this_meeting_about",
"isHidden": true
},
"attendee-phone": {
"label": "Your Phone Number",
"isHidden": true
},
"guests": {
"label": "additional_guests",
"value": [],
"isHidden": false
},
"notes": {
"label": "form_comments",
"isHidden": false
},
"rescheduleReason": {
"label": "reason_for_reschedule",
"isHidden": true
}
},
"customInputs": {},
"startTime": "2025-11-07T07:15:00.000Z",
"endTime": "2025-11-07T07:30:00.000Z",
"organizer": {
"email": "theanupamsingh01@gmail.com",
"name": "Anupam Singh",
"username": "the-anupam-singh",
"timeZone": "Asia/Calcutta",
"timeFormat": "h:mma",
"language": {
"locale": "en"
},
"utcOffset": 330
},
"attendees": [
{
"name": "jake",
"email": "jake.tessy.blosi@gmail.com",
"timeZone": "Asia/Calcutta",
"language": {
"locale": "en"
},
"utcOffset": 330
}
],
"location": "integrations:google:meet",
"uid": "qQzq1sFewdm6bpMTVk9QCE",
"destinationCalendar": [
{
"id": 5082,
"integration": "google_calendar",
"externalId": "theanupamsingh01@gmail.com",
"userId": 3539,
"eventTypeId": null,
"credentialId": 12673,
"primaryEmail": "theanupamsingh01@gmail.com"
}
],
"requiresConfirmation": true,
"eventTypeId": 9393,
"rejectionReason": "",
"eventTitle": "manual approval",
"eventDescription": "",
"price": 0,
"currency": "usd",
"length": 15,
"bookingId": 40490,
"status": "REJECTED",
"rescheduleUrl": "https://lunacal.ai/reschedule/qQzq1sFewdm6bpMTVk9QCE",
"cancelUrl": "https://lunacal.ai/booking/qQzq1sFewdm6bpMTVk9QCE?cancel=true&allRemainingBookings=false"
}
}
```
> you can use [https://webhook.site/](https://webhook.site/) to test these webhooks without having to write any code.
## Example
Here is a simple example of a server that receives HTTP webhook requests.
```go golang theme={null}
package main
import (
"fmt"
"io"
"net/http"
)
func webhookHandler(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
fmt.Println("Received GET request")
for k, v := range r.URL.Query() {
fmt.Printf("%s = %s\n", k, v)
}
case http.MethodPost:
body, _ := io.ReadAll(r.Body)
defer r.Body.Close()
fmt.Println("Received POST request")
fmt.Println("Body:", string(body))
default:
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
return
}
w.WriteHeader(http.StatusOK)
}
func main() {
http.HandleFunc("/", webhookHandler)
fmt.Println("Listening on :8080")
http.ListenAndServe(":8080", nil)
}
```
```javascript javascript theme={null}
const express = require('express');
const app = express();
app.use(express.json());
app.get('/', (req, res) => {
console.log('Received GET request');
console.log(req.query);
res.status(200).send({ ok: true, status: 200, message: 'Webhook received' });
});
app.post('/', (req, res) => {
console.log('Received POST request');
console.log(req.body);
res.status(200).send({ ok: true, status: 200, message: 'Webhook received' });
});
app.listen(8080, () => {
console.log('Listening on http://localhost:8080');
});
```
> please use a service like [ngrok](https://ngrok.com/) if you are testing locally.
# Embed Event Into Your Website
Source: https://help.lunacal.ai/website-embed
Embed event types into your website so visitors can easily book or access your calendar.
Embedding your lunacal scheduling page directly into your website allows visitors to book meetings without leaving your site. This can increase conversions by removing friction and keeping visitors engaged where they already are.
## Embed Lunacal on Your Website
Lunacal lets you embed your booking calendar directly into your website in a few different ways. Choose the option that best fits how you want users to discover and open your calendar.
Currently, Lunacal supports the following website embed types:
* Inline Calendar Embed
* Floating Pop-up Button
* Popup (Trigger-based)
## 1. Inline Calendar Embed
**Best for:** Landing pages, contact pages, or dedicated booking pages.
The inline embed displays your Lunacal calendar directly on the page. Visitors can view availability and book a slot without leaving your website or clicking an extra button.
**How it works**
* The calendar is rendered as part of the page layout.
* Time slots automatically adjust to the visitor’s local time zone.
* Booking happens inline, without redirects.
**Use this if**
* Scheduling is the primary action on the page
* You want the lowest friction booking experience
* You have enough page space to show the full calendar
## 2. Floating Pop-up Button
**Best for:** Websites where booking is secondary but should stay accessible.
This option adds a floating button (usually at the bottom corner of the screen). When clicked, it opens the Lunacal calendar in a pop-up.
**How it works**
* A floating button stays visible as users scroll.
* Clicking the button opens the booking calendar in an overlay.
* The rest of the page remains unchanged.
**Use this if**
* You don’t want the calendar to dominate the page
* You want booking available from anywhere on the site
* You prefer a cleaner layout with on-demand scheduling
## 3. Popup (Trigger-based Embed)
**Best for:** Custom UI flows or existing buttons/links.
The popup embed lets you open the Lunacal calendar when a user clicks a specific element on your website—such as a “Book a call” button or link.
**How it works**
* You attach Lunacal to an existing button or element.
* When the element is clicked, the calendar opens in a modal popup.
* No page reload or redirect is required.
**Use this if**
* You already have custom CTA buttons
* You want full control over when the calendar appears
* You’re integrating Lunacal into an existing design system
## Step 1
Use “**Embed Event Into Your Website**” to place your booking flow directly on your site so visitors can book without leaving. You’ll use the “**Embed**” section to generate and copy a small HTML snippet.
## Step 2
Next, click on the "**Embed**" option.
## Step 3
Then, Choose "**Inline Calendar Embed**"

## Step 4
You'll be provided to copy the **HTML Code**, but before copying the code, You can also customise your calendar.

## Step 5
Paste this HTML into your site where you want the event or calendar to appear (e.g., your “**Contact Us**” page).
* **Example 1**: An agency adds the “Discovery Call” event to the Pricing page so leads can book right after reviewing plans.
> After embedding, any changes you make to the event (such as availability, title, or description) will automatically reflect inside the embed — no need to replace the code again.
> **Important:** Embeds rely on raw HTML code. Some site builders (especially free landing page builders or restricted editor modes) remove or block HTML embed code. Make sure to use a “Custom HTML”, “HTML”, or “Code” block when pasting the snippet.
***
**Common mistakes to avoid**
* Pasting into a builder block that strips HTML—use a proper “HTML” or “Custom code” block.
* Embedding the wrong event (e.g., copying a test event’s code), causing wrong durations or questions.
* Forgetting to republish or clear cache/CDN, so the embed doesn’t appear for visitors.
* Using low-contrast colors that make the calendar hard to read on mobile.
**Good defaults to start with**
* Place the embed above the fold on a dedicated “Book a Call” or “Contact Us” page.
* Keep width at 100% of the container and give enough height so the calendar isn’t cut off.
* Match the calendar color to your brand and add a one-line heading (“Pick a time that works for you”).
* Test once on desktop and mobile to confirm the widget loads and scrolls smoothly
**Next steps:**\
If you want to share booking options directly in emails (without redirecting visitors), see the “[Embed Your Event In Mails](https://help.lunacal.ai/embed-in-mails)” guide.
# Why can’t I edit this setting?
Source: https://help.lunacal.ai/why-cant-i-edit-this-setting
If you’re seeing a locked setting in an event, it usually means that the event is being managed by someone else — typically a team admin or event owner.
## Why is this setting locked?
In Lunacal, events can be created as **managed events**. This means:
* A team admin (or event owner) creates the event
* They assign it to team members
* Certain settings are **intentionally locked** to maintain consistency
So even though you can access the event, you may not be able to edit all settings.
## What does this mean for you?
If you're a team member:
* You can **view and use** the event
* But you can only edit settings that the owner has **allowed access to**
Locked settings will appear disabled or non-editable.
## How can I edit it?
You have two options:
### 1. Ask the event owner
Request the person who created the event to:
* Unlock the specific setting
* Or make you an editor (if applicable)
### 2. Create your own event
If you need full control:
* Create a new event under your account
* Customize all settings freely
## Why does Lunacal lock settings?
This helps teams:
* Maintain **consistent booking experience**
If you're unsure who manages the event, check with your team **admin** or **workspace** owner.
# Team Routing Forms
Source: https://help.lunacal.ai/workspace/creating-routing-forms
Learn how to create and manage Routing Forms inside a Workspace to qualify leads and automatically direct them to the right team member or event type.
The **Routing Forms** tab allows you to create qualification forms that automatically route visitors to the correct team member or event type based on their responses.
This is ideal for:
* Sales teams
* Support teams
* Agencies
* Multi-service businesses
Instead of showing all event types directly, visitors first complete a form. Based on their answers, Lunacal directs them to the appropriate booking page.
## What Are Team Routing Forms?
A **Team Routing Form** is a pre-booking form that:
1. Collects information from visitors
2. Applies routing rules
3. Redirects them to:
* A specific team event type
* A specific team member
Routing happens automatically based on logic you define.
## Accessing Routing Forms
1. Switch to your **Team Workspace**
2. Click **Routing Forms** from the sidebar
3. Click **New**
4. Enter "**title**" & "**description**"
Routing forms created here apply only to this workspace.
## Creating a Team Routing Form
When creating a routing form, you configure:
### 1. Form Fields
Add qualification fields such as:
* Name
* Email
* Company size
* Budget range
* Service interest
* Custom dropdowns
* Multiple choice questions
These fields determine how routing rules work.
To know more about routing forms : [https://help.lunacal.ai/routing-forms](https://help.lunacal.ai/routing-forms)
### 2. Routing Logic
Define rules such as:
* If *Company Size = Enterprise* → Route to **Enterprise Sales Event**
* If *Service = Design* → Route to **Design Consultation Event**
* If *Budget \< X* → Route to **Junior Consultant**
Rules can direct users to:
* A specific team event type
* A specific team member
* Different event types based on answer combinations
## Publishing the Routing Form
Once configured:
* Publish the form
* Copy its public link
* Or embed it on your website
Visitors will:
1. Fill out the form
2. Be automatically redirected
3. See only the appropriate booking options
## Managing Team Routing Forms
Inside the Routing Forms tab, you can:
* Edit existing forms
* Duplicate forms
* Unpublish forms
* Delete forms
Unpublishing a form stops visible publicly.
## Best Practices for Team Routing
* Keep forms short (3–5 questions max)
* Route by qualification, not preference
* Test every logic path before publishing
* Ensure routed members have availability set
* Use routing to reduce booking friction
## Common Mistakes
Routing interacts with:
* Assigned event types
* Member availability
* Scheduling status
* Hidden/visible member settings
If a routing rule sends someone to:
* A disabled member → No time slots will show
* An unassigned event → It won’t work
* A member without availability → No bookable slots
Always test routing after publishing.
## When to Use Team Routing Forms
Use team routing forms if:
* You want to qualify leads before booking
* You offer multiple services
* You have multiple sales reps
* You want high-value prospects routed to senior staff
* You need structured intake before scheduling
# Team Booking Page
Source: https://help.lunacal.ai/workspace/edit-team-booking-page
Learn how to edit and customize your team booking page for a better scheduling experience.
When visitors open your team booking page, they can either:
* Book directly with a specific team member, or
* Choose a specific event and get scheduled with the right team member.
> **Note:** Make sure your team members and event types are already created. Members without active event types or availability may not appear on the booking page.
## Step 1
Click "**Edit Team Booking**" Page from the top-right corner. This opens your team page editor with all sections in one place.
## Step 2
### Book a Member Directly
This section displays all team members you’ve added. Visitors can click an individual member to book directly with them. You can hide any member by clicking the eye icon (visibility toggle) on their profile card.
* **You can drag and rearrange team members to control the order they appear on your public booking page. Simply drag a member card and drop it into your preferred position.**
* **You can also hide or unhide the breadcrumb navigation (e.g., “Select Event Type > Select Professional > Select Time”) from the page settings if you prefer a cleaner booking flow.**
## Step 3
### Our Services
This block shows all event types created for the team. Visitors can click any event to book it directly. You can hide any event by clicking the eye icon (visibility toggle) on the event card.
* **You can also hide/unhide and reorder entire event cards to control which services are visible on the public booking page.**
## **Step 4**
### Widgets & Customization
> Widgets help answer common visitor questions before booking and improve conversion.
Add extra widgets like "**About Me", Video Embed, FAQs, or "Why Us?**" to personalize the page. Use short, clear content that helps the visitor decide quickly.
* **You can enable Event-Specific Widgets. When this option is turned on, you can show or hide widgets for individual event types instead of applying them across the entire team page. This allows more tailored content depending on the service selected.**
* **You can also choose to show or hide all widgets globally using the "Show Widgets" toggle in the editor.**
## Step 5
After making changes, click "**Publish**" (top-right corner) to make updates live. Changes won’t appear to visitors until you **publish**.
> **Tip:** Open the booking link in an incognito window to verify your changes as a visitor.
## Common mistakes to avoid
> If something doesn’t appear as expected, double-check visibility toggles and click Publish again.
* Showing both many members and many events at once, which overwhelms visitors. Pick one primary path (member-first or service-first).
* Forgetting to use the eye icon to hide items you don’t want shown, causing duplicate or confusing options.
* Publishing layout changes but leaving old event types visible, leading to dead ends or inconsistent flows.
* Editing content in widgets but not clicking "**Publish**", so visitors still see the old content.
# How Workspaces Work
Source: https://help.lunacal.ai/workspace/how-workspaces-work
A workspace is where you manage all your bookings in lunacal — your own bookings as well as your team's (if you have one).
## What is a Workspace?
A workspace is simply **your home base in lunacal**. It's where all your scheduling lives — your event types, your bookings, your settings.
Every Lunacal account starts with a **Personal Workspace**. This is yours. You don't need a team to use it. If you're a solo consultant, freelancer, or individual professional, your Personal Workspace is all you need.
If you work with others, you can create a **Team Workspace**. It lets multiple people share event types, booking pages, and scheduling rules.
**How do I share my license with someone?**
Invite them to your Team Workspace. Once they accept, they get a paid license under your plan — no separate purchase required. They also get their own Personal Workspace for independent scheduling.
## Personal Bookings vs. Team Bookings
**Personal Bookings**
One person, one calendar, one link — `lunacal.ai/yourname/event-name`. You control everything: duration, location, price, custom questions.
**Team Bookings**
Three ways team bookings work:
* **Round Robin** — Meetings are distributed one-by-one across team members. Lunacal picks whoever was booked least recently. Optionally, let the person booking choose a specific team member.
* **Collective** — The meeting only books when *everyone* on the team is free. Useful for group interviews, panel calls, or any meeting where the whole team must be present.
* **Managed Events** — An admin creates one event type and pushes it to selected team members. Each member gets their own personal version with consistent settings. Members can't edit locked fields.
## How Event Types, Booking Pages, and Routing Forms Fit Together
* **Event types** are the meetings you offer (e.g., "30-min Consultation").
* **Booking pages** are where people pick a time and book with you.
* **Routing forms** are optional intake forms that ask questions first, then send the person to the right event type.
**Routing Form** (optional) → asks questions → **Booking Page** → person picks a time → **Booking confirmed**
## What Happens When Someone Books
1. They visit your booking link (or a routing form sends them there).
2. They pick a time slot from your available calendar.
3. They fill in their details and any custom questions.
4. For paid events, they enter payment and apply a coupon code if available.
5. They see a confirmation page and receive a confirmation email with everything they need — including links to reschedule or cancel.
For round-robin events, Lunacal automatically assigns a team member. For collective events, all team members are added.
## What Your Attendees See For Personal Booking Page
When someone clicks your username link e.g. [https://lunacal.ai/mario-rossi](https://lunacal.ai/mario-rossi) they see:
* Your name, designation and photo
* All your events you created
When someone clicks your event booking link e.g. [https://lunacal.ai/mario-rossi/45-min-session](https://lunacal.ai/mario-rossi/45-min-session), they see:
* Your name, designation and photo
* The event title and description
* Meeting duration
* Available time slots on a clean calendar
* Widgets on your booking page (Testimonials, About Us, FAQs, Social Media Posts etc.)
## What Your Attendees See For Teams Booking Page
* Team name and photo
* All your team members
* All team events you created
* Widgets on your team booking page (Testimonials, About Us, FAQs, Social Media Posts etc.)
## Why You See Team Features (Even If You're Solo)
**"Why does the workspace dropdown show 'Your Teams'?"**
Your workspace selector always shows Personal Workspace at the top and Your Teams below. If you haven't created a team, it just shows an option to create one. Your Personal Workspace always works independently.
**"Why are some event settings locked or grayed out?"**
A team admin created a **managed event** and assigned it to you. They control settings like duration and title to keep things consistent. You'll see "Locked by the team admin" on those fields. Ask your admin if you need a change.
**"Why does it feel like everything is built for teams?"**
lunacal uses the same workspace structure for individuals and teams. Your Personal Workspace uses the same tools — team features are additions on top, not replacements. They don't affect your personal scheduling unless you actively set up a team.
## Managed Events: What They Are and Why Settings Are Locked
1. A team admin creates a managed event (e.g., "Initial Consultation — 30 min").
2. The admin assigns it to specific members — or the entire team, including future members.
3. Each member gets their own copy at `lunacal.ai/membername/event-name`.
4. The admin controls the settings. Members can't change locked fields.
Any changes the admin makes automatically apply to everyone's copy.
## Routing Forms: Sending People to the Right Place
1. The person fills out a simple form with your questions.
2. Based on their answers, Lunacal sends them to the right booking page — or shows a custom message or external redirect.
3. Their answers can pre-fill the booking form so they don't repeat themselves.
Routing forms can belong to your Personal Workspace or a Team Workspace.
## Quick Reference
| **Concept** | **What It Means** |
| :----------------- | :--------------------------------------------------------------------------------- |
| Personal Workspace | Your own scheduling home base. Always there. |
| Team Workspace | A shared space for a group to manage scheduling together. |
| Event Type | A meeting you offer (e.g., "30-min Call"). |
| Booking Page | The public page where someone picks a time and books. |
| Routing Form | An optional questionnaire that directs people to the right event. |
| Managed Event | An event type created by an admin and pushed to team members. Settings are locked. |
| Round Robin | Automatically distributes bookings across team members evenly. |
| Collective | Books only when all team members are available at the same time. |
# Team Booking Page
Source: https://help.lunacal.ai/workspace/manage-booking-pages
Manage how your team appears to visitors. Learn how to view, embed, and control visibility of your team booking page and individual member pages inside a Workspace.
The **Booking Page** tab allows you to manage how your team appears to visitors.
This is the public-facing page where people can:
* View your team members
* View available team event types
* Book meetings
## What You’ll See in This Section
Inside the Booking Page tab, you’ll see:
* **Website Embed**
* **View Team Page**
* A list of **Team Members**
* A list of **Team Event Types**
* **"Edit Booking Page"** option for each member
## View Team Page
Click **View Team Page** to open your public team booking page.
This page:
* Lists all visible team members
* Displays published team event types
* Allows visitors to select and book meetings
Only members who are:
* Not hidden from booking page
* Assigned to events
* Have availability set
…will properly appear and be bookable.
## Website Embed
Use **Website Embed** if you want to embed your team booking page on your own website.
This allows you to:
* Add your team scheduler to your homepage
* Embed inside a landing page
* Place inside a client portal
Learn more : [https://help.lunacal.ai/website-embed](https://help.lunacal.ai/website-embed)
The embed code loads your team booking interface directly on your website. just **COPY** the code and paste it into your website.
## Team Members Section
You’ll see a list of all members in the workspace.
For each member, you can:
* View their name and email
* Click **Edit Booking Page**
## Edit Booking Page (Per Member)
Clicking **Edit Booking Page** allows you to customize that individual member’s public booking profile.
You can modify:
* Public display information
* Profile details
* How they appear on the team page
* How their public booking page will look like
Important:
If a member is:
* Hidden from booking page (via Team Members tab)
* Not assigned to events
* Has scheduling disabled
They may not appear publicly even if their profile is configured.
## Team Event Types Section
Beside members, you’ll see the list of team event types just click on "Team event types.
These are the events that:
* Appear on the public team page
* Can be booked by visitors
Only published event types will be visible.
## How Visibility Works (Important Logic)
A team member will appear on the team booking page only if:
1. They are not hidden from booking page
2. They are assigned to at least one event
3. Scheduling is not disabled
4. They have availability configured
If any of the above conditions are not met, the member may not appear or may not show available slots.
# Best Practices
* Hide internal-only members from the booking page.
* Disable scheduling instead of removing members when they are temporarily unavailable.
* Regularly review assigned events to ensure accurate public visibility.
* Test the **View Team Page** after making changes.
# Configure Team Events
Source: https://help.lunacal.ai/workspace/manage-event-types
Event Types are the core of team scheduling inside your lunacal Workspace. create for your team members to make your team scheduling smooth, scalable, and professional.
Creating an event is easy. But configuring it properly? That’s what makes your team scheduling smooth, scalable, and professional.
Inside your **Workspace → Event Types**, you can create different types of team events.
But configuring them correctly depends on the type of event you choose.
This guide explains exactly what to configure for:
* Managed Events
* Round Robin Events
* Collective Events
***
## Step 1: Understand Types of Team Events
### 1. [Managed Event](https://help.lunacal.ai/event-types/managed-event)
Team owner controls the event.\
This works like a standard event but inside a team.
Use this when:
* One specific person owns the meeting
* Example: CEO Call, Founder Strategy Session
***
### 2. [Round Robin Event](https://help.lunacal.ai/round-robin-scheduling)
Bookings are automatically distributed among assigned members.
Use this when:
* You want equal distribution
* Example: Sales Demo Calls
* Multiple reps available, system assigns automatically
***
### 3. [Collective Event](https://help.lunacal.ai/collective-schedule)
All assigned members must attend the same meeting.
Use this when:
* You need multiple people present
* Example: Technical + Sales joint call
* Panel interviews
***
## Step 2: Configure Each Tab Properly
Now let’s go tab by tab — but from a practical setup perspective.
***
## [Event Setup](https://help.lunacal.ai/event-types/event-setup)
This tab defines what the event is.
Configure:
* Event Name
* Duration
* Description
* Meeting Location
* Group or Package (if needed)
Important:
For Round Robin or Collective events, do NOT worry about distribution here.\
Distribution is controlled inside **Assigned Members**.
This tab is only about how the event looks and behaves publicly.
***
## [Availability](https://help.lunacal.ai/availability-configuration)
Here’s where most confusion happens.
Availability depends on event type:
### For Managed Events
Availability is based on that assigned member.
You can:
* Use team default availability
* Override it specifically for this event
***
### For Round Robin
System checks availability of all assigned members.
If at least one member is available → slot shows.
***
### For Collective
System checks overlap availability.
Only time slots where **all assigned members are free** will appear.
If you don’t see slots:
* Check each member’s availability inside Team Members
* Check time zone conflicts
This is the most common issue users face.
***
## Assigned Members (Controls Distribution)
This tab defines who handles the event.

Now it behaves differently per event type:
***
### Round Robin
Assign multiple members.
The system will:
* Distribute bookings evenly
* Skip unavailable members
* Rotate automatically
If bookings are not distributing:
* Check member availability
* Check booking limits
* Ensure members are active
***
### Collective
Assign all required participants.
The system will:
* Only show slots where everyone is free
* Book the same meeting on all assigned calendars
If no slots show:
* Check overlapping availability
* Check calendar conflicts
***
## [Booking Limits](https://help.lunacal.ai/event-types/limits) (Prevents Chaos)
This tab protects your team.
Set:
* Buffer time
* Advance notice
* Daily booking limits
* Future booking window
* Required booking questions
For Round Robin especially:\
If one member is overloaded, check:
* Max bookings per day
* Individual availability
* Event limits
***
## [Payments](https://help.lunacal.ai/stripe-integration) (If Applicable)
Enable this only if:
* You charge per session
* You sell consulting
* You offer paid discovery calls
For internal team meetings → leave this disabled.
***
## [Workflows](https://help.lunacal.ai/sms-and-email-workflows) (Automation Layer)
This controls:
* Reminder emails
* Internal notifications
* Follow-up sequences
Example:
* Send Slack notification when new Round Robin booking is made
* Send reminder 24 hours before meeting
If notifications aren’t working:\
Check workflow trigger conditions.
***
## Integrations
Important for:
* CRM auto-updates
* Lead tracking
* Marketing attribution
Especially useful for Round Robin sales teams.
***
## Advanced Settings (Power Controls)
Only adjust these if needed.
Common useful settings:
* [Disable rescheduling & cancelling](https://help.lunacal.ai/disable-cancel-reschedule)
* Require [manual approval](https://help.lunacal.ai/manual-approval-booking) (good for Collective)
* [Redirect after booking](https://help.lunacal.ai/redirect-url)
* [Custom slot intervals](https://help.lunacal.ai/conflict-slot)
If event behavior feels “wrong,” check here.
***
## Common Problems & Why They Happen
### No slots showing
* Collective event with no overlapping availability
* Team member availability misconfigured
* Booking window too restricted
***
### Round Robin not distributing equally
* One member unavailable
* One member hit max bookings limit
* Member not properly assigned
***
### Only one member getting all bookings
* Others have limited availability
* Others have calendar conflicts
* Booking limits misconfigured
***
## Final Advice for Team Events
When configuring:
1. Choose correct event type first
2. Assign members correctly
3. Double-check availability
4. Then configure booking limits
5. Test with a real booking link
Team events are powerful — but small configuration mistakes cause most confusion.
***
# Manage Team Bookings
Source: https://help.lunacal.ai/workspace/manage-team-bookings
In a team workspace, the Bookings page shows all bookings made for your team’s event types. It gives you a unified place to view, update, and manage every meeting scheduled through your team’s scheduling pages.
> **Note:** In team workspaces, only members with the right permissions (team Owner & Admin) can edit or update bookings, based on their role.
***
## **Booking Views & What They Mean**
1. **Upcoming**\
All confirmed future team bookings across your event types.
2. **Unconfirmed**\
Bookings that require further action — e.g., awaiting payment completion or manual approval.
3. **Past**\
Meetings that have already occurred.
4. **Canceled**\
Previously scheduled meetings that were canceled by your team or by the attendee.
***
## **How to Access Team Bookings**
1. In your team workspace sidebar, click **Bookings**.
2. The list refreshes to show bookings for events that belong to your team’s workspace (not your personal events).
***
## **Edit, Reschedule, or Cancel a Team Booking**
Use the **Edit** menu on any booking in the list to:
* **Reschedule** — pick a new time and send the updated invite to the attendee(s)
* **Request a Reschedule** — prompt the attendee to choose a new time
* **Cancel** — remove the booking from the calendar and notify
* **Change Location** — update the meeting type (e.g., Zoom, Meet, physical address)

**After any change**, Lunacal automatically sends updated notifications/mails to attendees & hosts.
## **Booking Details & Full View**
Click a booking entry to open its detail panel. Here you can:
* See attendee contact info
* View which event type was booked
* See assigned team member(s)
* Copy conferencing links for meetings (Zoom, Meet, Teams, etc.)

This is helpful to prepare before a meeting starts.
## **Handling Unconfirmed Team Bookings**
The **Unconfirmed** tab shows bookings that haven’t been fully completed, such as:
* Bookings with **pending payment**
* Bookings awaiting **manual approval**
Review this section regularly so team members with booking privileges can follow up and convert them into confirmed meetings.
## **Past & Canceled Bookings**
* **Past:** Review completed meetings across the team; useful for reporting, notes, or CRM follow-up.
* **Canceled:** See meetings that were canceled, either by your team or by attendees — this can help you spot patterns in no-shows or reschedules.
## **Permissions & Editing Rights**
Team Owners and Admins can view all bookings and often can edit them.
However:
* Only the event **owner** or users with appropriate team roles can **edit or cancel** individual bookings
Always make sure you’re in the correct **team workspace** and have the required permissions before editing bookings.
## **Best Practices for Team Booking Management**
* Check **“Unconfirmed”** daily — don’t let pending actions accumulate.
* Standardize meeting **“Location”** defaults (e.g., Zoom for demos) to reduce errors.
* Use **reschedule requests** when timing shifts instead of canceling outright.
* **Review** the **Canceled** tab weekly to identify possible booking friction points.
## **Common Mistakes to Avoid**
* Editing booking details directly in a connected calendar instead of through the team **Bookings** page.
* Forgetting to send updated notifications after rescheduling or canceling.
* Ignoring unconfirmed bookings, leading to lost revenue or missed meetings.
# Manage Team Members
Source: https://help.lunacal.ai/workspace/manage-team-members
The Team Members section allows you to manage everyone inside your workspace.
You can:
* Add new team members
* Manage roles
* Control booking visibility
* Enable or disable scheduling
* Assign event types
* Configure individual availability
This section is available inside a **Team Workspace** only.
## Accessing Team Members
1. Switch to your **Team Workspace**
2. Click **Team Members** from the left sidebar
You’ll see a list of all members with:
* Name & email
* Role (Owner / Admin / Member)
* Status (Active)
* Assigned Events count
## Adding a New Team Member
To invite someone:
1. Click **+ New Team Member**
2. Enter their email address
3. Select their role
4. Click **Send invite**
Once they accept, they will appear in the Team Members list.
> Only Owners and Admins can invite members.
## Managing Team Members (Three-Dot Menu)
Next to each member, click the **⋯ (three dots)** menu to access management options.
## 1. Edit Role
Change the member’s role:
* **Admin** – Can manage events and members
* **Member** – Can manage assigned events only
Use this when promoting or restricting access.
## 2. Hide from Booking Page
This removes the member from the **public team booking page**.
Use this when:
* A member should not appear publicly
* Internal team members shouldn’t be bookable directly
Hidden members can still:
* Be assigned to events
* Receive bookings (if assigned)
They just won’t appear publicly.
## 3. Disable Scheduling
This temporarily prevents the member from receiving new bookings.
Use this when:
* A member is on leave
* Temporarily unavailable
* Transitioning out of the team
Important:
* Existing bookings remain unchanged
* They simply won’t receive new ones
## 4. Remove Member
This permanently removes the user from the workspace.
What happens:
* They lose access to the team workspace
* They are unassigned from team events
* Future bookings may require reassignment
Past bookings remain in history.
## Clicking on a Team Member (Member Profile Page)
When you click a member’s name, you open their detailed profile.
You’ll see three tabs:
* Profile
* Availability
* Assigned Event Types
## 1. Profile Tab
Here you can modify:
* Full name, Description, Booking Link, Designation
* Profile photo
* Contact information
* Public booking page details
Changes here affect how the member appears on booking pages.
## 2. Availability Tab
This controls when the member is available for team events.
You can:
* Create new availability schedules
* Modify working hours
* Set different time blocks per day
* Delete old schedules
Important Logic:
Team event availability depends on:
* Event-level availability
* Member availability
* Connected calendar availability
If a member is unavailable here, they will not receive bookings — even if the event is active.
## 3. Assigned Event Types Tab
Here you control which team events this member participates in.
You can:
* Assign event types
* Unassign event types
This determines:
* Whether they appear in Round Robin events
* Whether they are included in Collective events
* Whether they can host specific event types
If a member is not assigned to an event:
* They will not receive bookings for that event
## How Team Member Settings Affect Booking Behavior
Understanding this logic prevents confusion:
| Setting | Effect |
| :----------------------- | :------------------------------------- |
| Hidden from booking page | Not publicly visible |
| Disabled scheduling | No new bookings assigned |
| Not assigned to event | Cannot receive bookings for that event |
| No availability set | No time slots shown |
| Calendar not connected | Conflicts may not block |
## Best Practices
* Use **Disable Scheduling** instead of removing members temporarily.
* Always configure **availability before assigning events**.
* Review assigned events when promoting or changing roles.
* Hide internal-only members from the booking page.
## Common Mistakes
* Assigning an event but not setting availability
* Leaving a member visible publicly but not assigning events
* Removing a member without checking future bookings
* Forgetting to disable scheduling when someone goes on leave
# Managed Event
Source: https://help.lunacal.ai/workspace/managed-event
A team scheduling feature that lets admins create central event templates with fields locked or unlocked for consistency across members.
**What are Managed Events?**
Managed Events in **lunacal** allow admins to create and control event types centrally, then assign them to one or more team members (hosts). Instead of each person creating and maintaining their own event types, Managed Events ensure consistency across your team while still allowing hosts to focus only on their availability.
Managed Events are ideal when you want:
* A single source of truth for event settings
* Consistent branding, duration, buffers, and rules
* Easy assignment and reassignment of hosts
* Scalable scheduling for growing teams[****](https://help.lunacal.ai/event-types/managed-event#how-managed-events-work)
### **How Managed Events Work**
1. An admin creates a Managed Event
2. Event settings are configured and (optionally) locked
3. Members are assigned to the Managed Event
4. lunacal uses the event rules and host availability to schedule meetings
Admins control the event configuration, while members simply receive bookings based on their availability.
## [****](https://help.lunacal.ai/event-types/managed-event#permissions-tab-managed-events)
### Permissions Tab (Managed Events)
Inside every Managed Event, there is a **Permissions** tab.
This tab allows admins/owners to control what assigned members are allowed to modify within that specific Managed Event.
* If the admin/owner **enables permission** for a setting, the assigned member can modify that setting.
* If the admin/owner **does not enable permission**, the member cannot change that setting.
* Any setting not allowed remains locked and controlled only by the admin/owner.

> This ensures flexibility where needed, while still maintaining centralized control over critical event configurations.
***
### **What Can Be Managed (Locked) by Admins**
Admins can decide which event fields are centrally managed and which are editable by hosts.
Commonly managed fields include:
* Event name and description
* Duration
* Location (Zoom, Google Meet, phone, in‑person, etc.)
* Availability rules
* Buffers and minimum notice
* Booking questions
* Confirmation, reminder, and follow‑up emails
Locked fields stay consistent across all assigned hosts.
### **Create a Managed Event**
1. Navigate to your team.

2. Click **Create Event**

3. Select \*\*Managed Event ( One-to-One ).

4. Enter the event details:
* Event name
* Event URL
* Duration

5. You’ll see members list.
6. Select members you want to assign this event.
7. Click **Finish**

8. Your event is created
> If you want to know more about events read this\
> [**https://help.lunacal.ai/event-types/event-setup**](https://help.lunacal.ai/event-types/event-setup)
***
### **Assign Hosts to a Managed Event**
1. Open the **Managed Event**

2. Go to the **Assigned Members** tab
3. Select one or more team members
4. **Save** changes

Hosts will immediately see the Managed Event in their dashboard.
### **Editing a Managed Event**
Admins can update a Managed Event at any time.
* Changes apply to **future bookings only**
* Existing meetings are not affected
* Updates sync automatically across all assigned hosts
### **Delete a Managed Event**
* **Delete:** Permanently remove the event (existing bookings remain scheduled)
**Common Use Cases**
* Sales demos scheduled across multiple reps
* Support calls handled by a shared team
* Interviews with rotating interviewers
* Onboarding or training sessions managed by operations teams
**Important Things to Know**
* Only admins can create or edit Managed Events
* Hosts cannot change locked event settings
* Removing a host does not cancel existing meetings
* Managed Events help maintain consistency across large teams
## [****](https://help.lunacal.ai/event-types/managed-event#related-help-docs)
**Related Help Docs**
* [**Routing Forms**](https://help.lunacal.ai/routing-forms)
* [**Availability**](https://help.lunacal.ai/availability-configuration)
* **[Event Types Overview](https://help.lunacal.ai/event-types/event-setup)[](https://help.lunacal.ai/event-types/managed-event#need-help)**
Need Help?
If you need help setting up or managing Managed Events, contact lunacal support ( [**hi@lunacal.live**](mailto:hi@lunacal.live) ) or explore related help documentation.
# Team Integrations
Source: https://help.lunacal.ai/workspace/team-integrations
Connect calendars, video conferencing tools, and other apps at the Workspace level. Learn how integrations work for teams and how they affect booking availability and meeting automation.
The **Integrations** tab inside a Workspace allows you to connect apps and tools that power team scheduling.
Integrations at the team level ensure:
* Accurate availability
* Automatic meeting link generation
* Conflict prevention
* Smooth coordination across multiple team members
## Accessing Team Integrations
1. Switch to your **Team Workspace**
2. Click **Integrations** from the sidebar
All integrations configured here apply to the team context — not your personal account.
## Video Conferencing Integrations
You can connect tools such as:
* Zoom
* Google Meet
* Microsoft Teams
* Facetime
When enabled:
* Meeting links are generated automatically
* Links are included in confirmation emails
* Links appear in booking details
* for facetime link isn't automatically generated you've to setup manually
## How Team Integrations Affect Booking Logic
Team bookings depend on:
* Event configuration
* Member availability
* Connected calendars
* Assigned event types
If an integration is missing:
* No automatic meeting link will be generated
* Calendar conflicts may not block time
* Manual steps may be required
Always test after connecting integrations.
## Managing Integrations
Inside the Integrations tab, you can:
* Connect new apps
* Reconnect expired accounts
* Disconnect integrations
* View connection status
If an integration shows an error, reconnect it immediately to avoid scheduling issues.
## Best Practices for Team Integrations
* Ensure **every active member connects their calendar**
* Reconnect expired tokens promptly
* Standardize one video tool across the team
* Test booking flow after connecting new integrations
## Common Issues
### No Meeting Link Generated
Likely cause:
* Video conferencing integration not connected
## Personal vs Team Integrations
Integrations inside a Team Workspace:
* Do not affect your personal workspace
* Apply only to team-level events
* Require each member to authenticate individually (for calendars)
## When Should You Configure Team Integrations?
Immediately after:
* Creating a workspace
* Inviting team members
* Creating team event types
Integrations should be configured before publishing your team booking page.
# Team Settings
Source: https://help.lunacal.ai/workspace/team-settings
Configure global workspace settings including branding, availability, workflows, billing, custom labels, privacy, domain configuration, and advanced email setup.
The **Settings** section controls global configuration for your Team Workspace.
All changes made here apply to the entire team unless overridden at the event or member level.
To access:
1. Switch to your **Team Workspace**
2. Click **Settings** from the sidebar
You’ll see the following tabs:
* General
* Account
* Availability
* Workflows
* Custom Labels
* Advanced
# General Tab
The **General** tab controls your team’s identity, public page behavior, SEO, privacy, and branding.
## Team Identity
### Upload Logo
Add a logo that appears on your team booking page.
### Team Name
This is your public team name.
### Team URL
Your public booking page link:
`https://lunacal.ai/team/your-team-slug`
Changing the slug updates your team’s booking page URL.
## Visitor Language
Controls the default language used for:
* Team booking pages
* Confirmation emails
* Calendar invites
Note: Individual team members can override this setting for their own events.
## Timezone
Sets the default timezone for the workspace.
This affects:
* Booking availability display
* Event scheduling behavior
Members can have their own timezones, but team events may use this default.
## Time Format
Choose between:
* 12-hour format
* 24-hour format
Applies to public booking pages and internal scheduling view.
## Start of Week
Defines which day your calendar week begins on.
This affects:
* Calendar display
* Weekly availability layout
## Webpage SEO & Branding
Control how your team booking page appears:
* In browser tabs
* In search results
* When shared on social media
### Meta Title
Appears in browser tab and search results.
### Meta Description
Appears in search previews.
### Social Preview Image
Image shown when sharing your team booking link.
Always click **Update** after making changes.
## Privacy Settings
### Make Team Private
When enabled:
* Team members cannot see each other’s data
* Useful for independent contractors within one workspace
Does not affect public visibility.
## Remove Lunacal Branding
Removes “Built with Lunacal.ai” from your scheduling page.
Availability depends on your subscription plan.
## Danger Zone
### Disband Team
Permanently deletes the team workspace.
Warning:
* This action cannot be undone.
* All team settings and configurations will be removed.
Bookings history may not be recoverable.
Proceed with caution.
# Account Tab
This tab manages SMS credits and billing.
## SMS Credits
Used for sending SMS notifications.
You’ll see:
* Total credits
* Remaining credits
* Pricing details
Minimum required credits apply for sending SMS.
If insufficient credits:
* SMS reminders will not send.
Use **Add Credits** to purchase more.
## Subscription & Billing
Shows your current plan (e.g., Free Plan).
From here you can:
* Edit billing details
* Upgrade plan
* Discontinue paid plan
# Availability Tab
Controls global team availability schedules.
## Team Availability
Each availability schedule can be applied to:
* One event
* Multiple events
You can:
* Create new availability
* Edit existing schedules
* Set working hours
* Assign timezone
Example: Mon – Fri, 9:00 AM – 5:00 PM
## Default Schedule
The default availability can be reused across events.
# Workflows Tab
Workflows automate communication.
## Team Workflows
Used for:
* Reminder emails
* Follow-ups
* Notifications
You can:
* Create new workflows
* Define trigger conditions
* Attach workflows to specific events
Workflows operate automatically once configured.
# Custom Labels Tab
Customize terminology used across your booking pages.
## Label for Event Types
Change how events are referred to.
Example:
Singular: Appointment Plural: Appointments
## Label for Team Members
Change how members are referred to.
Example:
Singular: Doctor Plural: Doctors
These labels update everywhere on your team booking pages.
# Advanced Tab
Advanced technical configuration.
## Custom Domain
Use your own domain for booking pages.
Example: `book.yourdomain.com/team-name`
Requires domain configuration.
## SMTP Configuration
Send emails from your own email address instead of default system emails.
If not configured:
* System default email sender will be used.
Click **Configure** to add SMTP credentials.
# How Team Settings Affect Booking Behavior
| Setting | Affects |
| ----------------- | --------------------- |
| Timezone | Availability display |
| Visitor Language | Booking page language |
| Team Availability | Bookable time slots |
| Workflows | Email automation |
| Custom Labels | Public wording |
| Custom Domain | Booking URL |
| SMTP | Email sender identity |
# Best Practices
* Configure branding before publishing booking page.
* Set availability before assigning events.
* Ensure SMS credits are sufficient if using reminders.
* Test public team page after major updates.
* Avoid disbanding team unless absolutely necessary.
# Teams & Workspaces
Source: https://help.lunacal.ai/workspace/teams-service-business
The Workspace feature allows you to manage team scheduling from a centralised environment.
Each workspace represents a team, department, or organization. Inside a workspace, you can manage:
* Shared event types
* Team bookings
* Member availability
* Integrations
* Branding & domain
* Permissions
Workspaces are ideal for service businesses, agencies, sales teams, coaching teams, and any organization with multiple schedulers.
## **What is a Workspace?**
A **Workspace** is a shared environment where a team operates together.\
Once you switch to a team workspace, your entire dashboard updates to reflect that team’s data — including events, bookings, members, and settings.
## Creating a Workspace
To create a new workspace:
1. Click the workspace dropdown (top-left corner).
2. Select **Create Team**.

3. Enter:
* Team name
* Team URL (slug)
* Select timezone
* click **Continue**

4. Confirm creation ( here you can add team member instantly or later )
5. Click **Finish**

**After creation** :
* You automatically become the **Owner**
* You can invite members & admins ( from team members seciton )
* You can create team event types
* All settings inside this workspace apply to the team only
## **Switching Between Workspaces**
You can switch workspaces using the **dropdown in the top-left corner** of your dashboard.
* Select your personal workspace or any team workspace you’re part of
* When you switch to a team workspace, all sections (events, bookings, settings, etc.) will show **team-level data**
| Feature | Personal Workspace | Team Workspace |
| :----------- | :----------------- | :---------------------- |
| Members | 1 | Multiple |
| Event Types | Personal only | Team events |
| Bookings | Personal bookings | Team bookings |
| Availability | Your own | Team availability |
| Integrations | Personal | Can apply at team level |
| Branding | Personal page | Team booking page |
## Team Members & Roles
You can invite members via email.
### Available Roles & Permissions
| Owner | Admin | Member |
| :----------------- | :------------------------ | :-------------------------- |
| Full control | Can manage events | Can manage assigned events |
| Can disband team | Can manage bookings | Can manage own availability |
| Can manage billing | Can invite/remove members | Cannot manage team settings |
| Can assign roles | Cannot disband team | Cannot disband team |
## Team Event Types
Team event types differ from personal events.
They allow multiple members to participate.
When creating a team event, you can configure:
## Event Types
[**Round Robin**](https://help.lunacal.ai/round-robin-scheduling)
* Bookings rotate between assigned members.
[**Collective**](https://help.lunacal.ai/collective-schedule)
* All selected members must be available.
* The meeting includes everyone.
[**One to One Event**](https://help.lunacal.ai/event-types/managed-event)
* Booking is routed to a specific member.
## **Workspace Dashboard Sections**
When you’re inside a team workspace, you’ll see the following tabs on the left sidebar:
### **Event Types**
Use **Event Types** to create and manage events for your team.
From here, you can:
* Create new **team event types**
* Edit or manage existing team events
* Control availability, duration, buffers, and other event settings
Learn more: [https://help.lunacal.ai/event-types/event-setup](https://help.lunacal.ai/event-types/event-setup)
### **Bookings**
The **Bookings** section shows all bookings made for team events.
You can:
* View upcoming and past team bookings
* Manage or reschedule bookings
* Cancel bookings when needed
Learn more: [https://help.lunacal.ai/manage-bookings](https://help.lunacal.ai/manage-bookings)
## Team Members
Manage everyone who belongs to your team workspace.
From the **Team Members** section, you can:
* View all team members
* Invite new members via email
* Change member roles
* Remove members from the team
* View each member’s booking page
### **Booking Page**
The **Booking Page** section lets you manage how your team appears to visitors.
You can:
* View and edit the [**team booking page**](https://help.lunacal.ai/workspace/edit-team-booking-page)
* View and edit **individual team member booking pages**
* Control branding and page visibility
### **Integrations**
Set up integrations and apps that apply to the entire team.
You can:
* Connect calendars
* Enable video conferencing tools
* Configure other supported integrations for team scheduling
Learn more: [https://help.lunacal.ai/integration](https://help.lunacal.ai/integration)
### **Settings**
The **Settings** section controls overall team configuration.
From here, you can manage:
#### **Team Details**
* Upload team logo
* Update team name
* Customize team URL
* Set visitor language (used for booking pages, emails, and invites)
#### **Webpage SEO & Branding**
* Edit meta title and description
* Customize social preview image
* Control how your team page appears in search results and social shares
#### **Privacy & Branding Options**
* Make team private (hide team members from each other)
* Remove “Built with lunacal.ai” branding from scheduling pages
#### **Availability & Workflows**
* Create or update **team availability**
* Manage existing workflows or create new ones
#### **Domain Settings**
* Change the booking page domain if you’ve configured a custom domain for your lunacal account
#### **Danger Zone**
* **Disband Team** (permanently deletes the team — this action cannot be undone)
## **When Should You Use a Workspace?**
Workspaces are ideal when you:
* Manage multiple people or departments
* Offer team-based scheduling
* Need shared event types and bookings
* Want centralized control over branding, availability, and workflows
# Zapier Integration with Lunacal
Source: https://help.lunacal.ai/zapier
Learn how to automatically send data from Lunacal.ai to Zapier.
## Overview
With Lunacal.ai’s Zapier integration, you can automate workflows that respond to booking events. This guide walks you through setting up a Zap that captures data from your booking and sends it directly to zapier — helping you keep track of marketing sources effortlessly.
## ✅ Prerequisites
Before you start:
* A [Zapier](https://zapier.com) account
* A [Lunacal.ai](https://lunacal.ai) account
## 🔌 Step 1: Connect Zapier in Lunacal.ai
1. Log in to your Lunacal dashboard.
2. In the left sidebar, click on **Integrations**.
3. Select **Automation** from the integration categories.
4. Click the **Connect** button on the **Zapier** card to initiate the connection.
***
## 🔑 Step 2: Generate and Save Your API Key
After clicking **Connect**:
1. Lunacal.ai will generate a unique **API Key**.
2. Copy the API key — **you won’t be able to view it again**.
3. Paste and save it in a secure place (we will be needing it in next step).
4. Click **Done** to complete the setup on Lunacal.
## 🧠 Step 3: Link Lunacal.ai to Zapier
1. Open [Zapier](https://zapier.com) and go to **My Apps**.
2. Click **+ Add Connection**.
3. Search for **Lunacal.ai** and click on it.
4. When prompted, paste the **API key** you saved earlier.
5. Zapier will verify and establish the connection to Lunacal.
***
## ⚙️ Step 4: Build Your Zap Workflow
### 4.1 Set up the Trigger
1. Click **+ Create Zap** in Zapier.
2. In the **Trigger** step, search and select `Lunacal.ai`.
3. Currently, there are three event triggers available:
* **Booking Cancelled** **:** Triggered when a booking is cancelled
* **Booking Created** **:** Triggered when a new booking is created by any user.
* **Booking Rescheduled :** Triggered when an existing booking is rescheduled for future.
4. Under **Event**, choose `Booking Created`.
5. Choose the Lunacal account you just connected.
6. Click **Test Trigger** to ensure data is received correctly.
* This helps Zapier fetch a sample payload for configuration.
* Make sure you have at least one booking in Lunacal to test with
### 4.2 Set up the Action with Google Sheets \[ or any app of your choice ]
Now we’ll write this booking data to a Google Sheet.
1. In the **Action** step, search for and select `Google Sheets`.
2. Choose the action event: **Create Spreadsheet Row**.
3. Connect your Google account if you haven’t already.
4. Select the spreadsheet and worksheet where the data should go.
5. Ensure the sheet has the following columns created beforehand:
* `Name`
* `Email`
> **Note:** You can add more fields like `createdAt`, `Event Name`, etc. These must exist in the sheet before proceeding.
### 4.3 Configure Data Mapping
You’ll now map Lunacal.ai booking fields to the Google Sheet columns:
| Google Sheet Column | Lunacal.ai Field Example |
| ------------------- | -------------------------- |
| Name | `1. Responses Name Value` |
| Email | `1. Responses Email Value` |
## 🧪 Step 5: Test and Publish
1. Click **Test Action** in Zapier to send a test row to your sheet.
2. Confirm that the data appears in the correct cells.
3. Once validated, click **Publish** to activate your Zap.
4. You’re done — future bookings will now be pushed to Google Sheets automatically!
## ✅ Outro
You’ve now connected Lunacal.ai and Zapier to:
* Trigger workflows when bookings are created
* Push data to Google Sheets without manual work