Public scheduling

Public scheduling lets admins publish controlled booking links for calendar owners without giving requesters direct calendar access. In personal accounts, the calendar owner is also the admin.

The mental model is:

  1. An admin creates a public link for a calendar owner.
  2. An admin publishes one or more meeting types on that link.
  3. Requesters submit booking proposals through the public page or public API.
  4. Openavail applies owner policy, trust rules, allocations, and calendar availability before a request can become a booking.

Public scheduling is not a separate calendar product. It is another entry point into the same Openavail arbitration layer.

Overview

A public link is the requester-facing URL:

/public/schedules/jane/demo

The dashboard calls this a public link. API types may still call the same resource a boundary.

Each public link belongs to one calendar owner. A customer can create more than one link for the same owner, for example:

/public/schedules/jane/demo
/public/schedules/jane/office-hours

The readable path after the owner prefix is the part you choose in the dashboard.

Setup checklist

Admins can configure public scheduling from Scheduling links in the dashboard. Non-admin workspace members do not see this configuration surface in beta. In personal accounts, this still feels like owner control because the owner is the admin.

  1. Create or choose a public link.
  2. Publish at least one meeting type.
  3. Choose visibility: everyone, verified requesters, or selected audiences.
  4. Optional: add verified domains, requester identities, credentials, and audiences in Trust and Audiences.
  5. Optional: create bookable allocations for the selected meeting type.
  6. Copy the public URL and test it in a private browser window.

If a public link is disabled, requesters see an unavailable-link message. They do not see the internal form state, owner policy, private conflicts, or debugging details.

The create form asks for:

FieldMeaning
OwnerThe calendar owner whose time this link requests.
Link pathThe readable path requesters will use after the owner prefix.

The dashboard composes the owner prefix for you. If the owner prefix is:

/public/schedules/jane/

and you type:

demo

the public URL becomes:

/public/schedules/jane/demo

Pasted full public paths are accepted. The UI normalizes the path before sending it to the API.

Publish meeting types

A meeting type is a public option mapped to one internal meeting class.

The public form uses:

FieldRequester sees it?Notes
NameYesPublic label, such as Intro call.
DescriptionYes, optionalShort context for requesters.
Internal classNoMaps the public option to the owner's meeting class policy.
DurationYesFixed meeting length.
VisibilityIndirectlyControls who can see the option.
Attendee capNoEnforced when the requester submits.
Preempt policyNoCannot be more flexible than the internal class.
Auto-bookNoOnly valid when owner policy allows it.
Show suggested timesYes, when enabledShows safe suggested options, not guaranteed slots.

Click a meeting type row to open its details. Rows are not always open by default, so the list stays compact.

Booking policy

Visibility decides who can see a meeting type:

VisibilityMeaning
EveryoneAny requester using the public link can see it.
Verified requestersOnly requesters with a valid requester credential, and any matching verified-domain context, can see it.
Selected audiencesOnly requesters matching at least one selected audience can see it.

The attendee cap includes the requester. If the cap is 1, the requester cannot add extra guests.

The public preempt policy cannot be more flexible than the mapped internal meeting class. If the internal class is protected, the public option cannot silently replace or move other meetings.

Auto-book skips owner review only where the owner's policy allows it. Otherwise public requests enter the owner approval queue.

Suggested times

Enable Show suggested times when requesters should see safe proposed options on the public form.

Suggested times are computed from Openavail's view of the owner's availability, meeting type policy, allocations, rules, holds, and current bookings. They are cached for speed, but they are not promises.

Openavail rechecks availability before treating a suggested time as real:

  1. The requester opens the public form and sees suggested times.
  2. The requester chooses one and submits.
  3. Openavail validates the selected window again.
  4. If the time is still valid, the request continues.
  5. If the time changed, the requester sees that the suggested time is no longer available.

Use suggested times for requester UX. Do not treat them as calendar holds.

Requester flow

The public requester form asks for:

FieldRequiredMeaning
Meeting typeOptional when free-text requests are allowedThe public option the requester wants.
Your emailYesThe person submitting the request.
Your nameOptionalDisplay context for the owner.
Additional guest emailsOptionalExtra attendees, separated by commas or new lines. The requester is included automatically.
Time windowRequired for structured meeting typesThe range Openavail can search inside.
Reason or messageOptional for structured requests; required for free-text requestsContext for the owner.

After submit, the requester receives a public status link. Anonymous requests may also receive a contact confirmation link. Confirmed requests can enter the owner review queue.

What requesters never see

Public pages must not expose:

  • Internal proposal IDs
  • Private calendar conflicts
  • Hidden meeting types
  • Raw owner availability
  • Audit history
  • Private configuration controls
  • Meeting class internals

The public status page only returns a safe public status, such as pending review, booked, rejected, expired, withdrawn, countered, or needs more information.