<!-- https://unlockos.io/manual/booking -->

# Booking Management Dashboard Help

## Overview

The Booking Management dashboard is the admin interface where facility managers view and manage all guest reservations, check availability on a calendar, and configure the booking settings used to generate guest booking URLs.

![Booking Management Dashboard](https://unlockos.io/help/images/booking/main.en.webp)

The dashboard has six top-level tabs:

- **Calendar** — Availability calendar (Month, Week, and Timeline views). Click empty cells to create a reservation; click existing blocks to view details. (default view)
- **Reservations** — View all guest reservations with status and date filters
- **Needs Attention** — Review and resolve inventory conflicts (overbookings) caused by iCal feed imports. A red count badge appears on the tab when there are unresolved conflicts.
- **Plan Configs** — Create, edit, delete, and share reservation configuration links
- **Check-in** — View and copy guest-facing check-in URLs for your iCal and site controller integrations
- **iCal Sync** — Set up iCal feed integrations with Airbnb and other OTAs

---

## How to Access

From the main navigation, select **Booking Management**. The Calendar tab is shown by default.

You can navigate directly to any tab by appending a query parameter to the URL:

| Tab | URL parameter |
|-----|--------------|
| Calendar | (default, no parameter needed) |
| Reservations | `?tab=reservations` |
| Needs Attention | `?tab=unassigned` |
| Plan Configs | `?tab=configs` |
| Check-in | `?tab=checkin` |
| iCal Sync | `?tab=ical` |

---

## Features

## Feature 1: Reservations Tab

The Reservations tab lists guest reservations for this facility, ordered by check-in date (newest first). By default, reservations starting from 7 days ago up to 90 days ahead are shown.

### Status Filter

Use the pill-style filter buttons at the top of the list to narrow reservations by status:

| Filter | Shows |
|--------|-------|
| All | Every reservation regardless of status |
| Application | Reservations received but not yet confirmed |
| Confirmed | Reservations that have been confirmed |
| Checked In | Guests currently checked in |
| Cancelled | Reservations that have been cancelled |

Note: A "Checked Out" status also exists and appears as a badge on reservation cards.

Selecting a filter immediately reloads the list to show only matching reservations. When viewing "All", a count badge appears next to each non-zero status.

### Search and Date Filter Bar

Below the status filters is a row of controls for text search, date range filtering, and resetting all filters.

#### Text Search

Type part of a **guest name**, **email address**, or **reservation number** in the search box. The list updates automatically after a 400 ms debounce pause. Search is case-insensitive.

#### Date Range Filter (DateRangePicker)

Click the calendar icon to open the date picker and select a **start date** and **end date** to narrow the visible date range.

| Setting | Behavior |
|---------|----------|
| Start date only | Shows reservations starting on or after the start date |
| End date only | Shows reservations starting on or before the end date |
| Both dates | Shows reservations within the specified period |
| Default | 7 days ago to 90 days ahead |

#### Reset Button

Click **Reset** to restore the date filter to its default (7 days ago to 90 days ahead), clear the text search field, and reset the status filter to "All".

### Reservation Cards

Each card displays:

| Field | Description |
|-------|-------------|
| Guest Name / Email | Name or email of the guest who made the reservation |
| Status badge | Current status (Application / Confirmed / Checked In / Cancelled) |
| Amount | Total reservation amount and currency |
| Unpaid badge | Shown if payment has not been completed |
| Source badge | Color-coded badge showing the booking source (Direct / iCal/Airbnb / OTA) |
| Check-In | Date and time of check-in |
| Check-Out | Date and time of check-out |
| Reservation Number | Internal reservation ID |
| Email | Guest email address |
| Notes | Any notes attached to the reservation |

Clicking a reservation card opens the **Reservation Detail Drawer** on the right side of the screen.

### Source Color Coding

Reservation blocks and source badges are color-coded by origin:

| Color | Source | Description |
|-------|--------|-------------|
| Blue | Direct | Created manually in the dashboard, or via a direct booking URL |
| Sky blue | iCal / Airbnb | Imported from an iCal feed (e.g. Airbnb) |
| Coral | OTA | Reservations from other OTA channels |

---

## Feature 1.5: Reservation Conflict Warnings

When an inventory conflict (overbooking) is detected — typically from an iCal import — warnings appear in **three places** across the dashboard.

| Surface | What you see |
|---------|-------------|
| **Needs Attention tab badge** | A red count badge appears on the tab. |
| **Calendar warning banner** | A red banner appears above the calendar grid. Click it to jump to the Needs Attention tab. Reservation bars for both the loser and winner reservations also receive a ⚠️ marker. |
| **Reservation list warning banner and ⚠️ markers** | A red banner appears at the top of the list. Affected reservation cards are highlighted with a red border and ⚠️ marker. |

Click the Needs Attention tab to see the list of conflicting reservations. Clicking a row opens the reservation detail drawer where you can resolve it by changing rooms or cancelling. For full details see [Needs Attention: Reservation Conflicts](unassigned-reservations.md).

---

## Feature 2: Calendar Tab

The Calendar tab gives you a visual overview of reservation availability. You can click an empty area to **create a new reservation on the spot**, or click an existing reservation block to **view its details**.

### Switching View Modes

Use the header controls to switch between three view modes:

| Mode | Description | Reservation Display |
|------|-------------|---------------------|
| Month | Full-month occupancy overview | Reservation counts per day + [+] button |
| Week | 7-day grid × unit rows | Reservation bars per room unit |
| Timeline | Hourly view of unit occupancy | Time-based reservation bars |

Use the navigation arrows in the calendar header to move between months, weeks, or days.

### Creating a Reservation from the Calendar

Clicking an empty area in the calendar opens the **Reservation Creation Drawer** on the right side. The date, unit, and time are pre-filled based on where you clicked.

| View Mode | Action | Auto-filled fields |
|-----------|--------|--------------------|
| Month | Click the **[+]** button on a day cell | Check-in date |
| Week | Click an empty cell | Check-in date + unit |
| Timeline | Click an empty area | Check-in date + unit + time |

### Hourly and TimeSlot Reservations in the Calendar

Hourly and timeSlot reservation types now appear correctly in the **Week** and **Timeline** views.

| View Mode | Hourly / TimeSlot reservation display |
|-----------|---------------------------------------|
| Month | Not included in the availability gradient (short bookings do not block a full day — this is intentional) |
| Week | Shown as reservation bars in the unit row |
| Timeline | Shown as precisely positioned bars on the time axis |

> **Month view note:** Hourly reservations are intentionally excluded from the month-view occupancy gradient. Switch to Week or Timeline view to see their details.

### Auto-Confirmation of Free Hourly Reservations

Hourly and timeSlot reservations with a total amount of 0 (free) are **automatically confirmed at booking time**.

- No manual admin confirmation is needed.
- An available room is automatically assigned.
- The reservation appears immediately in the Week and Timeline calendar views.

### Viewing a Reservation from the Calendar

Clicking a reservation block in the calendar opens the **Reservation Detail Drawer** on the right side.

---

## Feature 3: Reservation Drawer

The Reservation Drawer is the 420 px panel that slides in from the right side of the screen when you click a calendar cell or a reservation card in the list. It has three modes.

### Create Mode

A blank reservation form is displayed with date, unit, and time pre-filled from where you clicked.

#### Form Fields

| Field | Description | Required |
|-------|-------------|----------|
| Check-in date/time | Start of the stay | Yes |
| Check-out date/time | End of the stay | Yes |
| Stay type | Toggle between **Nightly** and **Hourly** | Yes |
| Room type | Select the room type | Yes |
| Plan | Select the plan for the chosen room type | Yes |
| Guest name | Name of the guest | No |
| Guest email | Email address of the guest | No |
| Notes | Admin-facing notes | No |

#### Post-Create Actions

After a reservation is created, two link cards appear:

| Link | Description |
|------|-------------|
| Unpaid reservation link | Slug-based URL for the guest to complete payment and check in |
| Paid reservation link | URL for guests who have already paid — delivers the key only |

Each card has a "Copy link" button and a "Send by email" button (available only when a guest email was entered).

### Detail Mode

Displays a read-only summary of the reservation.

| Field | Description |
|-------|-------------|
| Guest info | Name and email address |
| Dates | Check-in and check-out date/time |
| Amount and payment status | Total amount and paid/unpaid state |
| Access code | Guest-facing door code (if issued) |
| Source badge | Booking origin |
| Edit button | Switches to Edit mode |

### Edit Mode

Click the **Edit** button in Detail mode to switch to Edit mode. The reservation form is shown with all current values pre-filled so you can update and save.

---

## Feature 4: Plan Configs Tab

Reservation configs define the booking rules guests encounter when they use your facility's booking URL. Each config acts as a distinct booking "product" — you can have multiple configs for different room type combinations, pricing structures, or cancellation policies.

### Config Card Information

Each config card shows:

| Field | Description |
|-------|-------------|
| Config Name | Display name for this reservation config |
| Active / Inactive badge | Whether this config is currently accepting bookings |
| Currency | Currency used for payments |
| Min Advance | Minimum lead time (hours) required before check-in — bookings within this window are rejected |
| Max Advance | Maximum number of days ahead that a booking can be made |
| Policy Tiers | Number of cancellation policy tiers defined (see [Cancellation Policy Settings](#cancellation-policy-settings) for what a tier means) |
| Plans | Number of KEYVOX plans linked to this config via room-plan mappings |

### Advance Booking Window Settings

The reservation config form lets you control how far ahead (and how close to now) guests can book. These settings are **enforced server-side** and act as the **default** for every plan mapped under this config.

| Setting | Form field name | Behaviour |
|---------|-----------------|-----------|
| Booking lead time (h) | `min_advance_hours` | Minimum hours between now and the booking start. For example, setting 4 means guests cannot book anything starting within 4 hours. Leave blank for no restriction. |
| Max advance days | `max_advance_days` | How many days from today guests can book. Default is 90. |
| Max booking duration (min) | `max_booking_duration_minutes` | Maximum length of a single hourly / time-slot reservation in minutes. Leave blank for no cap. **Stay-mode reservations are exempt.** Extensions are also capped server-side so the TOTAL window cannot exceed this value. **Does NOT cap post-check-in actual stay length** — this is a booking-time constraint only. |

> **These can be overridden per plan.** The three settings above (lead time, max advance days, max booking duration) apply whenever an individual plan hasn't overridden them. To close bookings earlier — or allow booking further ahead — for just one plan, set it individually from [Booking Terms (Per-Plan Overrides)](plan-form.md#booking-terms-per-plan-overrides) on that plan's edit screen.

**How guests see these restrictions:**
- Cells within the minimum advance window are shown with a stripe pattern and cannot be tapped
- Calendar dates beyond the maximum advance window are greyed out and unselectable
- End-time cells beyond the max-booking-duration cap cannot be selected (extensions are also rejected at the same cap)
- Attempting to submit a reservation outside either window produces a clear error message
- What guests see reflects the value in effect for the selected plan (the plan's own override if it has one, otherwise this config's default)

> Changes take effect immediately. Guests using the booking page will see the updated restrictions on their next page load.

### SMS Phone Verification (native phone field at booking time)

The reservation config edit form has a **"Require SMS verification of phone number"** checkbox. This applies to the phone field guests enter directly on the Booking screen (not the mobile number field inside a plan-linked form) and requires it to be confirmed with a 6-digit SMS code.

- This checkbox cannot be turned on until the facility has configured an SMS sending source (App Integrations → SMS/Voice Notifications)
- Once enabled, guests cannot complete a booking until they confirm their number. Guests who cannot receive the SMS are shown the facility's contact information
- Sending SMS has a real cost (see [SMS Phone Verification](sms-verification.md) for details)
- This setting is per reservation config (per booking URL). If you run multiple configs, enable it individually on each config where you want to require it

### Name fields (the booking screen's native name input)

The reservation config edit form has a **"Name fields"** dropdown. It controls whether the native name field on the Booking screen's "Your Information" card (not the name field inside a plan-linked form) is shown as a single field or split into surname / first name.

| Value | Display |
|-------|---------|
| Single field (Name) | One "Name" field (default) |
| Split into surname / first name | Two fields: surname and first name |
| Surname / first name + phonetic (furigana) | Surname and first name, plus phonetic (furigana) fields |

- Like the SMS setting, this is per reservation config (per booking URL). If you run multiple configs, choose the option individually on each one.
- The underlying DB column is `reservation_configs.name_layout`, default `single`. Existing reservation configs are unaffected — they keep behaving exactly as before.
- Even with "Surname / first name + phonetic (furigana)" selected, the furigana fields are hidden when the booking screen is displayed in English (it renders the same as "Split into surname / first name"). Furigana is always optional.
- Even when the name is entered as two fields, the reservation stores a single combined guest name (`reservations.guest_name`). Notification template variables such as `{{guest_name}}`, the name passed to KEYVOX, the guest register, and check-in name matching are unaffected.

See [Review & Confirm Your Booking](guest-confirm.md) for what guests see and enter.

### Cancellation Policy Settings

At the bottom of the edit form, **Cancellation Policy** sets the fee percentage for each cancellation timing. Each row pairing "Hours Before Check-in" with "Fee (%)" is called a **tier**; click **+ Add Tier** to stack more than one. This setting is the **default** for every plan mapped to this reservation config (one booking URL) — it applies unless an individual plan overrides it. To vary it per plan, use [Booking Terms (Per-Plan Overrides)](plan-form.md#booking-terms-per-plan-overrides) on that plan's edit screen.

> **"Hours Before Check-in" is a floor, not a ceiling.** Each tier means "cancelling this many hours **or more** before check-in costs this fee" — not "up to this many hours before" (i.e. it does not mean "anything closer than this is handled some other way"). On top of that, **any cancellation that doesn't match any tier (closer to check-in than the smallest tier, including after check-in time has passed) is absorbed by the smallest tier.**

Put together, **a policy with only one tier applies the same rate no matter when the guest cancels.** The edit-screen preview shows this as the **intervals where the rate changes**:

| Configuration | What the preview shows |
|---|---|
| A single tier: `24h before → 100%` | At any time **100%** |
| Two tiers: `24h before → 0%` and `0h before → 100%` | 24 hours or more before check-in **0%**<br>Less than 24 hours before check-in (incl. after check-in) **100%** |

The first row is usually configured with the intent of "100% within 24 hours", but it actually charges **100% no matter when the guest cancels**. To get "free until 24 hours before, then 100%", you must configure **two tiers**, as in the second row (a 0% tier, plus a 0-hours-before tier at 100%).

**Before you save, the edit screen previews exactly what a policy will charge.** Below the tier inputs, "**What this policy actually charges**" lists every interval where the rate changes ("N hours or more before check-in", "N–M hours before check-in", "Less than N hours before check-in") together with the percentage that actually applies — computed the same way the server evaluates a real cancellation. **Which side of a boundary belongs to which rate is spelled out** (exactly 24 hours before falls on the free side), so a single "24 hours before" checkpoint can no longer be misread.

Three situations also raise a warning. **Each one means "you typed something that has no effect"** — the kind of thing the interval list alone cannot reveal:

- **A policy with no free (0%) window at all** — "With this policy every cancellation costs 100%, no matter how far in advance. Add a 0% tier to create a free window."
- **A bottom tier whose "hours before check-in" is not 0** — the smallest tier absorbs everything below the tier above it (including after check-in), so that number is never used. Two tiers of `24h→0%` and `5h→100%` behave **exactly** like `24h→0%` and `0h→100%`. (Not warned when another tier shares the same number, because it then really does act as that tier's boundary.)
- **More than one tier with the same "hours before check-in"** — only the topmost is ever applied; the rest never are. **Add Tier** always seeds a new row at 24 hours, so pressing it repeatedly makes this easy to hit.

This preview updates every time you add or edit a tier, so check it before publishing.

> **Facilities selling Ticket Books should pay close attention here.** This same policy also decides whether a [Ticket Book](ticket-books.md) balance is restored on cancellation. The balance is only restored in a 0%-fee (full refund) tier; any tier that charges even 1% forfeits the ticket credit on cancellation. In other words, a policy with no free window also means a ticket book redeemed against that plan **never comes back once a reservation is made**. See [the Ticket Books FAQ, "If a guest cancels a reservation made with a ticket book credit, does the ticket come back?"](ticket-books.md#q-if-a-guest-cancels-a-reservation-made-with-a-ticket-book-credit-does-the-ticket-come-back) for details.

### Creating a New Config

Click the **New** button in the top-right of the Configs tab to open the reservation config creation form.

See the [Reservation Config Form help](reservation.md) for details on each field, including how to configure room-plan mappings.

### Supported Plan Types (Reservable vs On-Site Billing Only)

The Plan List supports six plan types, but **only four (the *reservable* plan types) can be booked by guests via reservation URLs**. The other two are for on-site billing only and do **not** appear in the Room Type × Plan mapping on this screen.

| Category | Plan Type | Shown on this screen | Use Case |
|----------|-----------|----------------------|----------|
| **Reservable** | Accommodation | Yes | Guests pick check-in/out dates and book |
| **Reservable** | Hourly | Yes | Guests book by the hour |
| **Reservable** | Time Slot Booking | Yes | Guests book a fixed time window (e.g. 10–13) |
| **Reservable** | Flat + Overtime | Yes | Staircase pricing — e.g. "first 3 hours flat, then an hourly overtime rate" (#3041) |
| **On-site billing only** | Daily Flat | No | Day-rate billing for same-day on-site use |
| **On-site billing only** | One-Time | No | One-shot key issuance billing |

> Tip: To set up a guest-facing booking page, first create one of the **Reservable** plan types (Accommodation, Hourly, Time Slot Booking, or Flat + Overtime) in the Plan List, then map it to a room type on this screen.

### Ordering Room Type × Plan

Plans you check in the "Room Type × Plan" section can be reordered with the **up/down buttons** or by dragging. You can only reorder **among the selected plans** — selected plans are automatically grouped at the top, with unselected plans listed below them. The order you set here becomes the display order of the plan cards in the guest-facing booking app (#3068).

### Editing a Config

Click the **pencil (edit) icon** on a config card to open that config in the edit form.

### Copying the Booking URL

Each config generates a unique guest-facing booking URL. To copy it:

1. Click the **link (copy URL) icon** on the config card
2. The URL is copied to your clipboard automatically
3. A "Copied" confirmation appears briefly

The URL format (when a facility slug is configured):

```
https://booking.unlockos.io/{slug}?config=<config-id>
```

If no facility slug is set, the legacy format is used instead:

```
https://booking.unlockos.io?facilityId=<facility-id>&configId=<config-id>
```

Share this URL with guests (via email, your website, or messaging) to let them make reservations using that specific config. You can set the slug in Basic Settings under "App URL".

### Deleting a Config

Click the **delete icon** on a config card to delete it:

1. A confirmation dialog appears
2. Click **Delete** to confirm — this action is permanent

> Note: Deleting a config does not delete existing reservations that were made through it. Only the config itself is removed, preventing new reservations from being created with it.

---

## Feature 5: Check-in Tab

> **Note**: The former "Feature 5: Guest Form Tab" (`?tab=guestForm`) was removed on 2026-05-19. Form editing has moved to **[Form Management (`/forms`)](forms.md)** in the main menu. Host-country behaviour has equivalent functionality on the new form-management screen.

The Check-in tab displays the guest-facing check-in URLs for all reservation sources connected to your facility — iCal feeds and site controller integrations alike. It sits between the Plan Configs tab and the iCal Sync tab.

### What is Shown

When iCal feeds or a site controller integration (e.g. Neppan) are registered, each connected source appears as a URL card:

| Field | Description |
|-------|-------------|
| Config name | The name of the check-in config linked to this URL |
| Source badge | Color-coded badge showing the reservation source (`iCal` or the provider name such as `neppan`) |
| Room name | The room linked to the iCal feed, if applicable |
| Check-in URL | The URL to share with guests (displayed in monospace) |
| Copy button | Copies the URL to the clipboard |

### When No Sources Are Connected

If no iCal feeds or site controller integrations have been set up, a warning message appears: "No reservation sources connected." Set up an iCal feed in the **iCal Sync** tab or a site controller in **Connection Settings → External Integrations**.

For full documentation see [iCal Sync](ical-config.md) and [External Integrations](integration.md).

---

## Feature 6: iCal Sync Tab

The iCal Sync tab lets you register iCal feeds from Airbnb and other OTAs to automatically import reservations. Registered feeds are synced periodically and the imported reservations appear in the Reservations list and Calendar.

### Adding an iCal Feed

1. Paste the iCal feed URL from your OTA into the **iCal URL** field
2. Select the corresponding **Room** from the room dropdown (you can type to search)
3. Set the **Guest Form** toggle to control whether guests must complete the guest form during check-in (default: ON)
4. Click **Add Feed**
5. After the feed is added, a success banner with a **Go to Check-in Tab** button appears — click it to find the check-in URL to share with guests

For full documentation of this tab, see [iCal Sync](ical-config.md).

### Feed Table Information

Each registered feed row shows:

| Column | Description |
|--------|-------------|
| Feed URL | The registered iCal URL |
| Room | The room this feed is linked to |
| Last Sync | Timestamp of the most recent sync |
| Events | Number of reservations imported in the last sync |
| Status | Success, Error, or Pending |
| Matching | Matching mode toggle for this feed |
| Guest Form | Whether the guest form is required for this feed (ON/OFF button) |
| Actions | Sync and Delete buttons |

### Guest Form ON/OFF

Click the **ON/OFF** button in the Guest Form column to toggle whether guests must fill out the guest form (passport details, etc.) when checking in through this feed. The default is ON, which is recommended for accommodation compliance.

### Matching Modes

Each feed can be set to one of two matching modes:

| Mode | Description |
|------|-------------|
| Guest verification | Guests authenticate themselves by entering their reservation number |
| Host managed | The host (admin) manages reservation matching and key issuance |

Click the toggle on a feed row to switch modes.

### Manual Sync

Click the **circular arrow** (sync) button on a feed row to immediately fetch and update reservations from that feed.

### Deleting a Feed

Click the **Delete** button on a feed row. A confirmation modal appears — click **Delete** to confirm. Automatic syncing stops after deletion. Reservations that were already imported are not deleted.

---

## How to Set Up a Booking Flow (Step-by-Step)

Setting up online reservations for your facility requires two steps in this order:

### Step 1: Create Plans

Go to **Plan Management** and create pricing plans for your room types. To sell via reservation URLs, use one of the **four reservable plan types**: Accommodation, Hourly, Time Slot Booking, or Flat + Overtime.

> "Daily Flat" and "One-Time" plans are on-site billing only and cannot be linked to reservation URLs. See [Supported Plan Types](#supported-plan-types-reservable-vs-on-site-billing-only) above.

### Step 2: Create a Reservation Config

Go to the **Plan Configs** tab, click **New**, and:

1. Enter a config name
2. In the **Room Type x Plan** section, select which room type and plan combinations to offer guests
3. Set currency, advance booking limits, and cancellation policy
4. Save the config
5. Copy the generated booking URL and share it with guests

> Important: Only room types that have been added to at least one reservation config (via room-plan mapping) will appear on the guest-facing booking page. Completing this step is required for a room type to be bookable by guests.

---

## Frequently Asked Questions

### Q: The Daily Flat / One-Time plans I created in the Plan List don't appear under Reservation Management > Plan Configs > New. Is this a bug?

This is intentional. Only **Accommodation, Hourly, Time Slot Booking, and Flat + Overtime** (the *reservable* plan types) can be booked by guests through reservation URLs, so only those types appear in the Room Type × Plan mapping. Daily Flat and One-Time are on-site billing plans — they apply when a guest is already at the facility, not when a guest selects a date/time from a public booking page. See [Supported Plan Types](#supported-plan-types-reservable-vs-on-site-billing-only) for the full breakdown.

### Q: The "Needs Attention" tab has a red badge. What should I do?

An inventory conflict has been detected — typically caused by an iCal feed importing a reservation that overlaps with an existing booking. Click the "Needs Attention" tab to see the list and resolve each conflict. For full details see [Needs Attention: Reservation Conflicts](unassigned-reservations.md).

### Q: Hourly reservations are not showing on the calendar

Switch to **Week** or **Timeline** view. Hourly and timeSlot reservations are intentionally excluded from the Month view occupancy gradient because short bookings do not block an entire day.

### Q: Do I need to manually confirm free hourly reservations?

No. Hourly and timeSlot reservations with a total amount of 0 (free) are automatically confirmed and assigned to an available room at booking time.

### Q: If I split the name field, does the name that reaches notifications or KEYVOX change?

No. Even if the guest enters a surname and first name (and furigana) separately, the reservation stores one combined guest name string. If both the surname and first name are written entirely in Japanese characters (kana/kanji, no Latin letters), they are joined with no space (e.g. "山田" + "太郎" → "山田太郎"); otherwise (any Latin letters present) they are joined as "Given Family" with a space (e.g. "Taro" + "Yamada" → "Taro Yamada"). Notification template variables such as `{{guest_name}}`, the name passed to KEYVOX, the guest register, and check-in name matching all read this single combined name.

### Q: What is the difference between Application and Confirmed status?

Application means the reservation has been received but not yet processed. Confirmed means the reservation has been accepted and any access code has been issued.

### Q: How do I create a reservation from the calendar?

Open the Calendar tab and click an empty area — the [+] button on a day cell in Month view, or any empty cell or area in Week and Timeline view. The Reservation Creation Drawer opens on the right side with date and unit pre-filled.

### Q: Where can I see reservations imported from Airbnb?

Both the Reservations tab and the Calendar tab show iCal/Airbnb reservations. They are identified by a sky-blue source badge.

### Q: Can I have multiple reservation configs?

Yes. You can create as many configs as needed. This is useful when offering different room types, pricing models, or cancellation policies through separate booking URLs.

### Q: What happens to existing reservations if I delete a config?

Existing reservations are not affected. Only new reservations through that config's URL are prevented.

### Q: The booking URL I copied — where should guests use it?

Guests open the URL in a web browser to view available dates and make a reservation. You can share it via email, embed it on your website, or include it in a QR code.

### Q: A room type I created is not showing up on the guest booking page

A room type only appears on the guest-facing booking page if it has been linked to at least one active reservation config via a room-plan mapping. Check the following:

1. Open the **Plan Configs** tab, edit your config, and verify the room type appears in the **Room Type x Plan** section with a plan assigned.
2. If the room type has no plan mapping in any config, it will not be shown to guests even if it is active.

### Q: I searched for a reservation but it did not appear

Text search matches guest name, email address, and reservation number. Reservations outside the current date filter range are also excluded. Try clicking **Reset** to return to default filter settings and search again.

### Q: Older reservations are not showing up

The default date filter starts from 7 days ago. To view older reservations, use the DateRangePicker to set an earlier start date.

### Q: How do I automatically import Airbnb reservations via iCal?

Open the **iCal Sync** tab, paste your Airbnb iCal export URL, select the corresponding room, and click Add Feed. After the feed is registered, copy the displayed check-in URL and add it to your Airbnb Arrival Guide so guests can check themselves in automatically.

### Q: How often are iCal feeds synced?

Feeds are synced automatically on a recurring schedule. To sync immediately, click the **Sync** button on any feed card.

### Q: I configured a booking lead time but guests can still book right away

Make sure the `min_advance_hours` field in the reservation config form is saved with a value. An empty field means no restriction. This setting is the **default** for every plan under this config — if the plan the guest booked has its own override, that value wins instead. Check whether the plan overrides it from [Booking Terms (Per-Plan Overrides)](plan-form.md#booking-terms-per-plan-overrides).

### Q: A guest reports that cells in the booking grid are unselectable

Common causes: (1) the cell falls within the minimum advance window, (2) the date is beyond the maximum advance days, (3) the end-time cell exceeds the plan's maximum booking duration, (4) the time is outside business hours, or (5) the slot is already booked. The guest should see an informative error message if they try to submit a booking in a restricted range.

### Q: Guests see "You must book at least X hours in advance"

This error means the selected start time falls within the config's minimum advance window. Guests should choose a start time further in the future.

### Q: Guests see "Reservations can only be made up to X days from today"

This error means the selected date exceeds the config's max advance days. Either the guest selects a closer date, or you increase the limit in the config.

---

## Related Pages

- [Reservation Calendar (Month / Week / Day views, mobile optimization)](reservation-calendar.md)
- [Needs Attention: Reservation Conflicts](unassigned-reservations.md)
- [Reservation Config Form (Create/Edit)](reservation.md)
- [Form Management](forms.md)
- [Guest Booking App (Manage Reservations)](reservation-guest.md)
- [Check-In (How to Receive Your Access Keys)](guest-checkin.md)
- [iCal Sync (Airbnb / OTA Integration)](ical-config.md)
- [Plan List (Manage Pricing Plans)](plan-list.md)
- [External Integrations (Site Controller)](integration.md)
- [Shared Capacity Booking (Coworking Seat Booking)](shared-capacity-booking.md)
- [Ticket Books](ticket-books.md)
- [SMS Phone Verification](sms-verification.md)

---

Last updated: 2026-09-27 - Noted that the lead time, max advance days, and cancellation policy settings can be overridden per plan (#4189)
