> ## 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 does Appointment Booking Cancellation & Refund Work

When a customer or your team cancels an appointment, Hoppy Appointments updates the booking record, cleans up linked calendar or video meetings, sends notifications, and — if the booking was paid through Shopify — can optionally cancel and refund the linked Shopify order automatically.

This guide explains the full cancellation and refund flow, what controls are available, and what happens behind the scenes.

---

# **⚠️ Before You Begin**

To use automatic refunds, make sure:

* ✅ The **Hoppy Appointments** app is installed  
* ✅ The service is connected to a paid Shopify product or variant  
* ✅ Bookings are created through Shopify checkout (a real order exists)  
* ✅ Customer and admin email notifications are enabled

> ℹ️ Free services, manual bookings, or "Book without pay" bookings can still be cancelled, but no Shopify order is involved, so no automatic refund happens.

---

# **👤 How Customer Cancellation Works**

Customers cancel their own booking through the confirmation or update email.

## **1\. Customer clicks the cancel link**

The email contains a cancel link rendered by the **\[Booking Actions Block\]** in your template. If the service has **Show cancel button in emails** enabled, the customer sees a **Cancel** button.

## **2\. Cancel page opens**

The customer lands on a branded cancel page that shows:

* Service name  
* Date and time  
* Duration  
* A **Cancel Booking** button

## **3\. Minimum cancelling notice is checked**

If the service has a **Minimum cancelling notice** set, the customer cannot cancel within that window. For example, a **24-hour** notice means the customer cannot cancel an appointment that starts in less than 24 hours.

> ⚠️ This notice window applies to **customers only**. Admin cancellations bypass it.

## **4\. Booking is cancelled**

After the customer confirms, the booking status changes to **Cancelled** and the following happen automatically:

* Linked Google / Outlook calendar events are removed  
* Linked Zoom meetings are removed  
* Cancellation emails are sent to the customer and your team  
* Shopify Flow "Booking Cancelled" trigger fires (if configured)  
* Analytics records the cancelled booking

---

# **🛠️ How Merchant Cancellation Works**

You can cancel a booking directly from the Bookings dashboard.

## **1\. Open the booking actions menu**

1. In the app, go to **Bookings**.  
2. Find the booking you want to cancel.  
3. Click the actions menu (⋯) on the right.

## **2\. Choose Cancel**

For future bookings on the **Bookings** tab, you'll see:

* **Reschedule**  
* **Cancel**  
* **Delete**

Click **Cancel** to open the same branded cancel page used by customers, but with an admin flag so the notice window does not apply.

## **3\. Confirm the cancellation**

Click **Cancel Booking** on the page. The booking status changes to **Cancelled** and the same cleanup and notifications run as with customer cancellations.

> ⚠️ **Delete is not the same as Cancel.** Delete permanently removes the booking from the dashboard and cannot be undone. Use **Cancel** when you want the customer to be notified and the order to be handled.

---

# **💰 Understanding the Refund Settings**

Refund behavior is controlled by store-wide toggles in **Settings → General → Refund and Cancellation settings**.

There are two independent pairs of toggles:

## **Customer cancellations**

* **Cancel order on customer cancel** — automatically cancels the linked Shopify order when a customer cancels  
* **Refund customer on customer cancel** — automatically refunds the customer when they cancel

## **Admin cancellations**

* **Cancel order on admin cancel** — automatically cancels the linked Shopify order when you cancel from the admin  
* **Refund customer on admin cancel** — automatically refunds the customer when you cancel from the admin

## **How the toggles depend on each other**

The **Refund** toggle only works if the matching **Cancel order** toggle is also enabled. In other words:

* To refund a customer cancellation → enable both **Cancel order on customer cancel** and **Refund customer on customer cancel**  
* To refund an admin cancellation → enable both **Cancel order on admin cancel** and **Refund customer on admin cancel**

If only **Cancel order** is enabled, the order is cancelled but the customer is not refunded automatically. You can still issue a refund manually from your Shopify admin.

## **What gets refunded**

When both toggles are on, the app tells Shopify to cancel the order and refund it in full. The refund uses Shopify's standard order cancellation flow, so:

* The full order amount is refunded  
* Inventory is restocked automatically  
* Refunds are processed through your existing Shopify payment provider

> ℹ️ The app does not support partial refunds, cancellation fees, or deposit-specific refund amounts. If you need a custom refund, handle it directly in Shopify.

---

# **⚙️ Service-Level Cancellation Controls**

Each service has its own cancellation rules under **Services → \[Service\] → Advanced → Booking options**.

## **Show cancel button in emails**

Controls whether customers see the cancel button in their booking emails. If this is off, customers cannot self-cancel from email.

## **Minimum cancelling notice**

Sets how close to the appointment customers can still cancel. Choose anywhere from **0 hours** to **6 weeks**. Admin cancellations ignore this setting.

## **Show reschedule button in emails**

Related option that controls whether the reschedule button appears in emails.

> 💡 These settings only affect customer emails and the customer-facing cancel page. They do not change refund amounts or admin behavior.

---

# **📧 What Happens After a Cancellation**

Once a booking is cancelled, the app performs several cleanup and notification actions:

### **Booking status**

* `bookingStatus` is set to **Cancelled**  
* The booking remains visible in the dashboard with a cancelled status

### **Calendar and video cleanup**

* Any Google Calendar or Outlook event tied to the booking is removed  
* Any Zoom meeting generated for the booking is removed

### **Emails**

* A customer cancellation email is sent using the **Send email on cancel** template  
* An admin cancellation email is sent to assigned teammates and the team admin  
* Default cancellation templates intentionally do not include the **\[Booking Actions Block\]**, so the customer cannot cancel or reschedule again from the cancellation email

### **Analytics and Flow**

* A `booking_cancelled` analytics event is recorded  
* The Shopify Flow **Booking Cancelled** trigger fires, sending booking details to any connected workflows  
* A cancelled-booking stat is recorded in ServiceStats

---

# **⚠️ Important Notes & Limitations**

* **Refunds require a Shopify order.** If the booking was free, created manually without an order, or made with "Book without pay", there is no order to cancel or refund.  
* **Refunds are full order only.** The app cannot issue partial refunds, keep cancellation fees, or refund deposits differently.  
* **Refund timing depends on Shopify.** The refund is initiated immediately, but the time it takes to appear in the customer's account depends on the payment provider.  
* **Admin bypasses notice windows.** The minimum cancelling notice applies only to customers.  
* **Bundle bookings cancel per date.** Each date in a bundle is a separate booking with its own cancel link. Cancelling one date does not cancel the entire bundle.  
* **Multiday bookings cancel normally.** The cancel page shows the duration in days, but the cancellation logic is the same as a regular booking.  
* **Waitlist bookings are declined, not cancelled.** When you decline a waitlist request, it uses a separate flow and sends a booking-declined notification.  
* **Delete is permanent.** Deleting a booking from the dashboard removes it entirely and does not trigger cancellation emails or refund logic.

---

# **🐞 Troubleshooting**

## **Cancelled bookings are not refunded**

1. Go to **Settings → General → Refund and Cancellation settings**.  
2. Make sure the matching **Cancel order** toggle is enabled.  
3. Make sure the matching **Refund customer** toggle is also enabled.  
4. Confirm the booking had a linked Shopify order.

## **Customer says the cancel button is missing**

1. Open the service and go to **Advanced → Booking options**.  
2. Make sure **Show cancel button in emails** is enabled.  
3. Check that the email template includes the **\[Booking Actions Block\]**.  
4. Verify the customer is not inside the **Minimum cancelling notice** window.

## **Customer sees an error when trying to cancel**

The customer may be inside the minimum cancelling notice window. Check the **Minimum cancelling notice** value on the service.

---

# **🎉 Final Result**

Now you understand how cancellation and refund work in Hoppy Appointments:

* ✅ Customers can cancel from their booking emails within the notice window you set  
* ✅ Merchants can cancel from the Bookings dashboard without notice restrictions  
* ✅ Shopify orders can be cancelled and refunded automatically when the right toggles are enabled  
* ✅ Cancellation emails are sent to customers and your team  
* ✅ Linked calendar events and video meetings are cleaned up automatically

For setup instructions, see the related guides below.

---

# **📚 Related Articles**

* **How Customers Reschedule or Cancel Appointments**  
* **How does Payments work with Appointment Bookings**  
* **How to Manage Bookings in Dashboard?**  
* **How to Configure Email Notifications for Appointment Bookings?**  
* **Appointment Bookings — Types of Bookings Explained**