Post

#PowerPlatformTip 102: 'Event Coordination'

#PowerPlatformTip 102: 'Event Coordination'

TL;DR: Set hideAttendees: true on the event so each attendee only sees themselves. When you add people later, send a Graph PATCH on the event whose body contains only the attendees property: then only the changed attendees get a meeting update, not the whole list. The standard Office 365 Outlook action Send an HTTP request is enough.

💡 Challenge

Registrations for an event come in one by one, and a flow adds each person to the Outlook meeting. With the usual “Update event” approach every change sends an update to all attendees, so early registrants get a mail for every new one. On top, everybody can see the full guest list, which is a privacy problem for public events.

✅ Solution

Microsoft Graph handles both. The event property hideAttendees hides the attendee list: each attendee only sees themselves in the meeting request and the tracking list. And a PATCH that contains only the attendees property sends a meeting update only to the attendees that changed. The flow reads the current list, adds the new person and writes the full list back.

🔧 How It’s Done

1. Hide the attendee list once.

🔸 Send an HTTP request (Office 365 Outlook), Method PATCH, URI https://graph.microsoft.com/v1.0/me/events/{event-id}, Body:

1
{ "hideAttendees": true }

🔸 Do this right after creating the event, before you invite people. Or create the event through Graph with hideAttendees already set.

2. Read the current attendees.

🔸 Send an HTTP request, renamed to Get event, Method GET, URI https://graph.microsoft.com/v1.0/me/events/{event-id}?$select=attendees.

3. Reduce the existing attendees to the fields you write back.

🔸 Select from body('Get_event')?['attendees'] with the map:

1
{ "emailAddress": "@item()?['emailAddress']", "type": "@item()?['type']" }

4. Add the new attendee if not already invited.

🔸 Condition: contains(string(body('Get_event')?['attendees']), triggerBody()?['email']) is false.

🔸 Compose NewList:

1
union(body('Select'), createArray(json(concat('{"emailAddress":{"address":"', triggerBody()?['email'], '","name":"', triggerBody()?['name'], '"},"type":"required"}'))))

5. Write only the attendees back.

🔸 Send an HTTP request, Method PATCH, URI https://graph.microsoft.com/v1.0/me/events/{event-id}, Body:

1
{ "attendees": @{outputs('NewList')} }

🔸 Don’t put any other property into this body. As soon as subject, body, time or other fields are included, the update goes to every attendee.

6. Optional: import the sample flow.

🔸 EventCoordination.json on GitHub.

🎉 Result

New registrants get their invitation, existing attendees get no extra mail, and nobody sees who else is on the list.

🌟 Key Advantages

🔸 Privacy: with hideAttendees, attendees only see themselves.

🔸 No update flood: an attendees-only update reaches only the changed attendees.

🔸 Standard connector: Office 365 Outlook’s Send an HTTP request supports the /me/events and /users/{id}/events segments without premium.

⚠️ Good to Know

🔸 Attendee limit: an event can have up to 500 attendees.

🔸 Distribution lists: removing an attendee who was invited as member of a distribution list sends an update to all attendees.

🔸 Recurring series: updating a series master whose instances were changed separately sends one notification per changed instance.

🔸 Other mailboxes: /users/{id}/events with the Outlook connector works for calendars the connection user has access to. For app-only access across mailboxes you need an Entra app with Calendars.ReadWrite and the premium HTTP actions (see Tip 138).

🎥 Video Tutorial

🛠️ FAQ

1. How do I authenticate the Graph API request?

With the Office 365 Outlook action Send an HTTP request, the flow calls Graph as the connection user, no app registration needed. Use an Entra app with Calendars.ReadWrite only if the flow must work on other users’ calendars without delegated access.

2. What does hideAttendees = true do?

Each attendee only sees themselves in the meeting request and in the meeting’s Tracking list. The organizer still sees everyone.

3. Can I remove attendees silently as well?

Yes, the same way: read the list, filter out the person and PATCH only the attendees property. The meeting update then goes only to the changed attendee, unless the removed person was invited through a distribution list.

🔸 #PowerPlatformTip 138: ‘Graph API via HTTP with Microsoft Entra ID’ - call Graph with the preauthorized HTTP connector when you need more than the Outlook segments.

🔸 #PowerPlatformTip 58: ‘HTTP Actions’ - the general HTTP options in Power Automate.

This tip is by Marcel Lehmann, Microsoft MVP (Business Applications) and founder of the Power Platform Academy – live Power Platform workshops, free or CHF 49. Join the workshop waitlist to get notified about new dates. For companies that want this implemented for them, see KMUpower – Power Platform consulting & automation for SMEs (DACH).

This post is licensed under CC BY 4.0 by the author.

Microsoft and the Power Platform product names (for example Power Apps, Power Automate, Copilot Studio) are trademarks of the Microsoft group of companies. This is an independent website. It is not operated, sponsored or endorsed by Microsoft.