> For the complete documentation index, see [llms.txt](https://ovatheme.gitbook.io/brw/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ovatheme.gitbook.io/brw/create-a-product/rental-type-config/by-appointment.md).

# By Appointment

<figure><img src="/files/9Gd3DXaM70gz4SjN5oU8" alt=""><figcaption></figcaption></figure>

The **Rental by Appointment** type replaces the free date-range picker with a **time slot selector**. You define available slots for each day of the week (Monday through Sunday) — each with its own label, start/end time, price, and quantity. Customers pick a date and choose from the slots available on that day.

{% hint style="info" icon="lightbulb-exclamation" %}
Use this type for any service where sessions have a fixed start time and duration: spa treatments, medical appointments, photography sessions, tutoring hours, studio bookings, and similar.
{% endhint %}

| Aspect             | Rental by Day     | Rental by Appointment                    |
| ------------------ | ----------------- | ---------------------------------------- |
| Customer selects   | Free date range   | A date + a time slot                     |
| Duration           | Customer-defined  | Fixed by slot Start–End time             |
| Pricing unit       | Price per day     | Price per slot                           |
| Seasonal overrides | Special time (ST) | Special Timeslots (override slot prices) |
| Inventory          | car\_count stock  | Quantity per slot (per day)              |
| Drop-off date      | Customer picks    | Auto from slot end time                  |
| GD / Daily plan    | ✓                 | — Not available                          |
| Locations          | ✓                 | — Not available                          |

## 1: Quick Start

{% stepper %}
{% step %}

### Add General fields

Read in [overview](/brw/create-a-product/overview.md)
{% endstep %}

{% step %}

### [Choose Rental Type](#id-2-choose-rental-type)

{% endstep %}

{% step %}

### [Pricing Settings](#id-3-pricing-settings)

{% endstep %}

{% step %}

### [Shared Fields](#id-4-shared-fields)

The following fields are shared across multiple rental types.
{% endstep %}

{% step %}

### [Common Fields](#id-5-common-fields)

The following fields are shared across all rental types.&#x20;
{% endstep %}

{% step %}

### [Customize Fields in Product Editing](#id-6-customize-fields-in-product-editing)

You can add/remove fields in product editing.
{% endstep %}

{% step %}

### Publish

Set a WooCommerce Regular Price for display purposes, then click **Publish**. The actual booking price is always calculated by BRW settings.
{% endstep %}
{% endstepper %}

## 2: Choose Rental Type

* Step 1: Add new product
* Step 2: Setup&#x20;
  * Product data: Rental
  * Rental Type: Appointment

<figure><img src="/files/ayLjL7kGsHsEIcAOD7Sx" alt=""><figcaption></figcaption></figure>

## 3: Pricing Settings

### 3.1 Time Slots (per weekday) <a class="button primary">time-slots</a>

Define the available booking slots for each day of the week. Each day has its own independent table of slots. Days with no slots configured are treated as unavailable.

<a class="button secondary">Mon</a><a class="button secondary">Tue</a><a class="button secondary">Wed</a><a class="button secondary">Thu</a><a class="button secondary">Fri</a><a class="button secondary">Sat</a><a class="button secondary">Sun</a>

**Use Location** (`use_location`): Checkbox at the top of the Time Slots section. When enabled, a *Location* column appears in every day's slot table, allowing each slot to be tied to a specific place (e.g. Room A, Branch 2).

**Per-day slot table columns** — meta key pattern uses `{day}` = `monday`, `tuesday`, … `sunday`:

| Column   | Meta key                       | Description                                                                                                                        |
| -------- | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
| Label    | `time_slots_label[{day}][]`    | Optional display name for the slot shown to customers (e.g. "Morning Session", "Slot A"). Leave blank to show only the time range. |
| Location | `time_slots_location[{day}][]` | Optional location name for this slot. Only visible when **Use Location** is enabled.                                               |
| Start    | `time_slots_start[{day}][]`    | Start time of the slot (time input, e.g. `09:00`). Shown to customers in the slot selector.                                        |
| End      | `time_slots_end[{day}][]`      | End time of the slot (time input, e.g. `10:00`). Optional — if blank, only the start time is displayed.                            |
| Price    | `time_slots_price[{day}][]`    | Price for this slot. This is the booking price charged when a customer selects this slot.                                          |
| Quantity | `time_slots_quantity[{day}][]` | Maximum number of simultaneous bookings allowed for this slot on any given day. Acts as per-slot inventory.                        |

{% hint style="info" %}
You can add multiple slots per day. For example, Monday can have a 09:00–10:00 slot at $50 (qty 2) and a 14:00–15:00 slot at $60 (qty 1). Each slot is booked independently.
{% endhint %}

{% hint style="danger" %}
Days with **no slots configured** will appear as unavailable in the date picker — customers cannot select those dates. To close a specific date, use the Disabled Dates feature in Common Features → Availability.
{% endhint %}

### 3.2 Special Timeslots (ST) <a class="button primary">special-timeslots</a>

Override the price of **all** slots within a specific date-time window. When a booking date falls inside an ST window, every slot on that date charges the ST price instead of its configured slot price.

| Column     | Meta key              | Description                                                                                           |
| ---------- | --------------------- | ----------------------------------------------------------------------------------------------------- |
| Price      | `special_price[]`     | The override price applied to all slots during this window. Replaces individual slot prices entirely. |
| Start date | `special_startdate[]` | Start of the special window (datetime picker — date + time).                                          |
| End date   | `special_enddate[]`   | End of the special window (datetime picker — date + time).                                            |

{% hint style="success" %}
**Important:** ST overrides *all* slot prices within the window — there is no per-slot ST price. Every slot on a date inside the window charges the same ST price. Slot availability (Quantity) is unaffected.
{% endhint %}

{% hint style="info" icon="lightbulb-exclamation" %}
**Example:** Holiday surcharge — Dec 24 00:00 → Jan 2 00:00 at $80. Even if Monday normally has a $50 slot and a $60 slot, both will charge $80 during this period.
{% endhint %}

### 3.3 🏆 Pricing Priority

When a booking date falls within a Special Timeslot window, that price takes over. Otherwise the individual slot price applies:

<a class="button primary">Special Timeslots (ST) price</a> > <a class="button primary">Time slot price (weekly table)</a>

{% hint style="success" icon="square-check" %}
**Example:** Spa has Monday slots at $50 and $70. A Special Timeslot is set for Dec 25–Jan 1 at $90. A customer booking any Monday slot between Christmas and New Year pays **$90** regardless of which slot they pick.
{% endhint %}

## 4: Shared Fields

The following fields are shared across multiple rental types and are documented on the **Shared Fields** page to avoid repetition.&#x20;

Appointment type has a minimal set of shared fields — no Locations, no Drop-off date (slot end time determines it), no Inventory (slots have their own Quantity).

Click any card to go directly to that section.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Round-trip</strong></td><td><em>Toggle + extra fee</em></td><td data-object-fit="contain"><a href="/files/Cdx8hnVoPefS5C4MAJ2Q">/files/Cdx8hnVoPefS5C4MAJ2Q</a></td><td><a href="/pages/5we2hwAvj3QZ1sgzCGNu">/pages/5we2hwAvj3QZ1sgzCGNu</a></td></tr><tr><td><strong>Guests options</strong></td><td><em>show/hide guest</em></td><td data-object-fit="contain"><a href="/files/pUrvaxIOVMndrA110lNm">/files/pUrvaxIOVMndrA110lNm</a></td><td><a href="/pages/cfkdHXKLMvGjuCQYgb6X">/pages/cfkdHXKLMvGjuCQYgb6X</a></td></tr><tr><td><strong>Guests fields</strong></td><td><em>Form fields + min/max</em></td><td data-object-fit="contain"><a href="/files/LIgxm2xMIr5RpWbiiIza">/files/LIgxm2xMIr5RpWbiiIza</a></td><td><a href="/pages/0SZ4g1xj4G8OqWD7Pkl4">/pages/0SZ4g1xj4G8OqWD7Pkl4</a></td></tr><tr><td><strong>Pick-up date</strong></td><td>Appointment date selector</td><td data-object-fit="contain"><a href="/files/EfKepudwm942CZujRdPN">/files/EfKepudwm942CZujRdPN</a></td><td><a href="/pages/R9BCAAY0ZePEoQ0S2Oyd">/pages/R9BCAAY0ZePEoQ0S2Oyd</a></td></tr><tr><td><strong>Booking Conditions</strong></td><td><em>Min/max days, preparation, advance</em></td><td data-object-fit="contain"><a href="/files/RP6bC5CznDEnDTAZplUU">/files/RP6bC5CznDEnDTAZplUU</a></td><td><a href="/pages/j3PSoiHi0c2ZmunW3JtQ">/pages/j3PSoiHi0c2ZmunW3JtQ</a></td></tr></tbody></table>

## 5: Common Fields

These features are shared across all rental types. Note: **Inventory & Quantity** in Common Features refers to the global stock counter — Appointment type uses per-slot Quantity instead of the global inventory.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><strong>Availability</strong></td><td><em>Allowed dates, disabled dates, iCal</em></td><td><a href="/pages/se2SdKU1oGq12QOILLtJ">/pages/se2SdKU1oGq12QOILLtJ</a></td><td><a href="/files/sJup7bwcHJog6g4DpS6r">/files/sJup7bwcHJog6g4DpS6r</a></td></tr><tr><td><strong>Services &#x26; Resources</strong></td><td><em>Add-on pricing with /Day or /Order</em></td><td><a href="/pages/wDir5HOVkeGp8zrl58u1">/pages/wDir5HOVkeGp8zrl58u1</a></td><td data-object-fit="contain"><a href="/files/foB7SCXWfrz6YIBMxKEN">/files/foB7SCXWfrz6YIBMxKEN</a></td></tr><tr><td><strong>Deposit</strong></td><td><em>Fixed or percentage upfront payment</em></td><td><a href="/pages/unYXdPY2dLE1s9Ft0ZfC">/pages/unYXdPY2dLE1s9Ft0ZfC</a></td><td data-object-fit="contain"><a href="/files/M3Dd2NBocdXTDiMua10L">/files/M3Dd2NBocdXTDiMua10L</a></td></tr><tr><td><strong>Insurance</strong></td><td><em>Fixed fee added to every booking</em></td><td><a href="/pages/LxEaPJ5y15dPC7sHj2YB">/pages/LxEaPJ5y15dPC7sHj2YB</a></td><td data-object-fit="contain"><a href="/files/3SoE1Zpurcy3jQB8XDL0">/files/3SoE1Zpurcy3jQB8XDL0</a></td></tr><tr><td><strong>Booking Form</strong></td><td><em>Custom checkout fields</em></td><td><a href="/pages/JVKPwpDA7CcnfWhAmlSV">/pages/JVKPwpDA7CcnfWhAmlSV</a></td><td data-object-fit="contain"><a href="/files/RIYx8VUjC3GavvqtQWo0">/files/RIYx8VUjC3GavvqtQWo0</a></td></tr><tr><td><strong>Map / Place</strong></td><td><em>Maps pin on product page</em></td><td><a href="/pages/V9Fs957iBL1hyL5oKwnD">/pages/V9Fs957iBL1hyL5oKwnD</a></td><td data-object-fit="contain"><a href="/files/TrfIY2OrNMClVGIwauDK">/files/TrfIY2OrNMClVGIwauDK</a></td></tr><tr><td><strong>Display &#x26; Layout</strong></td><td><em>Price format, template, extra tab</em></td><td><a href="/pages/kCaBW7VaB4tTWpA56rBc">/pages/kCaBW7VaB4tTWpA56rBc</a></td><td data-object-fit="contain"><a href="/files/0r8vbxkjli9ZBQqmj1xV">/files/0r8vbxkjli9ZBQqmj1xV</a></td></tr><tr><td><strong>Product Content</strong></td><td><em>Specifications, features list</em></td><td><a href="/pages/jlHZjKdIAPVSXDvqNIPw">/pages/jlHZjKdIAPVSXDvqNIPw</a></td><td data-object-fit="contain"><a href="/files/P4Z9VNYwCaf9JiUfuyyS">/files/P4Z9VNYwCaf9JiUfuyyS</a></td></tr></tbody></table>

## 6: Customize Fields in Product Editing

When you create a product and want to remove unnecessary fields, you can follow these steps in [Customize - Rental Type](/brw/customize-rental-type.md)
