Availability Controls

Pricing is half the story — what is sellable at all is the other half. Owners need to close out specific dates (Diwali staff break), close specific rooms (renovation), pause an entire property, or hide it from one channel without affecting others.

The four control levers

Date block

Mark specific dates as unsellable for a room type — e.g. "Dec 24 closed for staff retreat". Doesn't affect existing bookings on those dates.

Room toggle

Disable a single physical unit (Room 304 is being repainted). Inventory drops by 1 for that type across all dates until re-enabled.

Room type disable

Hide the entire room type from search without deleting it. All physical units of that type become unsellable.

Property pause

Take the entire property offline. No new bookings on any channel. Existing bookings honored unless owner cancels them explicitly.

Inventory grid (the source of truth)

Internally, availability is a matrix: date × room-type × channel. Each cell stores three numbers:

NumberMeaning
totalPhysical units of this type, minus units in out_of_order or out_of_service.
bookedHow many are reserved (confirmed bookings + active holds).
blockedManually closed (date blocks + channel blocks).

Sellable = total − booked − blocked. If <= 0 → "Sold out" badge on public search.

Inventory grid UI

app.abc.com/properties/parkview/availability
Availability · December 2026
Room type 123 456 789 101112 1314
Deluxe King (6) 6 6 5 5 2 1 4 6 6 5 0 0 5 6
Family Suite (4) 4 4 3 3 2 2 4 4 4 4 3 3 4 4
Available Low (≤2) Sold out / blocked

Date block dialog

  1. Select a date range

    Drag across the grid or use the date picker.

  2. Pick a reason

    maintenance · owner_stay · seasonal_close · renovation · other (free text).

  3. Choose scope

    All room types, or specific ones. Optional channel-only scope (e.g. block on Airbnb but not direct).

  4. Confirm impact

    If there are existing bookings on these dates, show a warning. Block only blocks new sales; existing bookings stand.

Overbooking protection

The single biggest pain in multi-channel hospitality. ABc prevents it three ways:

1. Hold during checkout

When a guest hits "Continue to payment", we create a 10-minute hold that decrements availability. If payment fails or times out, the hold expires automatically.

2. Optimistic concurrency

Confirm endpoint takes a version of the inventory row. Race condition? The slower request fails fast with HTTP 409 and the UI re-quotes.

3. Channel safety buffer

Owners can configure: "Always reserve 1 unit out of OTA sync." Stops a Booking.com push that crosses with a direct booking.

Min / max stay rules

Beyond block / unblock, dates can carry restrictions:

RuleEffect
min_nightsBooking must span at least N nights covering this date. e.g. "Min 3 nights during Christmas week".
max_nightsCap on long-stays.
closed_to_arrivalGuest cannot check in on this date (but mid-stay is fine).
closed_to_departureGuest cannot check out on this date.
min_advance_daysMust book at least N days before check-in (used with non-refundable / promo rates).

Property pause flow

Owner clicks "Pause property"
Confirm dialog
Status: paused
Hidden from public search
Push "closed" to all OTAs
Confirmation email to owner
Pause does not cancel existing bookings.

Existing confirmed bookings still happen. If the owner needs to cancel them too, they must do it one-by-one with a clear reason — every cancellation triggers a refund per the booking's policy and a notification to the guest.