Groups
Groups allow multiple users to share a single booking page with combined availability and automatic assignment.
How groups work
- Groups are synced from your OIDC provider (e.g., Keycloak
groupsJWT claim) - A group event type shows slots where any group member is free
- When a guest books, the booking is assigned to the least-busy available member (round-robin)
- Each member’s CalDAV calendar and existing bookings are checked independently
Group sync (OIDC)
Groups are created automatically from the groups claim in the OIDC ID token:
- User logs in via SSO
- calrs reads the
groupsclaim from the JWT - Groups are created if they don’t exist (leading
/stripped from Keycloak paths) - User is added to their groups and removed from groups they no longer belong to
Groups are only available with OIDC authentication. Local-only users cannot be in groups.
Creating group event types
From the dashboard:
- Click + New under “Group event types”
- Select the group from the dropdown (only groups you belong to are shown)
- Fill in the event type details (same as individual event types)
Public group pages
- Group profile:
/g/group-slug— lists all enabled group event types - Slot picker:
/g/group-slug/meeting-slug— shows slots where any member is free - Booking:
/g/group-slug/meeting-slug/book?date=...&time=...
Round-robin assignment
When a booking is submitted for a group event type:
- calrs finds all group members
- For each member, checks if the slot is free (no calendar events or bookings in the buffer window)
- Among available members, picks the one with the fewest confirmed bookings
- The booking is assigned to that member
- If no member is available, the booking is rejected
Dashboard
Group event types appear in a separate “Group event types” section on the dashboard, showing the group name and a link to the public page.
Keycloak setup
In your Keycloak realm:
- Create groups under Groups (e.g., “Sales”, “Engineering”)
- Assign users to groups
- Add a
groupsmapper to your client:- Mapper type: Group Membership
- Token claim name:
groups - Add to ID token: ON
- Full group path: ON (calrs strips the leading
/)