Recurring online meetings all have the same JoinWebUrl and JoinMeetingId.
According to the documentation, we can query onlineMeetings by joinWebUrl, joinMeetingId or use the unique meetingId to retrieve the specific record
GET /me/onlineMeetings/{meetingId}
GET /users/{userId}/onlineMeetings?$filter=JoinWebUrl%20eq%20'{joinWebUrl}'
GET /users/{userId}/onlineMeetings?$filter=joinMeetingIdSettings/joinMeetingId%20eq%20'{joinMeetingId}'
However, if you don't know the meetingId (which isn't visible to the user), and the meeting is recurring, you can't obtain a specific instance of the meeting because a query will always return the first instance of that meeting.
Querying the Calendar endpoints can be used to get a specific instance
# GET https://graph.microsoft.com/v1.0/me/calendar/events/{recurring Event Id}/instances?startDateTime=2025-05-26&endDateTime=2025-06-30
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users({userId})/calendar/events({recurring eventId})/instances",
"value": [
{
"@odata.etag": "W/\"9zfGr1v870Go1EeaN62UaQAGNA+uaQ==\"",
"id": "OUTLOOK EVENT ID",
"createdDateTime": "2025-05-30T15:21:39.619102Z",
"lastModifiedDateTime": "2025-05-30T15:23:43.6526776Z",
"start": {
"dateTime": "2025-06-02T12:00:00.0000000",
"timeZone": "UTC"
}
}
]
}
But none of that information can be used to find the Id for the Online Meeting.
# Sample from an onlineMeetings query
# GET https://graph.microsoft.com/v1.0/me/onlineMeetings?$filter=joinMeetingIdSettings/joinMeetingId eq '1234567'
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users({userId)/onlineMeetings",
"@microsoft.graph.tips": "Use $select to choose only the properties your app needs, as this can lead to performance improvements. For example: GET me/onlineMeetings?$select=attendeeReport,broadcastSettings",
"value": [
{
"id": "ONLINE MEETING ID",
"creationDateTime": "2025-05-30T15:21:40.6310894Z",
"startDateTime": "2025-02-03T13:00:00Z"
}
]
}
How do we get a specific instance of a recurring online meeting? That endpoint is the only place where we can make changes to the participant roles, programmatically.