The Services page is where you manage everything you offer to customers — from a 30-minute haircut to a week-long equipment rental. Each service has its own name, description, duration, price, eligible branches, linked resources, add-ons, cancellation policy, and payment settings.
The Services page at /provider/services shows all your services in a table. Each row displays:
| Column | What It Shows |
|---|---|
| Name | Service name with its short description underneath |
| Status | Two badges — one for active/inactive, one for verification status |
| Duration | How long the service takes (e.g. "60 minutes", "2 hours", "3 days") |
| Price | The base price in your currency (e.g. 150.00) |
| Actions | Buttons to edit, manage add-ons, toggle active/inactive, or archive |
Type in the search box to filter by service name or short description.
New services go through a verification process before they appear on your public booking page:
| Badge | Status | Meaning |
|---|---|---|
| Pending (yellow) | Waiting for admin review | You submitted the service, the platform team needs to check it |
| Approved (green) | Passed review | Fully bookable — customers can see and book this service |
| Resubmitted (blue) | Changed after approval | You edited an approved service; it needs re-review |
| Rejected (red) | Did not pass review | Read the admin's notes below the badge, fix the issue, and resubmit |
To activate a service that was in draft, set its status to Active. The system then submits it for admin review. You can't activate a service that was rejected until you fix the issues mentioned in the admin notes.
Click Create to open the service form. It is organised into sections, each explained below.
{info} Reservai is built for everything from a simple 30-minute appointment to complex multi-resource day rentals with AI-powered booking. That's why you'll see many options. You don't need to configure everything at once. Fill in the required fields — name, duration, price, resources — and your service will work. Come back to explore deposits, recurring, resource pools, or add-on option groups as your business needs grow. Each section below explains when and why you'd use it.
| Field | What to Enter | Why It Matters |
|---|---|---|
| Service Name | A clear name customers will recognise | Used everywhere — the list, the booking page, invoices |
| Status | Draft or Active | Draft saves without publishing; Active submits for review (see Verification) |
| Description | Full description using the rich-text editor | Customers see this on the booking page — add details about what the service includes, how to prepare, what to expect |
| Short Description | A brief summary (max 500 characters) | Shown in search results and on service cards — keep it punchy |
| Includes | A list of what's included, one item at a time | Type each item and press Enter. Example for a car wash: "Exterior wash", "Interior vacuum", "Tyre shine", "Window cleaning". These appear as a bullet list on the booking page. |
| Service Image | A photo representing the service | Upload one image (JPEG, PNG, or WebP). Shows on the booking page next to the service details. Good lighting and clear subjects work best. |
| Field | What to Enter | Example |
|---|---|---|
| Duration Value | How many units the service takes | 60 |
| Duration Unit | Minutes, Hours, or Days | Minutes for a massage, Days for a rental |
{primary} The duration unit affects how the service is scheduled. Minutes/Hours create time-slot appointments (e.g. a 60-minute massage at 10:00–11:00). Days create day-based rentals (e.g. a 3-day equipment hire with check-in and check-out dates).
Enter a Base Price for the service. This is the starting price in your currency (e.g. 150). Add-ons can increase the total (see Services & Pricing).
Select which of your branches offer this service. You must choose at least one.
Resources are the people, rooms, equipment, or vehicles needed to deliver your services. Before you can assign resources here, you need to create them on the Resources page.
This section builds up from a simple example to show how resources work together.
A haircut needs a hairstylist. That's it — one person, one resource.
You select the stylist from the dropdown. This is a primary resource — the main person or thing the customer books with.
Every resource has a schedule that you set separately on the Resource Scheduling page. The schedule defines when the resource is available (e.g., "Monday–Friday, 9 AM to 5 PM"). The system checks this schedule whenever a customer tries to book.
If the stylist is already booked at 10:00, the 10:00 slot is unavailable. Simple.
Each resource has a behaviour that determines how many bookings it can handle at the same time:
| Behaviour | Meaning | Examples |
|---|---|---|
| Operational | One booking at a time. Once booked, the resource is occupied for the full slot. No other customer can book the same time. | A hairstylist, a captain, a massage table, a piece of equipment |
| Hub | Can handle multiple bookings at the same time, up to a set capacity. Like a room that fits several people at once. | A yoga studio (capacity 20), a boat (capacity 20), a parking lot |
Quick example:
You set the behaviour when you create the resource (see Resources). The schedule you set on the Resource Scheduling page defines the operating hours for both types.
Some services need more than one resource to run. For example, a boat tour needs both a boat and a captain.
When you select a second resource, you'll see a checkbox labelled Resource Is Relevant. This lets you mark a resource as a supporting role:
| Role | Checkbox | What It Means |
|---|---|---|
| Primary (default) | Unchecked | The main resource. The customer picks this when booking. At least one primary is required. |
| Relevant (support) | Checked | Also required, but secondary. The system checks this resource too — it must be free and have schedule coverage. |
Both roles affect availability. If the relevant resource is closed or already booked by another service, the slot is blocked — even if the primary resource is free. You must have at least one primary; you cannot mark all resources as relevant.
Let's say you run boat tours. Your service needs:
| Resource | Role | Behaviour | Why |
|---|---|---|---|
| The boat | Primary (unchecked) | Hub, capacity 20 | The main item the customer books. A Hub boat can take multiple tour groups simultaneously up to 20 people. |
| The captain | Relevant (checked) | Operational | Also required — you can't run a tour without a captain. But the captain is Operational (one tour at a time). |
When a customer books the boat tour for 5 guests at 10:00:
Now, what happens if another customer tries to book the same tour for 10 people at 10:00?
What happens if you have a second service — "Captain's Hour" — that uses the captain as its primary resource, and someone tries to book it at 10:00?
This is the key point: a relevant resource blocks ALL other services that need it, just like a primary resource does.
| Scenario | Primary Resource | Relevant Resource | Can You Book? |
|---|---|---|---|
| Both have schedule coverage and are free | ✅ Ready | ✅ Ready | ✅ Yes |
| Primary is free, relevant is already booked | ✅ Free | ❌ Busy | ❌ No |
| Primary is free, relevant has no schedule today | ✅ Free | ❌ Closed | ❌ No |
| Primary is a Hub with capacity, relevant is free | ✅ Has space | ✅ Ready | ✅ Yes |
| Primary has capacity, relevant is booked | ✅ Has space | ❌ Busy | ❌ No |
{primary} A service can have multiple primary resources. For example, you could add 5 hairstylists all as primary resources (unmarked). The customer would then pick their preferred stylist, or the system auto-assigns one depending on the selection mode below. Each primary resource is checked independently — if one is busy, the others may still be available.
When the service has a buffer configured (see Services & Pricing), each selected resource shows an Applies Buffer After Booking checkbox:
Not every resource needs turnaround time. A room might need 15 minutes to clean between appointments, but a staff member can start a new booking immediately. The system requires at least one resource to have buffer enabled.
{primary} The total booking slot is: Service duration + sequential add-on durations + buffer (if enabled for the resource). Without buffer (0 min), the toggle is hidden entirely.
For relevant (support) resources, you can optionally group them into a named pool. A pool marks resources as interchangeable — when one is busy, the system checks others in the same pool before blocking the slot.
Example — Boat Tour Service:
Without a pool, each relevant resource is checked independently. If Staff A were busy and no pool existed, the slot would be blocked even though Staff B is free.
| Scenario | With Pool | Without Pool |
|---|---|---|
| Primary free, one relevant busy, another relevant free from same pool | ✅ Available (system uses the free one) | ❌ Blocked |
| All resources in pool are busy | ❌ Blocked | ❌ Blocked (same result) |
The Resource Selection Mode (next section) controls whether customers see and choose from these resources when booking.
| Mode | Meaning | Best For |
|---|---|---|
| Required | The customer must pick a specific resource when booking | Multiple staff members offering the same service — let the customer choose their preferred stylist, therapist, or room |
| Optional | The customer can pick a resource but doesn't have to | When you have multiple equivalent resources — the system assigns one automatically if the customer doesn't pick |
| Hidden | The system auto-assigns the resource behind the scenes | Single-resource services — the customer doesn't need to know which room or staff member they're getting |
| Field | What It Does | Example |
|---|---|---|
| Max Participants | The maximum number of people who can book this service in a single slot | A yoga class with max 15 participants means 15 people can book the same 10:00 AM slot. Leave empty for one-person appointments. |
| Enable Group Bookings | Lets customers book for multiple guests at once | A customer booking a yoga class for themselves + 2 friends (3 people total). When enabled, add-ons can also be charged "per guest" (see Add-On Charge Units). |
Example — Yoga Class:
Example — Haircut:
Enable this if customers should be able to book a repeating series, such as a weekly massage every Monday for a month.
Example — Personal Training Package: A customer wants to book 8 personal training sessions — every Monday and Wednesday for 4 weeks.
| Field | Setting for This Example |
|---|---|
| Recurring Enabled | ✅ On |
| Recurring Intervals | Select "weekly" |
| Max Occurrences | 8 (4 weeks × 2 sessions per week) |
| Payment Policy | Pay as you go — customer pays per session; Full upfront — customer pays for all 8 at once |
| Fixed Occurrences | ✅ On — the customer commits to exactly 8 sessions |
Available recurrence intervals:
| Interval | Example |
|---|---|
| Daily | Every day (Mon–Sun) until max occurrences reached |
| Every other day | Monday, Wednesday, Friday... |
| Weekly | Every Monday, every Tuesday, etc. |
| Biweekly | Every other week on the chosen day |
| Monthly | Same date every month |
Payment policies for recurring bookings:
| Policy | When Money Is Collected | Best For |
|---|---|---|
| Pay as you go | Before each occurrence | Ongoing commitments — the customer can skip a week |
| Full upfront | At the time of first booking | Fixed packages — training programs, course series |
Fixed Occurrences: When enabled, the customer commits to a set number of sessions. When disabled, each session can be booked independently within the recurring window.
These toggles control how customers can pay for THIS specific service. They override your default payment settings.
| Toggle | What It Means | When It's Available |
|---|---|---|
| Accept Credit Card | Customers can pay by card online through your gateway | Requires online payment setup (your own Stripe Connect, or PayPal where supported) |
| Cash on Delivery | Customers pay at the appointment in cash | Always available, but disabled when a deposit is required (deposits need online payment) |
How card payments reach you: you connect your own Stripe account, customers pay you directly, and the money settles in your gateway. Reservai tracks the booking, invoicing and commission but never holds your money.
{info} If you haven't set up online payment, a blue notice appears at the top of the section: "Online payment is not configured for your account. Only Cash on Delivery is available." In that case, the credit card toggle is greyed out.
Require a deposit to lock in a booking. Deposits are collected immediately; the balance is due later.
| Field | What to Enter | Example |
|---|---|---|
| Deposit Required | ✅ On to require a deposit | 200 service → 50 deposit |
| Deposit Type | Fixed (specific amount) or Percent (percentage of total) | Fixed = 50; Percent = 25% |
| Deposit Value | The amount or percentage | 50 (for fixed) or 25 (for percent) |
{warning} Enabling deposits switches off Cash on Delivery automatically, because deposits require online card payment.
| Field | What It Does | Example |
|---|---|---|
| Cancellation Policy Text | Free-text policy customers see when booking | "Cancel at least 24 hours before your appointment for a full refund." |
| Free Cancellation Window | How long before the appointment customers can cancel for free | 24 hours before — a customer with a 10 AM Tuesday appointment can cancel any time before 10 AM Monday |
| Total Fee Refund % Before Deadline | % refunded if cancelled before the free window | 100% — full refund |
| Total Fee Refund % After Deadline | % refunded if cancelled after the free window | 50% — half refund |
| Allow Customer to Cancel | Let customers cancel from their account | ✅ On recommended — reduces no-shows |
Available free cancellation windows: 30 minutes, 1 hour, 2 hours, 5 hours, 12 hours, 16 hours, 1 day, 2 days, 3 days, 5 days, 10 days, 20 days, 30 days
{primary} Deposit refund rules appear when deposits are enabled. You set separate refund percentages for the deposit portion vs the total fee. Example: you might keep the deposit (0% deposit refund) but still refund the service fee if cancelled early.
| Field | What It Does | Example |
|---|---|---|
| Collect No-Show Fee | ✅ On to charge a fee if the customer doesn't arrive | Applies when customer doesn't show and doesn't cancel |
| No-Show Retained % | What % of the service fee is charged | 100% — full service fee charged. 50% — half fee charged |
Example: A 200 service with 100% no-show retained → if the customer no-shows, they are charged 200 (or the deposit is kept if a deposit was taken).
Toggle Invisible Custom Service if this service should only be available at your counter (point of sale), not on the public booking page. Use this for:
When enabled, the service won't appear on your public profile page regardless of its verification status.
Add-ons are extra items or options customers can add when booking a service. Manage add-ons from the service list by clicking the Add-ons button on any service row.
| Field | What to Enter | Example |
|---|---|---|
| Name | A clear name customers will recognise | "Extra waxing", "Insurance", "Engraving" |
| Price | The cost of the add-on (hidden if using options — see below) | 50 |
| Description | Optional explanation | "Full undercarriage wash — adds 15 minutes" |
| Image | Optional photo | An image of the add-on item |
Toggle Has Options to turn the add-on into a choice group where customers pick from variants, each with its own price. This replaces the need for separate add-ons for each variant.
Example — Car Wash "Protection Package" add-on with options:
| Option | Price |
|---|---|
| Basic wax | 0 |
| Standard wax | 50 |
| Premium ceramic coating | 150 |
The customer sees these as choices during booking. The add-on price changes based on their selection.
Options setup:
Required toggle: When Is Required is ON, the customer must pick one of the options. When OFF, the add-on is optional and the customer can skip it entirely.
{primary} Option groups are great for upgrades, insurance tiers, package sizes, or any add-on where you want to offer choices at different price points. A single add-on replaces what would otherwise need multiple separate add-on entries.
The charge unit determines how the add-on price is calculated:
| Charge Unit | How It's Calculated | Example | When Available |
|---|---|---|---|
| Once per booking | One flat fee regardless of guests or duration | 50 "Insurance" = 50 total | Always |
| Per guest | Price × number of guests | 25 "Welcome drink" × 3 guests = 75 | Requires group bookings on the service |
| Per day | Price × number of rental days | 100 "GPS unit" × 3 days = 300 | Requires day-based duration |
| Per guest & day | Price × guests × days | 15 "Breakfast" × 3 guests × 2 days = 90 | Requires both group bookings and day-based duration |
The dropdown only shows charge units that are valid for the current service. If only "Once per booking" is available, you'll see a notice explaining the other units require group bookings or day-based duration.
If you no longer offer a service, you can archive it. Archiving removes it from the public booking page but keeps the data for historical records (past bookings, reports, transactions).
Click the Archive button in the service's action row. If the service has upcoming bookings, you'll see a warning listing those bookings — you can either wait for them to pass or cancel them first.
Archived services can be reactivated later.