# Introduction

Welcome to Hostel Mate. This guide helps you run the day‑to‑day—manage bookings, connect OTAs, take payments securely, and keep guests happy with streamlined tools.

Whether you run a small hostel or a multi-location operation, this documentation shows you how to handle the essentials: take bookings, manage rooms and beds, sync with OTAs, and process payments securely.

## Why Hostel Mate

* Simple, fast tools for daily front-desk work
* Reliable OTA syncing with leading channels
* Built-in payments and finance reporting
* Secure data handling and user permissions

## Two apps, one login

Hostel Mate is split in two. Same login, different jobs:

|              | Front Desk                                                           | Finance                                                                                                                       |
| ------------ | -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Address      | [app.hostelmate.co](https://app.hostelmate.co)                       | [finance.hostelmate.co](https://finance.hostelmate.co)                                                                        |
| Looks like   | Calendar with a menu across the top                                  | Menu down the left side                                                                                                       |
| Go there for | The daily work: bookings, check-in, guests, pricing, channel manager | Setting things up: rooms and beds, property details, booking engine, notifications, staff accounts, reports, plan and billing |

To jump from Front Desk to Finance, open **More** in the top menu and click **Finance**. It opens in a new tab.

If you're hunting for a setting and can't find it, chances are it's in the other app. Rooms are the usual one: you rename them, add beds and change capacity in **Finance → Property Setup → Room Inventory**, not in Front Desk.

## Start Here

* Front Desk overview: [Front Desk](/front-desk)
* Finance management: [Finance](/finance-management)
* Channel mapping (OTAs): [Channel Guides](/channel-mapping-guides)

## Common Tasks

* Add or modify a booking: [Booking Management](/front-desk/booking-management)
* Check-in and check-out: [Check-In & Check-Out](/front-desk/check-in-check-out)
* Connect Booking.com or Airbnb: [Booking.com](/channel-mapping-guides/booking.com), [Airbnb](/channel-mapping-guides/airbnb)
* Set up Stripe payments: [Stripe](/finance-management/payment-processing/stripe)

## Need Help?

If you get stuck, open [Contact Support](/contact-support) for the fastest way to reach us.


# Front Desk

Manage daily front desk work—check‑ins, check‑outs, walk‑ins, bookings, bed assignments, payments, and statuses—to streamline operations from one workspace.

This is the app at [app.hostelmate.co](https://app.hostelmate.co). Your daily workspace for arrivals, in-house guests, and departures. From here you can update bookings, assign beds, collect payments, and issue access—without jumping between screens.

## What You Can Do

* See arrivals, in-house, and departures at a glance
* Open a booking to view details, notes, and payments
* Change status (reserved, check-in, paid, cancelled, no-show)
* Assign or move beds/rooms
* Take payments and add extra charges

## Quick Links

* Setting up rooms, property details, staff or billing? That's the other app: [Finance](/finance-management) (open **More → Finance** in the top menu)
* Booking management: [Booking Management](/front-desk/booking-management)
* Check-in and check-out: [Check-In & Check-Out](/front-desk/check-in-check-out)
* Pricing and updates: [Pricing](/front-desk/pricing)

## Tips

* Click a booking on the calendar to open its details.
* Keep statuses up to date—this improves reports and prevents double-assignments.
* Add brief notes to help your team coordinate across shifts.


# Dashboard

See arrivals, departures, no‑shows, occupancy, and rate insights at a glance. Track reservation statuses and monitor daily operations to keep beds filled efficiently.

## 1. Overview of Dashboard

**The home page consists of:**

* **Calendar**: You can choose the date to explore the following lists for the chosen date.
  * **Arrivals List**: Arrival list for guests on the chosen date.
    * **Note**: Existing guests who extend their stay will not appear in this list even if their extension starts on the chosen date.
  * **Departures List**: List of guests who will check out on the chosen date.
  * **Waiting List**: Includes reservations that are not paid and not confirmed yet.
    * **Purpose**: To keep the beds empty and increase the chance of getting a reservation for the same bed.
  * **Reserved List**: Includes guests whose reservation status is marked as reserved.
  * **No Show List**: Includes guests who didn't show up and guests who cancelled their paid non-refundable reservations (Paid No Show).
    * **Note**: The reservation details for the entire booked period are shown. For example, if a guest booked for 7 nights, their details will appear in the No Show list for all 7 nights.
  * **Canceled List**: Includes the list of cancelled reservations that are not paid.
    * **Note**: The reservation details for the entire booked period are shown. For example, if a guest booked for 7 nights, their details will appear in the Canceled list for all 7 nights.

**Each list includes:**

* Guest’s name
* Reservation platform
* Check-in date
* Amount per night
* Bed number
* Reservation status

**Additional information displayed:**

* Chosen date (selected in the calendar)
* Occupancy (displays the number of available beds and booked beds)
* Room rates (shows the rate for each room along with the room name; adjusted automatically according to occupancy)

## 2. Reservation Status

### 1. Reserved Status

The reservation is reserved but not paid, and the guest's card has not been tried yet.

### 2. Authorized Status

The guest’s card has been authorized successfully.

### 3. Paid Status

The reservation is paid.

### 4. Check-in Status

The guest has checked in but hasn’t paid yet.

### 5. Check-in (Paid) Status

The guest has completed the check-in process and payment.

### 6. Paid No Show Status

The guest paid but didn’t show up during check-in hours. This status makes the reservation disappear from the calendar page and appear in the No Show list to make the bed empty and increase the chance of getting another reservation for the same bed.

### 7. Canceled Status

For unpaid canceled reservations, either from the guest's side or by the hostel manager if the guest didn’t come.

### 8. Waiting List Status

For guests who booked but didn’t pay and their cards are invalid. This status makes the reservation disappear from the calendar page and appear in the Waiting List to make the bed empty and increase the chance of getting another reservation for the same bed.


# Booking Calendar

Navigate the booking calendar by day and room, read status colors, adjust date ranges, and open or edit reservations directly to resolve conflicts quickly.

Consider this space your everyday command center! It comfortably displays all availability categorized by individual day, bed, and room, making it super easy to spot strange booking conflicts long before they turn into actual problems. Spot an issue? Just double-click right onto a reservation cell to immediately open everything up!

## What You Can Do

* Beautifully click and drag across dates to quickly block out and create a brand new booking.
* Rapidly pop open detailed Reservation screens just by double-clicking a single cell.
* Clear up visual clutter by effortlessly filtering the grid using room types, reservation statuses, or exciting future dates.

## Helpful Tips for the Front Desk

* Your calendar is only as good as the information inside! Always strive to update statuses consistently to guarantee wonderful accuracy for the next shift.
* Whenever you slide a guest into a new room or hear they're arriving super late, tuck a quiet note into their file—your teammates working the dreaded midnight shift will love you forever!

## Secret Keyboard Shortcuts

* Tap **D**: Instant travel right back to 'Today'!
* Give your **Arrow keys** a press: Seamlessly skip backward and forward day by day.

## Overview Booking Table Layout

The booking table gorgeously spreads out the month and the days along the top, mapping everything against your room lists right alongside the edge. You have all the freedom to twist combinations of days, months, and years right from the dropdowns to plan far into the future.

### Booking Colors Indicator

We added brilliant colors so you can read exactly what's happening at a rapid glance!

1. **Green**: Paid and totally checked-in. (Their reservation status reads: Check-in Paid!)
2. **Blue**: Excellent, they've paid fully—but they haven't physically arrived just yet! (Reservation status: Paid).
3. **Grey**: The room is delightfully reserved but we haven't charged ’em, nor have we tried swiping their card. (Reservation status: Reserved).
4. **Purple**: Oh! This indicates a guest was physically moved directly from one hostel branch to another. (Reservation status: Reserved).
5. **Orange**: Heads up! The funds are temporarily holding securely on their card, but we haven't actually charged them. (Reservation status: Authorized).

<figure><img src="https://2898137202-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfNGPZLcGFGsvVxD6xM9l%2Fuploads%2Fgit-blob-453bd79221c43825af03ed11fa320bfc9208dfa2%2Fcolor.png?alt=media" alt=""><figcaption></figcaption></figure>

### Date Range Selection

Need a fresh perspective? The date range can be effortlessly tweaked using our handy date picker anchored right at the top right of the table structure.

## Table Architecture

Our layout beautifully separates the confusing chaos of daily hospitality into rows and columns:

### Columns

* **Dates**: Every single column boldly represents a new date along the calendar block, mapped across the top!

### Rows

* **Rooms**: You'll catch a nicely drawn red line visually breaking apart completely different rooms.
* **Beds**: The individual rows are famously labeled with letters (from A right up to Z), neatly organizing every bed under your roof.

### Booking Status Visibility

The little cells scattered within the grid behave like windows to a guest's profile. We automatically paint those cells using the smart color indicators detailed up in the Booking Colors section!

### Viewing and Editing Booking Details

Whenever you feel like taking a peek or editing a profile, enthusiastically click onto any guest's cell! Instantly, a detailed view will slide open letting you play around with the data safely. If you’re eager for a crazy deep dive, skip over and give the [Booking Management](/front-desk/booking-management) guide a read!


# Booking Management

Manage bookings from a single screen—edit guest details, move beds, update statuses, add notes, and handle payments, deposits, extra charges, and balances.

Handle everything about a booking from one place—guest info, status, payments, access, and notes.

## Before You Start

* Click a booking from the calendar or list to open details.
* Confirm you’re on the correct guest and dates before making changes.

## What’s Inside

* Tabs: General, Payments
  * General: guest details, booking status, bed/room, notes
  * Payments: charges, deposits, extra fees, balance

### 1. General Tab

#### Guest Information

* **Name**: The guest's full name.
* **Phone**: The guest's phone number.
* **Nationality**: The guest's nationality.
* **Email**: The guest's email address and verification status.

#### Booking Details

* **Source**: The source of the booking (e.g., Walk-In, HostelWorld).
* **Notes**: Any notes related to the booking.
* **Status**: The current status of the booking, with an option to save changes.
* **Bed**: The assigned bed, with an option to save changes.

#### Credit Card Information

* **Cardholder Name**: The name on the credit card.
* **Card Number**: The credit card number.
* **Expiration Date**: The expiration date of the credit card.

#### Booking Status

The booking status indicates the current state of a booking. The following are the possible booking statuses:

* **Reserved**: The reservation is reserved but not paid, and the guest's card has not been tried yet.
* **Authorized**: The guest’s card has been authorized successfully.
* **Paid**: The reservation is paid.
* **Check-in**: The guest has checked in but hasn’t paid yet.
* **Check-in Paid**: The guest has completed the check-in process and payment.
* **Paid No Show**: The guest paid but didn’t show up during check-in hours. This status makes the reservation disappear from the calendar page and appear in the No Show list to make the bed empty and increase the chance of getting another reservation for the same bed.
* **Cancelled**: For unpaid canceled reservations, either from the guest's side or by the hostel manager if the guest didn’t come.
* **Waiting List**: For guests who booked but didn’t pay and their cards are invalid. This status makes the reservation disappear from the calendar page and appear in the Waiting List to make the bed empty and increase the chance of getting another reservation for the same bed.

#### Additional Actions

* **New Booking**: Create a new booking.
* **Move Booking**: Move the booking from this hostel to another if you operate more than one hostel.
* **Separate Edit**: Additional editing options for the booking.

### 2. Payments Tab

The Payments tab provides a detailed overview of the financial aspects of a guest's booking. It includes a summary of payments received, fees, and any outstanding balance, along with options to manage payments.

#### Financial Overview

* **Payments Received**: The total amount of payments received from the guest.
* **Booking Fees**: The total booking fees incurred.
* **Deposit Payments**: The amount received as a damage deposit.
* **Extra Services Fees**: Fees for any additional services provided.
* **Total Outstanding Balance**: The remaining balance that the guest needs to pay.

#### Payment Options

* **+ Payment**: Add a new payment with several options like cash, online, POS, etc.
* **+ Deposit**: Add a deposit payment.
* **+ Extra Charge**: Add an extra charge for additional services.

## Common Actions

* Update status to Check-in or Paid at arrival.
* Assign or move beds to avoid conflicts.
* Add a quick note if anything changes (late arrival, special request).
* Add extra charges (lockers, laundry, towel) directly in Payments.

## Troubleshooting

* Can’t find a booking? Check filters and the date range.
* Status won’t save? Refresh and try again—if it persists, see [Contact Support](/contact-support).
* Wrong guest or dates? Cancel the change, then reopen the correct booking.


# Guest Management

View and update guest profiles—contact info, IDs, signatures, notes, bookings, payments, and deposits—in one place, with tools to export invoices and receipts.

View and update guest profiles quickly—contact details, IDs, signatures, notes, bookings, payments, and deposits—all in one place.

## What You Can Do

* Edit contact details (name, email, phone, nationality)
* Capture ID image and digital signature
* View bookings and payment history at a glance
* Download invoices and receipts
* Add notes for your team

## Find and Edit a Guest

1. Open Guest Management from the front desk
2. Search by name or phone
3. Select the guest to open the profile popup
4. Click Update to edit details; Save when finished

## Sections in the Profile

* General: basic info, ID image, signature, notes
* Payments: all incoming/outgoing transactions and balances
* Deposits: deposits taken/returned with dates and amounts
* Bookings: current and past reservations connected to the guest

## Invoices and Receipts

* Download invoice/receipt directly from the guest profile
* Make sure amounts and dates match the booking before you share

## Tips

* Use notes for context (late check-in, special requests, house rules agreed)
* Keep phone and email accurate to reduce duplicates and missed notifications
* Capture ID and signature during check-in when possible

## Troubleshooting

* Duplicate guest profiles: merge by choosing the most complete profile and updating bookings to that guest
* Missing payment: check the related booking’s Payments tab, then refresh the guest profile
* Wrong contact info: update the guest profile and re-send confirmations if needed


# Check-In/Check-Out

Follow a clear flow for arrivals and departures, verify details, assign beds, update statuses, process payments and deposits, and add notes for accurate records.

A quick, reliable flow for arrivals and departures. Keep statuses current to avoid double-assignments and keep reports accurate.

## Online Self Check-In

Guests can complete their check-in before they arrive by filling out a form on their phone or computer. The link is sent automatically in the pre-arrival email, or you can send it manually from the Check-In popup. Once submitted, the guest's answers, ETA, ID document, and signature are all visible in the booking Logs tab.

See [Self Check-In](/front-desk/self-check-in) for the full staff guide.

## Check-In

1. Find the booking on the dashboard (Arrivals, Waiting List, or Reserved).
2. Open booking details and confirm guest info.
3. Update status to Check-in or Check-in Paid.
4. Assign or confirm the bed/room, then Save.
5. Share house rules and Wi‑Fi—add a quick note if useful.

Tips

* If the guest isn’t listed, create a new walk‑in booking first.
* Use Re-Check In to fix details (name, ID photo, signature) while keeping history.

## Check-Out

1. Open the booking from Departures or the calendar.
2. In Payments, settle any extras or deposits; confirm balance is zero.
3. Update status to Checked-out.
4. Add a note if something requires follow-up (left item, maintenance issue).

Common Issues

* Balance won’t clear: refresh and re-open Payments, then try again.
* Wrong bed at departure: adjust bed before setting Check-out.
* Need a receipt: export from Payments and share by email.


# Self Check-In

Send guests a unique check-in link, monitor submission status, view uploaded ID documents, and see how online check-in appears in Booking Logs and the guest record.

Guests receive a unique check-in link in their pre-arrival email and can complete the form before they arrive. As a staff member you can send the link manually, monitor whether a guest has submitted, view what they filled in, and access uploaded ID documents — all from the booking.

***

## Sending the Link

1. Open any booking from the calendar or dashboard.
2. Click **Check in Guest** (or **Re-Check In** if the guest has already checked in) to open the Check-In popup.
3. In the popup header, click the **Self Check-In** pill button.
4. A panel opens showing:
   * **QR code** — guest scans with their phone to open the form instantly
   * **Copyable URL** — click **Copy** to copy the link to the clipboard
   * **Send Link to Guest** — emails the unique link directly to the guest's address on file

The Send Link button has a 2-minute cooldown to prevent duplicate emails. After sending it shows **Sent!** and stays disabled.

> The link is also sent automatically in the pre-arrival email. Use the manual send when a guest asks for it again or did not receive the original email.

***

## Checking Submission Status

Open the booking and go to the **Logs** tab. If the guest has submitted:

* A **teal "Self Check-In" entry** appears at the top of the log.
* It shows the date and time of submission plus any details the guest provided:
  * **ETA** — estimated arrival time (if your settings collect it)
  * **ID uploaded** badge + **View ID** link — click to open a secure preview of the document (link expires after 1 hour)
  * **Custom answers** — one line per question, label and answer

If the guest has not yet submitted, no Self Check-In log entry appears. You can send the link again from the Check-In popup.

***

## ID Documents

Uploaded ID documents are stored privately. To view one:

1. Go to the **Logs** tab of the booking.
2. Find the teal **Self Check-In** log entry.
3. Click **View ID** next to the ID uploaded badge.
4. The document opens in a new tab. The link is valid for 1 hour.

***

## Check-In Source Indicator

On the **Guests** page, each guest shows how they checked in:

* **Online** — submitted through the self check-in form
* **Desk** — checked in manually at the front desk (or via the Check-In popup)
* No label — not yet checked in

***

## Guest Experience

When a guest opens their link they see:

1. **Property name and stay dates** at the top
2. **House rules** (if configured) — must be read before filling the form
3. The **form fields** enabled in your settings: ETA time picker, ID upload, signature canvas, custom questions
4. **Check-In Instructions** below the form (door codes, parking, directions)
5. A **success screen** after submission showing their booking summary and the Post Check-In Message (Wi-Fi, room number, etc.)

If the guest already submitted, the link shows the success screen instead of the form — they cannot submit twice.

If the stay has ended (more than 2 days past the last night), the link shows an expired message.

***

## Configuring What the Form Collects

All self check-in settings — house rules, instructions, post check-in message, toggles, and custom questions — are managed under **Settings → Self Check-In** in the Finance portal. See [Self Check-In Settings](/finance-management/settings/self-check-in) for the full reference.


# Reservation

Manage reservations end to end—create walk‑ins, handle online bookings, update statuses, assign beds, add payments, and keep availability accurate across channels.

Manage walk-ins and online bookings, keep statuses current, and collect payments.

## Types of Reservations

### Walk-in Reservation

A guest arrives at the hostel without a prior reservation and requests immediate accommodation.

### Online Reservations

Reservations from channels like Booking.com, Hostelworld, Expedia, etc.

* Paid: goes to the calendar with status Paid
* Unpaid: goes to the Waiting List until payment or policy action
  * If charged later, move it to the calendar and add the payment
  * If card is invalid, keep it on the Waiting List to free the bed until confirmation

## Create a New Reservation

1. Open the calendar and double‑click the desired bed/dates
2. Search for the guest by name or phone
   * If found, select the existing profile
   * If new, click “Add new guest” and enter nationality, phone, first name, last name; Save
3. Enter reservation details
   * Guest, check‑in/out dates
   * Get Prices (or set price per night)
   * Assign bed/room (honor preferences when possible)
   * Platform (Walk‑in or channel)
   * Notes (arrival time, requests)
   * Click New booking
4. Confirm
   * The guest appears on the assigned bed for the full stay

## Add a Payment

1. Open Booking Details (double‑click)
2. Go to Payments → +Payment
   * Amount, Type = Income, Method (cash/POS/online), optional Description
   * Save payment
3. Update Status
   * Set to Paid or Check‑in Paid as appropriate

## Tips

* Use Waiting List for unpaid or unconfirmed bookings to free capacity
* Add a note for late arrivals or special requests to help the next shift
* Keep statuses current—reports and availability depend on them

## Troubleshooting

* Can’t book a bed: check for overlapping reservations or filters
* Price mismatch: click Get Prices again or confirm room pricing rules
* Payment not showing: refresh the booking; verify gateway logs if online


# Pricing

How the Pricing page works — change prices, close dates, set minimum stays, and where to find the Availability and Booking Window tabs.

Everything about what you sell and when lives on one page: [app.hostelmate.co/pricing](https://app.hostelmate.co/pricing). Anything you change here goes out to all your connected channels on its own, usually within a minute or two.

The page has four tabs. This page covers the first one, the price grid. The others have their own pages:

| Tab                   | What it's for                                                                                                                                                                                          |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Pricing**           | Day-by-day prices per room, closing dates, minimum stay. Covered below.                                                                                                                                |
| **Price Adjustments** | Rules that raise or lower prices automatically depending on how full you are. See [Price Adjustments](https://github.com/DavidSamir/doc-hostelmate/tree/main/front-desk/pricing/price-adjustments.md). |
| **Availability**      | Your property's timezone, and a same-day cutoff that stops selling tonight's beds after a certain hour. See [Availability Controls](/front-desk/pricing/availability-controls).                        |
| **Booking Window**    | How far into the future your channels are allowed to sell. See [Booking Window](/front-desk/pricing/booking-window).                                                                                   |

## The price grid

Pick a date range with the **From** and **To** fields at the top. The table shows one row per room and one column per night. Each cell is that room's price for that night; for a dorm, it's the price of one bed.

### Changing a price

Click the cell you want to change. That opens **Bulk Update Prices**, where you set:

* a **Start Date** and **End Date** (the cell you clicked is pre-filled, but you can stretch it to a whole season)
* the **new price**
* optionally **Close Room**, which marks the room as unavailable for those dates on every channel

Click **Update**. You'll see "Prices saved — syncing to channels in the background" and the grid refreshes.

{% hint style="info" %}
Update in chunks of about a month at a time. A single update covering a year is a lot of dates for every channel to digest at once and is the most common cause of a "why hasn't Booking.com changed yet" ticket. If a channel does fall behind, [Full Sync](/channel-mapping-guides/full-sync) puts it right.
{% endhint %}

### Minimum stay, closed to arrival, closed to departure

Each room row has a small arrow on the left. Click it and three more rows unfold under the prices:

* **Min Stay Arrival**: the fewest nights a guest can book if they *arrive* on that date. Click a cell, choose the date range and the number of nights, save. **Disable Min Stay for this range** removes it.
* **Closed to Arrival**: guests can't start a stay on that date, but a stay that began earlier can run through it.
* **Closed to Departure**: guests can't check out on that date.

These go to your channels the same way prices do.

{% hint style="info" %}
**"Booking.com still shows a price on a night I've blocked."** It will. Platforms display a price for every open night whether or not a guest can actually start a stay there. If a min-stay or a full night next door means nobody can book that date, the number shown for it doesn't matter. Check the price on the nights people *can* book instead.
{% endhint %}

## A room is missing from the grid

Rooms only appear here once they exist in **Finance → Property Setup → Room Inventory** and have beds added. If it's set up there and still doesn't show, write to us in the chat.


# Price Adjustments

Create occupancy‑based rules that automatically raise or lower prices for rooms or the whole hostel so rates track demand without constant manual updates.

This is the **Price Adjustments** tab on the [Pricing page](/front-desk/pricing) in Front Desk. It lets you to automatically adjust your room or hostel prices based on the percentage of free beds available.\
By setting clear rules, the system can raise prices during high demand and lower them when occupancy is low, without manual intervention.

***

## How It Works

1. **Choose Price Adjustment Type** –
   * **Room Price Adjustments** - Apply changes to specific room types only.
   * **Hostel Price Adjustments** - Apply changes to all rooms in the hostel.
2. **Pick the booking timeframe** the rules apply to. There are three: bookings for **today or tomorrow**, bookings **within the next week**, and bookings **8 to 30 days ahead**. Each can have its own set of rules (up to 10), because a last-minute empty bed and an empty bed three weeks out are different problems.
3. **Define Adjustment Rules** – For each rule, set:
   * **Free Beds Percentage** – The occupancy threshold that triggers the change (e.g., 40% free beds = 60% occupancy).
   * **Adjustment Action** – Choose to **increase** or **decrease** the price.
   * **Adjustment Percentage** – The percentage amount to change the price.

***

## Example Rule

* **Free Beds Percentage:** 20%
* **Action:** Increase
* **Adjustment Percentage:** 40%

This means if only 20% of beds remain available, prices will automatically increase by 40% to capture high-demand value.

***

## Why Use Automated Price Adjustments

* **Maximize Revenue** – Charge more when availability is low and demand is high.
* **Improve Occupancy** – Lower prices when many beds are free to encourage bookings.
* **Save Time** – Automate pricing so you don’t need to constantly monitor and update rates.

***

## Best Practices

* Set higher increases for very low availability (e.g., 10–20% free beds).
* Consider decreases or smaller increases when availability is high (e.g., 60–80% free beds).
* Review your rules regularly to match seasonal patterns and local events.


# Availability Controls

Set your property's timezone and stop channels selling tonight's beds after a certain hour.

This is the **Availability** tab on the [Pricing page](/front-desk/pricing). Two settings, both about *when* your beds are on sale rather than for how much.

## Property timezone

Set this first. It tells Hostel Mate when "today" starts and ends for you, which matters for reports, for the calendar, and for the cutoff below. If it's blank the cutoff can't be switched on.

Pick your city or region from the list and save. That's it. Changing it later is fine, it just re-sends your availability to the channels so their idea of "today" matches yours.

## Same-day booking cutoff

Every hostel has a point in the evening after which a new arrival for *tonight* is more trouble than it's worth: reception's closed, the night porter can't check people in, or the last bus has gone. Booking.com doesn't know that. Until you tell it, it'll happily sell a bed at 23:40.

The cutoff fixes that. Turn on **Enable same-day cutoff**, pick a **Cutoff Time** (say 22:00) and save. From that time on, any beds still free for tonight are shown as fully booked on Hostelworld, Booking.com and every other connected channel. At about 2:00 in the morning the booking day rolls over and tomorrow's beds are on sale as normal. Nothing else changes: walk-ins are fine, your staff can still book anything from the calendar, and dates from tomorrow onward aren't touched.

The page shows you how many hours a night the cutoff blocks, so you can see what you're giving up. A cutoff at 22:00 blocks roughly four hours; a cutoff at 02:00 blocks the entire day, meaning same-day bookings would never be possible, and the page will warn you in red if you set that.

Two things worth knowing:

* Times between 00:00 and 01:59 can't be used, because the booking day rolls over at about 2:00. If what you actually want is "no bookings between midnight and 2 am", set it to **23:50**.
* Changes take effect within about five minutes. You don't need to run anything.

## When to use it

* You don't take late arrivals and are tired of refunding or turning people away
* Reception closes at a fixed hour and you can't hand over keys after it
* You keep getting last-minute bookings you can't staff for

If your worry is a different one, "how far ahead can people book", that's the [Booking Window](/front-desk/pricing/booking-window) tab instead.


# Booking Window

Close far-future dates on your channels while keeping the near ones open, automatically, every day.

This is the **Booking Window** tab on the [Pricing page](/front-desk/pricing). It answers one question: how many days into the future are your channels allowed to sell?

## What it does

Turn on **Limit how far ahead guests can book** and enter a number of **days ahead**, say 90. Everything from today through 90 days out stays bookable under your normal prices and rules. Anything later is closed on Booking.com, Airbnb, Hostelworld and your other channels. Tomorrow the window moves one day forward on its own, opening one more date. You set it once and forget it.

The page tells you the exact last bookable date ("Guests can book through 14 November") so there's no guessing.

Some things it deliberately does *not* do:

* It doesn't create prices. A date inside the window with no price stays closed like it always would.
* It never blocks your staff. Anyone with access to the calendar can take a booking for any date.
* It doesn't have to apply to your own website. There's a switch, **Also apply this to my own booking engine**. Turn it off and your booking engine keeps selling the far dates while the OTAs don't.

## Room overrides

Below the property setting there's a table of your rooms. Each one follows the property window unless you give it its own. Click **Set override** on a room, enter a smaller number, save.

A room rule can only make the window **shorter**, never longer. If you set a room to 120 days while the property is at 90, nothing changes and the table will tell you so. This is on purpose: the property window is the outer limit, rooms can only be stricter inside it.

## Saving

Changes go to your channels straight away. If a change would close dates that are currently open, you'll be asked to confirm and told exactly how many dates and which ones. After saving you'll see a short summary: how many dates opened, how many closed.

## Set your timezone first

If no timezone is set on the [Availability tab](/front-desk/pricing/availability-controls), the window is calculated in UTC and the cut-off between "open" and "closed" can land up to a day off. Set the timezone and it's exact.


# Reports

Generate booking reports for a date range, filter results, and review guest, platform, amounts, beds, and trends to analyze performance and operations.

The Booking Report page provides a comprehensive overview of bookings within a specified date range. This report includes details such as the guest's name, booking platform, booking date, amount paid, and bed assignment. The page allows for easy filtering and analysis of booking data.

## Page Overview

The Booking Report page consists of the following main sections:

1. **Date Range Selector**
2. **Filter**
3. **Booking Table**

### Date Range Selector

The date range selector allows users to specify the start and end dates for the bookings they want to view in the report. By selecting the desired date range, the report will update to display bookings within that period.

### Filter

The filter input box allows users to filter bookings based on specific criteria. For example, users can filter bookings by their status (e.g., Cancelled).

### Booking Table

The booking table displays detailed information about each booking within the selected date range. The table includes the following columns:

* **Name**: The guest's name, which is clickable to view more details. A WhatsApp icon indicates availability for contact.
* **Platform**: The platform through which the booking was made (e.g., Other, Booking, GoogleHotelARI).
* **Date**: The date of the booking.
* **Amount**: The amount paid for the booking.
* **Bed**: The assigned bed for the booking.

## Steps to Generate a Booking Report

1. **Select Date Range**:
   * Use the date range selector at the top right of the page to choose the start and end dates for the report.
   * The booking table will automatically update to display bookings within the selected date range.
2. **Apply Filters**:
   * Enter specific criteria in the filter input box to narrow down the bookings displayed in the table (e.g., typing "Cancelled" to show only cancelled bookings).
3. **View Booking Details**:
   * Click on a guest's name in the booking table to view more detailed information about their booking.
4. **Analyze Data**:
   * Use the information in the booking table to analyze booking trends, guest behavior, and platform performance.


# Guest Page Overview

Search and manage guest profiles, add new entries, update details, view reservation history and balances, and use quick tools for tracking outstanding payments.

Search guests, add new profiles, and view outstanding balances in one place.

## Overview of the Guest Page

The page contains three main tabs:

### 1. Add Guest

* **Purpose**: Use this tab to enter and save new guest details.
* **Required Fields**: Nationality, phone number, first name, and last name.
* **Duplicate Check**: If the mobile number is already registered, the guest's registered name will appear on the side.
* **Accuracy**: Ensure all information is accurate to avoid data entry errors.

### 2. View Guest

* **Purpose**: Search for and view existing guest details.
* **Features**:
  * Update guest information
  * Check reservation history and balances

### 3. Payments (Guest Charges Summary)

* **Purpose**: Provides a summary of any due or outstanding payments for any guest with a balance not equal to zero.
* **Features**:
  * This section includes columns for the guest's name, booking amount, payment amount, and total amount due
  * A negative total means there’s an outstanding balance
  * A positive total indicates overpayment/credit

## Tips

* Use the phone number as a unique identifier to reduce duplicates
* Add a short note when you update contact info (e.g., “new email 02/14”)

## Troubleshooting

* Can’t find a guest: try phone number, then name; check spelling
* Duplicate detected: keep the most complete profile and update linked bookings


# Virtual Credit Card

Review uncollected virtual credit card payments, see amounts and status, and collect eligible VCCs with one click to move funds into the online account.

See all uncollected virtual credit card (VCC) payments, spot the ones whose booking was cancelled, and collect or write them off.

<figure><img src="https://2898137202-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfNGPZLcGFGsvVxD6xM9l%2Fuploads%2Fgit-blob-2684038c25d83de2b814a433f8977879e9c5da93%2Fvcard.png?alt=media" alt=""><figcaption></figcaption></figure>

## At the top

Three figures, always for the whole year you have selected — the filter chips below do not change them:

* **Uncollected amount** — everything still outstanding
* **Cards** — how many
* **Needs attention** — how many belong to a cancelled or no-show booking, and what they add up to

## The list

* **Name** — guest name (click to open their profile). The channel appears underneath.
* **Amount** — outstanding value
* **Status** — where the card has got to with Stripe:
  * *Not tokenized* — no Stripe token has been requested yet
  * *Ready* — tokenized and chargeable
  * *Card failed* — a charge was attempted and refused
  * *Marked invalid* — the card was reported back to the channel as invalid
* **Description** — usually "autoPayment CM" (from the channel manager)
* **Date** — when the record was added
* **Actions** — Collect, Stripe, and (for admins, on flagged rows) Waive

### Cancelled and no-show flags

A red **Cancelled** or amber **No-show** tag next to the guest name means the booking is no longer live. Click the tag to open the booking. These rows stay in the list on purpose — the money is already recorded against the property, so hiding them would leave it unaccounted for.

Use the **Needs attention** chip to see only these, or **Ready to collect** to hide them.

## Collect a payment

1. Find the guest in the list
2. Click **Collect**
3. Choose the account the money is going to, add a description or receipt, and confirm
4. The payment moves out of the vCard account and into the account you chose

If the booking is cancelled or a no-show you will be asked to confirm first. That is a question, not a block — a cancellation fee or a no-show charge is a normal thing to collect.

## Charge a card through Stripe

The **Stripe** button is only available when the property has an active Stripe connection in the channel manager. It works in three steps: get a token, collect the amount, and — if the charge is refused — mark the card invalid so the channel knows (Booking.com only).

## Waive a card (admins only)

Available on cancelled and no-show rows. Use it when the card will never be charged.

1. Click **Waive**
2. Choose **Remove the whole record**, or **Keep a cancellation fee** and enter the amount to keep
3. Enter a reason — this is required
4. Confirm

What happens to the books:

* The month the card was originally recorded in is **left exactly as it is**. Reports you have already sent do not change.
* A write-off is recorded **today** for the full card amount.
* If you kept a fee, that fee is opened as a new card dated today, still collectable, and it keeps its Stripe token so you do not have to tokenize again.

The action is recorded on the booking, with the amount and your reason, and appears in Booking Logs. **It cannot be undone from the app.**

## Tips

* Collect VCCs as soon as they become eligible to avoid expiry
* If a collection fails, try again after a few minutes; check channel rules
* Waive rather than collect when the guest genuinely should not be charged — it leaves a reason on the booking, which a deleted record does not

## Troubleshooting

* **Stripe button greyed out:** the property has no active Stripe connection in the channel manager
* **No Waive button:** you are not an admin, or the booking is still live — use the payment editor instead
* **Collected but not in balance:** refresh Account Overview; verify Payment Log if needed
* **A cancelled booking's card is still listed:** that is expected. Collect it or waive it; it will not clear itself


# Booking Engine

Open the Booking Engine, troubleshoot common setup issues, and monitor incomplete payment attempts so you can follow up and keep conversions on track.

## 1. Accessing the Booking Engine

You can reach the Hostel Mate Booking Engine in one of two ways:

* **Direct link** – Click **Booking Engine** in the sidebar or visit `https://app.hostelmate.co/booking-engine`.
* **Dashboard shortcut** – From the main Dashboard, choose **Other → Booking Engine**.

Either path lands you on the same, real-time booking page your guests see—handy for test reservations or quick checks.

***

## 2. Troubleshooting & Issues

Before you start taking payments, glance at the issues section at the top of the Booking Engine page. If everything’s good to go, you won’t see anything here. Otherwise, you might encounter the following:

* **No payment gateway enabled** By default you have the option to accept bookings without payment, but they will be moved to the [**Waiting list**](https://docs.hostelmate.co/front-desk/pages/gwCwAqDCw5ud5N1ZK0EN#id-8.-waiting-list-status)**,**\
  If you want to add stripe, Go to [**Finance Portal**](https://finance.hostelmate.co/app/stripe) , provider your Stripe API key, and follow the [**setup steps here**](/finance-management/payment-processing/stripe) .
* **Missing room images** Guests may hesitate to book if they can’t see what they’re getting. Navigate to [**Rooms**](https://finance.hostelmate.co/rooms/) , select the room with missing images, upload one or more photos, and save the changes.

> After fixing any of these, simply refresh the page. The issue banner will disappear once resolved.

***

## 3. Incomplete Booking Attempts

Whenever a guest fills in their information but fails to complete the payment, their booking attempt is logged. This section helps you follow up manually if needed, especially helpful when a guest might’ve had card trouble or got distracted mid-checkout.

Each record includes the guest’s:

* Name
* Email
* Phone number
* Booking date
* Total amount attempted
* Room number
* Time of attempt

These records are updated in real time and are automatically cleared if the guest later completes payment. Any entry older than 30 days is archived automatically to keep the list manageable.

Here’s an updated version of your **Booking Engine** documentation with a new section on **embedding the Booking Engine into your website**, including options, parameters, and API info:

***

## 4. Embedding the Booking Engine in Your Website

You can integrate the Hostel Mate Booking Engine into your own website in one of three ways:

### A. Redirect Link

Send users directly to your customized booking page:

```
https://book.hostelmate.co/?pid={propertyId}&CheckIn={checkInDate}&CheckOut={checkOutDate}
```

Replace the `CheckIn` and `CheckOut` values dynamically based on user input to pre-fill dates for guests.

#### **Supported URL Parameters**

<table><thead><tr><th width="129.99609375">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>pid</code></td><td>Your property ID. Required for the booking engine to fetch room data.</td></tr><tr><td><code>CheckIn</code></td><td>(Optional) Pre-selects the guest's check-in date (format: YYYY-MM-DD).</td></tr><tr><td><code>CheckOut</code></td><td>(Optional) Pre-selects the guest's check-out date (format: YYYY-MM-DD).</td></tr><tr><td><code>primary_color</code></td><td>(Optional) Primary accent color — buttons, links, active states. Accepts a hex color with or without <code>#</code> (e.g. <code>5143d9</code> or <code>#5143d9</code>). Default: <code>#5143d9</code>.</td></tr><tr><td><code>secondary_color</code></td><td>(Optional) Secondary accent color — hover states and gradients. Same hex format. Default: <code>#8e85e6</code>.</td></tr><tr><td><code>accent_color</code></td><td>(Optional) Accent color — calendar highlights and subtle UI details. Same hex format. Default: <code>#bec8ff</code>.</td></tr><tr><td><code>theme</code></td><td>(Optional) Color scheme. Accepted values: <code>light</code> or <code>dark</code>. Default: <code>dark</code>.</td></tr><tr><td><code>lang</code></td><td>(Optional) UI language. Accepted values: <code>en</code>, <code>ar</code>, <code>de</code>, <code>es</code>, <code>fr</code>, <code>hi</code>, <code>id</code>, <code>it</code>, <code>pt</code>, <code>ru</code>, <code>tr</code>, <code>vi</code>. Default: <code>en</code>. Falls back to English if an unsupported code is passed.</td></tr></tbody></table>

> More URL parameters coming soon, including:
>
> * Room filtering based on tags, categories, or availability

***

### B. Embed via Iframe

To keep users on your site, you can embed the booking page using an iframe:

```html
<iframe 
  src="https://book.hostelmate.co/?pid={propertyId}" 
  width="100%" 
  height="800" 
  frameborder="0" 
  allowfullscreen>
</iframe>
```

This lets users search and book rooms directly from your site without needing to redirect.

***

### C. Use the Availability API

If you want to build a fully custom booking experience on your frontend, you can use our API for booking engine [Here](/api-documentation/booking-engine).


# Chat Page Overview

Manage guest communication in one place—receive WhatsApp messages, reply with templates, view history, and keep conversations coordinated across shifts .

Handle guest messaging from one place—receive and reply to WhatsApp messages without switching apps.

## Key Features

### Message Reception

* Incoming messages from the hostel’s WhatsApp appear automatically.

### Reply Functionality

* Respond directly from the chat interface; use templates for common answers.

### Message History

* View per‑guest history to stay aligned across shifts.

### Templates

* Create canned replies for check‑in times, directions, or house rules.

## Tips

* Keep replies short and friendly; follow up with details in a note if needed
* Use templates, but personalize with the guest’s name when possible
* If a question affects booking details, add a note in the booking for the next shift

This chat functionality ensures efficient and prompt communication with guests, enhancing their overall experience.


# Other Pages

Explore additional tools, V‑Cards for uncollected payments, Website Leads, Expenses overview, and Logs to audit staff actions and track booking changes.

These helpful pages often get overlooked, but they act as your control center for catching missing funds, managing daily bills, and seeing exactly what's happening at the front desk!

## 1. V-Cards Tab

Forget the hassle of losing track of Virtual Credit Cards (VCC)! This tab neatly lines up all your uncollected virtual card amounts right into one easy-to-read list.

* **Name**: The name of the wonderful guest.
* **Amount**: The total funds you haven't collected yet.
* **Description**: A quick summary of exactly what the reservation or payment handles.
* **Date**: The date tied to the original reservation.
* **Collect Tab**: An incredibly satisfying button that lets you instantly capture that V card payment.

## 2. Expenses Page

Running a hostel means bills are always popping up. Here's your spot to catch all your monthly expenses right at a single glance.

* **Total Expenses**: Situated right in the middle of the page so you can't miss it!
* **Expenses Table**: A neat breakdown containing:
  * **Date**: Exactly when the expense slipped out the door.
  * **Type**: The kind of expense it represents.
  * **Description**: Any handy notes or descriptions you left for yourself.
  * **Amount**: Specifically how much the expense cost.

## 3. Logs Page

Ever wonder who updated a booking completely by accident? The Logs page is your ultimate audit trail! Every single reservation-related action made by your amazing team is quietly recorded here.

* **Action Tracking**: An easy way to watch over guests being moved, reservations flipping statuses, and exciting walk-ins being added naturally.
* **Staff Information**: The full name of your staff member alongside the date and exact time they completed the action.
* **Detailed View**: Click on any action, and a beautiful pop-up slides in providing the entire booking history details for context!

## Handy Tips

* **VCCs:** Make it a priority to collect those as soon as they become eligible—you definitely want to avoid those frustrating expiration dates!
* **Expenses:** Creating and sticking to a consistent set of expense categories magically creates cleaner, smarter reporting.
* **Logs:** Getting a bit lost? Use the date or staff filters to shrink the list and find those sneaky booking changes rapidly!


# Access Levels and Permissions

What the Admin and Manager tick boxes actually do, who can log into which site, and exactly what each of your staff will see when they sign in.

Your receptionist needs to check people in. They probably don't need to see what you made last month, or be able to change your rates on Booking.com.

That's all this page is about. In Hostel Mate you control it with two tick boxes on each person's account: **Admin** and **Manager**. You'll find them on the [User Roles](/finance-management/user-management/user-roles) page.

{% hint style="info" %}
There's no list of job titles to pick from. Someone's access is simply which boxes you ticked — and leaving both empty is a perfectly good choice.
{% endhint %}

## The three levels

### Admin — the owner

This is you, basically. An Admin can get to everything, including the things you'd rather nobody else touched:

* Every page, in both the app and the finance site
* Adding and removing staff, and deciding what they can see
* Rates, the channel manager, the booking engine, cancellation policies
* Deleting payment records

Keep this one for yourself and anyone you'd trust with the bank details.

### Manager — runs the place day to day

Everything an Admin gets, minus ownership of the account itself. Your duty manager or assistant manager.

They can see the money, change the prices, handle the channels, and get into the finance site. What they can't do is delete payment records, or hand out Admin access to other people.

### Front desk — leave both boxes empty

This is your reception team, and it's the right answer for most staff.

They can do the actual job — take bookings, check guests in and out, look after guest details — without your revenue, your rates or your channel settings being one click away.

## Who sees what

In the app at [app.hostelmate.co](https://app.hostelmate.co):

| Page                 | Admin | Manager | Front desk |
| -------------------- | :---: | :-----: | :--------: |
| Home                 |   ✅   |    ✅    |      ✅     |
| Bookings calendar    |   ✅   |    ✅    |      ✅     |
| Guests               |   ✅   |    ✅    |      ✅     |
| Chat                 |   ✅   |    ✅    |      ✅     |
| Their own cash shift |   ✅   |    ✅    |      ✅     |
| Dashboard            |   ✅   |    ✅    |      ❌     |
| Reports              |   ✅   |    ✅    |      ❌     |
| Pricing              |   ✅   |    ✅    |      ❌     |
| Channel Manager      |   ✅   |    ✅    |      ❌     |
| Booking Engine       |   ✅   |    ✅    |      ❌     |
| Pending Payments     |   ✅   |    ✅    |      ❌     |
| Everyone's cash      |   ✅   |    ✅    |      ❌     |
| Expenses             |   ✅   |    ✅    |      ❌     |
| Booking Logs         |   ✅   |    ✅    |      ❌     |
| Virtual Credit Cards |   ✅   |    ✅    |      ❌     |
| Apps                 |   ✅   |    ✅    |      ❌     |
| Finance site         |   ✅   |    ✅    |      ❌     |

{% hint style="warning" %}
Worth knowing: a front desk user can still **make and change bookings**. Hiding the money pages isn't the same as making someone look-but-don't-touch, and right now there's no "calendar, read only" setting. If that's what you're after, [tell us](/contact-support) — you won't be the first to ask.
{% endhint %}

## Which site do they log into?

Two different addresses, and people mix them up constantly.

**The app** — [app.hostelmate.co](https://app.hostelmate.co). Everyone goes here. It's the same login for all your staff; they just see more or less of the menu depending on their boxes.

**The finance site** — [finance.hostelmate.co](https://finance.hostelmate.co). This one needs **Manager**. If a front desk person tries it, they'll be told *"You don't have access to the finance portal."* Nothing's broken — that's it doing its job. Point them back to the app.

{% hint style="danger" %}
Careful with this one: ticking **Admin** on its own, without Manager, won't get someone into the finance site. If they need both, tick both.
{% endhint %}

## Which properties?

The tick boxes decide what someone can do. Which of your properties they can do it to is a separate setting, and it's on the same [User Roles](/finance-management/user-management/user-roles) page. Handy if your Lisbon night manager has no business seeing the Berlin numbers.

## A few habits worth having

* Give people the least they need. Most reception staff never need Manager.
* Have a look at your user list whenever someone joins or leaves.
* When somebody leaves, switch their **Status** off instead of deleting them. Their history stays where it is, and their login stops working.
* If something odd happens to a booking, the [Logs page](/front-desk/other-pages) will tell you who did it and when.

## One setting that isn't on the page

There's also a **read-only finance** option, meant for accountants and silent partners — people who should see the numbers but shouldn't be changing anything. It sends them straight to the finance site and quietly blocks every edit button.

It isn't one of the two tick boxes, so [get in touch](/contact-support) if you'd like it on someone's account.


# Finance Management

Track payments, deposits, expenses, and performance. Review reports, configure categories and taxes, and reconcile activity across properties in one place.

This is the app at [finance.hostelmate.co](https://finance.hostelmate.co), the one with the menu down the left. Welcome to the back office! This module provides absolutely everything you need to effortlessly track payments, handle deposits, watch your expenses, and study property performance, nicely tied into one fantastic place.

## What You Can Do

* Rapidly review incoming payments and transactions spread across all your properties.
* Keep a razor-sharp eye tightly on all deposits, hidden fees, and wonderful extra charges.
* Lean back and view your cash flow, beautifully balanced P\&L sheets, and insightful monthly expense reports!
* Quickly configure those vital notifications, adjust resources, and fine-tune your settings to ease daily operations.

## Key Sections to Explore

* Say hi to your [Dashboard](/finance-management/dashboard)
* Dive into the [Finance Hub](/finance-management/finance-hub)
* Configure everything in [Property Setup](/finance-management/property-setup)
* Handle communication with [Guest Notifications](/finance-management/notifications)
* Manage little extras inside [Resources](/finance-management/resources)
* Manage your incredible staff at [User Management](/finance-management/user-management)
* Tweak the machinery in [Settings](/finance-management/settings)
* Keep subscriptions rolling with [Plan & Billing](/finance-management/plan-billing)

## Related Guides For You

* Trying a new payment tool? Look at our [Payment Processing](/finance-management/payment-processing) guide!

## Best Practices

* We highly recommend mapping out and sticking to perfectly consistent categories; it drastically improves how clean and clever your eventual reports look!
* Try to gently reconcile your payment flows daily to quickly catch weird bank errors before they snowball into end-of-month panic.
* Whenever possible, always use our dedicated "deposits and extra charges" features instead of carelessly writing manual notes—it just naturally keeps your accounting perfectly sorted!


# Dashboard

Your primary snapshot of the property's financial performance, customer volume, and sales trends.

{% hint style="info" %}
This is your mission control for the property's financial performance. We designed the Dashboard to give you an immediate, high-level snapshot of exactly how your business is doing without needing to dig into complex reports or endless spreadsheets.
{% endhint %}

When you first open this page, you’ll notice a **Date Range Picker** at the top right.

{% hint style="success" %}
By default, it loads your data from the previous month, but you can easily adjust this to look at last week, the current year, or any custom date range you want to investigate.
{% endhint %}

## The Top KPIs

Right at the top, we display three core metrics that give you a quick pulse check on your property:

| Metric              | What It Tells You                                                                                |
| ------------------- | ------------------------------------------------------------------------------------------------ |
| **Total Profit**    | Exactly how much you're making after accounting for your tracked expenses.                       |
| **Total Customers** | A quick look at the volume of guests passing through your doors during the selected time period. |
| **Budget**          | A quick visual of how your actual earnings are tracking against your targets or budgets.         |

## Visualizing the Data

Beneath the quick stats, we break things down visually so you can spot trends at a glance:

| Chart                | Why It's Useful                                                                                                                                                                                                                        |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **OTA Distribution** | Ever wonder which booking channel is actually bringing in the most business? This chart breaks down your reservation sources, making it super easy to see if Booking.com, Hostelworld, or your own website is doing the heavy lifting. |
| **Sales Overview**   | A larger chart that tracks your sales over the selected time frame. This is incredibly handy for spotting seasonal trends, busy weekends, or sudden spikes in revenue.                                                                 |


# Finance Hub

Central hub for financial reports, daily operations, and account reconciliation.

Consider this your main hub! It's designed to bring all your major reporting, tricky daily operations, and sometimes-scary account reconciliation straight into one convenient place.

## Reports

* Watch your runway with [Cash Flow](/finance-management/finance-hub/cash-flow)
* Celebrate the wins via [Profit & Loss](/finance-management/finance-hub/profit-and-loss)
* Check on the outgoings under [Monthly Expenses](/finance-management/finance-hub/monthly-expenses)

## Daily Operations

* Audit the money seamlessly over in the [Payment History](/finance-management/finance-hub/payment-log) ledger.
* Distribute and finalize numbers in [Profit Settlement](/finance-management/finance-hub/profit-settlement).

## Account Controls

* Stand back and watch the [Balance Overview](/finance-management/finance-hub/overview).
* Follow the breadcrumbs on the [Transaction Ledger](/finance-management/finance-hub/breakdown).
* Keep everything structured using [Manage Accounts](/finance-management/finance-hub/edit).

## Helpful Tips

* Whenever those numbers start doing something bizarre, definitely start by scanning your general reports first. From there, naturally "drill" deeper right down into your operations and ledgers! It's far easier to spot mismatches this way!
* And remember our golden rule: always fiercely stick to using consistent phrasing and reliable account names to guarantee wonderfully accurate summaries down the road!


# Cash Flow

A daily breakdown of your total in-flows, out-flows, and net daily revenue.

{% hint style="info" %}
Cash is king! While your profit and loss statements give you the big picture, the Cash Flow page is all about the actual money moving in and out of your property every single day. This is where you verify that your expected earnings actually landed in the bank or the till.
{% endhint %}

## At a Glance

At the top of the page, we give you the two numbers that matter most for the date range you've selected:

| Metric             | Description                                                |
| ------------------ | ---------------------------------------------------------- |
| **Total In-flow**  | The actual amount of money collected from guests.          |
| **Total Out-flow** | The money that went out (like refunds or logged expenses). |

## The Daily Ledger

Below the top-line numbers, you'll find a clean table breaking down your cash flow day by day.

{% hint style="success" %}
If you're looking for a specific day, use the search bar right above the table to quickly filter the list.
{% endhint %}

Here's exactly what you'll see on each row:

| Column            | What It Shows                                                      |
| ----------------- | ------------------------------------------------------------------ |
| **Date**          | The specific day being analyzed.                                   |
| **Daily Revenue** | The net amount earned on that specific day.                        |
| **Bookings**      | The total number of reservations active or processed on that date. |
| **Cash In**       | Everything collected (cash, card, bank transfer).                  |
| **Cash Out**      | Any money that left the business.                                  |

## Digging Deeper

{% hint style="danger" %}
Ever see a huge spike in cash-in and wonder where it came from? Just click on any row in the table!
{% endhint %}

A handy side panel will slide open giving you the **Day Details**. This breaks down the day's transactions by payment method, so you know exactly how much came from credit cards, how much was handed over in cash, and what was paid online.


# Profit & Loss

Analyze monthly profitability—revenue, extras, expenses, and daily P\&L. Use averages per day/bed and compare months to benchmark performance and trends.

Welcome to your Profit & Loss (P\&L) dashboard! Think of this as the beating heart of your hostel's financial performance. It's designed to give you a crystal-clear view into exactly how much value every single bed is generating, and how much actual cash is really flowing into your business day by day.

## Key Performance Metrics

Here’s a quick breakdown of what’s what:

| Metric                    | What it tells you                                                                                                                                                    |
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Total Booked (Range)**  | Simply put, this is the total value of all bed stays happening during the dates you selected. This acts as your "revenue potential" based purely on guest occupancy! |
| **Range Net Profit**      | Your actual surplus cash for the specific dates. We calculate it by taking: `Recorded Payments + Extra Services - Expenses`.                                         |
| **Avg Daily Net**         | The average daily earnings going straight into your pocket after taking out expenses.                                                                                |
| **Rev / Bed (Daily Avg)** | Your ultimate efficiency score! It shows exactly how much money, on average, each bed is collecting for you every single day.                                        |

## Financial Breakdown

### Revenue Sources

* **Bookings (Payments collected):** This is the wonderful, actual real money you've securely received from guests paying for their stays during this timeframe.
* **Extra Services:** All your lovely extra income from secondary things like laundry, bike tours, airport transit, or locker rentals.

### Expenses

* **Operating Costs:** The grand total of all the financial outgoings and bills logged for your property. These are automatically deducted from your total profit so you don't have to do the math yourself!

## Understanding Stay Value vs. Collected Payments

Every now and then, you might notice that your **Total Booked** and **Bookings (Payments collected)** columns don't perfectly match up. Don't worry, this is surprisingly common in property management and entirely normal! Let's explain why:

* **Pending Payouts & Outstanding Balances:** Whenever your *Total Booked* figure looks bigger than your *Payments collected*, it means your beds are full and busy, but some forms of payments are still catching up to you! Usually, this involves money getting held briefly by OTAs (like Booking.com) before hitting your bank, or guests who haven't paid their final checkout invoices.
* **Deposits & Advanced Payments:** Alternatively, if your *Payments collected* happens to be higher than your *Total Booked*, give yourself a pat on the back! It usually means you've successfully gathered powerful advance deposits for future stays!

## Daily Breakdown Table

Scroll to the bottom, and you'll find an awesome detailed table that lets you audit your properties day-by-day:

* **Booked:** The value representing the guests physically staying in your lively hostel on that day.
* **Collected:** The finalized cash or card payments successfully processed on that exact date.
* **Extras:** The volume of all the secondary services and fun experiences sold.
* **Expenses:** Any frustrating bills or necessary operational costs paid out.
* **Net Profit:** Your final, rewarding financial result for the day.

## Pro-Tips for Analysis

* **Track Negative Days:** Always use your Daily Breakdown to flag high one-off expenses (like emergency plumbing fixes) to see exactly how they moved the needle on your daily profit.
* **Monitor Efficiency:** Keep a very close eye on the **Rev / Bed** column. It’s the perfect way to see how well your pricing strategy is converting into actual cash flow as the month progresses!
* **Audit Collections:** Have you noticed your **Collected** totals trailing far behind your **Booked** totals for a prolonged time? It might be the perfect opportunity to review your team's payment collection routine or check if those OTAs are sitting on your money!


# Monthly Expenses

Track your operational costs grouped by category, and visualize where your money is going with intuitive pie charts.

{% hint style="info" %}
Running a property isn't just about making money; it's also about managing how much goes out the door. The Monthly Expenses page gives you a beautifully clear, organized view of all your operational costs so you can spot where you might be overspending.
{% endhint %}

## The Big Picture

At the top of the page, we summarize your spending for the selected month:

| Overview Metric       | Description                                                                                                  |
| --------------------- | ------------------------------------------------------------------------------------------------------------ |
| **Total Out-flow**    | A single, bold number showing exactly how much you've spent.                                                 |
| **Expense Pie Chart** | A visual breakdown of your costs. If your electricity bill is taking up half the pie, you'll know instantly! |

## Expense Categories at a Glance

Instead of overwhelming you with a massive, endless list of every single receipt and minor purchase, the main table groups your expenses by **Category** (like "Utilities", "Maintenance", or "Payroll").

For each category, you'll see the total amount spent. This makes it super easy to compare your big-ticket operational areas and track your budgets.

## Diving into the Details

{% hint style="success" %}
Need to know exactly why the "Maintenance" category was so high this month? Just click on the category row in the table!
{% endhint %}

A detailed pop-up dialog will appear, listing every single individual expense entry that makes up that total.

Inside the details dialog, you will see:

* The specific date.
* The exact amount.
* A custom description (e.g., "Fixed room 4 plumbing").
* Which account was used to pay for it.


# Payment History

A complete, searchable ledger of every transaction that passes through your property. Track income, expenses, and internal transfers easily.

{% hint style="info" %}
Every business needs a central source of truth for its money. The Payment Log is exactly that—a master ledger that tracks every single payment that comes in (like guest bookings) and every payment that goes out (like paying for supplies).
{% endhint %}

## Your Financial Snapshot

Right at the top of the page, you'll see your **Net Balance** for the selected time period. This simple number instantly tells you if you're in the green or the red for the month.

## Managing the Ledger

Below the balance, you have your main transaction table. We made this as easy to read as possible:

| Column              | Description                                                                                                       |
| ------------------- | ----------------------------------------------------------------------------------------------------------------- |
| **Transaction**     | Shows the property name and the category of the payment (e.g., Booking, Maintenance).                             |
| **Amount**          | Green with a downward arrow means money came in; red with an upward arrow means money went out.                   |
| **Description**     | Any internal notes you left for yourself, plus a quick link to "View Receipt" if you uploaded an image of a bill. |
| **Date**            | The exact day the transaction happened.                                                                           |
| **Account / Guest** | Tells you how it was paid (e.g., Cash, POS, Stripe) and who paid it (the guest's name).                           |

{% hint style="success" %}
Looking for something specific? The **Quick Filter** search bar lets you type in a guest's name, an amount, or a description to instantly find exactly what you're looking for.
{% endhint %}

## Manual Actions

While most bookings log payments automatically, you'll sometimes need to step in manually. Use the action buttons at the top right:

| Action                        | When to use it                                                                                                                                                                                   |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Transfer**                  | Did you move some cash from the register to the bank? Use the Transfer button to officially record that movement between your internal accounts.                                                 |
| **Add Payment (Admins Only)** | Need to record an ad-hoc expense like buying printer ink? Use this to manually enter the amount, select an account, and even upload a photo of the receipt straight from your phone or computer. |

{% hint style="warning" %}
If you ever make a mistake, you can always click the three little dots next to any transaction to **Edit** the details or, if you're an admin, **Delete** the record entirely.
{% endhint %}


# Profit Settlement

Review monthly and daily financial snapshots to settle profits and validate totals across bookings, payments, extras, and expenses.

Use this page to review monthly and daily financial snapshots before closing a period or settling profits.

## Monthly Report

* Choose a year and month to load the period summary.
* Review totals for bookings, payments, extra services, and expenses.
* Use the detailed tables to spot outliers and reconcile activity.

## Daily Snapshot

* Pick a specific date to see one-day totals.
* Compare daily payments against bookings for quick validation.

## Tips

* Reconcile Payment History before approving a settlement.
* Cross-check extra services and expenses when totals look off.
* Refresh the report after making edits elsewhere to confirm the latest numbers.


# Balance Overview

A straightforward summary of your property's various financial accounts and their monthly net balances.

{% hint style="info" %}
Whether you manage your money across physical tills, digital wallets like Stripe, or traditional bank accounts, it's crucial to know exactly how much cash is sitting in each place. The Balance Overview page gives you a beautifully clean rollup of all your accounts for the current month.
{% endhint %}

## The Account List

The page is built around a list of interactive cards, one for each active payment method or account you have set up in the system.

On each card, you'll see:

| Data Point            | What It Shows                                                                                                                        |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| **Account Name**      | E.g., "Cash Register", "Stripe", or "Main Bank Account".                                                                             |
| **Transaction Count** | A quick glance at how many individual payments or expenses passed through this account this month.                                   |
| **Monthly Balance**   | The net total of all money that went in minus all money that went out. If it's green, you're positive; if it's red, you're negative. |

## Expand to See the Breakdown

{% hint style="success" %}
If a balance looks off, or you just want to see exactly what makes up that number, you don't need to jump to a different page. Simply click on the account card!
{% endhint %}

It will slide open to reveal a detailed, inline table showing every single transaction tied to that account for the month.

The expanded ledger gives you:

| Column          | Description                                                                       |
| --------------- | --------------------------------------------------------------------------------- |
| **Date**        | When the money moved.                                                             |
| **Description** | What the payment was for (e.g., a specific booking or an expense note).           |
| **Type**        | A clean badge indicating whether it was an `INCOME` or an `OUTGOING` transaction. |
| **Amount**      | The exact value added or subtracted from the account.                             |


# Transaction Ledger

Generate a detailed, running balance audit for any specific account over the current period.

{% hint style="info" %}
When you need to reconcile a specific bank account or see exactly how the cash in your till went from $100 to $500, the Transaction Ledger is the tool you need. It generates a full audit report for any individual account, calculating a running balance line by line.
{% endhint %}

## Generating the Audit

When you first open the page, you'll see a simple dashboard telling you to "Select an account from the dashboard above to generate a ledger report."

To get started:

1. Click the dropdown menu and select the specific account you want to investigate (e.g., "Cash Register" or "Stripe").
2. Click the **Generate Audit** button.

## Reading the Ledger

Once the audit generates, it reveals a clean, comprehensive table breaking down every transaction for that specific account.

{% hint style="danger" %}
At the very top right, you'll see the **Reconciled Balance**—the final tally of money currently sitting in that account based on the logged transactions.
{% endhint %}

The ledger table gives you a chronological story of the account:

| Column               | Description                                                                                                       |
| -------------------- | ----------------------------------------------------------------------------------------------------------------- |
| **Transaction Date** | Exactly when the money moved.                                                                                     |
| **Name / Entity**    | The guest or category associated with the payment.                                                                |
| **Description**      | Any internal notes or context.                                                                                    |
| **Flow**             | An easy-to-read column showing money coming in (green) or going out (red).                                        |
| **Net Balance**      | The running total of the account after *each* transaction, so you can trace the exact moment the balance shifted. |


# Manage Accounts

Create, update, or retire finance account types. Control liquid cash, online reconciliation, and booking access to keep reporting and payment options correct.

Maintain the list of account types used across the finance portal—from settlement channels to internal cash funds.

## Manage Account Types

The accounts table displays every configured account with details about how it behaves in reporting.

| Name            | Description                                      | Liquid Cash | Booking Access | Is Online | Active |
| --------------- | ------------------------------------------------ | ----------- | -------------- | --------- | ------ |
| Bank            | Bank                                             |             |                |           | ✅      |
| Advance Deposit | All advances and refundable deposits             |             |                |           | ✅      |
| Cash            | Liquid Cash at the hostel                        | ✅           |                |           | ✅      |
| Online          | Payments from Stripe and in Wio Bank             |             |                | ✅         | ✅      |
| vCard           | Payments from Booking or Expedia by virtual card |             |                | ✅         | ✅      |
| POS             | Payments by POS machines                         |             |                |           | ✅      |
| Cash-Collected  | Collected cash by the responsible person         | ✅           |                |           | ✅      |
| Petty Cash      | Petty cash for daily expenses at the hostel      | ✅           |                |           | ✅      |

* **Liquid Cash** flags the accounts that should count toward on-hand cash totals.
* **Booking Access** determines whether the account appears as a payment option when editing bookings.
* **Is Online** identifies accounts reconciled through external gateways.
* **Active** indicates whether the account is currently in use; toggle it off to hide legacy accounts without deleting historical data.

## Common Actions

* **Create**: Use the “Add account type” button to introduce new channels as your operations expand.
* **Edit**: Update names or descriptions to keep terminology aligned across teams.
* **Remove**: Deactivate accounts you no longer use to avoid confusion when logging transactions.
* **Search**: The search bar filters the list instantly, making it easy to find a specific account before editing.


# Export Center

The **Export Center** is your central hub for generating and downloading financial intelligence data. Whether you need pre-configured reports for your accountant or custom data extracts for your own analysis, the Export Center provides flexible options to export your data in multiple formats (CSV, Excel, JSON).

## Ready-to-go Reports

The Export Center offers pre-configured packages designed to save you time and provide exactly what you need for common financial tasks.

* **Accounting Package**: Downloads a comprehensive Excel file containing two sheets: a full Profit & Loss report and a detailed Payment Log. This is ideal for monthly bookkeeping and cash flow tracking.
* **Tax Preparation**: Generates an Excel file with your current year's expenses, categorized and filtered to include only outgoing transactions. This gives your tax agent everything they need to file your returns.
* **Bank Reconciliation**: Creates a CSV file containing your transaction history formatted to match standard bank statements, making reconciliation a breeze.

## Custom Export Builder

If you need specific data points or formats, you can use the Custom Export Builder to mix and match sources, formats, and filters.

### Step 1: Data Source

Choose the primary type of data you want to export:

* **Payment Log**: Detailed transaction history.
* **Profit & Loss**: Accrual revenue, cash collections, expenses, and net profit.
* **Cash Flow**: Daily inflow, outgoing cash, and net liquidity.

### Step 2: File Format

Select the file format that best suits your needs:

* **CSV**: A plain-text format that works in any spreadsheet app.
* **Excel (.xlsx)**: A formatted spreadsheet ideal for accountants and advanced analysis.
* **JSON**: Structured data format perfect for developers and integrations with other systems.

### Step 3: Configuration

Customize your export based on the selected data source:

* **Payment Log Options**: Choose the breakdown level (Raw Transactions, Daily Summary, Weekly Report, By Category, By Payment Method). You can also toggle **Expenses Only** to filter out all income transactions.
* **Date Range**: Select from quick presets (e.g., This Month, Last Quarter, This Year) or define a custom date range.

Once configured, simply click **Generate** to download your custom report.


# Property Setup

Configure property details, room inventory, booking engine content, and guest policies so listings and operations stay accurate.

Configure room inventory, property information, booking engine content, and guest policies.

## Pages

* Room Inventory: [Room Management](/finance-management/property-setup/room-management)
* Property Profile: [Property Information](/finance-management/property-setup/property-information)
* Booking Engine: [Booking Engine](/finance-management/property-setup/booking-engine)
* Cancellation Policy: [Cancellation Policy](/finance-management/property-setup/cancellation-policy)

## Tips

* Keep names and descriptions guest-friendly since they appear on the booking engine
* Review property info quarterly to ensure accuracy
* Align cancellation rules with guest communications and staff procedures


# Room Inventory

Configure your property's physical layout, create room types, define capacities, and organize how they are sold.

{% hint style="info" %}
Your rooms are your product. The Room Management page is where you build out the physical inventory of your property, telling the system exactly what you have available to sell.
{% endhint %}

{% hint style="info" %}
**What you can do here, and what needs us**

Renaming a room, changing whether it's a private room or a dorm, adding or removing beds, changing how many guests fit, reordering the list: all yours, right on this page (or the room's edit page).

Adding a **new property or a new listing** to your account isn't something you can do from here. Email <contact@hostelmate.co> with the property name and address and we'll set it up and put it under your login.
{% endhint %}

## The Inventory Table

When you load the page, you'll see a clean, organized list of all your currently configured rooms.

The table gives you a quick snapshot of:

| Column        | Description                                                                                                       |
| ------------- | ----------------------------------------------------------------------------------------------------------------- |
| **Room Type** | The name of the room (e.g., "Mixed Dorm", "Deluxe Suite") and how many physical units of this room type you have. |
| **Kind**      | Whether it's a `Private Room` or a shared `Dormitory`.                                                            |
| **Sell Mode** | How the pricing works. Is it sold `Per Room`, `Per Person`, or via a `Hybrid` model?                              |
| **Capacity**  | The maximum number of guests this specific room type can hold.                                                    |

{% hint style="success" %}
**Reordering Your Rooms:** Want the VIP suites to show up first on your booking engine? Easy! You can physically drag and drop the rows in the table to reorder your room list exactly how you want it. *(Note: Drag and drop is disabled if you are actively using the search bar.)*
{% endhint %}

## Adding a New Room

When you click **Add New Room**, a short 3-step wizard creates the room type. There's one more step after it (adding the beds), covered below.

### Step 1: Room Identity

Give your new room a public-facing **Name** (like "Standard Double") and an optional internal **Description** so your staff knows exactly which room it is.

### Step 2: Type & Pricing

Define the core mechanics of the room:

* **Room Kind:** Choose whether guests are booking a `Private Room` or a bed in a `Dormitory`.
* **Sell Mode:** Decide how it's priced. `"Per Room"` charges a flat rate, `"Per Person"` scales the price based on guest count, and `"Hybrid"` lets you do both.

### Step 3: Capacity & Inventory

This is the step people get wrong, so here's what each field means, with a few examples underneath.

* **Adults / Children / Infants**: the most people one room of this type can hold. For a dorm, Adults is the number of beds in the room.
* **Units Count**: how many *identical rooms* of this type you have. Not beds. Rooms. For dorms this is almost always 1; if you have several dorms, create each one as its own room so your staff can tell them apart on the calendar.
* **Default Occ.**: how many guests the standard price covers before extra-guest pricing kicks in. For dorms, leave it at 1.

| You have…                    | Room Kind    | Adults | Units Count                                                         | Then add…       |
| ---------------------------- | ------------ | ------ | ------------------------------------------------------------------- | --------------- |
| One 6-bed mixed dorm         | Dormitory    | 6      | **1**                                                               | 6 beds (Step 4) |
| Two 4-bed female dorms       | Dormitory    | 4      | **1** each, created as two rooms ("Female Dorm A", "Female Dorm B") | 4 beds in each  |
| Three identical double rooms | Private Room | 2      | **3**                                                               | 3 units         |
| One family room for up to 5  | Private Room | 5      | **1**                                                               | 1 unit          |

{% hint style="warning" %}
**Units Count can't be changed once the room is saved.** It isn't shown on the edit page either. If you set it wrong, delete the room and create it again (best done before it has any bookings), or write to us and we'll fix it for you.

Getting it too low is the costly mistake: the channels will treat that as your ceiling and stop selling beds you actually have. Too high doesn't oversell anything, because what we advertise is always your real bed count, but it does misreport how many rooms you have, so it's worth getting right.
{% endhint %}

### Step 4: Add your beds

The wizard creates the room type. The beds (or units, for private rooms) are added on the room's edit page straight after. Open the room from the list, then use **Add Bed** (or **Add Unit**) for each one, or **Bulk Update** to set the total in one go. Bed names follow whatever pattern you start with, so if you name the first one "A" the next suggestions will be "B", "C" and so on.

Until the beds are there, the room has nothing to sell: it won't show on the Booking Calendar and no availability goes out to your channels.


# Property Profile

Manage your property's core details, contact info, and public-facing branding.

{% hint style="info" %}
Your Property Profile is the digital face of your business. This page holds the fundamental details and branding that might be displayed to guests on invoices, payment links, and public-facing documents.
{% endhint %}

## General Information

The **General Info** tab holds your text-based data. Depending on your backend configuration, this will dynamically show all the key fields associated with your property—such as your property name, address, support email, phone number, and any other relevant text fields.

{% hint style="success" %}
Simply type directly into the boxes to update your details, and hit the **Save Profile Changes** button at the bottom of the card when you're done.
{% endhint %}

## Media & Branding

They say a picture is worth a thousand words. The **Media & Branding** tab is where you manage the main visual representation of your property.

### Managing the Display Image

If you already have a photo set, you'll see it proudly displayed here.

* Click the expand icon to view it in full screen.
* Click the red trash can icon if you want to delete it entirely (don't worry, we'll ask you to confirm first!).

### Uploading a New Photo

Ready to show off your newly renovated lobby?

1. Use the "Update Visuals" box on the right. You can either click **Browse Files** or simply drag and drop an image right onto the box from your computer.
2. The system will show you a preview of the new image.
3. If it looks good, click **Upload & Set as Property Photo**. You'll see a progress bar as we safely upload the file to the cloud.

{% hint style="warning" %}
Try to keep your images under 10MB and use standard formats like JPG or PNG!
{% endhint %}


# Booking Engine

Configure what your guests see when booking directly with you, and decide exactly how you want to collect their payments.

{% hint style="info" %}
If you're using our direct booking engine on your website, this page is where you configure exactly how it behaves. You can control the public description of your property, your listed amenities, and—most importantly—how you want to charge your guests.
{% endhint %}

## 1. Property Setup

The **Property** tab manages the core content guests read when they visit your booking page.

| Setting                   | What it does                                                                                                                                                           |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Description**           | A welcoming paragraph detailing what makes your property unique.                                                                                                       |
| **Utilities & Amenities** | Toggles and lists for the facilities you offer (e.g., Free Wi-Fi, Air Conditioning, 24/7 Reception). This ensures guests know exactly what to expect before they book. |

## 2. Stripe Integration

The **Stripe** tab is your gateway to automated, digital payments.

* Connect your property directly to your Stripe account.
* Enable automatic credit card validation and up-front deposits at the time of booking.
* Once connected, you can also use this integration to generate secure payment links for guests.

## 3. Pay on Arrival

Don't want to mess with online payments? The **Pay on Arrival** tab lets you set up traditional reservations.

* Enable this option to allow guests to secure a booking without entering a credit card.
* You can add custom instructions here (e.g., "Please bring exact change in local currency") that will appear on the guest's confirmation screen.

## 4. Manual Capture

For properties that prefer a hands-on approach, the **Manual Capture** tab allows you to collect credit card details securely without actually charging them immediately.

* The guest enters their card details to guarantee the room.
* The system securely encrypts and stores the card info.
* You process the actual payment manually through your own physical POS machine or a separate virtual terminal when the guest arrives.


# Cancellation Policy

Establish the contractual terms and conditions for bookings, cancellations, and no-shows.

{% hint style="info" %}
Setting clear expectations is the best way to avoid disputes with guests. The Policies page is where you lay down the law—defining exactly what happens when a guest cancels, doesn't show up, or asks for a refund.
{% endhint %}

## The Policy Categories

When you load the page, you'll see four primary text boxes corresponding to the most critical areas of guest interaction:

| Policy Type           | Description                                                                                                               |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| **Cancellation Fees** | Explain exactly how much a guest will be charged if they cancel their booking 14 days out versus 24 hours out.            |
| **No Show Policy**    | Define what happens if the guest simply never arrives. (Do they lose their deposit? Are they charged for the whole stay?) |
| **Refund Policy**     | Clearly outline under what circumstances you are willing to return money that has already been collected.                 |
| **Modifications**     | Detail your rules for date changes or reducing the number of guests.                                                      |

## Writing Your Policies

{% hint style="danger" %}
We intentionally designed the editors on this page as simple, plain-text `<Textarea>` fields. We don't use fancy formatting or rich text here because these policies need to be injected into plain text emails, OTAs (like Booking.com), and simple invoice PDFs without breaking the layout.
{% endhint %}

Just type out your rules clearly and concisely, and hit the **Publish Policies** button at the top right to make them live!


# Guest Notifications

Configure guest-facing Email and WhatsApp notifications, plus the WhatsApp setup pages needed to connect Meta and activate delivery.

Use the guides in this section to configure guest-facing email and WhatsApp notifications, then connect the WhatsApp provider details needed to send them.

## Channels

* Email notifications: [Email Notifications](/finance-management/notifications/email-notifications)
* WhatsApp notifications: [WhatsApp Notifications](/finance-management/notifications/whatsapp-notifications)

## WhatsApp Setup

* WhatsApp integration setup: [WhatsApp Integration Setup](/finance-management/notifications/whatsapp-integration)

## Tips

* Start with one channel, then add more once templates are finalized
* Keep placeholders consistent across channels for a unified guest experience
* Review templates after policy or pricing changes


# Email Notifications

Automate your direct guest communication with customizable email templates and timing rules.

{% hint style="info" %}
Stay in touch with your guests without lifting a finger! The Email Notifications page lets you design beautiful, automated emails that get sent to guests at key moments before, during, and after their stay.
{% endhint %}

## The Email Triggers

You can set up emails for five different scenarios:

| Trigger                  | When it sends                                                     |
| ------------------------ | ----------------------------------------------------------------- |
| **Booking Confirmation** | Immediately after a guest books.                                  |
| **Pre-Arrival Guide**    | A few days before check-in (great for door codes and directions). |
| **Booking Updated**      | If dates or details change.                                       |
| **Booking Cancellation** | If a booking is cancelled.                                        |
| **Post-Stay Thank You**  | After check-out (perfect for asking for reviews!).                |

## Editing a Template

When you click on one of the triggers, you'll open the editor. Here you can turn the email on or off, edit the subject line, and write the email body using a rich text editor.

### Custom Timing (Pre-Arrival & Post-Stay)

For the "Pre-Arrival Guide" and "Post-Stay Thank You" emails, you have granular control over *when* the email is sent:

* **Pre-Arrival:** A special setting appears allowing you to specify exactly how many "days before check-in" the email should be fired.
* **Post-Stay:** A similar setting lets you choose how many "days after check-out" the thank you email goes out.

### Placeholders (The Magic Variables)

{% hint style="success" %}
Don't write "Dear Guest"—use our Placeholders!
{% endhint %}

On the left side of the editor, you'll see a list of variables like `{{guest_name}}` or `{{checkInFrom}}`. Just click one to copy it, and paste it into your email. When the email actually sends, the system swaps the placeholder with the real guest's details.

### Guest Preview

Wondering what your email will actually look like when it hits a guest's inbox? Switch to the **Preview** tab! It generates a live, styled mockup of the email using sample data, so you can make sure your formatting and placeholders are perfect before hitting save.


# WhatsApp Notifications

Configure WhatsApp templates, connection settings, and guest notification delivery.

Use WhatsApp to send guest updates with a reusable template and dynamic placeholders.

## Configure WhatsApp

* Connect your WhatsApp provider details (token, phone, SID, number ID).
* Confirm the connection status before enabling notifications.
* Use the enable switch to turn WhatsApp notifications on or off.
* If the provider is not connected yet, complete [WhatsApp Integration Setup](/finance-management/notifications/whatsapp-integration) first.

## Template Editing

* Write a template once and reuse it for new bookings.
* Use placeholders for dates, names, and amounts.
* Preview the message to validate formatting.

## Placeholders

* `{{title}}` guest greeting
* `{{pg_name}}` property name
* `{{start}}` check-in date
* `{{end}}` check-out date
* `{{count}}` number of nights
* `{{booking_status}}` booking status
* `{{guest_name}}` full guest name
* `{{address}}` property address
* `{{phone}}` contact phone
* `{{amount}}` total booking amount
* `{{currency}}` currency code
* `{{checkInFrom}}` earliest check-in time
* `{{checkInTo}}` latest check-in time

## Tips

* Keep messages short and friendly for mobile reading.
* Reset the template if formatting gets messy, then re-save.
* Disable notifications temporarily during template updates.


# WhatsApp Integration Setup

Integrate WhatsApp using Meta’s Cloud API—set up webhooks, approve message templates, generate tokens, and connect your backend for automated messaging.

This guide walks you through the process of setting up WhatsApp integration using Meta’s WhatsApp Cloud API.

#### Prerequisites

Before setting up the WhatsApp integration, ensure you have the following:

* A **Meta Developer Account**
* A **Meta Business Account**
* A **Phone Number** registered with WhatsApp
* A **Meta App** with WhatsApp enabled

#### Step 1: Create a Meta App

1. Go to the [Meta App Dashboard](https://developers.facebook.com/apps/).
2. Click **Create App** and select **Business** as the app type.
3. Enter your **App Name** and **Contact Email**.
4. (Optional) Select a **Business Portfolio** if you have one.
5. Click **Create App** and enter your password for confirmation.
6. On the "Add Products to Your App" page, locate **WhatsApp** and click **Set Up**.
7. Select your **Meta Business Account** or create a new one.
8. Confirm your account via the email link sent by Meta.

#### Step 2: Configure WhatsApp API

1. In the Meta App Dashboard, go to **WhatsApp > Quickstart**.
2. Under **Select Business Portfolio**, choose an existing portfolio or create a new one.
3. Navigate to **WhatsApp > API Setup**.
4. Copy the **Temporary Access Token** (expires after 23 hours; we will generate a permanent token later).
5. Under **Step 1: Select Phone Numbers**, copy the **Phone Number ID**.
6. In the **To** field, add a recipient phone number for testing.
7. Click **Send Message** to test the API. You should receive a message from the configured WhatsApp number.
8. Under **App Settings > Basic**, copy the **App ID** and **App Secret**.

#### Step 3: Get a Permanent Access Token

1. In the Meta App Dashboard, go to **Business Settings**.
2. In the left menu, navigate to **Users > System Users**.
3. Click **Add** and enter a **System Username**.
4. Assign the **System User Role** (Admin or Developer).
5. Click **Create System User**.
6. Under **Assigned Assets**, click **Add Assets**.
7. Select your app, enable **Manage App**, and save changes.
8. Click **Generate Token** and choose your app.
9. Select the following permissions:
   * `whatsapp_business_messaging`
   * `whatsapp_business_management`
10. Click **Generate Token** and copy the **Permanent Access Token**.

#### Step 4: Setup Webhooks

1. In the Meta App Dashboard, navigate to **WhatsApp > Configuration**.
2. Under **Webhook**, click **Edit**.
3. Set **Callback URL** to `https://app-whpbk.hostelmate.co/webhook`.
4. Enter a **Verify Token** (a custom token you create for security).
5. Click **Verify and Save**.
6. Under **Webhook Fields**, click **Manage** and enable **messages**.

#### Step 5: Connect to Your Backend

Use the following credentials to configure WhatsApp in your system:

* **WhatsApp Token** (Permanent Access Token)
* **WhatsApp Phone** (Your registered phone number)
* **WhatsApp SID** (Your System User ID)
* **WhatsApp Number ID** (Phone Number ID from Meta)

#### Step 6: Required Message Templates

To use WhatsApp messaging effectively, there is a set number of templates that must be predefined. All templates must adhere to the following rules:

* Templates need to be in English ("en") for now—other languages aren’t supported just yet!.
* It's best to select templates as "Utility" since they're more cost-effective to use.
* Templates **must not** contain any variables, images.
* The templates should be predefined and approved for WhatsApp messaging.

**List of Required Templates:**

1. **new\_guest** - This message is sent to a guest who is booking your hostel for the first time, welcoming them and providing initial details about their stay.
2. **new\_booking** - This message is triggered whenever a guest makes a new booking, confirming their reservation details.
3. **extend\_booking** - Sent when a guest books an additional stay that directly follows an existing reservation, ensuring continuity in their lodging.
4. **canceled\_booking** - This message is sent when a guest cancels a booking, notifying them that their reservation is no longer active.
5. **arriving\_soon** - Sent one day before the guest's scheduled check-in date, reminding them of their upcoming stay.

#### Step 7: Testing & Deployment

1. Send a test message via the Meta App Dashboard.
2. Verify that your backend correctly processes and responds to WhatsApp messages.
3. Deploy the integration into production.

***

For further details, refer to the [Meta Developer Documentation](https://developers.facebook.com/docs/whatsapp/).


# Payment Processing

Connect Stripe or Nomod to take secure payments online and at the desk. Add API keys, set up webhooks, run test charges, and troubleshoot common issues.

Take secure payments online and at the front desk by connecting a payment gateway.

## Supported Gateways

* Stripe — cards, wallets, webhooks: [Stripe](/finance-management/payment-processing/stripe)
* Nomod — card payments and POS: [Nomod](/finance-management/payment-processing/nomod)
* Pay at Property — collect payment later at the desk: [Pay at Property](/finance-management/payment-processing/pay-at-property)

## Before You Start

* Create or log in to your gateway account
* Have API keys and webhook secrets ready
* Decide which properties or channels should accept online payments

## Setup Steps (Typical)

1. Open Payment Processing in the finance portal
2. Choose your gateway
3. Enter the required credentials
4. Save and run a small test payment

## Troubleshooting

* Webhooks failing: re-check the signing secret and URL
* Test mode vs live mode: confirm the correct API keys are in use
* Payment not recorded: refresh the booking, then verify gateway logs


# Stripe

Connect Stripe to Hostel Mate by creating the webhook and adding your Secret key. Follow step‑by‑step setup, required events, verification, and troubleshooting tips.

Getting paid smoothly is one of the most important things for your business! This guide will walk you through setting up a **Stripe webhook** (which lets Stripe seamlessly talk to Hostel Mate) and then finding and adding your **Secret key** in the Finance Portal. It’s a very straightforward process, so let's get right into it!

***

### Step 1: Set Up the Webhook in Stripe

Let's begin by configuring the webhook so Hostel Mate immediately knows when a payment occurs.

1. Go ahead and log in to your [**Stripe Dashboard**](https://dashboard.stripe.com/).
2. Navigate over to **Developers → Webhooks**.
3. Click on **Add destination** and make sure you select the exact following **Events**:
   * `checkout.session.completed`
   * `checkout.session.async_payment_succeeded`
   * `checkout.session.async_payment_failed`
4. Choose **Webhook endpoint** as your **Destination Type**.
5. Set up the **Configure destination** to save your new webhook. In the **Endpoint URL** field, just drop in this exact URL:

```
https://api.hostelmate.co/api/v1/online/stripe/process-request

```

***

### Step 2: Generate Your Stripe Secret Key

Fantastic, the webhook is ready! Now we need the secret key to grant access.

1. Stay logged in to your [**Stripe Dashboard**](https://dashboard.stripe.com/).
2. Look for the 'Secret key' and copy it so we can drop it right into Hostel Mate.

> **Testing tip:** We absolutely recommend using **Test mode** while you're learning the system. Once everything looks perfect and you're ready for real guests, just flip both your Stripe Dashboard and the Finance Portal over to **Live mode**.

***

> By the way, Hostel Mate naturally checks for valid webhook events the moment you connect Stripe. Creating the webhook first (like we did above) ensures everything connects flawlessly on the first try!

***

### Step 3: Add Your Stripe Secret Key

We're almost done! Let's pop that key into your account.

1. Hop over to your **Finance Portal → Payment Processing → Stripe**.
2. In the **API Key** field, simply paste the **Secret key** you just grabbed from Stripe:
   * Drop the `sk_test_...` one in if you are just testing.
   * Drop the `sk_live_...` one when you are taking real bookings.
3. Hit **Save** to lock everything in.
4. Optional but highly recommended: Hop into Stripe, turn on Live mode, and run a tiny test payment to see the magic happen in real time!

> **Quick reminder:** Use **Test mode** while testing. When you're ready to go live, make sure to switch both the Stripe Dashboard and the Hostel Mate Finance Portal to **Live mode**.

***

Once you've saved those two fields, Hostel Mate will automatically check that:

* Your Secret key is completely valid.
* The webhook is actively listening for your payment events.

As soon as that verification is done, you're all set to securely accept Stripe payments for your bookings!

### Troubleshooting

Running into a small hiccup? No worries, here's what to check:

* **Webhook not firing:** Double-check that you picked those exact three required events and pasted the Endpoint URL perfectly without any extra spaces.
* **Signature errors:** Try re-copying your webhook signing secret from Stripe and update it inside Hostel Mate.
* **Test vs Live mix-up:** Make sure Stripe and Hostel Mate are both set to Test, or both set to Live. Mixing them up is totally normal but causes errors!


# Nomod

Connect Nomod as a payment gateway in the finance portal. Add your API secret, run a test payment, and manage invoices that expire after 24 hours.

This guide walks you through linking the **Nomod payment gateway** to your system so you can process booking payments.

{% hint style="info" %}
**Note:** The system usually takes up to **20 minutes** to process Nomod payments.
{% endhint %}

### Prerequisites

* A **Nomod account**
* Access to the **Finance Portal** where you manage payment gateways
* Your **Nomod API Secret Key**

### Step 1: Obtain Your Nomod API Token

1. Log in to the **Nomod app**.
2. Navigate to the **Settings** section.
3. Generate a new **API Secret Key**.
4. Copy the **API Secret Key**.

### Step 2: Access the Finance Portal

1. Log in to the **Finance Portal**.
2. Open **Payment Processing > Nomod**.

### Step 3: Add the API Token

1. Paste the **API Secret Key** into the provided field.
2. Click **Save** to complete the integration.
3. Run a small test payment to confirm the connection.

### Step 4: Invoice Generation with Nomod

When using **Nomod**, an **invoice** is generated for each payment request.

* The invoice remains valid for **24 hours** only.
* After that period, the invoice expires and payment is no longer possible.

### Troubleshooting

* Invoice expired: reissue a new payment request; old links will not work after 24 hours
* Payment pending: allow up to 20 minutes for processing before retrying
* Wrong account or keys: generate a new API Secret in Nomod and update the portal

If you no longer wish to use Nomod for processing payments:

1. Go to the **Nomod** settings in the **Finance Portal**.
2. Clear the **API token** field.
3. Click **Save** to disable the integration.


# Pay at Property

Understand how the Pay at Property checkout method behaves across the booking engine, waitlist form, and back office, including status flow, policies, and best practices.

**Pay at Property** lets guests complete a booking without paying online and settle the balance on arrival. When the toggle is enabled, the method appears anywhere guests can choose a payment type (the Booking Engine and the Waitlist form).

***

### What guests see

* During checkout, **Pay at Property** is listed alongside online methods (e.g., Stripe, Nomod).

***

### Booking creation & status flow

* Bookings created with **Pay at Property** are confirmed like any other reservation, but the **payment state** is set to **Pending Collection**.
* The reservation appears in Finance/Transactions and in the reservation timeline with a **Pay at Property** badge.
* When the guest pays at check-in, staff record the payment in the reservation or Finance screen; the status changes from **Pending Collection** to **Paid** with your selected method (Cash, Card at desk, Bank transfer, etc.).

### Where it appears

* **Booking Engine:** Shown on the payment step as a selectable method.

***

> Once enabled and saved, **Pay at Property** stays available until you turn it off. It’s ideal as a fallback when card payments fail or when you prefer to collect at reception.


# Booking Waitlist

Understand the Waitlist status in Hostel Mate — how bookings are held without blocking beds, where it applies (direct bookings, OTA bookings, unpaid reservations), and how to confirm or cancel them.

The **Waitlist** is a booking status in Hostel Mate that holds a reservation in a pending state without blocking the bed. The bed stays available for other guests — particularly those who pay upfront — until a staff member decides to confirm or cancel the waitlisted booking.

It applies in multiple situations: direct bookings made via your booking engine using certain payment methods, and OTA bookings that arrive without full payment collected.

***

### Why it exists

A confirmed booking immediately blocks a bed. That is the right behaviour when payment is secured, but it becomes a problem when:

* A guest books via Pay on Arrival or Manual Card Capture with no money changing hands yet
* An OTA reservation arrives marked as unpaid or partially paid
* You need time to verify a guest before committing a bed

In all these cases, placing the booking in Waitlist status keeps the bed open. You review it, then either confirm (blocking the bed from that point) or cancel.

***

### Where a booking can end up on the waitlist

#### Direct bookings — Booking Engine

When the **Hold new bookings in waitlist** toggle is enabled on a payment method, any booking made through that method goes to Waitlist instead of Confirmed automatically.

This is configured per method:

* **Pay on Arrival** → setting in the Pay on Arrival tab
* **Manual Card Capture** → setting in the Manual Card Capture tab

#### OTA bookings

Some OTA reservations arrive without full payment — the channel confirmed the booking but the property has not yet collected or the payment is pending on the OTA side. In those cases, staff can manually assign the Waitlist status to hold the reservation without blocking the bed while the payment situation is resolved.

***

### What the Waitlist status means

|                         | Confirmed | Waitlist                |
| ----------------------- | --------- | ----------------------- |
| Bed availability        | Blocked   | Still open              |
| Guest notified          | Yes       | Yes                     |
| Shows in calendar       | Yes       | Yes                     |
| Counts toward occupancy | No        | No                      |
| Requires staff action   | No        | Yes — confirm or cancel |

***

### How to manage waitlist bookings

Waitlist bookings appear in the **Front Desk → Booking Calendar** and in the reservation list. You can filter by Waitlist status to see all pending bookings at once.

From the booking detail:

* **Confirm** — status moves to Confirmed, bed is blocked from that point forward
* **Cancel** — reservation is removed, bed remains open

There is no automatic expiry. Waitlist bookings stay pending until a staff member acts on them.

***

### When to use it

| Scenario                                                 | Recommendation                                                   |
| -------------------------------------------------------- | ---------------------------------------------------------------- |
| High occupancy, Stripe or Nomod is your primary method   | Enable — prevents free holds from blocking paid guests           |
| OTA booking arrived but payment not yet settled          | Assign Waitlist manually until payment clears                    |
| Manual Card Capture with identity checks before charging | Enable — time to verify before committing the bed                |
| Low season, Pay on Arrival as a convenience option       | Disable — confirm guests immediately to reduce friction          |
| Walk-in or same-day Pay on Arrival guests                | Disable — no value in holding when the guest is already arriving |

***

### Notes

* The Waitlist toggle on the Booking Engine is per payment method — enabling it for Pay on Arrival does not affect Manual Card Capture, and vice versa.
* Disabling the toggle does not affect bookings already in Waitlist status — those must still be actioned manually.
* If the parent payment method is turned off, the Waitlist toggle is disabled and has no effect on new bookings.


# Resources

Manage master data that powers expenses, add-ons, and reporting.

Use Resources to maintain the lists and categories used across finance operations.

## Pages

* [Extra Services](/finance-management/resources/extra-services)
* [Expense Categories](/finance-management/resources/expense-categories)

## Tips

* Keep names consistent to avoid duplicate entries in reports.
* Review resources quarterly as operations change.


# Extra Services

Manage add-on services and upsells used in bookings and reports.

Configure add-on services such as airport pickup, laundry, or late checkout.

## Manage Services

* Add a new service with a name and description.
* Mark services as active or inactive.
* Flag services as expenses when they represent a cost item.

## Common Actions

* Edit a service to update wording or status.
* Delete unused services to keep the list clean.
* Restore defaults if you want to revert to the standard set.

## Tips

* Use clear service names to make reporting easier.
* Review the list whenever you introduce new upsells.


# Expense Categories

Customize expense categories used in Payment History and Monthly Expenses so reports stay clear, consistent, and aligned with your accounting terminology.

Tailor your expense tracking by maintaining the list of categories available when recording outgoing payments.

## Edit Category List

Use the **Edit Expenses List** section to add, rename, or remove categories so your reports reflect the right level of detail.

| Category            |
| ------------------- |
| Booking commissions |
| Rent                |
| Salary              |
| Tissues             |
| Grocery             |

* Add new categories as your operations expand—think utilities, maintenance, or marketing.
* Rename existing categories to match your accounting terminology.
* Remove unused categories to keep the selection list concise for staff entering expenses.
* Drag and drop categories to set the display order, then save your changes.

## Why It Matters

* The categories you define here feed directly into the **Monthly Expenses** donut chart and table, giving you cleaner analytics.
* Accurate categorization makes it easier to reconcile with accounting software or exportable ledgers.
* Consistent naming conventions help staff choose the correct category every time they log an expense.


# User Management

Overview of user access controls within the finance portal.

Manage roles and credentials from the pages in this section to control who can access finance data.

## Pages

* User Roles: [User Roles](/finance-management/user-management/user-roles)
* API Access: [API Access](/finance-management/user-management/api-access)

## Tips

* Grant the least access required for each role
* Review API keys regularly and rotate when staff changes occur


# User Roles

Add your staff, get them logged in for the first time, set what they can see, and decide which properties they can touch.

{% hint style="info" %}
Whether you're running a single boutique hostel or a multi-city portfolio, you need tight control over who can see your financial data and modify your settings. The User Roles page is your control center for staff access.
{% endhint %}

*(Note: Advanced permission management is only available on the Advanced Subscription Plan.)*

## Managing Your Team

The main table provides a clear overview of everyone who has access to your system.

### Adding a New User

Hit **Add User**, put in their name and email, and decide which of the two tick boxes they need. For most reception staff the answer is neither — leave them both empty and they'll get a normal front desk account.

Not sure which to tick? [Access Levels and Permissions](/front-desk/access-levels-and-permissions) spells out what each one opens up.

### Getting them logged in for the first time

You don't set their password. They do.

The moment you save, we email them a **Set Your Password** link. They click it, pick a password, and that's them in. If the email never turns up — spam folder, typo in the address, who knows — they can grab a fresh link any time from **Forgot password?** on the login screen.

{% hint style="warning" %}
Here's the one that catches everybody out: they log in with their **email address**, not the Username you typed. Username is only a label for your own list. Even if it looks like an email, it won't get anyone in.
{% endhint %}

{% hint style="info" %}
Capitals don't matter anywhere. `Tia@Example.com` and `tia@example.com` are the same account, whether you're typing it here or they're typing it at login.
{% endhint %}

Last thing: send front desk staff to [app.hostelmate.co](https://app.hostelmate.co). If you left both boxes empty, the finance site will turn them away, and that's meant to happen.

### Toggling Status & Permissions

{% hint style="success" %}
You don't need to navigate to a new page to update someone's access. The table is fully interactive!
{% endhint %}

* Use the **Admin** or **Manager** checkboxes to instantly elevate or restrict a user's permissions.
* Use the **Status** badge to instantly disable a user's account if they leave the company—without deleting their historical data.
* Click the red trash can icon to permanently delete a user.

## Assigning Property Access

If you manage multiple properties under one master account, you probably don't want the night auditor in London seeing the financial reports for your Berlin location.

Hostel Mate allows you to securely silo your users:

1. Find the user in the table and **click on their Username** (it acts as a blue link).
2. A dialog box will appear listing all the properties in your portfolio.
3. Simply check the boxes next to the properties that this specific user should be allowed to access and manage.
4. Click **Save Changes**, and the user will instantly be restricted to only those selected properties when they log in.


# API Access

Generate API keys, set up Webhooks, and monitor API request logs for seamless external integrations.

{% hint style="info" %}
Hostel Mate is designed to play nicely with your other tools. The API Access page provides developers and tech-savvy managers with everything needed to connect custom software, external booking engines, or data analysis tools directly to your property's database.
{% endhint %}

## 1. API Key Management (Settings)

To authenticate external requests, you need an API key. We keep this simple and highly secure by providing **a single master API key per property**.

| Feature               | Description                                                                                                |
| --------------------- | ---------------------------------------------------------------------------------------------------------- |
| **Generating a Key**  | If the empty state reads "No API Key Generated", click **Generate Key** to create your first active token. |
| **Copying & Viewing** | You can reveal the key with the eye icon, or copy it directly to your clipboard.                           |
| **Key Rotation**      | If you suspect your key has been compromised, you can generate a new one.                                  |

{% hint style="warning" %}
Generating a new key immediately invalidates the old key, so any integrations using the old key will break until updated.
{% endhint %}

## 2. Webhooks

{% hint style="success" %}
Why constantly ask the API if something changed when we can just tell you?
{% endhint %}

The **Webhooks** tab allows you to configure endpoints that will receive real-time `POST` requests whenever a critical event occurs (like a new booking or a payment update).

* **Adding Webhooks:** You can specify an external URL and pick exactly which events should trigger the webhook.
* **Monitoring Deliveries:** Click "View recent deliveries" on any webhook card to see a live log of exactly what we sent, and what HTTP status your server responded with.

## 3. Request Logs

Having integration issues? The **Logs** tab is your debugging command center.

Here you can view a raw feed of every single API request that has hit your property's data. You can filter these logs by:

* **HTTP Method** (`GET`, `POST`, etc.)
* **Status Code** (e.g., filter for `500` Server Errors)
* **Date Range**

Clicking on any log entry expands it to show the full payload, query parameters, and response details.


# Settings

Configure shared settings that affect guest messaging, calendars, billing, and internal alerts.

Think of your Settings page as the master control center! Here, you can easily tweak all the system-wide preferences and establish policies unique to each property you run.

## Pages You Can Explore

* Check out the [Calendar Legend](/finance-management/settings/calendar-legend) to understand how the calendar maps everything out.
* Hop into [General Settings](/finance-management/settings/general-settings) to edit your base details.
* Head to [Owner Notifications](/finance-management/settings/owner-notifications) so you never miss an important update.
* Configure instant messaging via [Telegram Alerts](/finance-management/settings/telegram-alerts).
* Keep track of payments inside your [Plan & Billing](/finance-management/plan-billing) section.
* Set up the [Self Check-In](/finance-management/settings/self-check-in) form so guests can check in online before arriving.

## Quick Tips for Success

* Always make sure your contact details are fully up to date; it guarantees every guest message goes exactly where it needs to!
* Make a habit of quickly reviewing your notification preferences whenever you reshuffle your staff—it saves a lot of emails going to the wrong person!


# Calendar Legend

Customize calendar status labels, colors, and tooltips to improve occupancy visibility.

Control the colors and labels used in the occupancy calendar.

## Manage Legend Entries

* Add new status labels with a custom color and tooltip.
* Reorder entries to set priority and display order.
* Edit labels or tooltips to reflect current policies.

## Locked Statuses

Some statuses are system-defined and stay locked, such as paid, cancelled, and waitlist.

## Tips

* Use clear labels so front desk staff can scan the calendar quickly.
* Keep tooltip text short for faster hover reading.


# General Settings

Configure core system behaviors, automated workflow rules, and regional preferences for your property.

{% hint style="info" %}
The General Settings page is the engine room of your property. Rather than dealing with text and descriptions (which is handled in the Property Profile), this page controls *how* the system behaves.
{% endhint %}

## 1. Workflow Automation

The **Automation** tab lets you put some of your repetitive daily tasks on autopilot.

| Setting                      | What it does                                                                                                                                                                                                                                                                 |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Waiting List Enforcement** | If you run a strict ship and don't want unpaid reservations cluttering up your calendar, flip this switch to `"Strict"`. Any booking that arrives without an accompanying payment will be hidden from the main calendar and held in the Waiting List until the money clears. |
| **Linen Change Cycle**       | Tell the system exactly how many nights a guest can stay before housekeeping needs to change their bed sheets.                                                                                                                                                               |

{% hint style="success" %}
**Linen Change Cycles:** Checkouts automatically trigger a sheet change; this setting only applies to long-term stays!
{% endhint %}

## 2. Regional & Local Settings

The **Settings** tab handles the fundamental data types your property operates on.

{% hint style="danger" %}
**Currency:** You'll see your property's locked, baseline currency here. Because changing the currency mid-operation would destroy historical financial reporting and cross-currency exchange rates, this field is read-only. (If you've made a terrible mistake during setup and need to change your baseline currency, please contact support.)
{% endhint %}


# Owner Notifications

Configure the email address that receives owner alerts about booking activity.

Set the email address that receives owner updates for booking activity.

## Configure the Email

1. Open the finance portal for the property.
2. Go to **Settings > Owner Notifications**.
3. Enter the email address that should receive booking alerts.
4. Click **Save** to apply the change.

## What Gets Sent

Owner alerts typically include:

* New bookings
* Booking updates
* Booking cancellations

## Turn Notifications Off

* Clear the notification email address.
* Save the change to stop sending owner alerts.

## Tips

* Use a shared mailbox if multiple owners need access
* Review the address when ownership or management changes
* Test with a small booking update after changing the email address


# Telegram Alerts

Connect your Telegram group to the Hostel Mate bot to receive real-time booking alerts. Add the bot, set the group ID, and save the settings.

Follow these steps to integrate your Telegram group with the **HostelMate Notification Bot** and start receiving notifications for new bookings and modifications.

### Step 1: Create a Telegram Group

1. Open the **Telegram app** on your mobile or desktop.
2. Tap the **pencil icon** or **New Message**.
3. Select **New Group**.
4. Add `@hostelmate_bot` to the group.
5. Add any staff or managers who should receive the alerts.
6. Tap **Next**.
7. Name the group.
8. Tap **Create**.

### Step 2: Get the Group ID

1. Open **Telegram Web** at <https://web.telegram.org>.
2. Open the group you just created.
3. Look at the URL in the address bar.
4. The **Group ID** is the number after the `#`.

Example:

```
https://web.telegram.org/k/#-1234567890
```

### Step 3: Access the Finance Portal

1. Log in to the **finance portal**.

### Step 4: Add the Group ID in the System

1. In the finance portal, open **Settings > Telegram Alerts**.
2. Paste the **Telegram group ID** into the field.
3. Click **Save** to confirm the setup.

Once the group ID is saved and the `@hostelmate_bot` is in the group, you will start receiving booking alerts in Telegram.

## Stop Notifications

1. Open **Settings > Telegram Alerts**.
2. Clear the **group ID** field.
3. Click **Save**.


# Self Check-In

Configure the self check-in form guests complete before arriving — collect ETA, ID documents, signatures, and custom answers, and display house rules and post-arrival instructions.

Let guests complete their check-in online before they arrive. Once configured, a unique check-in link is automatically included in every pre-arrival email. Guests click the link, fill out the form, and submit — saving time at the front desk and giving staff the information they need before arrival.

The link is always active from the moment the pre-arrival email is sent until two days after the last night of the stay.

***

## Content Sections

These appear on the guest-facing check-in page above the form.

### House Rules

Rich-text field displayed at the top of the page. Use it to list rules guests must acknowledge before submitting — noise policy, check-out time, pet rules, etc.

### Check-In Instructions

Rich-text field shown below the form, after guests have filled everything in. Use it for arrival logistics: door codes, parking instructions, directions from the nearest station, etc. It appears just before the submit button so guests see it at the right moment.

### Post Check-In Message

Rich-text field shown on the success screen after the guest submits the form. Use it for things the guest needs immediately upon arrival — Wi-Fi password, room number, locker code, breakfast hours. Leave it empty to show only booking details on the success screen.

***

## Collection Toggles

These control which fields appear on the guest form.

| Toggle                         | What it does                                                                                                                             |
| ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **Ask estimated arrival time** | Guest selects an ETA from a time picker. Visible to staff in Booking Logs.                                                               |
| **Request ID document upload** | Guest uploads a photo of their passport or national ID (JPG, PNG, PDF, HEIC — max 10 MB). Staff can view the document from Booking Logs. |
| **Collect guest signature**    | Guest draws their signature on a canvas. Stored against the guest record, same as a desk check-in signature.                             |

***

## Custom Questions

Add free-text questions that appear on the check-in form. Each question has:

* **Label** — the question text shown to the guest
* **Required** — if checked, the guest cannot submit without answering

Drag questions to reorder them. Questions are saved and restored in the order you set.

Use custom questions for anything you need that the standard fields don't cover: dietary requirements, special requests, purpose of travel, loyalty programme number, etc.

***

## How the link reaches guests

The self check-in link is injected automatically into the **Pre-Arrival Guide** email as a button and a plain-text fallback URL. No extra setup is needed.

If you want to include the link in a **custom** pre-arrival email template, add the placeholder `{{self_check_in_link}}` anywhere in the body. It will be replaced with the guest's unique URL.

You can also send the link manually at any time from the **Check-In popup** on the Front Desk. See [Self Check-In (Front Desk)](/front-desk/self-check-in) for details.

***

## Tips

* Settings are saved per property. Switch properties from the top selector before editing.
* All three content fields (House Rules, Check-In Instructions, Post Check-In Message) support bold, italics, lists, and links.
* Leave the Post Check-In Message empty if you prefer guests to see only their booking summary after submitting.
* Custom questions with empty labels will appear as blank labels on the guest form — always fill in the label before saving.


# Plan & Billing

Manage your Hostel Mate subscription, view past invoices, and securely update your payment method.

{% hint style="info" %}
We believe in complete transparency when it comes to your subscription. The Plan & Billing page gives you a comprehensive overview of your account status, upcoming charges, and historical payments.
{% endhint %}

## Current Plan Summary

At the top of the page, you'll see a quick snapshot of your active subscription:

| Details              | What it shows                                               |
| -------------------- | ----------------------------------------------------------- |
| **Current Tier**     | Your active plan (`Lite` or `Advanced`) and account status. |
| **Billing Period**   | The interval and the exact date of your next renewal.       |
| **Recurring Amount** | Exactly what you can expect to be charged.                  |
| **Add-ons**          | Any active add-ons applied to your account.                 |

{% hint style="warning" %}
If you have chosen to cancel your account, you'll also see a warning banner detailing the exact date your access will end.
{% endhint %}

## Payment Method

You don't need to jump through hoops to see how you're paying. The **Payment Method** card securely displays the brand, last four digits, and expiration date of the credit card we currently have on file.

Need to switch cards? Click **Update Payment Method**. This will securely launch a Stripe portal where you can enter your new details without us ever storing the sensitive raw data.

## Invoice History

{% hint style="success" %}
We know your accountant wants those receipts! The **Invoice History** table gives you a complete, inline ledger of every charge from Hostel Mate.
{% endhint %}

* You can instantly see the **Date**, **Invoice Number**, **Description**, and **Status** of the charge.
* Need a hard copy? Just click the download icon in the **PDF** column to instantly save a professional invoice directly to your computer.


# Channel Mapping Guides

Map your property to OTAs and bedbanks. Follow step‑by‑step connection, authentication, and mapping instructions, then verify sync with test price updates.

Connect your property to leading OTAs and bedbanks. Each guide covers prerequisites, the exact steps to connect, and what to check afterwards.

## Before You Start

* Gather your OTA property IDs and login access
* Disable any old/syncing iCal connections on that channel
* Make sure rates/rooms exist in Hostel Mate

## Popular Guides

* [Booking.com](/channel-mapping-guides/booking.com)
* [Airbnb](/channel-mapping-guides/airbnb)
* [Expedia](/channel-mapping-guides/expedia)
* [Hostelworld](/channel-mapping-guides/hostelworld)
* [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — do this right after you connect (Hostelworld: [Import Bookings](/channel-mapping-guides/import-bookings))
* [Full Sync](/channel-mapping-guides/full-sync) — when a platform stops matching Hostel Mate

## General Flow

1. Enable channel manager mode or select Hostel Mate's connectivity provider in the OTA extranet
2. Approve the connection in the OTA extranet
3. Authenticate in Hostel Mate
4. Map rooms and rates
5. Verify availability and test a price change


# OTA Connectivity Guide

Learn the common flow to connect OTAs (Booking.com, Expedia, Airbnb, etc.) to Hostel Mate—select provider, approve, map rooms/rates, and verify updates.

## Introduction

This guide provides general instructions for connecting **Online Travel Agencies (OTAs)** such as **Booking.com, Expedia, Airbnb, Hostelworld, Agoda, and others** to **HostelMate**. Each OTA has a slightly different process, so refer to their specific guide for detailed steps.

> **Before proceeding:** Ensure that your pricing and rates are set up correctly and match the currency selected in the OTA setup. Incorrect pricing or currency may lead to sync issues.

***

## 🔗 Connecting an OTA

1. **Log in** to the OTA extranet.
2. Navigate to **Channel Manager / Connectivity settings**.
3. Search for **"Channex"** and select it as your provider.
4. Confirm the connection request.
5. Some OTAs may require manual approval before activation.

***

## 📌 Mapping Rooms & Rates

* Mapping ensures all **rooms and rate plans** in the OTA match correctly.
* Unmapped rooms or rates **will not sync** and may cause booking issues.
* Some OTAs support **occupancy-based pricing**, which requires additional mapping.
* If a room or rate plan is missing, check if it's active in the OTA extranet.

***

## ✅ Final Steps

1. Once mapping is complete, **activate the connection**.
2. **Bring in the bookings you already had** on that platform. For Hostelworld that's [Import Bookings](/channel-mapping-guides/import-bookings); for everything else it's [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations).
3. Regularly check for errors or unmapped items.

***

For specific OTA instructions, see the dedicated guide for that OTA.

## Quick Links

* General setup: [General Connection Setup](/channel-mapping-guides/general-connection-setup)
* After connecting, first thing: [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) (Hostelworld: [Import Bookings](/channel-mapping-guides/import-bookings))
* Prices or availability not matching later: [Full Sync](/channel-mapping-guides/full-sync)
* Channel Manager app: <https://app.hostelmate.co/channel-manager>
* Popular guides: Booking.com, Airbnb, Expedia, Hostelworld

## Tips

* Push a small test price change to confirm updates are flowing
* Remove legacy iCal feeds to prevent overwriting rates/availability
* Use clear titles per connection (e.g., “Booking.com – Main Property”)


# Pull Future Reservations

The step right after mapping — pulling the reservations that already existed on Booking.com, Expedia, Airbnb and the other channels into Hostel Mate.

Connecting a channel starts delivering *new* bookings to Hostel Mate. It says nothing about the reservations that were already sitting on the platform before you connected. Those have to come across too, and until they do, your other channels are selling beds that are actually taken.

Do this right after you finish mapping, before you rely on the connection for anything else.

## How to do it

1. In Hostel Mate, go to **Channel Manager** and click **Open Manager**.
2. Click the channel you just connected (Booking.com, Expedia, Airbnb, whichever it is).
3. Open the **Actions** menu at the top and choose **Pull Future Reservations**.

That's the whole thing. It runs in the background. Give it about 15 minutes, then open the Booking Calendar and look for two or three bookings you know are on the platform, arriving in the next few weeks. If they're there with the right room and dates, you're done. Cancelled bookings come across too but stay hidden from the calendar, so don't go looking for those.

{% hint style="warning" %}
This is the most common way to get a double booking in the first week after connecting a channel. The connection is green, prices are flowing, everything looks fine, and meanwhile Booking.com is selling a bed that a Hostelworld guest booked three weeks ago. Pull first, then relax.
{% endhint %}

## If they still don't show up

A few platforms won't hand over anything that was created before the connection existed, no matter how many times you pull. If you've waited, checked the calendar, and bookings you can plainly see in the platform's extranet still aren't in Hostel Mate, we load them by hand. Export your upcoming bookings from the extranet (CSV or Excel, one file per room type is fine) and send it to us in the chat or to <contact@hostelmate.co>. We'll import them and confirm when it's done.

If prices or availability on the platform later stop matching what you see in Hostel Mate, that's a different problem with a different fix: [Full Sync](/channel-mapping-guides/full-sync).


# Import Bookings (Hostelworld)

The step right after mapping a direct connection (Hostelworld, Coworksurf, Mixdorm) — importing the reservations the platform already had into Hostel Mate.

Connecting a channel starts delivering *new* bookings to Hostel Mate. It says nothing about the reservations that were already sitting on the platform before you connected. Those have to come across too, and until they do, your other channels are selling beds that are actually taken.

Do this right after you finish mapping, before you rely on the connection for anything else. It applies to the channels Hostel Mate connects to directly: Hostelworld, Coworksurf and Mixdorm.

## How to do it

1. In Hostel Mate, go to **Channel Manager** and find the channel's card (Hostelworld, say).
2. Click **Manage Connection**.
3. Stay on the **General Settings** tab and scroll down past the Synchronization and Mapping Statistics cards. The last card is **Import Bookings**. Click the button.

The button is greyed out until every room is mapped, and that's deliberate: a booking for a room that isn't mapped has nowhere to land. If it's greyed out, go to the **Mapping** tab, finish the mapping, save, and come back.

When it finishes you'll see a short result under the button: how many confirmed bookings were pushed, how many cancellations, and how many were skipped because they're already in the past. Then open the Booking Calendar and spot-check two or three bookings you know are on the platform. If they're there with the right room and dates, you're done. Cancelled bookings come across too but stay hidden from the calendar, so don't go looking for those.

Run it once. Running it again doesn't hurt anything, it just finds nothing new.

{% hint style="warning" %}
This is the most common way to get a double booking in the first week after connecting a channel. The connection is green, prices are flowing, everything looks fine, and meanwhile Booking.com is selling a bed that a Hostelworld guest booked three weeks ago. Import first, then relax.
{% endhint %}

## If they still don't show up

Occasionally the platform doesn't hand over everything that was created before the connection existed. If you've imported, checked the calendar, and bookings you can plainly see in the extranet still aren't in Hostel Mate, we load them by hand. Export your upcoming bookings from the extranet (CSV or Excel, one file per room type is fine) and send it to us in the chat or to <contact@hostelmate.co>. We'll import them and confirm when it's done.

If prices or availability on the platform later stop matching what you see in Hostel Mate, that's a different problem with a different fix: [Full Sync](/channel-mapping-guides/full-sync).


# Full Sync

What Full Sync does, when to run it, and when it won't help.

Whenever you change a price, close a date, or a booking comes in, Hostel Mate sends that update to every connected channel straight away. Most of the time that's all you'll ever need. This page is for the times it isn't.

## What Full Sync does

Full Sync re-sends everything for the next 12 months to a channel: availability, prices, minimum stay, closed dates. Not just what changed recently, all of it. It's the quickest way to get a channel back in line when it's showing something different from what you see in Hostel Mate.

Where you find it depends on how the channel is connected:

| Channel                                                             | Where to run it                                                                     |
| ------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| Hostelworld, Coworksurf, Mixdorm (our direct connections)           | Channel Manager → **Manage Connection** → **Sync Property**                         |
| Booking.com, Expedia, Airbnb, Agoda, MakeMyTrip and everything else | Channel Manager → **Open Manager** → open the channel → **Actions** → **Full Sync** |

It runs in the background. Give it 10 to 15 minutes, then check the channel's **extranet calendar**. Don't judge it by the public booking page: those pages cache prices, and the platform often adds its own discounts or markups on top of what you send.

## When to run it

* The channel shows different prices or availability from Hostel Mate
* You just connected the channel and want to be sure everything went across
* You added or removed rooms or beds
* The channel had an outage on their side

## When it won't help

* **The date is closed by a minimum-stay rule.** The channel may still display a price for that night, but nobody can book it, so the number shown doesn't matter. What matters is the price on the nights that *are* bookable.
* **The room mapping is wrong.** Full Sync sends the right numbers to the wrong room. Fix the mapping first, then run it.
* **The platform is running its own promotion.** A 10% mobile discount on Booking.com is theirs, not ours. Check the extranet, not the public price.

## Missing bookings is a different problem

Full Sync sends prices and availability *out* to the platform. It doesn't pull bookings *in*. If reservations you can see in the platform's extranet aren't in Hostel Mate, see [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) (or, for Hostelworld, [Import Bookings](/channel-mapping-guides/import-bookings)).

## Still not matching?

Write to us in the chat with:

* Which channel, and roughly when you connected it
* A link to your listing on that platform
* A screenshot of the extranet calendar showing the wrong price or availability, with the dates visible
* The room and dates you expected, and what Hostel Mate shows for them

With that we can usually tell you within a few minutes whether the update left our side, whether the platform confirmed it, and what to change.


# Agoda

Connect Agoda to Hostel Mate with step‑by‑step mapping. Prepare your account, enable Channel Manager Mode, map rooms and rates, and verify sync for reliable updates.

## Prerequisites

* Active Agoda contract and YCS access
* Property details, images, and rates completed in Agoda
* Rooms and rates ready in Hostel Mate

## 1) Enable Channel Manager Mode in Agoda

1. Log in to Agoda YCS
2. Go to Settings → Property Settings → Optional Settings
3. Tick “Enable Channel Manager Mode”
4. Choose Channex as your provider and Save

## 2) Finalize in Hostel Mate

1. Open Channel Manager in Hostel Mate
2. Select Agoda and complete authentication if prompted
3. Map rooms and rates

## Verify and Test

* Push a small price change and confirm it appears in Agoda
* Disable any iCal feeds to prevent conflicts

## Troubleshooting

* Don’t see Channel Manager Mode: check your contract status or ask Agoda support
* Prices not updating: check the mapping, then run a [Full Sync](/channel-mapping-guides/full-sync)

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# Airbnb

Connect Airbnb via OAuth from Hostel Mate, authorize the account, then map listings to rooms and verify a small price change to confirm syncing.

## Prerequisites

* Airbnb login for the correct account
* Owner present to approve OAuth if needed

## 1) Log In and Authorize

1. Confirm you’re logged into the correct Airbnb account
2. Start the connection from Hostel Mate (Channel Manager)
3. Approve access in Airbnb when prompted (OAuth)

## 2) Map and Verify

1. After authorization, open the mapping page
2. Match Airbnb listings to your rooms and rates
3. Push a small price change and confirm it on Airbnb

## Tips

* Password changes after connecting will not break the integration
* Make sure duplicate iCal feeds are removed to prevent conflicts

## Troubleshooting

* No listings after OAuth: refresh the page, then re-open mapping
* Authorization loop: log out of Airbnb, log back in, and retry

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# Booking.com

Request the connection, select the connectivity provider, approve access, then map rooms and rates in Hostel Mate. Includes how dorms and occupancy-based pricing behave.

## Prerequisites

* Booking.com extranet access with 2FA
* Property code (shown in the extranet)
* Rates/rooms set up in Hostel Mate

## 1) Request the Connection in Booking.com

1. Log in to the admin panel for your property: [Booking.com Admin](https://account.booking.com/)
2. This step is best done by the property owner since Booking.com has two-step security with passcodes sent to the phone.
3. Copy the **property code** from the top of the navigation.

## 2) Select the Connectivity Provider

1. Click on **Account > Connectivity Provider**.
2. Click on **Search** and type `"Channex"` (you must type the full name).
3. Select it from the list.
4. Click **Next** when the summary box appears.
5. Agree to the **XML Service Agreement** by checking the box and clicking **"Yes, I accept"**.
6. No further actions are required on this form.
7. The status will now be **waiting** until the connection is accepted.

## 3) Finalize in Hostel Mate

1. Navigate to our platform and go to [Channel Manager](https://app.hostelmate.co/channel-manager).
2. Follow the general setup steps outlined in [General Connection Setup Guide](/channel-mapping-guides/general-connection-setup).

## How prices reach Booking.com: read this before you map

Hostel Mate sends Booking.com **one price per room per night**. For a dorm that's the price of one bed. For a private room it's the price of the room. That's simple, and it's usually exactly what you want, but Booking.com can be set up in ways that don't match, and when that happens you'll see it in the bookings before you see it anywhere else.

### Dorms and shared rooms

On Booking.com a dorm should be a room type of the kind **"Bed in dormitory"**, with a rate plan priced for **1 person**. Map that room type to your Dormitory room in Hostel Mate and its rate plan to that room's rate. Then:

* the price you set on the Pricing page is what a guest pays for one bed
* the availability Booking.com shows is your number of free beds
* a booking for one guest takes one bed; a booking for three guests takes three beds in that dorm

If, in the mapping screen, the Booking.com room shows an occupancy of 2, 4 or more guests, Booking.com has it set up as a **private room**: one booking will take the whole thing at the bed price. Fix the room type on the Booking.com side (kind: bed in dormitory, rate for 1 guest), click Refresh in the mapping, and map again.

A quick check once you're done: search your listing on Booking.com for 1 guest and for 2 guests on the same night. The 2-guest price should be double the bed price, and the extranet calendar should show the same number of free beds you see in Hostel Mate.

### Private rooms and occupancy-based pricing

Booking.com can price a private room two ways: a flat price for the room, or a different price for 1 guest, 2 guests, 3 guests (they call this **occupancy-based pricing**). Because Hostel Mate sends a single room price, it lands on the **1-guest** rate. If your Booking.com room is on occupancy-based pricing and nothing fills the 2-guest and 3-guest rates, guests can book two people at the one-person price. The symptom is unmistakable: bookings for two arriving at half what you'd expect, and only from Booking.com.

If that's happening, the fix is on the Booking.com side: in the extranet, switch that room's rate plan to **per-room pricing** (Booking.com calls the other one "occupancy-based" or "per-person"), so the one price you send covers everybody. If you genuinely want to charge more per extra guest, write to us in the chat and we'll set that up on the connection for you rather than have you maintain it by hand.

## After Connecting

* Map rooms and rate plans
* Push a small rate change and confirm it appears in Booking.com
* Turn off any remaining iCal feeds to avoid conflicts

## Troubleshooting

* Can’t find Channex in the list: type the full name and check your account permissions
* Stuck on “waiting”: re-open the Connectivity Provider page and confirm acceptance
* Prices not updating: check the mapping, then run a [Full Sync](/channel-mapping-guides/full-sync)

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# Despegar

Learn how to connect and map Despegar, including how to disable old connections, add a new channel manager, and confirm the setup.

## Prerequisites

* Despegar extranet access
* Rooms and rates configured in Hostel Mate

## 1) Prepare the Extranet

1. Log in to Despegar Extranet
2. Go to General Settings → Channel Manager Connection
3. Disable/remove any previous channel manager connections to prevent conflicts

## 2) Add the Channel Manager

1. Click Add Channel Manager / PMS
2. Select Channex from the provider list
3. Save and confirm

## 3) Finalize in Hostel Mate

1. Open Channel Manager in Hostel Mate
2. Select Despegar and authenticate if required
3. Map rooms and rates

## Verify and Test

* Push a small price change and confirm it appears on Despegar

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# Dida Travel

Learn how to connect and map Dida Travel, step by step, from requesting a connection to receiving your Hotel ID.

## Prerequisites

* Dida Travel extranet access
* Hotel ID (provided after approval)

## 1) Request the Connection

1. Log in to the Dida Travel extranet
2. Use the support messaging to request “Channex” as your channel manager
3. Wait for confirmation and your Hotel ID

## 2) Finalize in Hostel Mate

1. Open Channel Manager in Hostel Mate
2. Choose Dida Travel and enter your Hotel ID
3. Map rooms and rate plans

## Verify and Test

* Push a small rate change and confirm it appears in Dida Travel

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# Emerging Travel

Learn how to connect and map Emerging Travel, including how to request a connection via support.

## 1) Request the Connection

Email Emerging Travel support and ask to connect your property to the channel manager “Channex.” Include your property name and contact details.

## 2) Finalize in Hostel Mate

1. Open Channel Manager in Hostel Mate
2. Select Emerging Travel and authenticate if required
3. Map rooms and rates

## Verify and Test

* Push a small rate change and confirm it appears in Emerging Travel

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# Expedia

Enable connectivity in Partner Central, choose Channex, complete 2FA, then authenticate in Hostel Mate to map rooms/rates and test price sync.

## Prerequisites

* Expedia Partner Central access with 2FA
* Rooms and rates ready in Hostel Mate

## 1) Enable Connectivity in Expedia

1. Log in to Expedia Partner Central
2. Go to Rooms and Rates > Connectivity Settings
3. Complete any two‑factor prompts
4. Choose Channex for Connectivity and Bookings

## 2) Finalize in Hostel Mate

1. Open Channel Manager in Hostel Mate
2. Select Expedia and authenticate if required
3. Map rooms and rate plans

## Min Stay Type: set it to Arrival

In **Connection Settings** there is a **Min Stay Type** switch, Arrival or Through. Set it to **Arrival**.

Hostel Mate only sends minimum stays of the Arrival kind. If this sits on Through, Expedia never receives them and keeps selling any length of stay. There is no error and the connection still tests fine, so the only sign is short bookings from Expedia while your other channels hold the rule.

Switch it back and save. Your minimum stays are already stored, and Expedia picks them up on the next sync.

For what Arrival and Through actually mean, see [Min Stay Type](/channel-mapping-guides/general-connection-setup#min-stay-type).

## Verify and Test

* Make a small rate change and confirm it appears on Expedia
* Turn off any remaining iCal feeds to avoid overwriting data

## Troubleshooting

* Can’t see Connectivity Settings: check your role/permissions
* Prices not updating: check the mapping, then run a [Full Sync](/channel-mapping-guides/full-sync)

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# Feratel

Learn how to connect and map Feratel, including how to request a connection via support and add your property ID.

## Prerequisites

* Feratel account with property active
* Property ID from Feratel

## 1) Request the Connection

1. Email Feratel Support and request the channel manager “Channex” for your property
2. Note the Property ID they confirm

## 2) Finalize in Hostel Mate

1. Open Channel Manager in Hostel Mate
2. Select Feratel; enter your Property ID
3. Map rooms and rates

## Verify and Test

* Push a small price change and confirm it appears on Feratel

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# Getaroom

Learn how to connect and map Getaroom, including how to request the connection via support and verify activation.

## Prerequisites

* Getaroom hotel ID
* Rooms and rates ready in Hostel Mate

## 1) Request the Connection

1. Email <propertyactivation@getaroom.com>
2. Ask to connect your property to the channel manager “Channex”
3. Include your hotel ID and contact details

## 2) Finalize in Hostel Mate

1. Open Channel Manager in Hostel Mate
2. Select Getaroom; enter the hotel ID if prompted
3. Map rooms and rates

## Verify and Test

* Getaroom may send a test booking/cancellation
* After confirmation, push a small rate change and verify it on Getaroom

## Troubleshooting

* No response: reply to the original email thread and include the hotel ID
* Prices not updating: check the mapping, then run a [Full Sync](/channel-mapping-guides/full-sync)

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# Hipcamp

Learn how to connect and map Hipcamp, including how to request a connection via support and find your property ID.

Connecting your Hipcamp account to Hostel Mate is an absolute breeze and keeps all your unique outdoor bookings neatly located in one dashboard!

## Prerequisites

Before we dive into the steps, just make sure you have:

* A fully active Hipcamp account.
* Your specific Hipcamp property ID (you can easily grab this right from your Hipcamp property editor).

## 1) Request the Connection

First up, we need to let the Hipcamp support team know you're linking things up!

1. Quickly shoot an email over to <campgrounds@hipcamp.com> and kindly ask them to enable the channel manager named “Channex”.
2. Remember to include your property ID and your contact details so they can find your account fast.

## 2) Finalize in Hostel Mate

Once Hipcamp gives you the green light on their end, we'll finish things over here:

1. Jump into your Channel Manager tab right inside Hostel Mate.
2. Spot Hipcamp in the channels list, select it, and run through the quick authentication if it prompts you.
3. Smoothly map out your rooms and their rates so everything syncs perfectly!

## Verify and Test

It's always smart to double-check!

* We highly recommend pushing a tiny price adjustment on our end just to clearly verify that it successfully mirrors over on your live Hipcamp listing.

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# Hostelworld

Learn how to connect and map Hostelworld, including how to request the connection via support and obtain the property ID.

## Prerequisites

* Hostelworld contract and access to the extranet
* Rooms and rates ready in Hostel Mate

## 1) Request the Connection

1. Ask the property to request this connection through Hostelworld’s Market Support Team at [**support@hostelworld.com**](mailto:support@hostelworld.com)
2. In the email, request enabling the channel manager **“Hostel Mate”** for the property
3. Wait for confirmation and note your **Hostelworld Property ID** (you’ll need it for setup)

## 2) Finalize in Hostel Mate

1. Open **Channel Manager** in Hostel Mate
2. Select **Hostelworld** and enter the **Property ID**
3. Map rooms and rates, then save
4. Scroll down in **Manage Connection** and click **Import Bookings**. This pulls in the reservations Hostelworld already had for you. Do it once, after the mapping is saved, otherwise those bookings have no room to land in. More on this in [Import Bookings](/channel-mapping-guides/import-bookings).

## Troubleshooting Steps

* Double-check that the **Property ID** is correct (no missing digits or extra spaces)
* Ensure your property is **active on Hostelworld**
* Confirm Hostelworld has **enabled “Hostel Mate”** as the channel manager for your property
* If the problem persists, please contact support

## Last step: import your existing bookings

The connection only delivers *new* bookings. The reservations already on Hostelworld need to come across too, otherwise your other channels keep selling beds that are taken. See [Import Bookings](/channel-mapping-guides/import-bookings) — it's one click once your rooms are mapped, and it's the step people skip.


# Hotelbeds

Connect and map Hotelbeds (Maxiroom), enable Channex, authenticate in Hostel Mate, map rooms and rates, then test a price change to confirm sync.

Connect Hotelbeds (Maxiroom) to Hostel Mate: enable Channex in Maxiroom, authenticate in Hostel Mate, map rooms and rates, then test a small price change to confirm syncing.

## Prerequisites

* Maxiroom extranet access
* Rooms and rates ready in Hostel Mate

## 1) Enable the Connection in Maxiroom

1. Log in to Maxiroom
2. Choose Channex as the channel manager
3. If Channex isn’t listed, open a support ticket with Hotelbeds

## 2) Finalize in Hostel Mate

1. Open Channel Manager in Hostel Mate
2. Select Hotelbeds and authenticate if needed
3. Map rooms and rates

## Verify and Test

* Push a small price change and confirm in Maxiroom

## Troubleshooting

* Provider missing: ask Hotelbeds support to add Channex for your property

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# HotelTonight

Learn how to connect and map Airbnb (Hotel Tonight), including how to request mapping or connectivity via support.

## Overview

HotelTonight connectivity runs through Airbnb. You’ll request mapping with Airbnb’s HotelTonight team.

## Request Mapping

* For mapping/connectivity: email <mapping-ht@airbnb.com>
* For sign-ups/general: email <htmarketmanagement@airbnb.com>

Include your property name, Airbnb listing IDs, and contact details in the email.

## Finalize in Hostel Mate

1. Open Channel Manager in Hostel Mate
2. Select Airbnb and complete OAuth if needed
3. Map the relevant listings and verify pricing

## Verify and Test

* Push a small rate change and confirm it appears on HotelTonight (via Airbnb)

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# HRS

Learn how to connect and map HRS, including how to prepare your property and request the connection via the HRS extranet.

## Prerequisites

* Direct HRS contract and extranet access
* Property details/images complete

## 1) Request the Connection in HRS

1. Open the HRS extranet and the internal messaging system
2. Ask support to connect your property to the channel manager “Channex”

## 2) Finalize in Hostel Mate

1. Open Channel Manager in Hostel Mate
2. Choose HRS and authenticate if prompted
3. Map rooms and rates

## Verify and Test

* Push a small price change and confirm it appears on HRS

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# Hyperguest

Learn how to connect and map Hyperguest, including how to request the connection via support and use your property ID.

## Prerequisites

* Active Hyperguest account with property enabled
* Property ID from Hyperguest

## 1) Request the Interface

1. Contact Hyperguest and ask to enable the “Channex” interface
2. Note the property ID they provide

## 2) Finalize in Hostel Mate

1. Open Channel Manager in Hostel Mate
2. Select Hyperguest and authenticate if prompted
3. Enter the property ID and map rooms/rates

## Verify and Test

* Push a small rate change and verify it in Hyperguest

## Troubleshooting

* Missing property ID: request it from Hyperguest support for your property

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# Makemytrip

Learn how to connect and map MakeMyTrip, including how to prepare your property and request the connection via the MakeMyTrip extranet.

## Prerequisites

* Direct contract and extranet access
* Property details/images complete in MakeMyTrip

## 1) Request the Connection

1. Open the MakeMyTrip extranet
2. Use the internal messaging to request the channel manager “Channex”

## 2) Finalize in Hostel Mate

1. Open Channel Manager in Hostel Mate
2. Select MakeMyTrip and authenticate if needed
3. Map rooms and rate plans

## Verify and Test

* Push a small rate change and confirm it appears on MakeMyTrip

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# MG Bedbank

Learn how to connect and map MG, including how to request the connection via the MG extranet.

## Prerequisites

* MG Bedbank account and extranet access
* Rooms and rates ready in Hostel Mate

## 1) Enable the Connection

1. Open the MG extranet
2. Go to the Channel Manager section
3. Select Channex as your connectivity partner

## 2) Finalize in Hostel Mate

1. Open Channel Manager in Hostel Mate
2. Choose MG Bedbank and authenticate if required
3. Map rooms and rate plans

## Verify and Test

* Push a small price change and confirm it appears in MG Bedbank

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# Roibos

Learn how to connect and map Roibos, including how to request the connection via Roibos support.

## Prerequisites

* Roibos account and property active
* Rooms and rates ready in Hostel Mate

## 1) Request the Connection

Email Roibos support and ask to connect your property to the channel manager “Channex.” Include:

* Property name and Roibos property ID
* Your contact details

## 2) Finalize in Hostel Mate

1. Open Channel Manager in Hostel Mate
2. Select Roibos and authenticate if required
3. Map rooms and rate plans

## Verify and Test

* Push a small price change and confirm it appears in Roibos
* Ensure no iCal feeds are running in parallel

## Troubleshooting

* Connection pending: ask Roibos support to confirm the request was applied to your property

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# Tiket.com

Learn how to connect and map Tiket.com, including how to request the connection via Tiket.com support.

## 1) Request the Connection

Email Tiket.com support and ask to connect your property to the channel manager “Channex.” Include your property details and contact info.

## 2) Finalize in Hostel Mate

1. Open Channel Manager in Hostel Mate
2. Select Tiket.com and authenticate if prompted
3. Map rooms and rates

## Verify and Test

* Push a small rate change and confirm it appears on Tiket.com

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# Traveloka

Learn how to connect and map Traveloka, including how to request the connection via the Traveloka Extranet and obtain your Property ID.

## Prerequisites

* Traveloka extranet access
* Property ID (issued after connection)

## 1) Request the Connection

1. Open the Traveloka extranet
2. Go to Channel Manager and select Channex as your connectivity partner

## 2) Get Your Property ID

* After activation, Traveloka will provide a Property ID (it may differ from your visible property code)
* Example format: LsBxFfgUQcuf

## 3) Finalize in Hostel Mate

1. Open Channel Manager in Hostel Mate
2. Select Traveloka; enter the Property ID
3. Map rooms and rates

## Verify and Test

* Push a small rate change and confirm it appears on Traveloka

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# Trip

Learn how to connect and map Ctrip (Trip.com), including how to select our channel manager as your connectivity partner and obtain your Hotel ID.

## Prerequisites

* Trip.com (Ctrip) extranet access
* Your Trip.com Hotel ID
* Rooms and rates ready in Hostel Mate

## 1) Select the Connectivity Partner

1. Log in to the Trip.com (Ctrip) extranet
2. Open the Channel Manager section
3. Choose Channex as the connectivity partner
4. Note your Hotel ID (you’ll need it during mapping)

## 2) Finalize in Hostel Mate

1. Open Channel Manager in Hostel Mate
2. Select Trip.com and authenticate if required
3. Map rooms and rate plans to the Hotel ID

## Verify and Test

* Push a small rate change and confirm it on Trip.com
* Remove any legacy iCal feeds to avoid overwriting

## Troubleshooting

* Can’t find Channel Manager: confirm property eligibility with Trip.com support
* Mappings incomplete: re-open the mapping page and match all room types

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# Vrbo

Learn how to connect and map VRBO, including removing iCal connections, disconnecting from previous channel managers, and connecting using VRBO credentials.

## Prerequisites

* Remove any iCal connections on VRBO (or other PMS) first
* If VRBO is linked to a previous channel manager, ask VRBO to disconnect it
* Have the owner present to read the login verification code

## 1) Disconnect Old Connections (If Any)

Email VRBO support:

“Please disconnect my account from my current channel manager. I will control the extranet manually.”

Once VRBO confirms, payments remain handled by VRBO, and you can proceed.

## 2) Authenticate in Hostel Mate

1. Enter the VRBO username and password in the VRBO channel settings
2. Click Authenticate (don’t use Test Connection)
3. Enter the sign‑in code sent to the owner’s phone
4. If auth fails: Save, refresh the browser, and try again

## 3) Map and Verify

1. Open the mapping page to see your listings
2. Match listings to your rooms and rates
3. Push a small rate change to confirm it appears on VRBO

## Troubleshooting

* No listings after auth: refresh and reopen mapping; confirm the account is the correct one
* Still connected elsewhere: ask VRBO to confirm the disconnection is complete

## Last step: pull your existing bookings

The connection only delivers *new* bookings. The reservations already on the platform need to come across too, otherwise your other channels keep selling beds that are taken. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations) — it's one click and it's the step people skip.


# General Connection Setup

Follow the standard flow to connect most OTAs—create the channel, set currency and options, map rooms/rates, then activate and verify with a small price update.

Use this flow for most OTAs. Some steps vary per channel—use the channel‑specific guide if something differs.

## Before You Start

* Make sure rooms and rates exist in Hostel Mate
* Have the OTA property ID or login ready (OAuth for Airbnb)
* Disable legacy iCal feeds on the OTA to avoid conflicts

## 1) Create the Channel

1. Go to Channel Manager and click Create (top right)
2. Choose the OTA (Booking.com, Airbnb, etc.)
3. Add a Title for easy identification

## 2) General Settings

* Currency: leave Auto unless you have a specific need
* Connection Settings
  * Channel ID: paste the ID from the OTA (or use login for OAuth-based channels)
  * Min Stay Type: set this to **Arrival**. Read [Min Stay Type](#min-stay-type) below before you touch it
  * Booking Total Type: pick the value that matches your reporting (Payout, After Tax, Including Commission)
* Pricing Type (if shown): **Standard** means one price per room per night, which is what Hostel Mate sends. **OBP** (occupancy-based pricing) means the OTA expects a different price for 1, 2, 3 guests. Leave it on Standard unless the OTA insists otherwise; if you're on Booking.com, read [how prices reach Booking.com](/channel-mapping-guides/booking.com) first.
* Click Test Connection (if available)

## Min Stay Type

Some platforms can only work with one kind of minimum stay, so they ask you to choose which one they should receive. **Always pick Arrival.** That is the only kind Hostel Mate sends.

The two are different rules, and the difference matters:

* **Arrival** applies to the night a guest *checks in*. Put a 3-night minimum on 24 December and anyone starting their stay that day has to book at least three nights. A guest who arrived on the 22nd and happens to still be there on the 24th is not affected.
* **Through** applies to *any* stay that covers that night, no matter when the guest arrived. Put a 3-night minimum on 24 December and a guest arriving on the 23rd for two nights is turned away as well, because their stay touches the 24th.

When you set a minimum stay on the [Pricing](/front-desk/pricing) page, Hostel Mate sends it as the Arrival kind. It is always Arrival, on every channel, and there is no setting in Hostel Mate that changes this.

So if a channel is set to Through, it goes looking for a number we never send, finds nothing there, and concludes those dates have no minimum at all. Nothing breaks and nothing warns you. The channel simply keeps selling one and two-night stays across your busiest week while every other channel holds the line. That is the giveaway: the rule works everywhere except one platform.

If you find a channel set to Through, open **Channel Manager → Open Manager →** the channel **→ Connection Settings**, switch Min Stay Type to **Arrival**, and save. You do not need to re-enter your minimum stays. They are already stored against the dates and the channel picks them up on the next sync, usually within a few minutes.

Not every channel shows this setting. Booking.com and Agoda, for instance, handle both kinds themselves and never ask. It turns up on the ones that can only take one: Expedia, Airbnb, Hostelworld, Despegar, Vrbo.

## 3) Mapping

* Open the Mapping tab
* Map each OTA room/rate to your rooms in Hostel Mate. Dorms map to a room type the OTA sells per bed (occupancy 1); private rooms map to a room type sold per room.
* Click Refresh to pull the latest rooms and rates

## 4) Channel Settings

* Add Derived Rate modifiers if needed (amount or percent up/down)
* Save when finished

## 5) Activate and Verify

1. Save and activate the connection
2. Push a small price change and confirm it appears on the OTA
3. Check that occupancy/availability looks correct
4. Bring across the bookings that already existed on the platform. See [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations)

A word on what "connected" means, because this trips people up. A green **Active** status tells you the two systems can talk to each other and your credentials were accepted. That's all. It doesn't mean your rooms are mapped, and it doesn't mean your old bookings have arrived. All rooms showing as **Mapped** means prices and availability are going to the right places. Neither one tells you anything about bookings.

So before you trust a new connection, spend five minutes on this:

1. Change one price by a small amount in Hostel Mate and find it in the platform's extranet calendar.
2. Open the Booking Calendar and check that a booking you know exists on the platform is there.
3. If you can, make a test booking on the platform (or ask a friend to) and watch it land in Hostel Mate. Then cancel it.

If step 1 fails, run a [Full Sync](/channel-mapping-guides/full-sync). If step 2 or 3 fails, go through [Pull Future Reservations](/channel-mapping-guides/pull-future-reservations).

## Troubleshooting

* Missing rooms: Refresh mapping; verify rooms exist and are active in the OTA
* Prices not updating: check the mapping, then run a [Full Sync](/channel-mapping-guides/full-sync)
* Wrong totals: adjust Booking Total Type to match how the OTA reports numbers


# API Documentation

Learn how to use our APIs, create credentials, authenticate requests, and build custom booking and guest workflows across bookings, guests, and availability.

Everything you need to connect external systems to Hostel Mate—create bookings, sync guests, fetch availability, and more.

## Quick Start

1. Generate an API key: [API Access](/finance-management/user-management/api-access)
2. Add the key to your request headers: [Authentication](/api-documentation/authentication)
3. Call your first endpoint — for example [Bookings Create](/api-documentation/bookings/create)

## Core Guides

* Authentication: required headers and rate limits — [read more](/api-documentation/authentication)
* Booking Engine API: surface availability on your website — [read more](/api-documentation/booking-engine)
* Booking operations: [Bookings List](/api-documentation/bookings/list), [Booking Detail](/api-documentation/bookings/get), [Bookings Create](/api-documentation/bookings/create), [Bookings Update](/api-documentation/bookings/update), [Booking Logs](/api-documentation/bookings/logs), and [Booking Delete](/api-documentation/bookings/delete)
* Payments endpoint: [Payments](/api-documentation/payments)
* Guests endpoints: [Guests GET](/api-documentation/guests/get) and [Guests Update](/api-documentation/guests/update)
* Webhooks: real-time event notifications — [read more](/api-documentation/webhooks)

## Best Practices

* Store API keys server-side only; rotate them after staff changes
* **Always include `Idempotency-Key`** on `POST` and `PATCH` requests — it is required, not optional; missing it returns `400`
* Respect the 120 req/min limit and add exponential backoff on 429 errors
* Log request IDs from responses to speed up support investigations

## Need Help?

Send request IDs, timestamps, and payload summaries to <contact@hostelmate.co> when opening a support ticket so we can assist quickly.


# API Authentication

Authenticate API requests using your API key. Add required headers, handle rate limits, and follow security best practices.

All API requests must use HTTPS and include a valid **API key** in the `X-API-Key` header. There is no token exchange step — the API key is used directly.

***

## 1. Create an API Key

From the Dashboard: **Settings → API Keys** For the first time, click **Generate** to create your key.

You'll get:

* **API Key** (shown once — copy and store securely)

> Keep the key on your server only. Do **not** embed it in browser/mobile apps.

***

## 2. Required Headers

| Header            | Required                        | Description                                                                                    |
| ----------------- | ------------------------------- | ---------------------------------------------------------------------------------------------- |
| `X-API-Key`       | All requests                    | Your API key.                                                                                  |
| `Content-Type`    | All requests                    | Must be `application/json`.                                                                    |
| `Idempotency-Key` | **All POST and PATCH requests** | A unique UUID you generate per request. Prevents duplicate processing if a request is retried. |

> **`Idempotency-Key` is enforced on write operations.** Any `POST` or `PATCH` request missing this header is rejected with `400 bad_request: "Idempotency-Key header is required"`. Generate a fresh UUID v4 for each distinct operation. You can reuse the same key to safely retry a request that timed out, but using the same key with a different payload will be rejected.

**GET request example**

```bash
curl "https://api.hostelmate.co/api/v1/client/bookings" \
  -H "X-API-Key: <your_api_key>" \
  -H "Content-Type: application/json"
```

**POST request example**

```bash
curl "https://api.hostelmate.co/api/v1/client/payments" \
  -X POST \
  -H "X-API-Key: <your_api_key>" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000" \
  -d '{"amount": "50.00", "paymentMethod": "Cash", "type": "income"}'
```

***

## 3. Rate Limits & Errors

* Default: **120 requests/minute/IP** on client path (subject to change)
* Common errors:
  * **400** `Idempotency-Key header is required` — missing header on a POST or PATCH request
  * **403** Origin not allowed (configure allowed domains)
  * **404** Endpoint not found
  * **429** Rate limited — implement exponential backoff
  * **5xx** Server error — retry with backoff

***


# Bookings

Manage reservations, view booking details, and track booking logs.

## Endpoints

* [List Bookings](/api-documentation/bookings/list) - Retrieve a list of bookings with optional filters.
* [Get Booking](/api-documentation/bookings/get) - Fetch detailed information for a specific booking.
* [Create Booking](/api-documentation/bookings/create) - Create a new reservation.
* [Update Booking](/api-documentation/bookings/update) - Modify an existing reservation.
* [Delete Booking](/api-documentation/bookings/delete) - Remove or cancel a booking.
* [Booking Logs](/api-documentation/bookings/logs) - View the history of changes for a booking.


# Booking List

Retrieve a paginated list of bookings with flexible filters for status, guest, and date ranges.

Retrieve a paginated list of bookings for your property. You can filter by status, guest, or stay date ranges.

#### Endpoint

```http
GET /api/v1/client/bookings
```

#### Query Parameters

<table><thead><tr><th width="120">Parameter</th><th width="100">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>page</code></td><td>integer</td><td>The page number to retrieve (default: 1).</td></tr><tr><td><code>limit</code></td><td>integer</td><td>Number of results per page (default: 10).</td></tr><tr><td><code>status</code></td><td>string</td><td>Filter by booking status. Allowed values: <code>confirmed</code>, <code>cancelled</code>, <code>paid</code>.</td></tr><tr><td><code>guest_id</code></td><td>string</td><td>Filter by the guest's <code>guestId</code> as returned by the <a href="https://github.com/DavidSamir/doc-hostelmate/blob/main/api-documentation/bookings/guests-get.md">Guests API</a>. This is <strong>not</strong> the <code>guest.id</code> embedded in booking responses — see note below.</td></tr><tr><td><code>start_date</code></td><td>string</td><td>Filter bookings with stay dates on or after this date (YYYY-MM-DD).</td></tr><tr><td><code>end_date</code></td><td>string</td><td>Filter bookings with stay dates on or before this date (YYYY-MM-DD).</td></tr></tbody></table>

***

#### Example Request

```bash
curl "/api/v1/client/bookings?status=confirmed&limit=2" \
  -H "X-API-Key: <your_api_key>"
```

#### Example Response (200 OK)

```json
{
  "results": [
    {
      "id": "e7b7f6bb-6c0c-4e2c-9b3e-9c6f2a1c0a77",
      "status": "confirmed",
      "total": 52000,
      "created": "2025-10-01T10:00:00Z",
      "updated": "2025-10-02T11:05:13Z",
      "description": "Premium Room choice",
      "guest": {
        "id": "7f99c230-8f64-4ecb-8804-d9ea5496bf63",
        "first_name": "John",
        "last_name": "Doe",
        "email": "john.doe@example.com",
        "phone": "+123456789"
      },
      "stay_dates": [
        {
          "date": "2025-12-19",
          "amount": 26000,
          "room": "7b9e2f12-34cd-4e89-bf45-4a18f5a8a1f0",
          "bed": "bb9c708a-2695-435f-a1eb-1bf61381ad77"
        },
        {
          "date": "2025-12-20",
          "amount": 26000,
          "room": "7b9e2f12-34cd-4e89-bf45-4a18f5a8a1f0",
          "bed": "bb9c708a-2695-435f-a1eb-1bf61381ad77"
        }
      ]
    }
  ],
  "total_count": 1,
  "total_pages": 1,
  "current_page": 1
}
```

> **Note on Amounts**: All amount fields (`total`, `stay_dates[].amount`) are integers in **minor units** (e.g., `52000` = 520.00). This is different from the Payments API, which uses decimal strings (e.g., `"520.00"`).

> **Note on `guest.id`**: The `id` field inside the `guest` object in booking responses is an internal booking reference — it is **not** the same as the `guestId` used by the Guests API. Passing this value to `GET /api/v1/client/guests/{guestId}` will return `404`. To look up a guest's full profile, use [Search Guests](/api-documentation/guests/get) by email or name, and use the `guestId` field from that response.


# Booking Detail

Retrieve full details for a specific booking, including comprehensive guest data and nightly stay breakdowns.

Retrieve the complete state of a specific booking.

#### Endpoint

```http
GET /api/v1/client/bookings/{bookingId}
```

#### Path Parameters

<table><thead><tr><th width="120">Parameter</th><th width="100">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>bookingId</code></td><td>string</td><td>The unique UUID of the booking.</td></tr></tbody></table>

***

#### Example Request

```bash
curl "/api/v1/client/bookings/e7b7f6bb-6c0c-4e2c-9b3e-9c6f2a1c0a77" \
  -H "X-API-Key: <your_api_key>"
```

#### Example Response (200 OK)

```json
{
  "id": "e7b7f6bb-6c0c-4e2c-9b3e-9c6f2a1c0a77",
  "status": "confirmed",
  "total": 52000,
  "created": "2025-10-01T10:00:00Z",
  "updated": "2025-10-02T11:05:13Z",
  "description": "Premium Room choice",
  "guest": {
    "id": "7f99c230-8f64-4ecb-8804-d9ea5496bf63",
    "first_name": "John",
    "last_name": "Doe",
    "email": "john.doe@example.com",
    "phone": "+123456789"
  },
  "stay_dates": [
    {
      "date": "2025-12-19",
      "amount": 26000,
      "room": "7b9e2f12-34cd-4e89-bf45-4a18f5a8a1f0",
      "bed": "bb9c708a-2695-435f-a1eb-1bf61381ad77"
    },
    {
      "date": "2025-12-20",
      "amount": 26000,
      "room": "7b9e2f12-34cd-4e89-bf45-4a18f5a8a1f0",
      "bed": "bb9c708a-2695-435f-a1eb-1bf61381ad77"
    }
  ]
}
```

> **Note on Amounts**: All amount fields (`total`, `stay_dates[].amount`) are integers in **minor units**.


# Booking Create

Create a new booking via API. Provide a unique booking ID and either an existing guest ID or full guest details to prevent duplicates and validate inputs.

## Create a Booking

Use this endpoint to create a new booking.\
**To prevent duplicates, you must provide a unique `booking.id` (UUID v4) generated by your client.**\
**You must also provide either an existing `guest.id` or full guest details inside `guest`.**

#### Endpoint

```http
POST /api/v1/client/bookings
```

#### Example `curl`

```bash
curl "https://api.hostelmate.co/api/v1/client/bookings" \
  -X POST \
  -H "X-API-Key: <your_api_key>" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: <unique-uuid>" \
  -d '{
    "booking": {
      "id": "e7b7f6bb-6c0c-4e2c-9b3e-9c6f2a1c0a77",
      "dates": [
        { "date": "2025-11-05", "amount": 25000 },
        { "date": "2025-11-06", "amount": 25000 },
        { "date": "2025-11-07", "amount": 25000 }
      ]
    },
    "room": "92b6f8b8-6ea2-4e0e-9b7b-3e2f9b6a7c2d",
    "guest": {
      "first_name": "John",
      "last_name": "Doe",
      "email": "john@example.com",
      "phone": "+447712345678",
      "country_code": "GB"
    },
    "notes": "Late arrival around 22:00"
  }'
```

> **`Idempotency-Key` is required** on this endpoint. Omitting it returns `400 bad_request`.

> If `guest.id` is provided, the identity comes from that ID. If `guest.id` is **not** provided, `guest.first_name`, `guest.last_name`, and `guest.email` are required to create a new guest record. The `guest.id` here refers to an existing guest's `guestId` as returned by the [Guests API](/api-documentation/guests/get) — it is **not** the `guest.id` embedded in booking responses.

***

#### Request Payload

**Top-level Fields**

<table><thead><tr><th width="104.3515625">Field</th><th width="92.70703125">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>booking</code></td><td>object</td><td>Booking info including a client-generated unique ID and nightly amounts.</td></tr><tr><td><code>room</code></td><td>string</td><td>The selected room or room type ID (UUID).</td></tr><tr><td><code>guest</code></td><td>object</td><td>Guest reference <em>or</em> full guest details (see “Guest Object”).</td></tr><tr><td><code>notes</code></td><td>string</td><td>Internal notes for the booking (optional).</td></tr></tbody></table>

**Booking Object**

<table><thead><tr><th width="104.3515625">Field</th><th width="92.70703125">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td>string</td><td><strong>Required.</strong> Client-generated unique booking ID (UUID v4). Used to prevent duplicate processing.</td></tr><tr><td><code>dates</code></td><td>array</td><td>Array of nightly pricing items. The server computes <em>total</em> from the sum of these amounts.</td></tr></tbody></table>

**Dates Item**

<table><thead><tr><th width="104.3515625">Field</th><th width="92.70703125">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>date</code></td><td>string</td><td>Night date (format: YYYY-MM-DD).</td></tr><tr><td><code>amount</code></td><td>integer</td><td>Nightly amount in minor units (e.g., fils/cents).</td></tr></tbody></table>

**Guest Object**

<table><thead><tr><th width="104.3515625">Field</th><th width="92.70703125">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td>string</td><td>Existing guest ID (UUID). If provided, this identifies the guest.</td></tr><tr><td><code>first_name</code></td><td>string</td><td>Required if <code>id</code> is not provided.</td></tr><tr><td><code>last_name</code></td><td>string</td><td>Required if <code>id</code> is not provided.</td></tr><tr><td><code>email</code></td><td>string</td><td>Required if <code>id</code> is not provided. Must be a valid email.</td></tr><tr><td><code>phone</code></td><td>string</td><td>Optional. E.164 format recommended (e.g., <code>+447...</code>).</td></tr><tr><td><code>country_code</code></td><td>string</td><td>Optional. ISO 3166-1 alpha-2 (e.g., <code>GB</code>).</td></tr><tr><td><code>address</code></td><td>object</td><td>Optional postal address (see below).</td></tr></tbody></table>

**Address Object**

<table><thead><tr><th width="104.3515625">Field</th><th width="92.70703125">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>line1</code></td><td>string</td><td>Street line 1.</td></tr><tr><td><code>city</code></td><td>string</td><td>City.</td></tr><tr><td><code>postal_code</code></td><td>string</td><td>Postal/ZIP code.</td></tr><tr><td><code>country_code</code></td><td>string</td><td>ISO 3166-1 alpha-2 (e.g., <code>GB</code>).</td></tr></tbody></table>

***

#### Response (201 Created)

```json
{
  "bookingId": "e7b7f6bb-6c0c-4e2c-9b3e-9c6f2a1c0a77",
  "status": "confirmed",
  "room": "92b6f8b8-6ea2-4e0e-9b7b-3e2f9b6a7c2d",
  "total": 75000,
  "dates": [
    { "date": "2025-11-05", "amount": 25000 },
    { "date": "2025-11-06", "amount": 25000 },
    { "date": "2025-11-07", "amount": 25000 }
  ],
  "guest": {
    "id": "f1b2c3d4-5678-49ab-9cde-112233445566",
    "first_name": "John",
    "last_name": "Doe",
    "email": "john@example.com"
  },
  "createdAt": "2025-10-02T09:20:17Z"
}
```

***

#### Validation Rules

* `booking.id` is required and must be a UUID v4. Re-using it with a different payload will be rejected.
* Provide **either** `guest.id` **or** (`guest.first_name`, `guest.last_name`, `guest.email`). Not both.
* `dates[]` must contain at least one item; `date` must be valid (YYYY-MM-DD).
* `amount` must be non-negative integer (minor units).
* The server computes `total` as the sum of `dates[].amount`.

***

#### Error Codes

<table><thead><tr><th width="104.3515625">HTTP</th><th width="92.70703125">Code</th><th>Description</th></tr></thead><tbody><tr><td>400</td><td><code>bad_request</code></td><td>Validation failed (e.g., missing required fields, malformed email, invalid dates).</td></tr><tr><td>404</td><td><code>room_not_found</code></td><td>The specified <code>room</code> does not exist.</td></tr><tr><td>409</td><td><code>booking_id_conflict</code></td><td><code>booking.id</code> already used for a different payload.</td></tr><tr><td>409</td><td><code>availability_conflict</code></td><td>The selected room is no longer available for the requested dates.</td></tr><tr><td>422</td><td><code>guest_invalid</code></td><td><code>guest.id</code> not found or guest fields invalid.</td></tr><tr><td>500</td><td><code>server_error</code></td><td>Unexpected error.</td></tr></tbody></table>


# Booking Update

Update an existing booking's status, notes, dates, or room via two dedicated endpoints. Availability and totals are revalidated; send only fields you want to change.

There are two endpoints for updating a booking, each handling different concerns:

| What you want to change | Endpoint                                          |
| ----------------------- | ------------------------------------------------- |
| Status or notes         | `POST /api/v1/client/bookings/{bookingId}/update` |
| Dates, room, or notes   | `PATCH /api/v1/client/bookings/{bookingId}`       |

Both endpoints require the `Idempotency-Key` header. See [Authentication](/api-documentation/authentication) for details.

***

## Update Status or Notes

Use this endpoint to change a booking's `status` or `notes` without modifying dates or room.

#### Endpoint

```http
POST /api/v1/client/bookings/{bookingId}/update
```

#### Example `curl`

```bash
curl "https://api.hostelmate.co/api/v1/client/bookings/e7b7f6bb-6c0c-4e2c-9b3e-9c6f2a1c0a77/update" \
  -X POST \
  -H "X-API-Key: <your_api_key>" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: <unique-uuid>" \
  -d '{
    "status": "paid",
    "notes": "Payment confirmed via wire transfer"
  }'
```

#### Request Payload

| Field    | Type   | Description                                                           |
| -------- | ------ | --------------------------------------------------------------------- |
| `status` | string | New booking status. Allowed values: `confirmed`, `paid`, `cancelled`. |
| `notes`  | string | Internal notes for the booking.                                       |

Both fields are optional — send only the one(s) you want to update.

#### Response (200 OK)

```json
{
  "id": "e7b7f6bb-6c0c-4e2c-9b3e-9c6f2a1c0a77",
  "status": "paid",
  "total": 52000,
  "created": "2025-10-01T10:00:00Z",
  "updated": "2025-10-02T11:05:13Z"
}
```

***

## Update Dates, Room, or Notes (Partial PATCH)

Use this endpoint to modify nightly dates, the assigned room, or notes. Changing dates or room re-checks availability and recomputes the total.

#### Endpoint

```http
PATCH /api/v1/client/bookings/{bookingId}
```

#### Example `curl`

```bash
curl "https://api.hostelmate.co/api/v1/client/bookings/e7b7f6bb-6c0c-4e2c-9b3e-9c6f2a1c0a77" \
  -X PATCH \
  -H "X-API-Key: <your_api_key>" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: <unique-uuid>" \
  -d '{
    "booking": {
      "dates": [
        { "date": "2025-12-19", "amount": 26000 },
        { "date": "2025-12-20", "amount": 26000 }
      ]
    }
  }'
```

> This is a **partial** update. Send only the fields you want to change. Omitted fields are left unchanged.

#### Request Payload

**Top-level Fields**

<table><thead><tr><th width="104.3515625">Field</th><th width="92.70703125">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>booking</code></td><td>object</td><td>Booking-level updates — new nightly dates/amounts.</td></tr><tr><td><code>room</code></td><td>string</td><td>Change to a different room UUID. Availability for existing dates is re-validated.</td></tr><tr><td><code>notes</code></td><td>string</td><td>Update internal notes for the booking.</td></tr></tbody></table>

**Booking Object (updatable)**

<table><thead><tr><th width="104.3515625">Field</th><th width="92.70703125">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>dates</code></td><td>array</td><td>Replaces the full nightly pricing array. The server recomputes <code>total</code> as the sum of all amounts.</td></tr></tbody></table>

**Dates Item**

<table><thead><tr><th width="104.3515625">Field</th><th width="92.70703125">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>date</code></td><td>string</td><td>Night date (YYYY-MM-DD).</td></tr><tr><td><code>amount</code></td><td>integer</td><td>Nightly amount in minor units (e.g., <code>26000</code> = 260.00).</td></tr></tbody></table>

> **Note on Amounts**: All amount fields in the Booking API use **integers in minor units**. For example, to represent 100.00, send `10000`. This is different from the Payments API, which uses decimal strings (e.g., `"100.00"`).

#### Response (200 OK)

```json
{
  "bookingId": "e7b7f6bb-6c0c-4e2c-9b3e-9c6f2a1c0a77",
  "status": "confirmed",
  "room": "7b9e2f12-34cd-4e89-bf45-4a18f5a8a1f0",
  "total": 52000,
  "dates": [
    { "date": "2025-12-19", "amount": 26000 },
    { "date": "2025-12-20", "amount": 26000 }
  ],
  "updated": "2025-10-02T11:05:13Z"
}
```

***

#### Validation Rules

* Only include the fields you want to change; missing fields are left as-is.
* If `booking.dates` is provided:
  * Must contain at least one item.
  * `date` must be a valid YYYY-MM-DD string.
  * `amount` must be a non-negative integer (minor units).
  * The server recomputes `total` from the provided dates.
* If `room` is provided, availability for the existing dates is re-validated.

***

#### Error Codes

<table><thead><tr><th width="104.3515625">HTTP</th><th width="92.70703125">Code</th><th>Description</th></tr></thead><tbody><tr><td>400</td><td><code>bad_request</code></td><td>Invalid field(s), payload structure, or missing <code>Idempotency-Key</code> header.</td></tr><tr><td>404</td><td><code>booking_not_found</code></td><td>No booking found for the specified <code>bookingId</code>.</td></tr><tr><td>404</td><td><code>room_not_found</code></td><td>The specified <code>room</code> does not exist.</td></tr><tr><td>409</td><td><code>availability_conflict</code></td><td>New dates or room are not available.</td></tr><tr><td>422</td><td><code>pricing_mismatch</code></td><td><code>dates[].amount</code> does not comply with rate rules.</td></tr><tr><td>500</td><td><code>server_error</code></td><td>Unexpected error.</td></tr></tbody></table>


# Booking Delete

Delete a booking and automatically clean up associated payments, stay dates, and guest records.

Use this endpoint to permanently remove a booking and all associated metadata.

#### Endpoint

```http
DELETE /api/v1/client/bookings/{bookingId}
```

***

### Cascading Behavior

This is a **hard delete** operation. To protect data integrity, the system automatically performs an atomic cleanup of all related records:

* **Payments**: All payment records linked to this booking are deleted.
* **Stay Dates**: All nightly occupancy records are removed.
* **VCC & Keys**: Any associated Virtual Credit Cards or Door Keys are deleted.
* **Guest Auto-Cleanup**: The system checks if the guest has any other bookings in your property. If this was the guest's only booking, the **Guest record itself is also deleted** to keep your database clean.

#### Example Request

```bash
curl -X DELETE "/api/v1/client/bookings/e7b7f6bb-6c0c-4e2c-9b3e-9c6f2a1c0a77" \
  -H "X-API-Key: <your_api_key>"
```

#### Response

* **204 No Content**: Deletion successful.
* **404 Not Found**: Booking ID does not exist or belongs to another property.


# Booking Logs

Retrieve a complete audit trail for any booking, including status changes, payment updates, and property manager actions.

Audit all actions performed on a specific booking.

#### Endpoint

```http
GET /api/v1/client/bookings/{bookingId}/logs
```

***

#### Example Request

```bash
curl "/api/v1/client/bookings/e7b7f6bb-6c0c-4e2c-9b3e-9c6f2a1c0a77/logs" \
  -H "X-API-Key: <your_api_key>"
```

#### Example Response (200 OK)

```json
[
  {
    "id": 1250,
    "property": "7b9e2f12-34cd-4e89-bf45-4a18f5a8a1f0",
    "bid": "e7b7f6bb-6c0c-4e2c-9b3e-9c6f2a1c0a77",
    "status": "update-status-client-api",
    "user": "Client API",
    "amount": "0.0000",
    "logs": {
      "type": "modified-client-api",
      "status": "paid",
      "prev_status": "confirmed"
    },
    "created": "2025-10-02T11:05:13Z",
    "updated": "2025-10-02T11:05:13Z"
  }
]
```

#### Activity Status Codes

| Status                     | Description                                             |
| -------------------------- | ------------------------------------------------------- |
| `update-status-client-api` | Status or notes updated via Client API action endpoint. |
| `payment-added`            | A new payment record was linked to this booking.        |
| `payment-updated`          | An existing payment amount or method was modified.      |
| `payment-removed`          | A payment was soft-deleted from this booking.           |

> **Audit Trail**: The `user` field indicates who performed the action. Actions performed via the API will typically show "Client API" or your API Key username.


# Guests

Retrieve and update guest information.

## Endpoints

* [Get Guest](/api-documentation/guests/get) - Fetch detailed information for a specific guest.
* [Update Guest](/api-documentation/guests/update) - Modify guest profile details.


# Guest Get

Retrieve a guest by ID or search with filters and pagination. See response fields to build UIs showing profiles, contact info, and booking summaries.

> **Important — `guestId` vs `guest.id`**: The `guestId` field returned by the Guests API is **different** from the `id` field embedded inside booking responses (`booking.guest.id`). Using a `guest.id` from a booking response to call `GET /api/v1/client/guests/{guestId}` will return `404 guest_not_found`. To get a guest's `guestId`, use the [Search Guests](#search-guests) endpoint and read the `guestId` field from the result. Guests are created automatically when a booking is created.

***

## Get Guest by ID

Retrieve a full guest profile by their `guestId`.

#### Endpoint

```http
GET /api/v1/client/guests/{guestId}
```

#### Example `curl`

```bash
curl "https://api.hostelmate.co/api/v1/client/guests/f1b2c3d4-5678-49ab-9cde-112233445566" \
  -H "X-API-Key: <your_api_key>" \
  -H "Content-Type: application/json"
```

#### Response (200 OK)

```json
{
  "guestId": "f1b2c3d4-5678-49ab-9cde-112233445566",
  "first_name": "John",
  "last_name": "Doe",
  "email": "john@example.com",
  "phone": "+447712345678",
  "country_code": "GB",
  "address": {
    "line1": "Westminster",
    "city": "London",
    "postal_code": "SW1A 1AA",
    "country_code": "GB"
  },
  "date_of_birth": "1990-05-15",
  "nationality": "GB",
  "preferences": {
    "language": "en",
    "newsletter": false,
    "marketing": false
  },
  "createdAt": "2025-10-02T11:05:13Z",
  "updatedAt": "2025-10-02T11:05:13Z",
  "bookings": {
    "total": 1,
    "lastBooking": "2025-10-02T11:05:13Z"
  }
}
```

***

## Search Guests

Search for guests using filters. Use this endpoint to find a guest's `guestId` before calling other guest endpoints.

#### Endpoint

```http
GET /api/v1/client/guests
```

#### Query Parameters

<table><thead><tr><th width="104.3515625">Parameter</th><th width="92.70703125">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>email</code></td><td>string</td><td>Exact email match.</td></tr><tr><td><code>phone</code></td><td>string</td><td>Partial phone number match.</td></tr><tr><td><code>name</code></td><td>string</td><td>Partial match on first or last name (case-insensitive).</td></tr><tr><td><code>country_code</code></td><td>string</td><td>ISO 3166-1 alpha-2 country code (e.g., <code>GB</code>).</td></tr><tr><td><code>nationality</code></td><td>string</td><td>ISO 3166-1 alpha-2 nationality code.</td></tr><tr><td><code>created_after</code></td><td>string</td><td>Return guests created on or after this date (YYYY-MM-DD).</td></tr><tr><td><code>created_before</code></td><td>string</td><td>Return guests created on or before this date (YYYY-MM-DD).</td></tr><tr><td><code>page</code></td><td>integer</td><td>Page number (default: 1, minimum: 1).</td></tr><tr><td><code>limit</code></td><td>integer</td><td>Results per page (default: 20, max: 100).</td></tr></tbody></table>

#### Example `curl`

```bash
curl "https://api.hostelmate.co/api/v1/client/guests?name=John&country_code=GB&page=1&limit=10" \
  -H "X-API-Key: <your_api_key>" \
  -H "Content-Type: application/json"
```

#### Response (200 OK)

```json
{
  "guests": [
    {
      "guestId": "f1b2c3d4-5678-49ab-9cde-112233445566",
      "first_name": "John",
      "last_name": "Doe",
      "email": "john@example.com",
      "phone": "+447712345678",
      "country_code": "GB",
      "createdAt": "2025-10-02T09:20:17Z",
      "bookings": {
        "total": 3,
        "lastBooking": "2025-09-15T14:30:00Z"
      }
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 10,
    "total": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}
```

***

#### Validation Rules

* `page` minimum: 1.
* `limit` range: 1–100.
* `created_after` and `created_before` must use YYYY-MM-DD format.
* `country_code` and `nationality` must be valid ISO 3166-1 alpha-2 codes.
* All string search parameters are case-insensitive.

***

#### Error Codes

<table><thead><tr><th width="104.3515625">HTTP</th><th width="92.70703125">Code</th><th>Description</th></tr></thead><tbody><tr><td>400</td><td><code>bad_request</code></td><td>Invalid query parameters (wrong date format, invalid pagination value, etc.).</td></tr><tr><td>404</td><td><code>guest_not_found</code></td><td>No guest found for the provided <code>guestId</code>. Verify you are using <code>guestId</code> from the Guests API, not <code>guest.id</code> from a booking response.</td></tr><tr><td>422</td><td><code>invalid_country_code</code></td><td>The <code>country_code</code> or <code>nationality</code> value is not a recognized ISO 3166-1 alpha-2 code.</td></tr><tr><td>500</td><td><code>server_error</code></td><td>Unexpected server error.</td></tr></tbody></table>


# Guest Update

Partially update an existing guest’s profile—contact details, address, and preferences. Send only changed fields; validation prevents conflicts.

## Update a Guest

Whenever a guest asks to change their details, or you just need to fix a typo, you can use this endpoint to smoothly update their profile information. You are able to easily modify their **contact details**, **address**, **preferences**, and other essential guest information.\
When you send updates, our system will double-check everything, making sure the new info is valid and won't clash with any existing accounts.

#### Endpoint

```http
PATCH /api/v1/client/guests/{guestId}
```

#### Example `curl`

```bash
curl "/api/v1/client/guests/f1b2c3d4-5678-49ab-9cde-112233445566" \
  -X PATCH \
  -H "accept: application/json" \
  -H "content-type: application/json" \
  -H "origin: https://docs.hostelmate.co" \
  --data-raw '{
    "guest": {
      "phone": "+447712345678",
      "address": {
        "line1": "Westminster",
        "city": "London",
        "postal_code": "SW1A 1AA",
        "country_code": "GB"
      },
      "preferences": {
        "language": "en",
        "newsletter": false,
        "marketing": true
      }
    }
  }'
```

> **Pro-Tip:** This is a **partial** update! That means you only need to include the exact fields you want to change. No need to send over data that's staying exactly the same.

***

#### Request Payload

Here's exactly what you can include in your update.

**Top-level Fields**

<table><thead><tr><th width="104.3515625">Field</th><th width="92.70703125">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>guest</code></td><td>object</td><td>The main container for all your updates, covering contact details, address, and preferences.</td></tr></tbody></table>

**Guest Object (updatable)**

<table><thead><tr><th width="104.3515625">Field</th><th width="92.70703125">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>first_name</code></td><td>string</td><td>The guest's updated first name.</td></tr><tr><td><code>last_name</code></td><td>string</td><td>The guest's updated last name.</td></tr><tr><td><code>email</code></td><td>string</td><td>The guest's updated email address. (Just make sure it's a valid email format!)</td></tr><tr><td><code>phone</code></td><td>string</td><td>The guest's updated phone number. We highly recommend using the E.164 format.</td></tr><tr><td><code>country_code</code></td><td>string</td><td>The guest's new country code. (Needs to be ISO 3166-1 alpha-2)</td></tr><tr><td><code>address</code></td><td>object</td><td>The guest's updated postal address (see the breakdown below).</td></tr><tr><td><code>date_of_birth</code></td><td>string</td><td>The guest's updated date of birth (Use the format: YYYY-MM-DD).</td></tr><tr><td><code>nationality</code></td><td>string</td><td>The guest's updated nationality. (Needs to be ISO 3166-1 alpha-2)</td></tr><tr><td><code>preferences</code></td><td>object</td><td>The guest's updated preferences (see the breakdown below).</td></tr></tbody></table>

**Address Object**

<table><thead><tr><th width="104.3515625">Field</th><th width="92.70703125">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>line1</code></td><td>string</td><td>The main street address line.</td></tr><tr><td><code>city</code></td><td>string</td><td>The city they reside in.</td></tr><tr><td><code>postal_code</code></td><td>string</td><td>Their postal or ZIP code.</td></tr><tr><td><code>country_code</code></td><td>string</td><td>Their country code in ISO 3166-1 alpha-2 format (e.g., <code>GB</code>).</td></tr></tbody></table>

**Preferences Object**

<table><thead><tr><th width="104.3515625">Field</th><th width="92.70703125">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>language</code></td><td>string</td><td>Their preferred language code (e.g., <code>en</code>, <code>fr</code>).</td></tr><tr><td><code>newsletter</code></td><td>boolean</td><td>Let us know if they want to subscribe to newsletters.</td></tr><tr><td><code>marketing</code></td><td>boolean</td><td>Let us know if they consented to marketing communications.</td></tr></tbody></table>

***

#### Response (200 OK)

If everything goes perfectly, you'll receive a response looking like this:

```json
{
  "guestId": "f1b2c3d4-5678-49ab-9cde-112233445566",
  "first_name": "John",
  "last_name": "Doe",
  "email": "john@example.com",
  "phone": "+447712345678",
  "country_code": "GB",
  "address": {
    "line1": "Westminster",
    "city": "London",
    "postal_code": "SW1A 1AA",
    "country_code": "GB"
  },
  "date_of_birth": "1990-05-15",
  "nationality": "GB",
  "preferences": {
    "language": "en",
    "newsletter": false,
    "marketing": true
  },
  "updatedAt": "2025-10-02T11:05:13Z"
}
```

***

#### Validation Rules

To keep your data pristine, we enforce a few simple rules:

* You only have to send the data you want to change! Missing fields are safely ignored and left as-is.
* If you decide to send an `email`, we'll check to make sure it's valid and isn't already claimed by another guest.
* The `date_of_birth` needs to use the classic YYYY-MM-DD format.
* Both `country_code` and `nationality` require standard ISO 3166-1 alpha-2 codes.
* If you include a `phone` number, the standard E.164 format works best!

***

#### Error Codes

Sometimes things don't go according to plan! Here's a quick cheat sheet for interpreting the errors:

<table><thead><tr><th width="104.3515625">HTTP</th><th width="92.70703125">Code</th><th>Description</th></tr></thead><tbody><tr><td>400</td><td><code>bad_request</code></td><td>Something looks slightly off with the fields or payload structure you provided.</td></tr><tr><td>404</td><td><code>guest_not_found</code></td><td>We couldn't seem to find a guest sharing that specific <code>guestId</code>.</td></tr><tr><td>409</td><td><code>email_conflict</code></td><td>Looks like that new email address is already being used by another guest!</td></tr><tr><td>422</td><td><code>invalid_country_code</code></td><td>The country code or nationality you gave us doesn't seem valid.</td></tr><tr><td>422</td><td><code>invalid_date_format</code></td><td>The date format for <code>date_of_birth</code> wasn't recognized.</td></tr><tr><td>500</td><td><code>server_error</code></td><td>An unexpected server hiccup occurred on our end.</td></tr></tbody></table>


# Booking Engine

Build a custom booking flow by fetching availability via API. See request/response formats, fields, and examples to render rooms, prices, and images.

Use this endpoint to fetch real-time room availability, nightly pricing, and property details — the building blocks for a custom booking flow on your own website.

### Related API Pages

* [API Authentication](/api-documentation/authentication)
* [Booking List](/api-documentation/bookings/list)
* [Booking Detail](/api-documentation/bookings/get)
* [Booking Create](/api-documentation/bookings/create)
* [Booking Update](/api-documentation/bookings/update)
* [Booking Logs](/api-documentation/bookings/logs)
* [Booking Delete](/api-documentation/bookings/delete)
* [Payments](/api-documentation/payments)
* [Guest Get](/api-documentation/guests/get)
* [Guest Update](/api-documentation/guests/update)

#### Endpoint

```http
POST /api/v1/get-new-avilablilty
```

> **Note on the URL**: The endpoint path contains a deliberate typo (`avilablilty` instead of `availability`). This is the actual path — copy it exactly as shown.

#### Example `curl` Request

```bash
curl "https://api.hostelmate.co/api/v1/get-new-avilablilty" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "dates": ["2025-11-05", "2025-11-06"],
    "property": "your-property-uuid"
  }'
```

> This endpoint does not require `X-API-Key` authentication — it is a public endpoint intended for guest-facing booking flows.

#### Request Payload

<table><thead><tr><th width="104.3515625">Field</th><th width="92.70703125">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>dates</code></td><td>array</td><td>Feed us the specific dates you want to check availability for! (Format: YYYY-MM-DD).</td></tr><tr><td><code>property</code></td><td>string</td><td>Simply your unique property ID (UUID).</td></tr></tbody></table>

#### Response

The response includes available rooms with per-date pricing, property details, and an optional price adjustment to apply before displaying prices to guests.

**Response Structure**

```json
{
    "days": [
        {
            "room_id": "265b373a-6248-4424-bf18-dc2bbf63a920",
            "room_name": "Deluxe Mixed Room",
            "room_description": "this is the room description test ",
            "date": [
                {
                    "date": "2025-10-02",
                    "price": 108
                }
            ],
            "image_fullpath": [
                "https://cdn.domain.com/room_image/oyY8W97TnEpRv7XDGCFWpIbFr.jpg",
                "https://cdn.domain.com/room_image/s2N7hsqPWECSTlGdS1JAsgS1B.jpg",
                "https://cdn.domain.com/room_image/D3HkQXEyB0w3n4bOiEVzAiwL8.jpg",
                "https://cdn.domain.com/room_image/MG30KI5I9s6GTSYMkE4C5Z3LN.jpg"
            ]
        }
    ],
    "name": "Alphatel London Bridge",
    "city": "London",
    "country": "United Kingdom",
    "postal_code": "SE1 9SG",
    "payment_gateway": {
        "status": true,
        "currency": "gbp",
        "options": [
            "nomod"
        ]
    },
    "state": "UK",
    "rate": "12",
    "phone": "+00000000000",
    "description": "",
    "googleMapLink": "https://www.google.com/maps?q=PLACEHOLDER",
    "address": "8th Floor, Building, UK",
    "website": "https://domain.com/",
    "main-image": "https://cdn.domain.com/property_image/kF3Ekirdo60z5e3r5HNCgMpBv.jpg",
    "howToReachUsLink": "https://www.google.com/maps?q=PLACEHOLDER",
    "price_adjustment": {
        "type": "increase",
        "percentage": 10
    }
}
```

**Response Fields**

<table><thead><tr><th width="272.6796875">Field</th><th width="100">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>days</code></td><td>array</td><td>Available rooms matching the requested dates. One entry per room.</td></tr><tr><td><code>days[].room_id</code></td><td>string</td><td>Room UUID. Use this as the <code>room</code> field when creating a booking.</td></tr><tr><td><code>days[].room_name</code></td><td>string</td><td>Display name for the room.</td></tr><tr><td><code>days[].room_description</code></td><td>string</td><td>Room description text.</td></tr><tr><td><code>days[].date</code></td><td>array</td><td>Per-date pricing entries for this room.</td></tr><tr><td><code>days[].date[].date</code></td><td>string</td><td>The date in YYYY-MM-DD format.</td></tr><tr><td><code>days[].date[].price</code></td><td>number | false</td><td>Price for this date. <code>false</code> means the room is fully booked for that night.</td></tr><tr><td><code>days[].image_fullpath</code></td><td>array</td><td>Array of image URLs for the room.</td></tr><tr><td><code>name</code></td><td>string</td><td>Property name.</td></tr><tr><td><code>city</code></td><td>string</td><td>City the property is in.</td></tr><tr><td><code>country</code></td><td>string</td><td>Country the property is in.</td></tr><tr><td><code>postal_code</code></td><td>string</td><td>Property postal code.</td></tr><tr><td><code>payment_gateway</code></td><td>object</td><td>Payment gateway configuration for this property.</td></tr><tr><td><code>payment_gateway.status</code></td><td>boolean</td><td><code>true</code> if the payment gateway is active.</td></tr><tr><td><code>payment_gateway.currency</code></td><td>string</td><td>ISO 4217 currency code (e.g., <code>"gbp"</code>).</td></tr><tr><td><code>payment_gateway.options</code></td><td>array</td><td>Supported payment options.</td></tr><tr><td><code>state</code></td><td>string</td><td>State or region the property is in.</td></tr><tr><td><code>rate</code></td><td>string</td><td>Property rating.</td></tr><tr><td><code>phone</code></td><td>string</td><td>Property phone number.</td></tr><tr><td><code>description</code></td><td>string</td><td>Property description text.</td></tr><tr><td><code>googleMapLink</code></td><td>string</td><td>Google Maps URL for the property location.</td></tr><tr><td><code>address</code></td><td>string</td><td>Full property address.</td></tr><tr><td><code>website</code></td><td>string</td><td>Your beautifully built property website URL.</td></tr><tr><td><code>main-image</code></td><td>string</td><td>URL of the property's main cover image.</td></tr><tr><td><code>howToReachUsLink</code></td><td>string</td><td>URL with directions to the property (typically a Google Maps link).</td></tr><tr><td><code>price_adjustment</code></td><td>object | null</td><td>The net price adjustment configured by the property for their booking engine. <code>null</code> when no adjustment is set or when rules cancel each other out (net = 0%). When present, apply this to each room's per-date price before displaying it to guests.</td></tr><tr><td><code>price_adjustment.type</code></td><td>string</td><td><code>"increase"</code> or <code>"decrease"</code> — the direction of the net adjustment.</td></tr><tr><td><code>price_adjustment.percentage</code></td><td>number</td><td>The absolute net percentage to apply. For example, <code>10</code> means ±10% depending on <code>type</code>.</td></tr></tbody></table>




---

[Next Page](/llms-full.txt/1)

