Help Center

Docs

Resources

Bookable rooms and equipment that automatically lock when a booking page that requires them is booked.

What a Resource Is

A room, piece of equipment, or other physical asset that should be reserved alongside a meeting.

When a booking page requires a resource, every confirmed booking against that booking page also locks the resource for the booking's start/end window. The database prevents double-booking via a GiST EXCLUDE constraint — so two booking pages pointing at the same conference room cannot both succeed for an overlapping slot, even under high concurrency where two bookers click Confirm at the exact same instant. Whichever booking inserts first wins; the second booker sees a 409 with code RESOURCE_TAKEN and is prompted to pick another time.

Resources are an admin-only concept. Only users with scheduler.admin can create, edit, or delete resources. Hosts can attach existing resources to their own booking pages as long as they have scheduler.edit on the booking page.

Creating a Resource

From Admin → Resources, click New Resource and fill in the fields.

1

Open Admin → Resources.

Click New Resource. The form opens inline at the top of the list.
2

Fill in the basics.

Name (required), Type (Room, Equipment, or Other), Capacity (rooms only), Location (free-form text or address), and Description (optional notes for hosts).
3

Save.

The resource appears in the list immediately. New resources are Active by default.
4

Attach to booking pages.

Open the booking page editor (Admin → Booking Pages) and link the resource as Required (every booking locks it) or Preferred (best-effort — booking succeeds even if it's taken).

Resource Fields

FieldDescriptionType
Name*Friendly name shown to hosts and on the booking confirmation. Up to 200 characters. Example: "Conference Room A — Building 3".text
Type*room | equipment | other. Used for filtering, the colored badge in the resource list, and reporting.select
CapacityFor rooms only. Maximum occupancy. Surfaced on the booking page and in the host email when relevant.number
LocationPhysical address, room number, or building. Appended to the calendar event location for in-person bookings so attendees know where to go.text
DescriptionOptional notes shown to hosts when picking which resource to attach. Use this for amenities ("whiteboard, 65-inch TV, hardwired ethernet"), access notes, or any context the booking page editor should see.text
ActiveToggle off to remove the resource from new selections without deleting historical bookings. Existing booking pages still show the resource attached, but new bookings won't lock it. Use this when a room is under maintenance or a piece of equipment is being retired.boolean

Attaching Resources to Booking Pages

Required vs. preferred — and what happens at booking time.

  • Required — the booking must lock the resource for its full start/end window. The availability dispatcher intersects required-resource busy time, so a slot becomes unavailable when the host is free but the room isn't. If a race happens at the database level, the second booker gets 409 RESOURCE_TAKEN and is asked to pick another slot.
  • Preferred — best-effort. The booking succeeds even if the resource is already taken; the resource is locked when free. Use this for nice-to-have equipment (e.g., a portable whiteboard) where the meeting can still happen without it.
  • A booking page can attach multiple resources — e.g., Conference Room A required + a specific demo laptop required. Both are checked at availability time and both must be free for the slot to surface as bookable.

How Availability Computes Resource Conflicts

What the booker actually sees on the booking page.

When a booker loads a booking page with required resources, the availability engine evaluates four sources of busy time: existing bookings on the host's booking pages, synced calendar events from Google or Microsoft, CRM activities, andresource bookings for every required resource on this booking page. A slot only appears if all four sources are free for the meeting's full duration plus any configured buffer. So two booking pages that share a conference room and a host can't both display the same 2:00 PM slot — whichever resource is busy first removes the slot.

Resolving Conflicts

What to do when you need to free a resource.

If a host needs to free a resource (for example, to reschedule another meeting onto the same room), the only safe path is to cancel or reschedule one of the conflicting bookings. Cancelling a booking automatically releases its resource lock; rescheduling moves the lock to the new time. The unique GiST EXCLUDE guarantee on theresource_bookings table means manual edits to that table are not safe — always go through the meeting cancellation or reschedule flow from Bookings or the booker's management link.

Deleting a resource that's currently attached to active booking pages will fail with a 409. Detach it from each booking page first (or mark it Inactive to keep historical bookings intact while preventing new ones).

Permissions

  • scheduler.admin — required to create, edit, or delete resources. By default, only Super Admin and Admin roles have this scope.
  • scheduler.edit — required to attach an existing resource to a booking page from the booking-page editor.
  • scheduler.view — required to see the resources list page.

Troubleshooting

A booker got “RESOURCE_TAKEN”

Two bookers picked the same slot at the same instant on a booking page with a required resource. The database accepted only one; the second is prompted to choose another time. This is working as designed — no double-booking can slip through.

A slot looks available on the host's calendar but not on the booking page

A required resource is busy at that time. Check Bookings (or the resource owner's scheduler) for a conflicting booking on the same room or piece of equipment.

I can't delete a resource

Detach it from every booking page first, or mark it Inactive instead. Inactive resources don't lock new bookings but keep historical resource_bookings intact for reporting.