Definition
Availability answers one question, which listings can a customer get in this sales channel?, and lets you deepen it with context:- …with a given fulfillment type
- …at a specific location
- …to be booked between two dates
How it works
Availability is not binary. Whether a listing is available depends on several factors, which layer on as you add context:- Listing: the listing is active, visible in the channel, and has at least one valid purchase type.
- Stock: at least one location holds stock (for items that track inventory).
- Fulfillment: a fulfillment method can serve the customer. For in-store pickup, a listing is eligible at a Location only when it’s sold there and that Location’s fulfillment rules offer in-store pickup for the listing’s purchase type (rental or sale).
- Dates: for bookings, the requested period falls in the listing’s available date ranges, its start and end times are allowed, and it is free of conflicts on the calendar.
Eligibility vs. availability
Two of these factors answer different questions, and the storefront resolves them in order:- Eligibility is a configuration fact: can this listing be fulfilled at this Location at all? A Location is eligible for a listing when the listing is sold there and the Location offers a fulfillment method for the listing’s purchase type. It doesn’t depend on stock levels or dates, so it can be evaluated up front, to show “available for pickup at these Locations” and to filter the Location picker.
- Availability layers stock and dates on top: do the eligible Locations actually have the requested items free for the chosen period? A Location can be eligible but still out of stock for a given range or quantity.
Availability signal vs. exact stock
For a browse view, availability is a signal (available somewhere) rather than a count. It tells the customer whether an item can be bought and at how many locations, without exposing exact quantities:The booking decision
Whether a customer can get a listing is an AND across several layers. Each must pass, and the first layer that fails is the reason it isn’t offered. The storefront evaluates them from cheapest (pure configuration) to most specific (live stock and dates):The listing is sellable
- Active status: Draft and template Listings are never offered.
- Enabled in the customer’s sales channel (
salesChannelOnlinefor the Online Store). - Has at least one purchase type with a row in an attached Price Table: an enabled, in-window booking row for rentals, or a sales row for purchases.
A location can fulfill it (eligibility)
- The listing is sold at the Location (linked), and the Location is active with the channel enabled.
- The Location’s fulfillment rules offer the requested fulfillment method (e.g. in-store pickup) for that purchase type. A store that offers pickup for sales but not rentals makes a rental ineligible there, even if it’s in stock.
There is stock (availability)
The dates fit a price row and the location's hours (bookings)
- A booking row must cover the duration and respect its
weekdaysandtimeOfDayRange, the table’s date window, and the listing’s min / max booking duration. Otherwise there is no price, so no bookable option. - The Location’s fulfillment hours must allow the chosen pickup and return times. Pickup hours constrain the booking start; return hours constrain the booking end. Locations without custom fulfillment hours fall back to opening hours.
The dates fall inside an available date range (bookings)
- Bookings must also end within the date range requires the booking to start and end in the same merged block. It is ticked by default. Untick it and only the start is gated, like the order deadline, so a booking may run past the end of its season.
Every unit is free for the whole range (bookings)
The before-buffer's lead time has passed (bookings)
The start and end times are allowed that weekday (bookings)
The start is on the booking interval grid (bookings)
off_booking_interval notice, and checkout rejects the start when it creates the order.Treat the interval as a picker grid rather than an availability answer. The availability endpoints do not reject an off-grid start, and admin order management books off the grid deliberately.The order deadline has not passed (bookings & subscriptions)
- A set time before: the start time minus a fixed offset (e.g. 2 hours before start).
- By time of day: a wall-clock cutoff on an earlier day, resolved in the service location’s timezone (e.g. by 18:00, 1 day before start).
order_deadline notice. Admin users are exempt, so staff can create orders past the deadline.What wins when a listing carries several constraints
Nothing overrides anything. The layers are combined with AND, so the tightest one decides and the others cannot widen it. A date range does not open a day the location is closed on, and opening hours do not open a day outside every range. Two kinds of rule make up the answer, and knowing which is which explains what the endpoints report:Editing an existing line item
When availability is computed for a line item that is being edited, that line item’s own reservation is excluded from the check, along with the reservations of any add-ons attached to it. The exclusion covers the whole reserved footprint, buffer windows included, so a line item never blocks its own edit. Without it, an item’s own buffer would count against it: a stock item with a 2-hour after-buffer would refuse a 1-hour extension of the very rental period that created that buffer. Excluding a sold stock item frees the capacity that sale consumed in the same way, so re-dating a sale sees its own unit as available again. The rule applies wherever an existing line item is re-dated or re-picked: the admin’s line item editor, and the storefront cart’s edit flow. It does not extend to other line items on the same order: those hold their reservations normally, and an edit that collides with one is reported as unavailable.Items already in the cart
Items in the cart are checked as if they were already booked, buffers and all. A second rental of the same stock item that starts inside the first one’s after-buffer is not offered, even when the two rental periods themselves do not overlap. The same applies across the cart page’s per-store check: a store counts as “Cart available” only when it can hold every item in the cart, each with its buffer windows, at the same time.Examples
Rental sold at a store that only offers pickup for sales
Rental sold at a store that only offers pickup for sales
In stock, but the chosen dates conflict
In stock, but the chosen dates conflict
Extending a rental whose own buffer sits in the way
Extending a rental whose own buffer sits in the way
Bookable, but not on the requested weekday or duration
Bookable, but not on the requested weekday or duration
weekdays) with a two-day minimum. A Saturday start, or a one-day booking, matches no row, so there is no price and it isn’t bookable for that selection even though stock is free.The storefront surfaces this before the customer commits: in the booking widget’s Booking options dropdown, an option that can’t start on the selected date is greyed and captioned with the next date it can, reading “Not available for selected dates - next available Mon 18.8”. Selecting it moves the start date to that day. See Booking options and the selected date.Quantity exceeds what one location holds
Quantity exceeds what one location holds
Sale item with no stock rules
Sale item with no stock rules
Off-season, with next summer already on the listing
Off-season, with next summer already on the listing
A rental that may start but not end on a Sunday
A rental that may start but not end on a Sunday
A cart item falls off the grid after the interval changes
A cart item falls off the grid after the interval changes
off_booking_interval: 10:45 is no longer a start the grid offers.Bookings already ordered at 10:45 keep their time. Only a start being created is checked, so nothing in the order history is invalidated by the change.Order deadline passes while item is in the cart
Order deadline passes while item is in the cart
Querying availability via the API
Authenticate with theX-API-KEY header (see API Keys). The main endpoints:
from / to (the date range), serviceLocationIds, and variantValueIds.
The two availability endpoints are part of the documented Admin API. The last two are reachable but are not published in the reference, so they can change without notice, so build on them only if you can absorb that.
See the API reference for full parameters and response schemas. It is generated from the live API, so it always reflects the current fields.