Using WordPress? Every integration here is also available as a plugin. Browse the plugin store →

Released component

Outlook Booking

Meeting room booking for Outlook, on your own website: the visitor picks a conference room and a time, and the booking lands in that room’s mailbox — no Microsoft Bookings licence.

The component platform is in pre-launch, so Outlook Calendar Room & Resource Booking for WordPress is the route open today — the same Microsoft 365 job, delivered as a WordPress plugin. If the web component is what you need, tell us and we will come back to you.

civic-centre.example/rooms
civic centre
Meeting rooms Exchange room mailboxes · free/busy
Assembly Room Committee 1 Committee 2
09:00 10:00 11:00 13:00 14:00 15:00 16:00 16:30 17:00
Reserve 11:00 The room mailbox joins the meeting as a resource.

Outlook Booking itself, running here on a fictional host — the released bundle from our CDN, loaded the same way your own page would load it. The data behind it is sample data of our own invention; on your site the same component reads your Microsoft 365 tenant.

Putting it on the page

What you paste into the page.

Two lines, and neither of them is a build step. Everything the component shows is resolved from the key at request time, so the markup on the page is the last markup anyone writes.

<script src=https://cdn.wpistatic.com/platform.js async></script>
<wpi-outlook-booking embed-key="your-embed-key"></wpi-outlook-booking>
One loader for every component — it finds the element and fetches this bundle itself. Your own embed key comes from the builder.
  1. The script tag

    One bundle for one component. It defines the custom element and does nothing else — no framework, no build step, and no change to how the rest of the page is built.

  2. The element

    An ordinary HTML tag, placed wherever the component should appear — including inside a page builder’s raw-HTML block, a shortcode, or a template partial.

  3. The embed key

    The key resolves to one configured instance — the Microsoft 365 source, the arrangement, the theme, and the domains allowed to render it. Change any of those and the page itself never has to be edited again.

What it does

How it works

Outlook Booking is meeting room booking that runs on the Outlook calendars you already have. It reads the events already sitting in a room mailbox — or in one person’s calendar — offers the times that are left inside the working hours you set, and writes the confirmed reservation back as an ordinary Outlook meeting with the room attached as a resource. The rooms are the room mailboxes in your own tenant, either listed by address or discovered from the directory. Slot length, how far ahead people may book, minimum notice and the buffers either side are builder settings, so no Microsoft Bookings business has to exist for any of it to work.

Why it exists

Anyone with a mailbox in your tenant can already book a conference room from inside Outlook, and that is not the problem. The problem is everybody else — contractors, members, students, patients, visiting clinicians, the public — who have no seat in your tenant, so the room they need gets requested by email and typed into the calendar by somebody on your side. This puts the same room mailboxes on a public web page and lets them take the slot themselves, with the reservation landing where your staff already look. It is not a workplace booking system: there are no floor plans, no door panels and no check-in. It is the booking form, against the rooms Exchange already owns.

Element
<wpi-outlook-booking>
Reads from
Exchange room and resource mailboxes, Outlook user calendars, Microsoft Graph
Arrangements
2 in the builder
Graph access
managed or proxy — the tenant chooses

Arrangements in the builder

  • Step-by-step wizard
  • Month calendar with a day timeline

Where it runs

Anywhere you can paste two lines of HTML

A custom element needs no build step and no framework, so where your site is built is not a question you have to answer before this one.

  • WordPress
  • Webflow
  • Squarespace
  • Shopify
  • Wix
  • Astro
  • Next.js
  • Drupal
  • SharePoint pages
  • Plain HTML

Named as examples of places HTML can be pasted. No partnership is implied, none of these are customers, and the marks beside them are our own drawings rather than any vendor's logo. WordPress is the one that gets more than an embed — the same Microsoft 365 jobs also ship as plugins with a Gutenberg block.

In detail

Everything Outlook Booking does.

15 capabilities, every one of them resolved from the embed key rather than written into the page.

  1. The rooms are your Exchange room mailboxes

    List each room by its mailbox address, with a display name and a colour of your choosing, or leave the list empty and the component asks Microsoft for the tenant’s rooms when the page loads. Discovery reads the Places directory and needs the Place.Read.All application permission granted by an administrator; without it you paste the addresses in and everything else behaves identically.

  2. The times offered are the times the room is free

    For the room the visitor has chosen, the component reads that room’s calendar for the day and drops every slot the existing meetings cover, plus the buffers either side. It is read at the moment the visitor looks, so there is no cached copy of the calendar to go stale.

  3. The reservation is an ordinary Outlook meeting

    The room mailbox is added to the event as a resource attendee — the same thing Outlook does when a colleague adds a room to a meeting — so Exchange applies whatever booking policy that room already has. The event carries the room as its location, the name the visitor gave in its subject, and their form answers in the body, so whoever opens it in Outlook sees what was asked for.

  4. Book a person instead of a room

    Staff mode points at a single mailbox and books time on that person’s own calendar rather than a room’s: same availability rules, same intake form, no resource attendee. One component covers the meeting room and the appointment.

  5. A wizard, or a month calendar

    The wizard asks one thing per screen — room, date, time, details. The calendar layout shows a month with the rooms’ existing bookings as coloured chips, then a day timeline: click a start time and then a later one to take a two-hour meeting rather than a single slot.

  6. Choose the room first, or last

    In the calendar layout a room selector sits above the month. With no room chosen it plots every room’s bookings at once, colour-coded, against the full working-hours grid; choose a room and the times narrow to that room’s free ones. A visitor who picked a time before picking a room has to choose one in the details form — the button will not submit without it.

  7. Rules you set, not rules Microsoft sets

    Six slot lengths from 15 minutes to two hours, a booking window of up to 180 days, a minimum notice period in hours that hides slots too close to now, and separate buffers of up to two hours before and after each booking.

  8. Working hours, days and timezone

    Opening and closing time, which days of the week accept bookings at all, and the timezone those hours are written in. Each visitor is then shown the resulting slots in their own local time, so somebody reading from another region sees the local equivalent rather than a number that means nothing to them.

  9. Ask what the booking actually needs

    The intake form takes single-line text, multi-line text, email, phone, number, dropdown, checkboxes and radio buttons, each one optionally required. It is deliberately smaller than the Form Builder component: there are no conditional fields, no file uploads and no payment step here.

  10. Where each booking goes afterwards

    The Outlook event is the booking. On top of it, each submission can be emailed to any address, posted to a webhook, appended as a row to an Excel workbook in OneDrive, written as a file per booking into a OneDrive folder, or copied into a second, shared Outlook calendar that a whole office watches. The Microsoft destinations need their own connection and their own admin consent; the email is sent by us and needs neither. All of them are dispatched after the meeting is created, and none of them is what makes the booking real.

  11. Visitors never see what your meetings are about

    The calendar view is drawn from an endpoint that returns start times, end times and which room — subjects, organisers and attendees are never sent to the page. The most a visitor can learn from a busy Tuesday is that the Boardroom is taken at 2pm.

  12. Two visitors, one slot

    A given room and start time can be written once. A second request racing for the same slot loses on a database uniqueness rule and is told the slot was just taken, rather than both meetings being created. Past that point the room mailbox is the arbiter, exactly as it is for an internal meeting.

  13. Confirmation the visitor can keep

    The confirmation step offers a .ics download and a Google Calendar link so the booking reaches their own diary, and an optional button to start a second booking without reloading the page. Whether the room’s own invitation reaches them is a separate switch, and it uses the email address they typed on the form.

  14. Bookings in the dashboard for seven days

    Each booking is listed in the dashboard and exportable as CSV for seven days, then deleted — this platform is a transit buffer, not a records system. The Outlook meeting is permanent and is untouched by that sweep, which is why a destination is worth configuring if you need a record of your own.

  15. Domain allowlist, GTM and custom CSS

    The embed renders only on domains you list, a Google Tag Manager container id can be attached, and custom CSS covers anything the settings do not.

One of these you can have today.

Outlook Calendar Room & Resource Booking for WordPress is on sale in the store now and does this job inside WordPress. The web component is in pre-launch — if that is the delivery you need, tell us and we will come back to you.

Reaching your tenant

Two ways for us to reach Graph. One of them never lets us.

Every tenant runs in one mode or the other, and the choice belongs to your IT rather than to us. It is the reason this works inside organisations that will not delegate Graph access to a vendor.

managed

We hold the credentials

WPIntegrate runs the client-credentials flow for your tenant. Your administrator grants consent once and is not asked again.

proxy

You hold the credentials

You supply a base URL and an API key for your own gateway. We store that key encrypted at rest and never hold a Graph token at all.

Questions

The things people ask before they buy.

If yours is not here, ask it — the answers come back from a person rather than a form.

How do we let people book a meeting room in Outlook from our website?

Paste two lines into the page. The component lists your Exchange room mailboxes, shows when each one is free, and writes the booking back as an Outlook meeting with the room attached as a resource attendee. The visitor needs no Microsoft account and no sign-in of any kind, and nothing about the embed is WordPress-specific — the same two lines work on Drupal, on a static site, or inside another CMS.

How do people book a room in Outlook itself?

From inside Outlook, with a mailbox in your tenant: add the room to the meeting and Outlook checks that room’s mailbox for you. That path is Microsoft’s, it needs nothing from us, and for staff it is the right answer. This component is for the people who cannot take it — anyone without an account in your tenant — and for the times you want the booking to start on a public web page rather than in a mail client.

Do we need a Microsoft Bookings licence?

No. This never calls the Microsoft Bookings API. It reads and writes Outlook calendars and room mailboxes through Microsoft Graph, so what it needs is a Microsoft 365 tenant with room mailboxes in it and one administrator consent covering calendar read/write and sending mail. If you already run a Microsoft Bookings business with services, staff and prices in it, the Bookings component is the one that drives that instead.

Is this a meeting room booking system with floor plans and door panels?

No, and it is better to know that now. There are no floor plans, no tablets outside the door, no check-in or no-show release, no capacity or equipment filters, and no utilisation reporting. The component knows a room’s mailbox address, the display name you give it and a colour. If what you want is a workplace system that manages the building, this is not it. If what you want is a booking form on a public page that writes into the rooms Exchange already owns, this is exactly it.

Where does the booking end up?

In Outlook, as a normal meeting — on the room mailbox itself, or on an organiser mailbox you nominate, with the room as a resource attendee either way. It carries the room as its location, the visitor’s name in the subject and their answers in the body. Because the room is a resource attendee, Exchange applies that room’s own booking policy. The widget shows its confirmation as soon as the meeting is created, so if a room’s policy later declines the request, that is something you see in Outlook rather than something the visitor is told.

Can two people book the same room at the same time?

No. A room and a start time can only be written once: a second request racing for the same slot loses on a database uniqueness rule and is told the slot was just taken. Beyond that window the room mailbox itself is the arbiter, accepting or declining in Outlook exactly as it would for an internal meeting.

Can visitors cancel or reschedule their own booking?

No. There is no cancel link and no reschedule flow in this component. Once the meeting exists, changing it happens in Outlook, by you. Collect an email address on the intake form so you have a way to reach them, and say so in the success message rather than leaving people hunting for a self-service link that is not there.

Will visitors see what our meetings are about?

No. The endpoint the calendar reads returns start time, end time and which room. Subjects, organisers and attendees are never sent to the page, so the most a visitor learns is that a named room is busy at a given hour.

Can it find our meeting rooms automatically?

Yes, when an administrator has granted the Place.Read.All application permission: the builder has a “Discover rooms” button, and an instance left with an empty room list asks Microsoft for the tenant’s rooms at page load. Discovery is a convenience rather than a dependency — paste the mailbox addresses yourself and booking works the same way. Rooms have to exist as room mailboxes, and Microsoft can still return an empty list until the Places directory is enabled in the tenant.

How is this different from the Bookings component?

The Bookings component drives an existing Microsoft Bookings business: its services, its staff, its prices, and Microsoft’s own confirmation emails. This one has no business behind it. It books rooms and calendars directly, which is why the slot length, the notice period and the buffers are settings here rather than inherited, and why no Bookings licence stands in the way. If you are booking conference rooms, this is the one.

Does anyone have to sign in to book?

No — the page is public and the visitor needs no Microsoft account, which is the point of it. What guards the embed is the domain allowlist, which stops it loading anywhere you did not list, and a rate limit on the booking endpoint. There is no captcha in this component, so on a page open to the internet the intake form is what stands between a bot and your diary: keep the room list to rooms you are willing to have booked, and put a destination on it so you see each booking as it arrives.