Booking Slots
Returns the runtime availability of slots for a booking product on a specific date. The Bagisto booking system supports five booking types (default, appointment, rental, event, table); the slot-config block lives on the parent product (see bookingProducts[] in Single Product). This endpoint converts that config + a target date into the actual bookable time slots.
Endpoint
GET /api/shop/booking-slotsRequest Headers
| Header | Required | Description |
|---|---|---|
Accept | Yes | application/json |
X-STOREFRONT-KEY | Yes | Storefront API key (pk_storefront_…) |
X-Locale | No | Override request locale |
X-Channel | No | Override channel scope |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Booking product ID — i.e. bookingProducts[].id from a parent product, not the parent product's id. |
date | string | Yes | Target date in YYYY-MM-DD format. Times in the response are computed against the channel's timezone for that date. |
Pagination headers are not emitted — the response is the full list of slots for the date in one shot.
Response shape — by booking type
The internal structure depends on the booking product's type field. The API auto-routes to the right shape based on the parent booking product, so you don't pick which response — you get the right one for the product.
Flat slots (default · appointment · event · table)
[
{ "slotId": "...", "from": "12:00 PM", "to": "06:00 PM", "timestamp": "1777876200-1777897800", "qty": "5" }
]| Field | Type | Description |
|---|---|---|
slotId | string | Stable identifier — pass it back to the cart endpoint when adding the slot. |
from | string | Slot start time (hh:mm AM/PM) |
to | string | Slot end time |
timestamp | string | Unix from-to range — server-computed, useful for logging and analytics |
qty | string | null | Remaining capacity. null for types that don't track per-slot inventory |
Grouped slots (rental hourly)
[
{
"slotId": "1",
"time": "10:00 AM - 12:00 PM",
"slots": [
{ "from": "10:00 AM", "to": "11:00 AM", "timestamp": "1777867200-1777870800", "qty": "5" }
]
}
]| Field | Type | Description |
|---|---|---|
slotId | string | Sequential index of the time-range group |
time | string | Group label (e.g. "10:00 AM - 12:00 PM") |
slots | array | Nested hourly sub-slots — same { from, to, timestamp, qty } shape as flat slots |
Typical Flow
GET /api/shop/products/110
└─ response.type = "booking"
└─ response.bookingProducts = [{ id: 1, type: "default", … }]
GET /api/shop/booking-slots?id=1&date=2026-05-04
└─ [{ slotId: "...", from: "12:00 PM", to: "06:00 PM", … }]The id you pass to /booking-slots is the booking product ID (the entry from the parent's bookingProducts[] array), not the parent product ID.
Empty results
A 200 OK with an empty array [] means "the product is bookable in principle but has no slots on this date". Common causes:
- The booking product's weekly schedule excludes that day of the week.
- All slots for the date are sold out.
- The date is before/after the booking product's allowed window.
Use Cases
- Render a date-picker on a booking-product detail page that shows available slots when a date is selected.
- Validate a chosen
slotIdbefore adding it to the cart (re-fetch with the same date to confirm it's still in the response). - Power an admin "view today's bookings" tool — combine
?date=with each active booking product.
Related Resources
- Single Product — embeds the
bookingProducts[]slot config that this endpoint dereferences - Products — discover booking products via
?type=booking - Search Products

