> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.hoppyapps.com/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# 📅 How to Setup Appointment Booking Services

Want to let customers book appointments, classes, rentals, or sessions directly from your Shopify store? 🗓️

That’s exactly what **Hoppy Appointments** is designed for.

With Hoppy Appointments, you can turn any Shopify product into a bookable service, such as:

* 💇 Salon & spa appointments  
* 🎓 Classes & workshops  
* 🏨 Stays & rentals  
* 🎾 Coaching sessions & consultations  
* 📦 Multi-session packages

Once set up, customers see a **Book Now** button on your product page. They pick a date and time from a clean calendar popup, answer your booking questions, and confirm — all without leaving your store ✨

Paid bookings are processed securely through your regular Shopify checkout, while free bookings are confirmed instantly.

This guide walks you through the complete setup, step-by-step 👇

---

# **⚠️ Before You Begin**

Before creating your first service, make sure:

* The **Hoppy Appointments** app is installed on your Shopify store  
* You have a **Shopify product** ready for the service you want to offer  
  → The product’s price becomes the booking price  
* You know roughly which **days and times** you want to accept bookings

💡 Just exploring? The first time you open the app, a guided setup offers to create a **sample service** for you, so you can see how everything works before connecting a real product.

ℹ️ The guided onboarding appears automatically for new stores and covers the same steps explained in this guide.

---

# **✅ Initial Step — Enable the App Embed**

For the Book Now button and booking calendar to appear on your storefront, the app embed must be enabled inside your Shopify theme.

Go to:

**Shopify Admin → Online Store → Themes → Customize → App Embeds**

Then:

* Find “**Appointment Bookings**”  
* Toggle it ON  
* Click **Save**

⚠️ Important:

Saving your service alone does not make it visible on the storefront. The app embed must be enabled for the booking widget to appear.

---

# **⚙️ Step 1 — Create a New Service**

Open the **Hoppy Appointments** app from your Shopify Admin.

You’ll land on the **My services** page, where all your booking services are listed.

Then:

→ Click **New Service**

→ Pick the service type that matches what you offer:

---

## **📅 Regular BookingOne time slot on a single day.**

Perfect for single appointments like consultations, classes, or salon visits.

### **Example**

A 30-minute haircut appointment on Tuesday at 2:00 PM.

---

## **🌙 Multiday BookingBookings that span multiple days.**

Perfect for stays and rentals that last several days, like hotels or equipment rentals.

### **Example**

A camera rental booked from the 10th to the 14th.

---

## **📦 Bundle BookingsA package of multiple appointments.**

Perfect for packages of multiple sessions, like class packs or membership credits.

### **Example**

A “10 Yoga Classes” pack where customers book each session one by one.

---

Once selected, the service setup page opens automatically.

ℹ️ Don’t worry about payments yet — every service type can be paid through Shopify checkout or offered for free. You’ll choose this later in the **Payment** tab.

---

# **🛍️ Step 2 — Connect Your Shopify Product**

Every booking service starts with a Shopify product.

Inside the **General** tab, open the **Booking** card:

→ Click **Select product** and choose the product you want customers to book.

This product controls:

* 💰 The booking price customers pay at checkout  
* 🖼️ The image shown on the booking page  
* 🏷️ The default service title, auto-filled from the product title

⚠️ Important:

A service needs atleast one product to link to it. If the product has a variant, then should link to one of the variants.

Once selected, you can swap it anytime using **Change**, or remove it with **Reset**.

---

## **🏷️ Booking Page Details**

Just below, the **Booking page** card controls what customers see while booking:

* **Title** → The name customers see when booking this service  
* **Description** → A short explanation of what customers can expect

### **ExampleTitle:** “Deep Tissue Massage — 60 Minutes”  
**Description:** “A relaxing full-body massage with our senior therapist. Please arrive 10 minutes early.”

💡 There’s also a **Google/Outlook event \- Title** field. This controls how the event appears on connected calendars. The variables `{{service_name}}` and `{{product_name}}` are replaced automatically — no need to edit them unless you want a custom format.

---

## **🔀 Duration to Variant Mapping**

ℹ️ This card only appears when your product has **multiple variants** AND your service offers **multiple durations**.

It lets you connect each duration to a specific product variant, so every duration can have its own price.

### **Example**

* 30 minutes → “30 Min Session” variant ($40)  
* 60 minutes → “60 Min Session” variant ($70)

If your product has only one variant, all durations simply use that variant’s price — nothing to configure here 👍

---

# **📍 Step 3 — Choose a Meeting Location**

The **Meeting location** setting tells customers where the appointment takes place.

You can choose from:

* **None** → No location is shared  
* **Google Meet / Zoom / MS Teams** → Online video meetings  
* **Phone call** → Share a phone number  
* **In person / At Location** → Share a physical address  
* **Custom** → Share any custom text or link

The location is shared with customers inside their **confirmation email** and **calendar invite**, so they always know exactly where to go 📬

---

## **🔗 Location Details (Conditional Field)**

Depending on your selection, an extra field appears automatically:

* **Google Meet / Zoom / Custom** → Paste your meeting link  
* **Phone call** → Enter the phone number  
* **In person / At Location** → Search and pick the address using the built-in address autocomplete

💡 Using **Google Meet**, **Zoom**, or **MS Teams**? Once the matching calendar is connected in the **Team** section, a unique meeting link is generated automatically for every booking — no manual link needed. See the **Integrations** documentation for connection steps.

---

## **🎫 Send Ticket QR Code**

ℹ️ This checkbox appears only for **In person** or **At Location** services.

Enable it to include a scannable QR ticket in the confirmation email — great for quick check-ins at events, classes, or venues ✅

---

# **📝 Step 4 — Customize the Booking Form**

The booking form is what customers fill in after picking their time slot.

By default, every form asks for:

* **First Name** (required)  
* **Last Name**  
* **Email** (required)

These three are always included, so you never lose track of who booked 🙌

To collect more details:

→ Click **Add a question**

You can add fields like:

* Short or multi-line text  
* Phone number  
* Dropdowns, radio buttons, checkboxes, or multi-select lists  
* Date, time, number, rating, link, or even file uploads

Each question can be marked as **required**, reordered by drag-and-drop, and edited anytime.

### **Example**

* “What would you like to focus on during the session?” (multi-line text)  
* “How did you hear about us?” (dropdown)

💡 Keep the form short — fewer questions usually means more completed bookings.

---

## **🔘 Optional — Floating Action Button**

Want customers to book this service from **any page** of your store — not just the product page?

Enable the **Floating Action Button** to display a floating **Book Now** button across your storefront.

Once enabled, you can customize:

* **Button Text** (default: “Book Now”)  
* **Position** → Bottom Right, Bottom Left, or Bottom Center  
* **Background & Text Colors** to match your brand

This is especially useful for high-demand services you want to promote storewide 🚀

---

# **🕒 Step 5 — Set Your Availability**

Now move to the **Availability** tab — this is where you control exactly when customers can book.

---

## **👤 Who Is This Availability For?**

First, choose how availability should work:

* **Availability per service** → Best for one person. The schedule you set below applies to the whole service.  
* **Availability per teammate** → Best for teams of 2–99. Bookings are checked against your team members’ own schedules.

When **per teammate** is selected, an **Assign teammates to this service** option appears so you can choose which team members offer this service.

ℹ️ Team members and their individual schedules are managed separately in the **Team** section. See the **Team Members** documentation for details.

---

## **📆 Weekly Hours or Specific Dates**

You can build your schedule in two ways:

### **Set Your Weekdays Availability (Default)**

A recurring weekly schedule.

* Toggle each day ON or OFF  
* Set **start and end times** for every working day  
* Add **multiple time intervals** per day using the **\+** button  
  → e.g. 9:00–12:00 and 14:00–18:00 with a lunch gap in between  
* Use the **copy icon** to quickly copy one day’s times to other days

### **Set Your Date Range Availability**

→ Click **or select specific dates** to switch.

Perfect for seasonal schedules, pop-up events, or limited-time services that only run between specific dates.

💡 For **Regular** services, you can also enable **Show availability by time of day** to group slots into morning, afternoon, and evening — making the calendar easier for customers to scan.

---

## **⏱️ Duration & Slot Settings**

These settings control how time slots are generated for customers:

* **Duration** → How long each appointment lasts (15 minutes to 4 hours, or create a **Custom** duration)  
* **Allow multiple durations** → Lets customers choose between different lengths, e.g. 30 or 60 minutes  
* **Booking interval** → The gap between bookable start times  
  → e.g. a 60-minute service with a 30-minute interval offers slots at 9:00, 9:30, 10:00…  
* **Buffer time** → Free time automatically blocked between appointments, so you always have a breather ☕

⚠️ Duration, booking interval, and buffer time are not used for **Multiday** services, since those bookings span full days.

---

## **⏰ Booking Rules**

* **Minimum scheduling notice** → Prevents last-minute bookings  
  → e.g. require at least 4 hours of notice before a slot can be booked  
* **Look ahead** → Controls how far in advance customers can book  
  → e.g. only allow bookings up to 30 days ahead

These two settings protect your calendar from surprise bookings and keep your schedule predictable 🛡️

ℹ️ **Look ahead** is not used for **Bundle** services, since customers book their package sessions as they go.

---

## **☕ Break Times & 🚫 Blocked Dates**

Need to block time off?

* **Break times** → Recurring daily blocks, like lunch every day between 1–2 PM  
* **Blocked dates** → Specific dates that can’t be booked at all — perfect for holidays, vacations, or days off

---

## **🌍 Timezone & Hour Format**

* **Timezone** → The timezone your availability is based on  
* **Show timezone selector** → Lets customers view slots in their own timezone  
* **Lock timezone** → Forces all customers to see times in your timezone  
* **24h format** & **Show hour format selector** → Controls how times are displayed

💡 For local, in-person services, enabling **Lock timezone** avoids confusing time conversions for traveling customers.

---

## **🔢 Booking Limits**

* **Maximum bookings per day** → Cap how many appointments can be booked in a single day  
* **Maximum bookings per time slot** → Allow multiple customers to book the same slot — perfect for **group classes** 🧘

### **Example**

A yoga class with **5 spots per time slot** lets 5 different customers book Tuesday at 9:00 AM.

ℹ️ Available limits vary slightly depending on your service type.

---

# **📦 Extra Settings for Multiday & Bundle Services**

Some settings only appear for specific service types. Here’s what to look for 👇

---

## **🌙 Multiday Services**

Inside the **General** tab, the **Multiday settings** card appears:

* **Is it a day or night booking?**  
  * **Day booking** → The 10th to the 11th counts as **2 days**  
  * **Night booking** → The 10th to the 11th counts as **1 night** — great for hotels & stays 🏨  
* **Fixed quantity** → When enabled, the price is **not multiplied** by the number of days or nights booked

Inside the **Availability** tab:

* **Minimum / Maximum bookable days** → Control the shortest and longest stay customers can book  
* **Available hours** → Set check-in / check-out style times

---

## **📦 Bundle Services**

Inside the **Availability** tab, choose **how many time slots customers can select**:

* **Fixed number of slots** → e.g. exactly 5 sessions per pack  
* **Range of slots** → e.g. customers choose between 3 and 10 sessions

Inside the **General** tab, the **Bundle settings** card offers:

* **Fixed quantity** → When enabled, the price is **not multiplied** by the number of selected sessions

---

# **💳 Step 6 — Configure Payments & Approval**

Move to the **Payment** tab to decide how customers pay and how bookings get confirmed.

---

## **💰 Payment Type**

* **Pay to Book** → Payment is required to complete the booking. Customers pay through your regular Shopify checkout — secure and familiar 🛒  
* **Book without pay** → Bookings are confirmed instantly without payment. Ideal for free services, discovery calls, or paying in person.

ℹ️ You can switch between the two anytime — nothing else about your service changes.

---

## **✅ Confirm/Decline a Booking**

* **Automatically accept bookings** → New bookings are confirmed instantly  
* **Do not automatically accept new bookings** → You review and manually confirm each booking first

⚠️ Important:

With manual confirmation, each booking must be accepted **within 24 hours**, or it is automatically declined. Make sure someone on your team keeps an eye on new requests 👀

---

## **⏳ Waitlist**

When your calendar fills up, enabling the **Waitlist** lets customers join a waiting list instead of leaving empty-handed.

* **Show waitlist when a slot is fully booked** → The waitlist option only appears on slots that are already full

ℹ️ Waitlist requests need your review and are only confirmed (and charged) after you approve them. The waitlist is not available for **Bundle** services.

---

## **💸 Partial Payments (Deposits)**

ℹ️ This card only appears when **Pay to Book** is selected.

Enable **Partial Payments** to let customers secure their spot with a **deposit** instead of paying the full amount upfront.

You can configure:

* **Percentage or Fixed amount** → e.g. 30% now, or $20 now  
* **Partial payment method** → **Selling Plans (Recommended)** saves the customer’s payment method so you can collect the balance later; **Draft Order** sends a manual invoice instead  
* **Give the option to pay fully or just the deposit** → Customers choose for themselves during booking

Deposits are a great way to reduce no-shows while keeping bookings accessible 💡

💡 If you enable the “pay fully or just the deposit” choice, make sure your booking form includes at least one custom question — the option is displayed inside the booking form.

---

# **🔧 Step 7 — Review Advanced Options (Optional)**

The **Advanced** tab contains a few optional settings worth knowing about during setup:

* **Booking Terms** → Add a terms & conditions checkbox to the booking form. Mark it **Mandatory** to require customers to accept before confirming.  
* **Redirect after booking** → *(Book without pay only)* Send customers to a custom page — like a thank-you page — after they confirm.  
* **Customize email** → Add a custom message to this service’s confirmation email, and choose whether customers see **Cancel** and **Reschedule** buttons in their emails.  
* **Minimum rescheduling / cancelling notice** → Prevent last-minute changes by requiring advance notice, e.g. 24 hours.

💡 Email templates themselves are managed globally under **Settings → Email Settings**. See the **Email Settings** documentation for details.

The **Advanced** tab also includes translation overrides for the booking widget — see the **Translations** documentation if your store sells in multiple languages 🌍

---

# **🎨 What About the Design Tab?**

The **Design** tab inside the service controls how the booking calendar, success page, reschedule page, and cancel page look.

By default, your service automatically follows your store’s **global design settings** — so it matches your brand with zero extra work ✨

To customize this service individually:

→ Enable **Do not Follow Default Theme Settings** to unlock per-service fonts, colors, logos, and custom CSS.

For a full walkthrough, see the **Design & Styling** documentation.

---

# **✅ Step 8 — Save & Publish**

Once everything looks good:

**1\. Save the service**

Click **Save** in the bar at the bottom of the page.

You’ll see a **“Service Created”** confirmation, and your service is now **Active** ✅

**2\. Check the app embed status**

If the **Appointment Bookings** app embed isn’t enabled yet, a banner appears with an **Enable App Embed** shortcut that takes you straight to your theme editor.

**3\. Preview your service**

Open the live product page on your storefront to experience the booking flow exactly as your customers will 👀

💡 The preview inside the setup page is approximate — always trust the availability shown on your live product page.

---

## **🛠️ Managing Your Service Later**

From the **My services** page, use the **More** menu on any service to:

* **Turn on / Turn off** → Temporarily hide a service from your store  
* **Duplicate** → Clone a service as a starting point for a new one  
* **Archive** → Retire services you no longer offer  
* **Copy Service ID** → Used for manual placements with the **Appointment Calendar** theme block

---

# **🎉 Final Result**

Once configured successfully:

✅ Your product page shows a **Book Now** button instead of Add to Cart  
✅ Customers pick dates & time slots from a beautiful calendar popup  
✅ Paid bookings flow through your secure Shopify checkout  
✅ Free bookings are confirmed instantly  
✅ Customers receive automatic confirmation emails with all the details  
✅ Your calendar stays protected with buffers, breaks, and booking rules  
✅ Your store offers a professional booking experience that runs itself ✨

With your appointment booking service live, customers can book with you 24/7 — even while you sleep 🚀

---