Introduction
Some properties, contain multiple bookable unit types rather than a single bookable space. For example, a property might offer different bedrooms as distinct unit types, each with their own availability, pricing, and amenities. The multi-unit feature allows Zepl to represent these properties accurately. Instead of treating each unit type as a separate listing, a single listing can contain multiple units, each with its own inventory, pricing, and availability. Provider support: Multi-unit listings are currently supported for HOSTFULLY and HOSTFULLYSANDBOX integration accounts only. For all other providers, listings are treated as single-unit properties.How It Works
Every listing in Zepl has apropertyType field that determines how units are handled:
- SINGLE_UNIT - A traditional listing with one bookable unit. This is the default for all providers.
- MULTI_UNIT - A property with multiple distinct units
Single-Unit Properties
When a listing is synced from a PMS, Zepl automatically creates a single unit record for it. This unit:- Has
isAutoGeneratedset totrue - Inherits its name, occupancy, pricing, and other details from the listing
- Has its
providerUnitIDset to the listing’sproviderID - Does not have unit-specific amenities or pictures (these remain at the listing level)
Multi-Unit Properties
For multi-unit properties synced from supported providers, Calry creates a unit record for each unit type defined in the PMS. Each unit:- Has
isAutoGeneratedset tofalse - Has its own
providerUnitIDfrom the PMS - Can have its own
inventoryCount, indicating how many physical units of that type exist - Has its own amenities, pictures, pricing, and occupancy details
Unit Schema
| Field | Type | Description |
|---|---|---|
| id | UUID | Unique identifier for the unit |
| providerUnitID | string | The PMS-specific identifier for this unit type |
| name | string | Name of the unit (e.g., “Ocean View Suite”) |
| description | string | Description of the unit |
| inventoryCount | number | How many physical units of this type exist (default: 1) |
| maxOccupancy | number | Maximum number of guests |
| bedroomCount | number | Number of bedrooms |
| bathroomCount | number | Number of bathrooms |
| basePrice | number | Base price for the unit |
| currency | string | ISO currency code (e.g., “USD”) |
| minimumNights | number | Minimum stay requirement |
| maximumNights | number | Maximum stay requirement |
| roomType | string | Type of room |
| amenities | array | Unit-specific amenities (null for auto-generated units) |
| pictures | array | Unit-specific pictures (null for auto-generated units) |
| isAutoGenerated | boolean | Whether this unit was auto-generated for a single-unit listing |
| status | string | ACTIVE or INACTIVE |
| createdAt | Date | Creation timestamp |
| updatedAt | Date | Last update timestamp |
Fetching Units
You can retrieve the units for a listing using the units endpoint:Unit objects for the given listing. For single-unit listings, this will return a single auto-generated unit. For multi-unit listings, it will return all unit types defined in the PMS.
Units are also included in the listing response when fetching listing details.
Availability and Inventory
Availability in Zepl is tracked at the unit level, not the listing level. Each unit has its own availability calendar. For units with aninventoryCount greater than 1, the system tracks how many units of that type remain available on each date using an availableCount field. A date is only marked as unavailable when the available count reaches zero.
For example, if a hotel has 5 “Deluxe Rooms” and 3 are booked on a given date, the available count for that date would be 2, and the unit would still show as available.
Quotes and Reservations
When creating quotes or reservations, the behavior differs based on property type:- Single-unit listings: The
unitIDparameter is optional. If omitted, the system automatically resolves to the auto-generated unit. - Multi-unit listings: The
unitIDparameter is required. You must specify which unit type the guest is booking. If omitted, the request will return an error.