Improved

OnSched API & dashboard 3.7.0 — booking limits, quotas, and allocation capacity

Public docs: Booking limits, Weekly allocations.

Booking limits and service quotas

The platform now enforces configured limits consistently across GET /v3/availability, hold, reserve, book, and reschedule when a customer is known.

Per-customer caps

  • bookingLimit (service or resource) — caps active appointments (BK + IN; not RS) per customer.
  • maxBookingLimit / maxResourceBookingLimit (service) — lifetime caps per customer; rescheduled-away (RE) rows do not count.
  • Expired IN holds are ignored when counting active caps (aligned with availability SQL).
  • Limits are checked on reschedule, including metadata-only updates.

Service-wide daily quotas

  • dailyBookingLimitCount — hides slots on days when the service has reached its booking count cap.
  • dailyBookingLimitMinutes — hides slots when remaining same-day minute headroom is less than the candidate appointment duration.
  • PUT /book re-runs slot validation when confirming a reserved (RS) appointment so exhausted daily quotas cannot be bypassed.

Hold and book alignment

  • allowPaddingOverflow and ignoreExternalEvents chosen at hold or reserve are preserved when the appointment is booked.
  • 0 or omitted = unlimited for numeric limit fields unless noted otherwise.

Weekly allocation same-slot capacity

Corrected weekly allocation capacity semantics for service+resource pair scope:

  • bookingsPerSlot on weekly allocations applies only when both ServiceId and ResourceId scope the allocation.
  • Availability, hold, and book treat pair-scoped bookingsPerSlot as concurrent capacity at the same instant; other slots in the week are unaffected.
  • Weekly allocation routes do not support weekly booking quota fields.
  • Same-slot capacity uses one unit of load per booking (a third consumer is rejected when capacity is 2).

Availability reliability

  • COMBINED hold validation requires every requested resource to be free at the slot (aligned with GET /v3/availability capacity checks).
  • Redis availability cache is cleared when appointments are cancelled and when service or resource settings that affect slot generation change (for example dailyBookingLimitCount, duration, bookingsPerSlot).

Dashboard

  • Service, Resource, and Allocation forms group booking limit fields into labeled sections with inline helper copy that distinguishes same-slot capacity, service daily quotas, and per-customer caps.
  • Unlimited fields display No limit when the API value is 0.
  • Service info exposes customer limit dropdowns for bookingLimit, maxBookingLimit, and maxResourceBookingLimit.
  • Resource info exposes bookingLimit for the current service.
  • Weekly allocations scoped to a resource show the bookingsPerSlot same-slot capacity field when editing service allocation rows.