Integrations & API
Microsoft Bookings connector for Power Automate
Every trigger and action in the Microsoft Bookings (Preview) connector, its licence class, the 5-flow and admin-only limits, known issues and common flows.
Last updated 9 sources
The Microsoft Bookings connector is the only event source Microsoft offers for Bookings. It has three triggers (appointment created, updated, cancelled) and a single action that lists the booking pages you administer, so it can react to appointments but can't create, change or cancel them. As of October 2026 it's still labelled Preview, it's a Standard connector, only an Administrator on the booking page can build flows with it, and each booking mailbox allows five flows in total.
At a glance#
| Item | Detail (as of October 2026) |
|---|---|
| Name in the designer | Microsoft Bookings (Preview), published by Microsoft Corporation |
| Class | Standard in Power Automate, Power Apps, Logic Apps and Copilot Studio |
| Not available in | GCC, GCC High, DoD and 21Vianet (Power Automate, Power Apps, Copilot Studio); Azure Government, Azure China and DoD (Logic Apps) |
| Prerequisite | A licence that includes Bookings, and a Microsoft Entra ID sign-in |
| Who can build appointment flows | Administrator role on that booking page. Team Member, Scheduler, Viewer and Guest can't, and tenant admin rights don't count |
| Flow cap | 5 per booking mailbox, shared by every admin. The sixth returns HTTP 429 |
| Throttling | 100 API calls per connection per 60 seconds |
| Connection | Not shareable. Each user who opens a shared app creates their own |
| Booking pages covered | Shared booking pages only |
Triggers#
| Trigger (exact name) | Operation ID | Fires when | Gotchas |
|---|---|---|---|
| When a appointment is Created | CreateAppointment | The first customer books a slot, on the page or when staff add it in the calendar | Spelled that way in the connector. In a group service only the first attendee fires this |
| When an appointment is Updated | UpdateAppointment | An appointment changes, including a second or later attendee joining a group slot | The payload doesn't say what changed. Users report it not firing at all for some edits |
| When an appointment is Cancelled | CancelAppointment | An appointment is cancelled | CancelReason isn't populated for one-to-one bookings |
Each trigger takes two required parameters: Booking page (SMTPAddress), which you pick from a list or type, and change_type, an array described only as "Changes to listen on". Microsoft doesn't document its values; the designer fills it in. The booking page list only shows pages you administer and have opened recently. If yours is missing, open it once in the Bookings web app or choose Enter custom value and paste the address shown under the page's Integrations area for Power Automate. One user on Microsoft Q&A saw that address with %40 in place of @; it's still the booking mailbox address, not your own.
The action#
List Booking Businesses where user is an admin (ListBookingsBusinessUserAsAdmin) returns a mailboxes array, each with displayName and email (the booking mailbox SMTP address). It's useful for picking a page dynamically, and nothing else. The connector page's introduction says it exposes "all appointment booking actions - like Create/Update/Delete of Bookings". The action list on the same page shows that isn't true.
What the triggers return#
All three triggers return the same AppointmentData object. Which fields are filled depends on whether it's a one-to-one or a group service.
| Fields | Filled for | Note |
|---|---|---|
CustomerName, CustomerEmail, CustomerPhone, CustomerNotes, CustomerTimeZone, CustomerId, CustomerLocation.* | One-to-one bookings | One of the two Microsoft pages says "Custom Notes" aren't populated for one-to-one bookings (see below); it doesn't say which field it means |
Customers[] with Name, Email, Notes, TimeZone, Location.*, Answers[] | Group bookings | Loop over it with Apply to each |
CustomQuestionAnswers[] with Question, QuestionID, Answer, AnswerOptions, SelectedOptions, IsRequired | One-to-one bookings | Group attendees' answers are in Customers[].Answers |
SelfServiceAppointmentId | Every appointment | The ID to key on. Microsoft says it's set for online, in-person, staff-booked and customer-booked appointments |
Id | Every appointment | Deprecated. An Exchange ID that isn't unique across triggers |
ServiceId, ServiceName, ServiceNotes, StartTime, EndTime, Duration | Every appointment | |
StaffMembers[] with DisplayName, EmailAddress, Id | Every appointment | An array because a service can have several hosts |
JoinWebURL | Online services | The Teams link |
TrackingData | When the booking link had ?RefID= | The only attribution value Bookings records |
FilledAttendeesCount, MaxAttendeesCount, IsSMSNotificationsEnabled, AdditionalInfo, CancelReason | Every appointment | CancelReason empty for one-to-one bookings |
The field-by-field use of this payload in a real flow (normalising one-to-one and group bookings, picking one custom answer) is worked through in the Power Automate CRM guide.
Known issues and where the Microsoft pages disagree#
Microsoft documents the connector in two places: the connector reference and a Bookings article on Power Automate integration. They overlap but don't match.
| Issue | Connector reference | Bookings article |
|---|---|---|
| Fields not populated | Cancel Reason for one-to-one bookings | Cancel Reason and "Custom Notes" for one-to-one bookings, without naming the field |
| Server error on flow creation | Listed as 502 Bad Gateway | Listed as 500 internal server error |
| Errors hidden in the portal | Not mentioned | "The errors that might occur during creation of a flow don't appear in the flow portal" |
| Example flows | Stripe payments, Zoom meetings, Dynamics 365 Sales Insights | Dynamics 365 Sales Insights only (the Zoom example survives only in the introduction) |
Both pages say fixes are coming "soon" or "in the next release". As of October 2026 neither page records that any shipped.
The documented error codes when saving a flow:
| Code | Meaning |
|---|---|
| 401 | Problem with the connection's authentication; re-create it |
| 403 | You aren't an Administrator on that booking page |
| 403 "Notification URL domain not a part of allowed list" | Listed without a fix; contact Microsoft 365 support |
| 429 | The booking mailbox already has five flows |
| 500 / 502 | Backend error; report it to support with the error details |
Problems users report that Microsoft doesn't document: the Updated trigger showing no runs while Created and Cancelled work (two Microsoft Q&A threads, 2024 and 2025, with a March 2026 comment still asking for a fix), flows that only started triggering after SMTP was enabled on the booking mailbox, and invalid_grant errors in tenants with Conditional Access. Each is worked through in why a Bookings trigger isn't firing.
Licensing#
Because the Bookings connector is Standard, the Power Automate rights that come with Microsoft 365 are enough to use it; Microsoft describes even the free tier as covering "standard connectors only". The licence question comes from what else the flow connects to. On Microsoft Learn, as of October 2026:
| Connector you add | Class in Power Automate |
|---|---|
| Office 365 Outlook, Microsoft Teams, SharePoint, Excel Online (Business) | Standard |
| Microsoft Dataverse | Premium |
| Salesforce | Premium |
| HubSpot CRM (Independent Publisher) | Premium, community-maintained |
| Zoom Meetings (Independent Publisher) | Premium, community-maintained |
The HTTP action, which you need to forward a booking to Zapier, your own API or the Graph API, depends on your plan; check Settings > View my licenses before you design around it.
Common flows#
| Goal | Trigger | Main actions | Licence | Where it's covered |
|---|---|---|---|---|
| New booking to a CRM | Created, plus Updated and Cancelled | Find or create the contact, log the meeting keyed on SelfServiceAppointmentId | Premium (CRM connector) | CRM guide |
| Alert in a Teams channel | Created | Post message in a chat or channel | Standard | Teams channel alerts |
| Alert in Slack | Created | Slack Post message (V2) | Check the Slack connector in your plan | Slack notifications |
| Hand the booking to Zapier or Make | Created | HTTP POST to a catch hook | Depends on HTTP | Zapier options |
| Log bookings to Excel or SharePoint | Created, Cancelled | Add a row or list item | Standard | Reporting in Excel |
| Server-side GA4 event | Created | HTTP to the GA4 Measurement Protocol | Depends on HTTP | GA4 tracking |
| Send a payment link | Created | Create a link in Stripe or your billing tool, email it | Depends on connector | Payments |
| Create a Zoom meeting | Created | Zoom Create Meeting, email the join link | Premium | Bookings and Zoom |
Working within the flow cap#
The cap is per booking mailbox, not per person, and old test flows count. A layout that leaves room: one flow per trigger (three), one spare for alerts and one for testing. When you need a second outcome from the same event, add actions to the existing flow instead of creating another. Because the connection can't be shared, the flow stops if its owner leaves or loses the Administrator role, so build it under an account your organization will keep.
When the connector can't do the job (government clouds, writing appointments, or reconciling missed updates), the Microsoft Graph Bookings API is the fallback, and Bookings webhooks and alternatives compares the options.
Doing this with BookingsXP#
For bookings made through the BookingsXP widget on your site, BookingsXP can send each one as a signed booking.created webhook, including the UTM source and click ID the connector can't see. That path needs no Bookings Administrator role and doesn't use any of the five flows, but it only covers widget bookings, not ones staff add in the calendar or ones made on the booking page Microsoft hosts. See webhooks. BookingsXP is independent and not affiliated with or endorsed by Microsoft.
- AnswerWhy isn't my Power Automate Bookings trigger firing?
- GuideMicrosoft Bookings to a CRM with Power Automate
- AnswerDoes Microsoft Bookings support webhooks?
- AnswerIs there a Zapier integration for Microsoft Bookings?
- AnswerMicrosoft Bookings to HubSpot, Salesforce or Dynamics
- AnswerHow to get Microsoft Bookings notifications in Slack
- AnswerMicrosoft Bookings new booking alerts in a Teams channel
- AnswerHow do I track Microsoft Bookings conversions in GA4?
- GuideReport on Microsoft Bookings in Excel (export and pivots)
- AnswerCan Microsoft Bookings use Zoom instead of Teams?
Questions people also ask
Sources
- Microsoft Learn (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Power automate integration (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Power automate licensing (opens in a new tab) · learn.microsoft.com
- Microsoft Learn (opens in a new tab) · learn.microsoft.com
- Microsoft Learn (opens in a new tab) · learn.microsoft.com
- Microsoft Learn (opens in a new tab) · learn.microsoft.com
- Microsoft Learn (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Bookings when an appointment is updated (preview) (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Using bookings with power automate (opens in a new tab) · learn.microsoft.com
Edit or question? hello@bookingsxp.com