Also in Features:
Every booking becomes an order — payments, refunds, and all
Every booking becomes an order — track payments, process refunds, and manage revenue in one place
Every Booking Becomes an Order
When a customer completes a booking, Opencals creates an order. That order tracks everything: confirmation, payments, reschedules, cancellations, refunds. You can search and filter the entire list.
Per-booking
Order created
Stripe
Standalone payments
Shopify
Widget payments
Full / Partial
Refund options
Orders start at #1001 and increment from there. Each one contains line items (the appointments), payment transactions, and an activity log.
Payment Processing
Standalone mode — connect Stripe to accept card payments at booking. Stripe handles PCI compliance and fraud protection, supports all major cards.
Shopify mode — bookings through the Shopify widget go through Shopify Payments. Each appointment becomes a Shopify order, so service revenue and product revenue sit together. If you also run the Opencals storefront, those bookings can use Stripe instead.
You can also accept manual payments (cash, bank transfer) by marking the order as paid in the dashboard with a note about the payment method.
Pay by invoice — with Stripe connected, you can add "Pay by invoice" as a checkout option. The customer places the booking without entering a card, and gets a Stripe invoice they can pay online. The link is on their confirmation page and in their email. When they pay it, the order is marked as paid on its own.
Approve Bookings Before They're Confirmed
You decide which bookings are confirmed on their own. In Settings → Booking confirmation, pick one:
- Confirm every booking automatically — every booking is confirmed at checkout. This is how Opencals has always worked.
- Confirm automatically when conditions are met — otherwise you review the booking. Build the conditions from: paid within a set time, booked far enough ahead, order total, payment method and the customer's previous bookings. Combine them with All of or Any of, and nest groups for rules like "paid within 24 hours, or booked at least 2 days ahead".
A booking that doesn't qualify shows as Awaiting confirmation in your appointments list, with a note saying why: still waiting for payment, or waiting for you. Open it and click Approve or Decline. Declining frees the slot and lets the customer know. The slot stays held while you decide, so nobody else can take it. Bookings you create yourself aren't checked against these conditions.
For "Paid within", choose what happens if the customer doesn't pay in time: Cancel the booking, or Let me review it. Type any duration, like "2 days 4 hours" or "30 minutes", up to 90 days. When a booking is cancelled for non-payment, Opencals releases the slot, voids any open invoice and emails the customer. The order stays on record with nothing due. Bookings that are partly paid are never cancelled automatically, and cash bookings have no payment time limit.
You can also set a review deadline: bookings you haven't reviewed within that time of reaching you are declined. Without one, you can review a booking up to its start time. Changing your conditions never affects bookings that were already made.
Order Search and Filters
Find any booking instantly. Filter orders by:
- Payment status — unpaid, partially paid, paid
- Fulfillment status — unfulfilled, partially fulfilled, fulfilled
- Refund status — unrefunded, refund owed, partially refunded, fully refunded
- Date range, staff member, service, or customer
Refund owed
When a customer cancels an appointment, the order status changes to "refund owed." The dashboard surfaces these automatically so you don't miss a refund that needs processing.
Refunds
Process full or partial refunds from the Orders dashboard. Select which appointments to refund, review the total, confirm. The refund goes back to the customer's original payment method automatically.
On Shopify, refunds processed in the Opencals dashboard sync back to Shopify — the order status updates in both systems.
Edit Orders After Booking
Customers change their minds after they pay. Open the order, click Edit, and change what they booked: move them to another studio or room at the same time, make a booking longer or shorter, swap the staff member or location, add or remove appointments, or change add-ons.
Nothing changes until you click Update order. Before that, the summary shows the new total, which discounts still apply (and any automatic discount the new order now qualifies for), and the difference: an amount to collect or a refund owed. Collect it with an invoice or mark it as paid, or refund it, from the same order. The customer's payment history stays on one order instead of being split across a cancelled booking and a new one.
The customer gets one email with everything that changed, and their calendar invites update.
No-Show Management
Mark any booking as a no-show from the orders view. This records it in the order history. Combined with the Deposits & Cancellations feature (beta), marking a no-show can trigger an automatic fee charge.
Shopify Order Sync
On Shopify, orders exist in both dashboards:
- Shopify admin — view using Shopify's native orders interface
- Opencals dashboard — full order management including refunds, manual payments, and detailed appointment data
Actions in the Opencals dashboard (refunds, mark-as-paid) sync back to Shopify automatically.
Deposits & Cancellations
Require deposits and enforce cancellation policies per service. (Beta)
Analytics
Revenue tracking, order stats, and service performance breakdowns.
Shopify Integration
How bookings become Shopify orders and sync between platforms.
Frequently Asked Questions
Get started
Ready to transform your service business?
Join 150+ businesses already using Opencals. Start on a free development store with every feature unlocked, and only pay once you go live.