How do I update "allowedOnlineMeetingProviders" for a azure AD user via the Microsoft Graph API?

asked 2021-11-05T06:46:49.787+00:00
matt 1 Reputation point

When I go to create online meetings with users that don't have teamsForBusiness set in the allowedOnlineMeetingProviders property of the users calendar, it only creates events. How can I programmatically update this?

This is how I create the online meetings:

 // Create client  
 var graphServiceClient = CreateGraphClient();  
 // Build event  
 var newEvent = new Event()  
      Subject = subject,  
      Body = new ItemBody() { ContentType = BodyType.Text, Content = body },  
      Start = startDate,  
      End = endDate,  
      IsOnlineMeeting = true,  
      Attendees = attendees == null ? null : GetAttendees(attendees),  
      OnlineMeetingProvider = OnlineMeetingProviderType.TeamsForBusiness  

Notice that [IsOnlineMeeting = true] and [OnlineMeetingProvider = OnlineMeetingProviderType.TeamsForBusiness] but in the response (below) [IsOnlineMeeting = false] and [OnlineMeetingProvider = OnlineMeetingProviderType.Unknown]


In addition I can only seem to update this value by logging in as the user to Microsoft Teams (desktop or web app) AND after pressing create meeting now which is very odd.

Before the user is able to create online meetings, their calendar looks like below (allowedOnlineMeetingProviders is empty):


    "@odata.context": "$metadata#users('userId')/calendars",  
    "value": [  
            "id": "XYZ...",  
            "name": "Calendar",  
            "color": "auto",  
            "hexColor": "",  
            "isDefaultCalendar": true,  
            "changeKey": "xyz",  
            "canShare": true,  
            "canViewPrivateItems": true,  
            "canEdit": true,  
            "allowedOnlineMeetingProviders": [],  
            "defaultOnlineMeetingProvider": "unknown",  
            "isTallyingResponses": true,  
            "isRemovable": false,  
            "owner": {  
                "name": "Bill",  
                "address": ""  

I would have thought you would be able to do it when you update the calendar but the only property available to update is the name using the call below:

PATCH /users/{id | userPrincipalName}/calendar  

link to the documentation:

Microsoft Graph Users API
Microsoft Graph Users API
A Microsoft API that allows you to build compelling app experiences based on users, their relationships with other users and groups, and the resources they access for example their mails, calendars, files, administrative roles, group memberships.
545 questions
No comments
{count} votes

1 answer

Sort by: Most helpful
  1. answered 2021-11-05T09:44:29.417+00:00
    Carl Zhao_MSFT 17,976 Reputation points Microsoft Employee

    There seems to be a problem with the code you create the event, try this:

    using Microsoft.Graph;  
    using Microsoft.Graph.Auth;  
    using Microsoft.Identity.Client;  
    using Newtonsoft.Json;  
    using System;  
    using System.Collections.Generic;  
    namespace test  
        class Program  
            static async System.Threading.Tasks.Task Main(string[] args)  
                IConfidentialClientApplication app;  
                app = ConfidentialClientApplicationBuilder.Create("{client id}")  
                        .WithClientSecret("{client secret}")  
                        .WithAuthority(new Uri("{tenant id}"))  
                AuthenticationResult result = null;  
                string[] scopes = new string[] { "" };  
                result = await app.AcquireTokenForClient(scopes).ExecuteAsync();  
                string accesstoken = result.AccessToken;  
                ClientCredentialProvider authProvider = new ClientCredentialProvider(app);  
                GraphServiceClient graphClient = new GraphServiceClient(authProvider);  
                var @event = new Event  
                    Subject = "Let's go for lunch",  
                    Body = new ItemBody  
                        ContentType = BodyType.Html,  
                        Content = "Does next month work for you?"  
                    Start = new DateTimeTimeZone  
                        DateTime = "2019-03-10T12:00:00",  
                        TimeZone = "Pacific Standard Time"  
                    End = new DateTimeTimeZone  
                        DateTime = "2019-03-10T14:00:00",  
                        TimeZone = "Pacific Standard Time"  
                    Location = new Location  
                        DisplayName = "Harry's Bar"  
                    Attendees = new List<Attendee>()  
            new Attendee  
                EmailAddress = new EmailAddress  
                    Address = "",  
                    Name = "Adele Vance"  
                Type = AttendeeType.Required  
                    IsOnlineMeeting = true,  
                    OnlineMeetingProvider = OnlineMeetingProviderType.TeamsForBusiness  
               await graphClient.Users["{user id}"].Calendars["{calendar id}"].Events  


    If the answer is helpful, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".
    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.