What this does is find all the users in your company (more after the flow on that) then for each of them it sends a request to Microsoft to add the event into their calendar:

Users
You can leave the number blank if your firm has under 1000 employees, otherwise it's wise to overshoot the amount of users here by a fair bit. So I did that as an example, just in case, as I have 9.
Optional Users
If you really want to future proof it make a userLimitVAR integer variable with an initial setting of 1000, a Do until action (with the Users action inside) that runs until the length() of the Users action is not equal to the userLimitVAR, and at the end of each loop inside that, add 1000 to the userLimitVAR. If you wish to count the users you can also populate a userCountVAR that contains that length(). Then pipe the Users result into a set variable for a usersARR array variable also at the end of the loop. All this does is ensure that you'll always get all the users.
Send an HTTP request (Office 365 Groups)
This is the meat of what you wanted to do, this HTTP request creates an event for whichever User Id you enter in the URI field, but it needs the JSON data to make it with.
It essentially performs the same action for any user that you would accomplish using the Office 365 Outlook connector's Create Event action. If you wanted to use this method to do that, you would replace the "users/id/" part with "me/" instead.
URI
The URI field here is:
https://graph.microsoft.com/v1.0/users/%7B@{items('Apply_to_each')?['Id']}%7D/calendar/events
The "@{items('Apply_to_each')?['Id']}" bit is representative of the graphical 'User id' that you see in the above image. If you have your Apply to each action named the same, then you might be able to paste that straight into the field without issue, but no guaruntees.
Body
The Body field is:
{
"subject": "Eliot's Test Event",
"body": {
"contentType": "HTML",
"content": "Call link: https://aka.ms/mmkv1b Submit a question: https://aka.ms/ybuw2i"
},
"start": {
"dateTime": "2022-05-15T17:00:00",
"timeZone": "UTC"
},
"end": {
"dateTime": "2022-05-15T17:05:00",
"timeZone": "UTC"
},
"location": {
"displayName": "Skype for Business"
}
}
This is taken from the example given on the Graph Explorer page (when you can try things like this out), but there are further examples on the documentation pages, here.
Extra Data?
If you have extra information that you wish to include, or retrieve dates/subjects/information from a list or something, just subsume this into your logic.
If you need something more complex, then you'll need to show us your flow as it is. But I reckon you can slide this in where-ever you need it.
Failures?
Don't worry about these. Anyone that has a calendar will get the event.
You will almost definitely get failures if you are in a company of more than a few employees. This is because some users in M365 do not have licences for the functions you're accessing here.
A more appropriate way to do this and illicit less errors in the loop would be to use an "All Staff" group to run this on. That way it will add it for all the staff, and they are almost 100% likely to have a full office licence, or at least Outlook. 😉
Or you could list all users, then check their licences, then use the ones with ... (you don't need to, though)
What this does is find all the users in your company (more after the flow on that) then for each of them it sends a request to Microsoft to add the event into their calendar:
Users
You can leave the number blank if your firm has under 1000 employees, otherwise it's wise to overshoot the amount of users here by a fair bit. So I did that as an example, just in case, as I have 9.
Optional Users
If you really want to future proof it make a userLimitVAR integer variable with an initial setting of 1000, a Do until action (with the Users action inside) that runs until the length() of the Users action is not equal to the userLimitVAR, and at the end of each loop inside that, add 1000 to the userLimitVAR. If you wish to count the users you can also populate a userCountVAR that contains that length(). Then pipe the Users result into a set variable for a usersARR array variable also at the end of the loop. All this does is ensure that you'll always get all the users.
Send an HTTP request (Office 365 Groups)
This is the meat of what you wanted to do, this HTTP request creates an event for whichever User Id you enter in the URI field, but it needs the JSON data to make it with.
It essentially performs the same action for any user that you would accomplish using the Office 365 Outlook connector's Create Event action. If you wanted to use this method to do that, you would replace the "users/id/" part with "me/" instead.
URI
The URI field here is:
https://graph.microsoft.com/v1.0/users/%7B@{items('Apply_to_each')?['Id']}%7D/calendar/events
The "@{items('Apply_to_each')?['Id']}" bit is representative of the graphical 'User id' that you see in the above image. If you have your Apply to each action named the same, then you might be able to paste that straight into the field without issue, but no guaruntees.
Body
The Body field is:
{
"subject": "Eliot's Test Event",
"body": {
"contentType": "HTML",
"content": "Call link: https://aka.ms/mmkv1b Submit a question: https://aka.ms/ybuw2i"
},
"start": {
"dateTime": "2022-05-15T17:00:00",
"timeZone": "UTC"
},
"end": {
"dateTime": "2022-05-15T17:05:00",
"timeZone": "UTC"
},
"location": {
"displayName": "Skype for Business"
}
}
This is taken from the example given on the Graph Explorer page (when you can try things like this out), but there are further examples on the documentation pages, here.
Extra Data?
If you have extra information that you wish to include, or retrieve dates/subjects/information from a list or something, just subsume this into your logic.
If you need something more complex, then you'll need to show us your flow as it is. But I reckon you can slide this in where-ever you need it.
Failures?
Don't worry about these. Anyone that has a calendar will get the event.
You will almost definitely get failures if you are in a company of more than a few employees. This is because some users in M365 do not have licences for the functions you're accessing here.
A more appropriate way to do this and illicit less errors in the loop would be to use an "All Staff" group to run this on. That way it will add it for all the staff, and they are almost 100% likely to have a full office licence, or at least Outlook.
Or you could list all users, then check their licences, then use the ones with ... (you don't need to, though)