®Docs

Event types & booking pages

Event types are the bookable meeting templates behind your /book pages and website embeds — each one defines what gets booked, where it happens, who hosts it, and what the client receives.

What an event type controls

Each event type is one kind of meeting clients can book — an initial consultation, a case review, a signing appointment. The editor groups everything into a few cards:

  • Basics — the name clients see, the URL slug that becomes the booking page path (/book/your-firm/initial-consultation — auto-generated from the name, editable any time), a short description, and the duration. Pick a preset (15/30/45/60/90 minutes) or enter any custom length from 5 minutes to 8 hours.
  • Scheduling guardrails — minimum notice (in minutes, hours, or days), how far ahead clients can book, buffers before and after each meeting, and the time-slot interval shown on the booking page.
  • Booking layout — the standard pick-a-time-first flow, or the high-converting layout that captures the lead's phone number before showing any times. Covered in depth below.
  • Custom questions and screening rules — qualify leads on the booking page itself, and turn away the ones you can't serve with a message or redirect of your choosing. Also below.
  • Require host confirmation — when on, new bookings stay pending until the host approves them; the calendar invite and confirmation go out on approval.
  • Appearance — the accent color and light/dark theme of the public booking page, so it matches your site.

Location options

The Location setting decides where the meeting happens. The link or address lands on the calendar invite, confirmation email, and reminders automatically.

  • Calendar default — follows the host calendar's meeting-room setting.
  • Google Meet / Teams — always creates a meeting room. The provider follows the host's connected calendar: Google calendars create Meet rooms, Outlook creates Teams meetings.
  • Zoom — creates a unique Zoom meeting on the host's account for every booking, and the Meeting Agent joins to write the post-call report. See the Zoom guide for setup.
  • In person — enter your street, city, state, and ZIP; the address becomes the meeting location on the invite. Optional arrival info (parking, check-in) rides along in the invite description and under the location line in confirmation and reminder emails.
  • Phone call — choose who places the call. We call the client: attendees see "Phone call — we'll call you at the number you provided." Client calls us: the number you enter becomes the meeting location.
  • Custom link — one static URL (a personal meeting room) used for every booking of this event type.
  • No video link — a clean invite with no meeting link at all.

Team scheduling

  • Single host — one person hosts every booking of this event type.
  • Round robin — bookings rotate across a host pool. The rotation picks the host the moment a slot is booked. Distribution can be equal split (everyone gets the same share) or maximize availability (clients see the most open slots).
  • Collective — all selected hosts attend every booking; the primary host's calendar and Zoom account are used for the invite and meeting link.

Hosts need a connected calendar to receive bookings — and, for Zoom event types, a connected Zoom account. The editor shows each host's connection status as you assign them.

Custom availability

By default, booking pages offer times when the host's calendar is free. Custom Availability adds this event type's own weekly hours on top — for example, keeping consultations to Monday–Friday mornings even when the calendar is otherwise open. Set per-day time ranges in the timezone of your choice; days toggled off are never offered.

Booking layout: Standard vs High-converting

The Booking layout card controls how the booking page collects details and shows times.

  • Standard (the default) — clients pick a date and time first, then fill out the details form. Every existing event type works exactly this way until you change it.
  • High-converting — the form comes first: phone number and name before any time slot is shown. The calendar sits beside the form, visibly locked, with "Please fill out the form before choosing your time slot."

The reason to use High-converting is in the name: the lead is saved as a contact the moment they submit their phone and name — before they ever pick a time. A visitor who fills in their number and then gets pulled into a meeting is no longer a lost lead; they're in your Contacts, phone in hand, ready for follow-up.

To enable it:

  1. Open the event type and find the Booking layout card.
  2. Select High-converting.
  3. Optionally set a Headline ("Book Your Free Consultation" — defaults to the event type name), up to six value bullets shown under it, and a custom consent line.
  4. Save. The booking page and embeds switch immediately.

What the client experiences: phone number and name first; the remaining fields — email, your custom questions, SMS consent — appear instantly as they start typing their name. One Continue unlocks the calendar. Clicking a time shows a Confirm button directly under it; nothing books until they click it, and they can freely change the date or time until they do.

How partial leads behave. A lead who starts but never books becomes a contact with lead status New Lead, marked internally as a booking partial:

  • They do not trigger lead alerts, outbound webhooks, or email sequences — those fire once, only if the booking completes.
  • They are not SMS-consented (the consent checkbox comes later in the form), so they never enter text sequences.
  • If the same person later completes a booking — even weeks later — the same contact is updated, not duplicated, and your usual new-lead notifications fire at that point.

URL-parameter prefill from your landing pages (?phone=…&first_name=…&email=…) works on both layouts; a link carrying phone and name captures the lead on page load.

Custom questions

Ask qualifying questions on the booking page itself. Answers are saved on the booking and shown to your team — no separate intake form needed.

To add questions:

  1. Open the Custom questions card and click Add question.
  2. Write the question label and pick a type: Dropdown, Radio buttons, Checkboxes, Short text, Long text, or Website URL.
  3. Toggle Required as needed, and reorder with the arrows.
  4. For choice questions, add the answer options.

On the standard layout, questions appear on the details form after a time is picked; on the high-converting layout they appear in the first-step form.

Disqualifying answers. Any option on a choice question can be flagged Disqualifies. A lead who picks it is stopped before booking, and you choose what they see per question: Show message (your own copy — "We're built for firms at $10k+/month…") or Redirect to a URL of your choosing. The check runs on our servers, so it can't be bypassed by editing the page.

Where answers go: the booking's Booking Answers section in the meeting details view, and the meeting's tooltip on the contact's activity timeline. Answers are snapshotted with their labels at booking time, so editing a question later never rewrites history.

Screening rules ("Only allow booking for")

Three rules screen leads by their details, independent of any question. Each rule has its own blocked-lead outcome — a message or a redirect — and all of them are enforced server-side.

  • Phone number countries — allow only (or block) specific countries, picked from a searchable flag dropdown. Checked the moment the lead submits their phone number.
  • Business email required — blocks free and disposable mailbox providers (Gmail, Yahoo, Outlook, and thousands more). This one is also checked live: the moment a lead types name@gmail.com, your message appears under the email field so they can switch to their work address before submitting.
  • Timezones — allow only (or block) bookings by the lead's detected timezone, picked from a searchable dropdown with live UTC offsets. Timezones match exactly, and neighboring zones exist (Detroit and New York are separate entries) — add the variants you care about; the search makes it quick.

On the high-converting layout, a blocked lead sees the page advance to a locked calendar with your message overlaid — a clear, final state. With a redirect outcome they're sent straight to your URL.

Guests

Turn on Guests to let the person booking invite others — a spouse, a business partner, a co-counsel — up to the maximum you set (default 5).

Guests are added by email on the booking page and become real attendees on the calendar invite: they receive it in their inbox, can accept or decline, and stay on the event through reschedules. Guests never affect the lead record — the person who booked remains the contact.

Repeats (recurring meetings)

Turn on Repeats to make one booking create a repeating calendar series — a weekly standing check-in, a monthly review on "the second Tuesday," and so on.

  1. Toggle Repeats on and pick a preset — Daily, Weekly on the booked day, Monthly on the booked weekday or date, Annually, Every weekday — or choose Custom for any interval, specific days, and an end (never, after N occurrences, or on a date).
  2. The booking page shows the schedule ("Repeats weekly") before the client books.
  3. When they book, the host's calendar gets a single repeating series, and the invite reflects it.

Requirements and behavior to know:

  • Recurring event types need single-host scheduling and a connected Google or Outlook calendar.
  • Only the first occurrence is availability-checked at booking time; later occurrences follow the series even if something else lands on the calendar.
  • Cancelling or rescheduling affects the whole series, not one occurrence.

Notifications

Each event type controls what the client receives, per channel:

  • Booking confirmation — sent the moment the booking is made, with the calendar invite attached.
  • Reminders — add as many as you need, each with its own timing (minutes, hours, or days before) and its own email and SMS toggles.
  • Cancellation notice — sent if the meeting is cancelled by either side.

SMS goes only to clients who gave consent when booking, and every message includes opt-out language automatically. Message templates are shared firm-wide and editable under Settings.

Share & embed

Every event type has a Share & Embed tab with:

  • The booking link — share it in email signatures, ads, or anywhere else.
  • Embed code — drop the booking widget into your website as an inline section, a popup button, a floating badge, or a plain iframe, with a configurable widget background.
  • A live preview — exactly how the widget renders for visitors, including the widget background color you set for embeds.

After booking

  • Active — whether this event type accepts new bookings. Turning it off hides the booking page immediately; bookings that already exist are unaffected and keep their invites, reminders, and links.
  • Auto-accept the calendar invite for the host — when on, the event shows as accepted on the host's calendar the moment it's booked, so the slot reads as busy without the host clicking anything.
  • Redirect to your own page — send clients to your own confirmation page instead of the standard screen. Covered in depth in the next section.

Redirect to your own confirmation page

In the After booking card, turn on Redirect to your own page after booking and enter a URL. Instead of the standard confirmation screen, clients land on your page — with the full booking context appended as query parameters so you can build a personalized confirmation: greet the client by name, show their time and meeting details, and offer reschedule links.

Always included:

FieldRequiredNotes
bookingIdAlwaysUnique ID of the booking.
eventNameAlwaysThe event type name, e.g. Initial Consultation.
startTimeAlwaysISO 8601 timestamp in UTC, e.g. 2026-08-04T15:30:00.000Z. Convert for display using timezone.
endTimeAlwaysISO 8601 timestamp in UTC.
timezoneAlwaysThe client's IANA timezone chosen at booking, e.g. America/Chicago.
durationAlwaysMeeting length in minutes.
inviteeNameAlwaysThe client's full name as entered.
inviteeFirstNameAlwaysFirst name — ideal for greetings.
inviteeLastNameAlwaysLast name.
inviteeEmailAlwaysThe client's email address.

Included when the booking has them — treat these as optional:

FieldRequiredNotes
inviteePhoneConditionalOnly if the client entered a phone number.
meetingLinkConditionalVideo meetings only — the Meet, Teams, Zoom, or custom join URL.
locationConditionalThe meeting's "where", ready to display: in-person meetings send the address; phone meetings send the call details ("Phone call — we'll call you at the number you provided" or "Phone call — call (555) 123-4567"); video meetings send the platform name (e.g. "Zoom", "Google Meet") alongside meetingLink. Only absent when the event type has no video link. Matches the calendar invite exactly.
locationNotesConditionalIn-person meetings with arrival info — parking, suite, check-in instructions.
hostNameConditionalThe host actually assigned to this booking — the single host, the round-robin winner for rotating teams, or the primary host for collective events.
hostEmailConditionalThe assigned host's email.
hostNamesConditionalCollective events with two or more hosts — the full comma-joined roster.
organizationNameConditionalYour firm's display name.
cancelUrlConditionalLink the client can use to cancel.
rescheduleUrlConditionalLink the client can use to reschedule.

Example — Zoom event type with round-robin hosts. The client booked with a rotating team; hostName is the host the rotation picked for this booking:

URL
https://meridianlaw.com/thank-you
  ?bookingId=b7e9a2c4-5f31-4d8e-9a06-1c2d3e4f5a6b
  &eventName=Initial%20Consultation
  &startTime=2026-08-04T15%3A30%3A00.000Z
  &endTime=2026-08-04T16%3A00%3A00.000Z
  &timezone=America%2FChicago
  &duration=30
  &inviteeName=Maria%20Alvarez
  &inviteeFirstName=Maria
  &inviteeLastName=Alvarez
  &inviteeEmail=maria.alvarez%40example.com
  &meetingLink=https%3A%2F%2Fzoom.us%2Fj%2F85512345678%3Fpwd%3Dabc123
  &hostName=Sarah%20Calloway
  &hostEmail=s.calloway%40meridianlaw.com
  &organizationName=Meridian%20Law
  &cancelUrl=https%3A%2F%2Fapp.superpractice.com%2Fbook%2Fcancel%3Ftoken%3D...
  &rescheduleUrl=https%3A%2F%2Fapp.superpractice.com%2Fbook%2Freschedule%3Ftoken%3D...

Example — in-person meeting. No meetingLink; instead the address and arrival info arrive as location and locationNotes:

URL
https://meridianlaw.com/thank-you
  ?bookingId=c8f0b3d5-6a42-4e9f-8b17-2d3e4f5a6b7c
  &eventName=Estate%20Planning%20Session
  &startTime=2026-08-06T19%3A00%3A00.000Z
  &endTime=2026-08-06T20%3A00%3A00.000Z
  &timezone=America%2FChicago
  &duration=60
  &inviteeName=James%20Porter
  &inviteeFirstName=James
  &inviteeLastName=Porter
  &inviteeEmail=james.porter%40example.com
  &location=500%20Main%20St%2C%20Suite%20210%2C%20Austin%2C%20TX%2078701
  &locationNotes=Free%20parking%20in%20the%20rear%20lot.%20Check%20in%20with%20reception%20on%20the%202nd%20floor.
  &hostName=Daniel%20Reyes
  &organizationName=Meridian%20Law

Example — phone call, "we call the client." The client provided a number; location carries the same message shown on the calendar invite:

URL
https://meridianlaw.com/thank-you
  ?bookingId=d9a1c4e6-7b53-4f0a-9c28-3e4f5a6b7c8d
  &eventName=Free%20Case%20Review
  &startTime=2026-08-07T14%3A00%3A00.000Z
  &endTime=2026-08-07T14%3A30%3A00.000Z
  &timezone=America%2FNew_York
  &duration=30
  &inviteeName=Dana%20Whitfield
  &inviteeFirstName=Dana
  &inviteeLastName=Whitfield
  &inviteeEmail=dana.whitfield%40example.com
  &inviteePhone=%2B15125550142
  &location=Phone%20call%20%E2%80%94%20we%27ll%20call%20you%20at%20the%20number%20you%20provided
  &hostName=Sarah%20Calloway
  &organizationName=Meridian%20Law

Building your page. Read the parameters client-side or server-side. Values are URL-encoded — your framework's query parser decodes them for you. Times are UTC; convert using the timezone parameter. Treat every conditional parameter as optional:

JavaScript
const params = new URLSearchParams(window.location.search)

const firstName = params.get("inviteeFirstName") ?? "there"
const startTime = params.get("startTime") // ISO 8601, UTC
const timezone = params.get("timezone") ?? "America/Chicago"

document.querySelector("#greeting").textContent = `You're confirmed, ${firstName}!`

if (startTime) {
  document.querySelector("#when").textContent = new Date(startTime).toLocaleString("en-US", {
    dateStyle: "full",
    timeStyle: "short",
    timeZone: timezone,
  })
}

// Optional details — only render what arrived
const location = params.get("location")
if (location) document.querySelector("#where").textContent = location

const hostName = params.get("hostName")
if (hostName) document.querySelector("#host").textContent = `Meeting with ${hostName}`

Every value is computed on our servers at the moment the booking is made — the same source that writes the calendar invite and emails — so your confirmation page can never disagree with what the client sees elsewhere.

On this page