Skip to the documentation
TypeScript

Booking pages

`bookings.listPages`, `getPage`, `createPage`, `updatePage`, `deletePage` and `listTimes` for the pages, and `list`, `listAll`, `iterate`, `get`, `approve`, `decline`, `cancel` and `resendEmail` for the meetings guests book on them.

Every method

bookings.ts
const page = await nextmail.bookings.createPage({  name: 'Intro call',  timezone: 'Europe/Berlin',  config: {    description: 'A first chat about your project.',    durations: [30, 60],    location: { kind: 'video', value: 'https://meet.example.com/hana' },    rules: { bufferAfterMinutes: 15, dailyLimit: 4 },    approval: true,  },}) console.log(page.url, page.status, page.away) const open = await nextmail.bookings.listTimes(page.id, {  from: new Date(),  durationMinutes: 30,})console.log(open.timezone, open.times.slice(0, 5)) for await (const booking of nextmail.bookings.iterate({ view: 'pending', pageId: page.id })) {  console.log(booking.guest.name, booking.guest.email, booking.start)  if (booking.guest.email.endsWith('@example.com')) await nextmail.bookings.approve(booking.id)  else await nextmail.bookings.decline(booking.id, { reason: 'This page is for customers only.' })} const upcoming = await nextmail.bookings.list({ view: 'upcoming', limit: 10 })const [next] = upcoming.itemsif (next?.guestMailFailed) await nextmail.bookings.resendEmail(next.id)if (next) await nextmail.bookings.cancel(next.id, { reason: 'Something urgent came up.' }) await nextmail.bookings.updatePage(page.id, {  status: 'paused',  config: { busy: { outOfOffice: false } },})await nextmail.bookings.deletePage(page.id)

A booking page is a public link, page.url, where a guest picks a free time. Only name is needed to create one: it opens on weekdays from 09:00 to 17:00 with 30 minute meetings. config holds every setting, and updatePage merges what you send: inside location, availability, rules, appearance, guestChanges, busy and seo each field is set on its own, and a list such as durations or availability.weekly is replaced whole.

listTimes answers the start times a guest could book, with the calendar, other bookings and out of office already taken out. page.away lists the out of office periods of config.fromEmail, which close the page unless config.busy.outOfOffice is false. On a page with approval true every booking waits as pending until approve or decline, and cancel calls off a confirmed meeting. All three email the guest.

Reading needs calendar:read. Every change needs calendar:write and emails:send, except deletePage, which needs only calendar:write. A page belongs to one person: an API key reaches the pages of the workspace owner, and a key limited to particular addresses is refused with 422 capability_unsupported.