managed
We hold the credentials
WPIntegrate runs the client-credentials flow for your tenant. Your administrator grants consent once and is not asked again.
Using WordPress? Every integration here is also available as a plugin. Browse the plugin store →
Released component
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.
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
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.
What it does
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.
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.
<wpi-outlook-booking>managed or proxy — the tenant choosesWhere it runs
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.
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
15 capabilities, every one of them resolved from the embed key rather than written into the page.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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
If yours is not here, ask it — the answers come back from a person rather than a form.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.