Skip to main content

Overview

Bookings & Schedules is CXF’s appointment-scheduling system. A host — a Contact, a User, or a Content Instance — publishes its availability, offers one or more bookable event types, and accepts appointments. Slot conflicts, durations, buffers, frequency, and look-ahead windows are all enforced automatically. For the mental model, see Core concepts. It’s built from three connected objects:
  • Schedule — the host’s availability calendar (weekly hours, date overrides, timezone).
  • Booking Template — a bookable event type on a schedule (durations, title, limits).
  • Booking — an actual appointment, optionally with guests.

Where to find it

Bookings & Schedules is an API-only feature — there’s no dedicated admin screen. It’s consumed by booking and funnel front-ends and by integrations through the API: fetch a host’s available slots, create a booking, and let people manage their own bookings.

Schedule

A schedule is a host’s availability calendar.
PropertyTypeRequiredDescription
titlestringYesName of the schedule.
slugstringYesUnique identifier.
descriptionstringNoOptional description.
object_type / object_idreferenceYesThe host that owns the schedule (a Contact, User, or Content Instance).
timezonestringYesThe reference timezone for the availability.
bookings_per_slotnumberNoHow many bookings can share one slot (default 1).
availabilityobjectYesWeekly hours: each weekday → a list of { start_time, end_time } (HH:MM).
overridesarrayNoDate exceptions: { date, start_time?, end_time? }. Omit both times for a full-day block.

Booking Template

A booking template is a bookable event type attached to a schedule.
PropertyTypeRequiredDescription
titlestringYesName of the event type.
slugstringYesUnique identifier.
descriptionstringNoOptional description.
schedule_idreferenceYesThe schedule this event type books against.
default_booking_titlestringYesTitle for created bookings — a Mustache template.
default_durationnumberYesDefault length, in minutes.
durationsarrayNoAllowed durations in minutes (defaults to [default_duration]).
limits.future_bookingsnumberNoHow many days ahead a booking is allowed.
limits.buffer_time.before_booking / .after_bookingnumberNoBuffer minutes padded around each booking.
limits.frequencyobjectNoMax bookings per day / week / month / year, per host.
default_booking_title is a Mustache template — it can reference duration, booking_template, schedule, and scheduler (the host’s name, email, phone).

Booking

A booking is an actual appointment.
PropertyTypeRequiredDescription
template_idreferenceYesThe event type being booked.
object_type / object_idreferenceYesThe host being booked (a Contact or User).
titlestringNoAuto-filled from the template if left blank.
descriptionstringNoOptional description.
durationnumberYesLength in minutes — must be one of the template’s allowed durations.
timezonestringYesUsed to interpret starts_at.
starts_atdatetimeYesStart time (stored in UTC).
ends_atdatetimeAutostarts_at + duration.
statusenumAutopending (default), confirmed, canceled, completed, or missed.
guestsarrayNoOptional guests (Contacts or Users).

Availability & slots

When a front-end asks for a host’s availability, CXF returns the free time slots. It takes each day’s hours (the date’s override if there is one, otherwise the weekday’s weekly hours), removes time taken by existing bookings (expanded by the template’s buffers), and offers slots of the chosen duration. A slot drops out once it reaches bookings_per_slot. Times are timezone-aware: bookings are stored in UTC and the response is already converted to the requested timezone.

Booking rules

Every booking is validated automatically; a request that breaks a rule is rejected:
  • Availability — must fall inside the day’s hours, on a single day.
  • Overrides — can’t fall on a full-day block or outside an override’s hours.
  • Duration — must be one of the template’s allowed durations.
  • Overlap & buffers — respects bookings_per_slot, counting the buffer time around existing bookings.
  • Future window — within limits.future_bookings days.
  • Frequency — within limits.frequency for the host.

Statuses & guests

  • A booking moves through pending → confirmed, and can end as canceled, completed, or missed. Only pending and confirmed bookings hold a slot — the others free it.
  • A booking can carry a guest list (Contacts or Users). Through the contact-facing API, people can list, cancel, and add guests to their own bookings.

Seeds

Bookings & Schedules isn’t currently supported in Seeds.

Governance & permissions

  • A super admin or Master can fully create, edit, and delete schedules, booking templates, and bookings.
  • A Journey Manager user can modify them when their JM App is configured to allow it.

API access

Schedules, booking templates, and bookings each have full CRUD. A per-host availability endpoint returns free slots, and a contact-facing API lets people create a booking and manage their own (cancel, add guests). See the API reference.

Contacts

A common host for schedules and bookings.

Engagement Funnels

Booking flows are often built into funnels.