Settings reference
Manage plugin settings under Plugins → KahunaCart Bookings, Bookings → Settings, or in user/config/plugins/kahunacart-bookings.yaml.
These settings provide store-wide defaults and control features such as temporary holds. Service-specific rules belong on the service.
Before you begin
kahunacart.settingsto open the form and save it.- A text editor and a deploy step, if you would rather write the YAML.
Booking defaults
These values apply when the service has no override for its interval, notice period, booking window or buffers.
An explicit zero overrides the store default; an empty value inherits it.
| Setting | Key | Default | What it does |
|---|---|---|---|
| Slot interval | booking.slot_interval |
30 |
Minutes between offered start times, measured from the start of each opening interval. |
| Minimum notice | booking.minimum_notice_hours |
2 |
Hours of warning you want before an appointment. Anything sooner is not offered |
| Booking window | booking.window_days |
60 |
How far ahead a customer may book, in days. Zero means as far ahead as they like |
| Buffer before | booking.buffer_before |
0 |
Minutes of setup time kept free ahead of every appointment |
| Buffer after | booking.buffer_after |
0 |
Minutes of clean-up time kept free after every appointment |
| Week starts on | booking.week_starts_on |
mon |
Which day a week begins on in the calendars and the pickers |
| How times are written | time_format |
12 |
Display 6:00pm in 12-hour format or 18:00 in 24-hour format throughout the store. |
Add the clean-up buffer after the earlier appointment to the setup buffer before the next. Fifteen minutes of clean-up with no setup leaves a fifteen-minute gap; fifteen minutes of each leaves thirty minutes.
Temporary holds
| Setting | Key | Default | What it does |
|---|---|---|---|
| Hold in the cart | hold_minutes |
15 |
Minutes a picked time is held while the customer is still shopping |
| Hold on the payment page | payment_hold_minutes |
60 |
Minutes a picked time is held once the payment page opens |
Cart holds and payment holds use separate durations. A hosted payment page may need more time than the cart hold allows.
The payment hold is always at least as long as the cart hold, regardless of the configured values.
Taking payment
| Setting | Key | Default | What it does |
|---|---|---|---|
| When you are paid | payment |
online |
Whether the store asks for the money when the booking is made or when the customer turns up |
| Reference prefix | reference_prefix |
BK |
What every booking reference starts with, so BK-7K3M9Q reads as yours |
A single service can say it takes payment on the day when the store normally charges up front — a consultation, a first visit, a quote. It cannot say the opposite: a store set to take payment on the day takes payment on the day. See Taking payment.
The reference prefix accepts up to eight letters or numbers. Choose a value staff can recognise when customers quote a reference.
Calendar sync
| Setting | Key | Default | What it does |
|---|---|---|---|
| What a published calendar says | feed_privacy |
full |
How much of a booking goes into a person's own calendar link |
| Recheck other calendars every | busy_feed_minutes |
15 |
Minutes before an outside calendar is fetched again |
Set feed_privacy to full, initials or busy. A resource can override the default. Use busy to publish occupied times without appointment details.
busy_feed_minutes is how long a fetched copy counts as fresh, and it is a cost question rather than a correctness one: every availability question is answered from the cached copy until it goes stale. A calendar that will not load never closes the diary. See Calendar sync.
Storefront picker
| Setting | Key | Default | What it does |
|---|---|---|---|
| Other sites that may book | public.allowed_origins |
empty | Other sites that may book against this store |
Public booking endpoints check the request origin before accepting writes. Requests from your own store are allowed automatically.
Add an origin such as https://shop.example.com only when booking forms run on another site. Include the scheme and host, without a path.
Messages
| Setting | Key | Default | What it does |
|---|---|---|---|
| Manage page | manage_route |
/booking |
Where a guest changes their own appointment |
| Reminders | reminders.lead_hours |
24, 1 |
Hours before the start a reminder goes out, separated by a comma |
| Send a thank-you | followup.enabled |
on | Whether to say thank you after an appointment |
| Thank-you delay | followup.after_hours |
2 |
Hours after the appointment ends |
| Keep finished bookings for | retention_days |
0 |
Days after which a finished booking is thrown away. Zero keeps everything |
Manage page defaults to /booking, which the plugin serves automatically. To customise it, create a page at the same route with [kahunacart-booking-manage /]; your page takes precedence. Choose another route if /booking is already in use. Clear the setting to disable the page and remove its link from messages.
Reminders specifies lead times in hours. Each reminder is sent once per appointment and lead time, even with multiple workers. Clear the field to disable them.
Keep finished bookings for defaults to zero, which disables pruning. A retention period removes old cancelled, rejected, expired and completed bookings. Pending and confirmed bookings are never pruned.
Enable or disable individual messages under KahunaCart → Settings → Notifications. See Emails and reminders.
Classes and waiting lists
| Setting | Key | Default | What it does |
|---|---|---|---|
| When a place comes free | waitlist_promotion |
auto |
Offer it straight away, or By hand |
| How long an offer lasts | waitlist_offer_hours |
12 |
Hours a place is held for the person it was offered to while they pay for it |
The offer window applies only to classes requiring online payment. For free classes and payment on the day, the next waiting customer receives the place directly.
Configure the timetable, capacity, waiting list and single-date or course purchase rules on each class. See Classes and waiting lists.
Front desk
| Setting | Key | Default | What it does |
|---|---|---|---|
| Front desk | desk.enabled |
true |
Whether the staff app is served at all. Off, and the route is not there |
| Where it lives | desk.route |
/desk |
The address staff open on the tablet |
Anything starting with a slash works. See The front desk.
Complete configuration file
enabled: true
booking:
slot_interval: 30
minimum_notice_hours: 2
window_days: 60
buffer_before: 0
buffer_after: 0
week_starts_on: mon
time_format: '12'
hold_minutes: 15
payment_hold_minutes: 60
feed_privacy: full
busy_feed_minutes: 15
manage_route: /booking
reminders:
lead_hours: '24, 1'
followup:
enabled: true
after_hours: 2
retention_days: 0
desk:
enabled: true
route: /desk
waitlist_offer_hours: 12
waitlist_promotion: auto
enabled is Grav’s plugin switch. Disabling it stops the booking storefront, desk and admin section. Existing bookings remain, and order-refund hooks continue to cancel linked bookings.
Related
- Services - where the per-service answers live, which is most of them
- Taking payment - what the two hold lengths and the payment setting mean for the customer
- Calendar sync - the two calendar settings in full
- Configuration - the base plugin's own settings, where the currency, the shop's route and the job queue live
- Notifications - which of the eighteen messages go out, which is not set here