Booking pages
Public pages where guests book meetings on a calendar, their open times, and the bookings they take.
Booking pages tools
| Tool | What it does |
|---|---|
| listBookingPages | The person’s booking pages, with their public links and how many bookings are upcoming or wait for approval. |
| getBookingPage | One page in full: lengths, place, weekly hours, dates with other hours, rules, questions, and the out of office periods that close it. |
| createBookingPage | Create a page. Only name is needed, and it takes bookings at once on weekdays from 09:00 to 17:00 unless config says otherwise. |
| updateBookingPage | Change the name, the link, the status or any setting. Send only what changes. status paused stops offering times. |
| deleteBookingPage | Delete a page for good. Its meetings stay on the calendar. A chat always asks first. |
| listBookingTimes | The times a page offers in a window, after the calendar, other bookings and out of office are taken out. |
| listBookings | The meetings guests booked: upcoming, pending, past or ended, for every page or one. |
| getBooking | One booking: the guest, the time, their answers and how it ended if it did. |
| approveBooking | Confirm a booking that waits for approval. The guest gets the invitation. |
| declineBooking | Turn down a booking that waits for approval, with an optional reason for the guest. A chat always asks first. |
| cancelBooking | Cancel a meeting that has not ended, with an optional reason for the guest. A chat always asks first. |
| resendBookingEmail | Send the guest the latest email about their booking again. |
Reading needs calendar:read. Creating or changing a page and approving, declining, cancelling or sending again need calendar:write and emails:send, because the guest is emailed from the address of the page. Deleting a page needs only calendar:write.
A page belongs to one person, so a client reaches the pages of the person it acts for. A client limited to particular addresses is refused, because a page reads the whole calendar.
The tools apply the same rules and refusals as the REST API, and the /booking-pages and /bookings pages of the API reference describe every field of config.
Reference
listBookingPages
List the booking pages of the person: the public links where somebody can book a meeting on their calendar, with how many bookings are upcoming and how many wait for approval.
Inputs
Takes no input.
Also available in
getBookingPage
Read one booking page with every setting: lengths, place, weekly hours, dates with other hours, notice, buffers, questions, and the days it is closed because the person is out of office.
Inputs
idstringRequiredThe booking page, such as bkp_5c1e9a7b3d2f48e6a0b4c7d1, as listBookingPages shows it.
1 to 64 characters
Also available in
createBookingPage
Create a booking page. It is live at once at /book/<slug> with weekdays 09:00 to 17:00 open unless config says otherwise. A person has at most 25 pages.
Inputs
namestringRequiredWhat the page is called, shown to guests as its heading, such as
Intro call.1 to 80 charactersslugstringThe last part of the public link,
/book/<slug>: lowercase letters, digits and hyphens. Left out, it is made from the name. It is unique across OpenEmail.1 to 60 characterstimezonestringThe IANA time zone the working hours are read in, such as
Europe/Berlin, for a new page whoseconfig.availability.timezoneis not sent. Defaults toUTC.1 to 64 charactersconfigobjectThe settings of the page. Send only the parts that change: a top-level value replaces the stored one, and inside
location,availability,rules,appearance,guestChanges,busyandseoeach field is merged on its own. A list (durations,questions,availability.weekly,availability.overrides) is replaced whole.descriptionstringText shown under the name of the page. Basic Markdown works: bold, italic, links and lists.
Up to 2000 charactershostNamestringThe name guests see as the person they meet. Defaults to the name of the account.
Up to 80 charactersdurationsinteger[]The meeting lengths a guest can pick, in minutes, each a multiple of 5 between 5 and 720.
1 to 4 itemsapprovalbooleanTrue holds each new booking as a request until it is approved or declined. False confirms it at once.
fromEmailstringThe address the booking emails are sent from and the calendar events are organised by. It has to be one the owner of the page may send from.
Up to 320 charactersnotifyHostbooleanWhether that address gets an email about each new, moved or cancelled booking.
questionsobject[]What the guest is asked besides their name and email, at most 10.
Up to 10 itemsidstringRequiredA stable key for the answers: 4 to 16 lowercase letters and digits, unique on the page.
name,email,phone,timezoneandstartare taken.Pattern^[a-z0-9]{4,16}$kindstringRequiredtext,long-text,phone,choice(one ofoptions) orcheckbox.One of"text""long-text""phone""choice""checkbox"labelstringRequired- 1 to 120 characters
requiredbooleanRequiredoptionsstring[]RequiredThe answers of a
choicequestion, at least two. Empty for the other kinds.Up to 12 items
confirmationstringText shown to the guest after booking, and added to the confirmation email.
Up to 1000 charactersredirectUrlstringAn
https://page to send the guest to after booking, or empty.Up to 2000 charactersextraGuestsintegerHow many other people a guest may add to a booking, 0 to 10. Each one gets the invitation and every later change. Defaults to 0, which hides the field.
At least 0At most 10locationobjectWhere the meeting happens.
kindstringvideowith a fixed link invalue,phone(the guest is asked for a number),in-personwith the address invalue, ornone.One of"video""phone""in-person""none"valuestringThe
https://link of avideomeeting or the address of anin-personone.Up to 500 characters
availabilityobjectWhen the page offers times, before the calendar is taken out.
timezonestringThe IANA time zone the hours below are read in.
1 to 64 charactersweeklyobject[][]Seven lists, Sunday first, of the hours open on that weekday. An empty list closes the day.
7 to 7 itemsstartintegerRequiredMinutes after midnight the range opens, so
540is 09:00.At least 0At most 1440endintegerRequiredMinutes after midnight the range closes, later than
start.At least 0At most 1440
overridesobject[]Dates with their own hours, at most 180.
dateisYYYY-MM-DDin the time zone of the page, and an emptyrangescloses that date.Up to 180 itemsdatestringRequiredrangesobject[]Required- Up to 6 items
startintegerRequiredMinutes after midnight the range opens, so
540is 09:00.At least 0At most 1440endintegerRequiredMinutes after midnight the range closes, later than
start.At least 0At most 1440
rulesobjectThe limits on which of the open hours are offered.
noticeMinutesintegerHow many minutes ahead a booking has to be made.
At least 0At most 43200horizonDaysintegerHow many days ahead the page offers times, up to 365.
At least 1At most 365intervalMinutesintegerMinutes between two start times, one of 5, 10, 15, 20, 30, 45, 60, 90, 120. Null steps by the length of the meeting.
Can be nullbufferBeforeMinutesintegerMinutes kept free before every meeting, up to 240.
At least 0At most 240bufferAfterMinutesintegerMinutes kept free after every meeting, up to 240.
At least 0At most 240dailyLimitintegerThe most bookings this page takes on one day, up to 50. Null for no limit.
Can be nullAt least 1At most 50
appearanceobjectHow the public page looks.
accentstringThe colour of buttons and the picked day, as
#rrggbb.Pattern^#[0-9a-f]{6}$themestringautofollows the device of the guest, or forcelightordark.One of"auto""light""dark"showAvatarboolean
guestChangesobjectWhat a guest may do from the link in their emails.
cancelbooleanreschedulebooleancutoffMinutesintegerHow many minutes before the meeting those changes close.
At least 0At most 20160
busyobjectWhat counts as busy besides the events the person made and the bookings they already have.
addressesstring[]The addresses whose invitations block time unless declined. Null checks every address the person holds.
Can be nullUp to 50 itemssubscriptionsbooleanWhether events from calendars the person subscribed to block time.
outOfOfficebooleanWhether the page offers no times while
fromEmailis out of office. Defaults to true.Defaulttrue
seoobjectHow the public page presents itself to browsers and search engines.
titlestringThe title of the browser tab and of a search result. Empty uses the name of the page and the host.
Up to 120 charactersDefault""descriptionstringThe summary under the title in a search result. Empty uses the start of the description.
Up to 300 charactersDefault""indexablebooleanWhether search engines may list the page. False, the default, asks them not to.
Defaultfalse
Also available in
updateBookingPage
Change a booking page: its name, its link, pause or resume it, or any setting in config. Send only what changes. Bookings already made keep their time.
Inputs
idstringRequiredThe booking page, such as bkp_5c1e9a7b3d2f48e6a0b4c7d1, as listBookingPages shows it.
1 to 64 charactersnamestringWhat the page is called, shown to guests as its heading, such as
Intro call.1 to 80 charactersslugstringThe last part of the public link,
/book/<slug>: lowercase letters, digits and hyphens. Left out, it is made from the name. It is unique across OpenEmail.1 to 60 charactersstatusstringactivetakes bookings.pausedkeeps the link working but offers no times.One of"active""paused"configobjectThe settings of the page. Send only the parts that change: a top-level value replaces the stored one, and inside
location,availability,rules,appearance,guestChanges,busyandseoeach field is merged on its own. A list (durations,questions,availability.weekly,availability.overrides) is replaced whole.descriptionstringText shown under the name of the page. Basic Markdown works: bold, italic, links and lists.
Up to 2000 charactershostNamestringThe name guests see as the person they meet. Defaults to the name of the account.
Up to 80 charactersdurationsinteger[]The meeting lengths a guest can pick, in minutes, each a multiple of 5 between 5 and 720.
1 to 4 itemsapprovalbooleanTrue holds each new booking as a request until it is approved or declined. False confirms it at once.
fromEmailstringThe address the booking emails are sent from and the calendar events are organised by. It has to be one the owner of the page may send from.
Up to 320 charactersnotifyHostbooleanWhether that address gets an email about each new, moved or cancelled booking.
questionsobject[]What the guest is asked besides their name and email, at most 10.
Up to 10 itemsidstringRequiredA stable key for the answers: 4 to 16 lowercase letters and digits, unique on the page.
name,email,phone,timezoneandstartare taken.Pattern^[a-z0-9]{4,16}$kindstringRequiredtext,long-text,phone,choice(one ofoptions) orcheckbox.One of"text""long-text""phone""choice""checkbox"labelstringRequired- 1 to 120 characters
requiredbooleanRequiredoptionsstring[]RequiredThe answers of a
choicequestion, at least two. Empty for the other kinds.Up to 12 items
confirmationstringText shown to the guest after booking, and added to the confirmation email.
Up to 1000 charactersredirectUrlstringAn
https://page to send the guest to after booking, or empty.Up to 2000 charactersextraGuestsintegerHow many other people a guest may add to a booking, 0 to 10. Each one gets the invitation and every later change. Defaults to 0, which hides the field.
At least 0At most 10locationobjectWhere the meeting happens.
kindstringvideowith a fixed link invalue,phone(the guest is asked for a number),in-personwith the address invalue, ornone.One of"video""phone""in-person""none"valuestringThe
https://link of avideomeeting or the address of anin-personone.Up to 500 characters
availabilityobjectWhen the page offers times, before the calendar is taken out.
timezonestringThe IANA time zone the hours below are read in.
1 to 64 charactersweeklyobject[][]Seven lists, Sunday first, of the hours open on that weekday. An empty list closes the day.
7 to 7 itemsstartintegerRequiredMinutes after midnight the range opens, so
540is 09:00.At least 0At most 1440endintegerRequiredMinutes after midnight the range closes, later than
start.At least 0At most 1440
overridesobject[]Dates with their own hours, at most 180.
dateisYYYY-MM-DDin the time zone of the page, and an emptyrangescloses that date.Up to 180 itemsdatestringRequiredrangesobject[]Required- Up to 6 items
startintegerRequiredMinutes after midnight the range opens, so
540is 09:00.At least 0At most 1440endintegerRequiredMinutes after midnight the range closes, later than
start.At least 0At most 1440
rulesobjectThe limits on which of the open hours are offered.
noticeMinutesintegerHow many minutes ahead a booking has to be made.
At least 0At most 43200horizonDaysintegerHow many days ahead the page offers times, up to 365.
At least 1At most 365intervalMinutesintegerMinutes between two start times, one of 5, 10, 15, 20, 30, 45, 60, 90, 120. Null steps by the length of the meeting.
Can be nullbufferBeforeMinutesintegerMinutes kept free before every meeting, up to 240.
At least 0At most 240bufferAfterMinutesintegerMinutes kept free after every meeting, up to 240.
At least 0At most 240dailyLimitintegerThe most bookings this page takes on one day, up to 50. Null for no limit.
Can be nullAt least 1At most 50
appearanceobjectHow the public page looks.
accentstringThe colour of buttons and the picked day, as
#rrggbb.Pattern^#[0-9a-f]{6}$themestringautofollows the device of the guest, or forcelightordark.One of"auto""light""dark"showAvatarboolean
guestChangesobjectWhat a guest may do from the link in their emails.
cancelbooleanreschedulebooleancutoffMinutesintegerHow many minutes before the meeting those changes close.
At least 0At most 20160
busyobjectWhat counts as busy besides the events the person made and the bookings they already have.
addressesstring[]The addresses whose invitations block time unless declined. Null checks every address the person holds.
Can be nullUp to 50 itemssubscriptionsbooleanWhether events from calendars the person subscribed to block time.
outOfOfficebooleanWhether the page offers no times while
fromEmailis out of office. Defaults to true.Defaulttrue
seoobjectHow the public page presents itself to browsers and search engines.
titlestringThe title of the browser tab and of a search result. Empty uses the name of the page and the host.
Up to 120 charactersDefault""descriptionstringThe summary under the title in a search result. Empty uses the start of the description.
Up to 300 charactersDefault""indexablebooleanWhether search engines may list the page. False, the default, asks them not to.
Defaultfalse
Also available in
deleteBookingPage
Delete a booking page for good. Its public link stops working and guests can no longer change their bookings, but the meetings already booked stay on the calendar.
Inputs
idstringRequiredThe booking page, such as bkp_5c1e9a7b3d2f48e6a0b4c7d1, as listBookingPages shows it.
1 to 64 characters
Also available in
listBookingTimes
List the times a booking page offers in a window, after working hours, the calendar, other bookings, buffers and out of office are taken into account.
Inputs
idstringRequiredThe booking page, such as bkp_5c1e9a7b3d2f48e6a0b4c7d1, as listBookingPages shows it.
1 to 64 charactersfromstringThe start of the window as an ISO 8601 instant. Defaults to now.
Formatdate-timetostringThe end of the window. Defaults to 14 days after
from, and at most 62 days after it.Formatdate-timedurationMinutesintegerThe meeting length in minutes, one of the
durationsof the page. Defaults to the shortest.At least 1
listBookings
List the meetings guests booked: upcoming, waiting for approval, past, or declined and cancelled.
Inputs
viewstringupcoming(confirmed and not over, the default),pending(waiting for approval),past, orended(declined and cancelled).One of"upcoming""pending""past""ended"pageIdstringOnly the bookings of this page.
1 to 64 characterslimitintegerHow many to return, 30 by default and at most 100.
At least 1At most 100cursorstringThe
nextCursorof the previous page.1 to 256 characters
Also available in
- API
GET /bookings- TypeScript
bookings.list()bookings.listAll()bookings.iterate()- Python
bookings.list()bookings.list_all()bookings.iterate()- Ruby
bookings.listbookings.list_allbookings.iterate- PHP
bookings->listbookings->listAllbookings->iterate- Go
Bookings.ListBookings.ListAllBookings.Iterate- Java
bookings().listbookings().listAllbookings().iterate- C#
Bookings.ListAsyncBookings.ListAllAsyncBookings.IterateAsync
getBooking
Read one booking: who booked, when, their answers, and how it ended if it did.
Inputs
idstringRequiredThe booking, such as bkg_2b8d4f6a1c3e5079b6d8f0a2, as listBookings shows it.
1 to 64 characters
Also available in
- API
GET /bookings/{id}- TypeScript
bookings.get()- Python
bookings.get()- Ruby
bookings.get- PHP
bookings->get- Go
Bookings.Get- Java
bookings().get- C#
Bookings.GetAsync
approveBooking
Approve a booking that waits for approval. The hold on the calendar becomes a confirmed meeting and the guest gets the invitation by email.
Inputs
idstringRequiredThe booking, such as bkg_2b8d4f6a1c3e5079b6d8f0a2, as listBookings shows it.
1 to 64 characters
Also available in
declineBooking
Decline a booking that waits for approval. The time is freed and the guest is told by email, with the reason if one is given.
Inputs
idstringRequiredThe booking, such as bkg_2b8d4f6a1c3e5079b6d8f0a2, as listBookings shows it.
1 to 64 charactersreasonstringA sentence for the guest, at most 500 characters, included in the email they get.
Can be nullUp to 500 characters
Also available in
cancelBooking
Cancel a booked meeting that has not ended. The calendar event is cancelled and the guest gets the cancellation by email, with the reason if one is given.
Inputs
idstringRequiredThe booking, such as bkg_2b8d4f6a1c3e5079b6d8f0a2, as listBookings shows it.
1 to 64 charactersreasonstringA sentence for the guest, at most 500 characters, included in the email they get.
Can be nullUp to 500 characters
Also available in
resendBookingEmail
Send the guest the latest email about their booking again, such as a confirmation that failed to send.
Inputs
idstringRequiredThe booking, such as bkg_2b8d4f6a1c3e5079b6d8f0a2, as listBookings shows it.
1 to 64 characters