Location Hours
Per-location operating hours that tell the scheduler which time slots are available — configured as recurring day-of-week rules or date-range overrides for holidays and seasonal closures.
Location Hours define when each of your inventory locations is open for appointments. The scheduler uses these rules to generate bookable time slots — so if a location has no hours configured for a given day, no appointments can be booked there. Rules come in two flavors: a recurring day-of-week rule (e.g. every Wednesday, 09:00–17:00) or a date-range override (e.g. December 24–26 closed for the holiday). When both types match a given date, the date-range rule wins.
Location hours only apply to locations that have Appointments enabled. If a location doesn't appear in the Location Hours form, go to Locations and turn on the Enable Appointments flag before adding hours.
Day-of-week rules #
A day-of-week rule fires every week on the chosen day. This is how you configure your normal operating schedule:
- Location — which appointment-enabled location this rule applies to. Required.
- Label — an optional human-readable note (e.g.
Regular Hours). Leaving it blank is fine for standard weekly hours. - Day of Week — Sunday through Saturday (0–6). Set this for a repeating weekly rule; leave it blank when using a date range instead.
- Open Time and Close Time — the window during which slots are generated. Both are disabled when Closed is toggled on.
- Closed — turn this on to mark the entire day as unavailable without specifying times (useful for a location that's always closed on Sundays, for example).
A complete weekly schedule is simply seven day-of-week rules — one per day. Days with no rule and no matching date-range override are treated as closed by the scheduler.
Date-range overrides (holidays and seasonal hours) #
A date-range rule applies only between Date From and Date To (inclusive) and takes priority over whatever day-of-week rule would otherwise apply. Use these for:
- Closures — toggle Closed on and set a date range for public holidays or planned shutdowns.
- Extended or reduced hours — set different open/close times for a seasonal period without touching the weekly schedule.
- One-day exceptions — set Date From and Date To to the same date for a single-day override.
Leave Day of Week blank on a date-range rule; the two fields are mutually exclusive — day-of-week is for repeating weekly rules, date range is for bounded overrides.
Managing hours in the UI #
Hours can be managed two ways:
From Appointments → Location Hours — the standalone resource lists every rule across all locations. Filter or sort by location, then click New Location Hours to add a rule. The table shows the location name, day, date range, open/close times, and whether the rule marks the location as closed.
From the Location record itself — open any appointment-enabled location (Inventory → Locations → [location]) and find the Hours tab. The inline relation manager lets you create, edit, and delete rules directly on the location's page without navigating away. This is the fastest way to set up a full weekly schedule for a single location.
Both paths manage the same underlying records; use whichever is convenient.
How the scheduler uses these rules #
When generating available time slots for an appointment type, the system:
- Looks up the date being checked against the location's date-range overrides
(most recent
date_fromwins if multiple ranges overlap). - Falls back to the day-of-week rule for that date's weekday if no date-range rule matches.
- Returns
null(closed / no slots) if the matching rule hasis_closed = trueor if no rule exists at all. - Generates time slots by stepping through the open–close window in increments of the appointment type's duration.
This means you can precisely control availability without touching appointment type configuration — simply adjust the location's hours.
Relationship to other modules #
Location Hours belong to an Inventory Location and gate availability for Appointment Types that are tied to that location. Customers booking through the customer portal only see slots that fall within open hours; slots outside the window are never offered. Loan agreements can also link to appointments, so keeping location hours accurate ensures that reserved-equipment appointments land on days the location is actually open.
Doing it from the API #
# List all hours rules for a specific location
curl "https://your-domain.com/api/v1/location-hours?location_id=<location-id>" \
-H "Authorization: Bearer $TOKEN"
# Create a recurring day-of-week rule (Monday 08:00–17:00)
curl -X POST "https://your-domain.com/api/v1/location-hours" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"location_id": "<location-id>",
"day_of_week": 1,
"open_time": "08:00",
"close_time": "17:00",
"is_closed": false
}'
# Create a holiday closure (date-range override)
curl -X POST "https://your-domain.com/api/v1/location-hours" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"location_id": "<location-id>",
"label": "Christmas Closure",
"date_from": "2026-12-24",
"date_to": "2026-12-26",
"is_closed": true
}'
Times are sent and returned as
HH:MMstrings (24-hour format). Thelocation_idfilter on the list endpoint accepts the location'sidand is the most efficient way to pull hours for a single location.