“I’ve got multiple calendars to synchronise, can I somehow forward every event invitation to all calendars, maybe with a Power Automate flow?”
If you work for multiple companies, it’s quite common to have also multiple mailboxes. And with multiple mailboxes come also multiple calendars that various colleagues will access. Which can be a problem when looking for an available meeting time… How do you make sure that the calendars are synchronised? That users won’t book a time slot that’s already occupied in the second calendar? That each event invitation will appear instantly also in the other calendars?
Forward the invitation with a flow
There’s already an article on forwarding your events to other users, but that works only for events you created. If you’re not the initiator you can’t update it, you can’t extend the invitation directly. You must forward the event as you normally do manually.
Since you can do it, there’s a high chance Power Automate can do it for you as well, even though there’s no dedicated action to “Forward an event”. As many times before, the trick is in using an HTTP request, this time to the Graph API.
Add the Office 365 Outlook action “Send an HTTP request” to your flow and configure it with the HTTP request below.
URI:
https://graph.microsoft.com/v1.0/me/events/<eventId>/forward
Method:
POST
Body:
{
"ToRecipients": [
{
"emailAddress": {
"address": "<emailAddressToForward>"
}
}
]
}
If you need to forward it to multiple email addresses add multiple objects in the “ToRecipients” array, e.g.
{
"ToRecipients": [
{
"emailAddress": {
"address": "<emailAddressToForward>"
}
},
{
"emailAddress": {
"address": "<emailAddressToForward2>"
}
}
]
}
That’s it, you just forwarded the event to as many other calendars as needed.
Summary
Since there’s no dedicated action to forward an event in Power Automate, you must resend the invitation via Graph API. All you need is the event id (from the trigger) and the email addresses for forwarding. A flow with two actions that’ll keep all your calendars up to date, at least until somebody starts rescheduling these events…
Hi
This is very cool. It works as long I don’t delete items in my own “Source” Calendar. The deleted object is no longer accessible by the graph and therefore the request fails. That’s something to fetch. Somehow 🙂
Hello Stefan,
that’s right, if the event doesn’t exist in the calendar it can’t be forwarded. 🙂
How with this flow can prevent loop when you schedule an event, because when you are invited to an event all is well
Hello Volodymyr,
the only reliable way to prevent loops is to always use only one-way syncs, otherwise you’ll get crazy while trying to avoid them…
Can you also include the location here? Ex. Want to include a zoom link – is that possible?
Hello Oscar,
it’ll forward the whole event, with all the information inside. If you create an event an it’ll contain Zoom link then users will receive it as well.
Is it possible to include an IF condition to check if the event invitation has an attachment?
Because I don’t wan’t the event to be forwarded if it has an attachment (client documents/assets must not be forwarded anywhere)
Hello Adrian,
the check would have to be before you forward the event, I’d check the outputs of the trigger action or use the ‘Get event’ action to check whether it tells you anything about attachments.
I’m trying to send this to multiple variable contacts. The contacts are variable and the number of people that require the invite are also variable.
So one week, i could need to send to person A, B, C and D, and the following week only people E, F and G. Or more.
Using an apply to each loop and append to array variable gives me a weird output (below).
Any ideas?
[
“{\n \”emailAddress\”: {\n \”address\”: \”Email1@email.com\”\n }\n }\n ]\n},”,
“{\n \”emailAddress\”: {\n \”address\”: \”Email2@email.com\”\n }\n }\n ]\n},”,
“{\n \”emailAddress\”: {\n \”address\”: \”Email3@email.com\”\n }\n }\n ]\n},”,
“{\n \”emailAddress\”: {\n \”address\”: \”Email4@email.com\”\n }\n }\n ]\n},”,
“{\n \”emailAddress\”: {\n \”address\”: \”Email5@email.com\”\n }\n }\n ]\n},”,
“{\n \”emailAddress\”: {\n \”address\”: \”Email6@email.com\”\n }\n }\n ]\n},”,
“{\n \”emailAddress\”: {\n \”address\”: \”Email7@email.com\”\n }\n }\n ]\n},”,
“{\n \”emailAddress\”: {\n \”address\”: \”Email8@email.com\”\n }\n }\n ]\n},”,
“{\n \”emailAddress\”: {\n \”address\”: \”Email9@email.com\”\n }\n }\n ]\n},”,
]
Hello Jon,
I’d check the type of the variables, this seems like you’re using String variables when you should be using Array/Object variables instead.
hi, I’m using this and it works but it sends the emails in a loop… I keep on getting these emails until I turn the automation off
Hello Kristof,
there isn’t much I can do about that, if it loops you must find why it loops and take care of it.
I have the same problem, did you find a solution?
There is no option by any change to stop the workflow after step 2 is completed? Since it everytime the same invite that is forwared.
hi! what if I want to forward an event from another calendar /account I’m a delegate of?
I tried going with:
https://graph.microsoft.com/v1.0/users/{UID}/calendar/events/@{variables(‘calID’)}/forward
but got a permission denied…
any ideas?
Hello Adrian,
no ideas, never needed to do that.
What happens if one or more of the events get rescheduled? Does the event ID change?
Great article!
I’ve tried it, but for some reason the recipient received .eml file with calendar file (.ics) file attached to it?
Is there a way to forward the calendar entry directly? so that the recipient can see the entry on their calendar?
Thanks
HTTP Error 411. The request must be chunked or have a content length.