Microsoft Calendar is the calendar in Outlook and Microsoft 365, used to organize events, set reminders and manage meetings across time zones. The UnifyApps Microsoft Calendar connector uses the Microsoft Graph API v1.0 to create, update and delete calendars and events, respond to meeting invitations, manage event attachments, check free/busy schedules, read Teams online meetings, attendance reports, recordings and transcripts, look up users, and react to new, updated and deleted events from workflows and agents.
This guide covers every authentication type available on the connection form, and the actions and triggers supported, along with the Microsoft Graph permission each one needs.
Authentication
Before you begin, you should have the following information:
Connection name: a descriptive name such as MyAppCalendarIntegration, so the connection is easy to identify later.
Authentication type: select the type of authentication for connecting to your Microsoft Calendar account:
OAuth
OAuth with Client credentials
Client credentials
Every authentication type has an optional Tenant ID field. If you leave it blank, common is used, which accepts both Microsoft accounts and work or school accounts. You can also enter organizations (work or school accounts only), consumers (Microsoft accounts only), or your tenant ID or domain name.
The two OAuth types have a required Scopes field. By default, 16 of its 19 scopes are selected: Calendars.Read, Calendars.ReadWrite, Calendars.Read.Shared, Calendars.ReadWrite.Shared, Files.ReadWrite, OnlineMeetings.Read, OnlineMeetings.ReadWrite, OnlineMeetingRecording.Read.All, OnlineMeetingTranscript.Read.All, OnlineMeetingArtifact.Read.All, Mail.ReadWrite, MailboxSettings.Read, People.Read, User.Read, User.Read.All and offline_access. User.ReadBasic.All, VirtualEvent.Read and VirtualEvent.ReadWrite are in the list but not selected: add the two VirtualEvent scopes to use the town hall and webinar actions. The defaults cover every other action below except List group members and the contact actions; their permissions (GroupMember.Read.All, Contacts.Read and Contacts.ReadWrite) are not in the Scopes list, so use Client credentials for them. Keep Calendars.Read selected, because Test Connection lists your calendars. Some of these scopes, such as OnlineMeetingRecording.Read.All, OnlineMeetingTranscript.Read.All and User.Read.All, need an administrator's consent. If you cannot get admin consent, remove the scopes you do not need; see the Scopes Required column in the tables below.
1. OAuth
Use this when you want to connect with your own Microsoft account and do not need to register an app in Azure.
Enter a Connection name.
Select OAuth as the Authentication type.
Leave Tenant ID blank (
common), or enter your tenant ID to restrict sign-in to one organization.Keep the default Scopes, or select only the scopes you need.
offline_accessis always added so the connection can refresh its token.Keep Delegated scopes turned on, so actions run as the signed-in user.
Click Authorize. You are redirected to the Microsoft sign-in page.
Sign in with the Microsoft account whose calendar the connection should use.
Review the permissions requested on the consent screen and click Accept.
You are redirected back to UnifyApps with a confirmation that the account is connected.
2. OAuth with Client credentials
Use this when your organization wants the connection to use its own Azure app registration, while actions still run on behalf of a signed-in user.
Step 1: App registration in Azure
Log in to the Azure portal, search for App registrations and click New registration.
Enter a name and choose the supported account type: single tenant (only your organization) or multitenant (any Microsoft Entra ID tenant).
Under Redirect URI, choose platform Web and paste the Callback URL shown on the connection form (it is copyable and differs per environment).
Click Register.
On the Overview tab, copy the Application (client) ID and the Directory (tenant) ID.


Go to API permissions → Add a permission → Microsoft Graph → Delegated permissions and add
offline_accessand the permissions the connection needs, for exampleCalendars.ReadWriteandOnlineMeetings.Read. Click Grant admin consent if your tenant requires it, or if you add permissions that need it.Go to Certificates & secrets → New client secret, add a description and expiry, and click Add. Copy the secret Value immediately and store it securely. It is not shown again.
Step 2: Connection setup in UnifyApps
Open Connections → New Connection → Microsoft Calendar and enter a Connection name.
Select OAuth with Client credentials as the Authentication type.
Enter the Client ID and Client secret copied from Azure.
Enter the Tenant ID. Use your Directory (tenant) ID if the app is single tenant; leave it blank (
common) only for a multitenant app.Select the same Scopes you added as delegated permissions in Azure.
Keep Delegated scopes turned on.
Click Authorize, sign in with Microsoft and accept the consent screen.
Confirm the success message after the redirect back to UnifyApps.
3. Client credentials
Use this for app-only access that does not depend on a signed-in user. The app acts as itself with Application permissions, and needs admin consent.
Step 1: Register the app in Azure
Log in to the Azure portal, search for App registrations and click New registration.
Enter a name and supported account type, and click Register. No redirect URI is needed for this flow.
From Overview, copy the Application (client) ID and Directory (tenant) ID.
Go to API permissions → Add a permission → Microsoft Graph → Application permissions and add the permissions the connection needs, for example
Calendars.ReadWrite.Click Grant admin consent. Application permissions do not work until an administrator grants consent.
Go to Certificates & secrets → New client secret, click Add, and copy the secret Value immediately.
Note: Application permissions such as Calendars.ReadWrite reach every mailbox in the organization; an Exchange administrator can limit them with RBAC for Applications in Exchange Online. Online meeting actions with app-only access also need a Teams application access policy that allows the app for the meeting organizers.
Step 2: Create the connection in UnifyApps
Select Client credentials as the Authentication type.
Enter the Client ID and Client secret.
Enter the Tenant ID. Use your actual tenant ID here; the default
commonis meant for the sign-in based flows.Leave Delegated scopes turned off (the default for this type). Actions then act on the calendar of the UnifyApps user who runs them, or on the user given in actions that take a user ID.
Click Test Connection to validate the credentials, then click Create.
Actions
Permissions are Microsoft Graph permissions. Unless a row lists Delegated and Application separately, the same name applies to both: select it in Scopes for the OAuth types, or add it as an Application permission in Azure for Client credentials. When the least-privileged permission is not in the form's Scopes list, select the broader one in brackets. Calendars.ReadBasic returns events without their body and attachments (its Application form is Calendars.ReadBasic.All); use Calendars.Read to get them. To read another user's calendar with a delegated connection, use the shared variant, for example Calendars.Read.Shared.
Actions | Description | Scopes Required |
|---|---|---|
| Accepts a meeting invitation for an event in Microsoft Calendar. | Calendars.ReadWrite |
| Adds an attachment to an existing event in Microsoft Calendar. | Calendars.ReadWrite |
| Attaches a file to an event on another user's calendar (or the signed-in user's, when no user ID is given) in Microsoft Calendar. | Calendars.ReadWrite (Calendars.ReadWrite.Shared for another user's calendar on the OAuth types) |
| Adds a presenter to a virtual event town hall in Microsoft Calendar. | VirtualEvent.ReadWrite (delegated types only) |
| Creates a registration record for a registrant of a virtual event town hall in Microsoft Calendar. | Delegated: VirtualEvent.ReadWrite; Application: VirtualEventRegistration-Anon.ReadWrite.All |
| Deletes an event from another user's calendar (or the signed-in user's, when no user ID is given) in Microsoft Calendar. | Calendars.ReadWrite (Calendars.ReadWrite.Shared for another user's calendar on the OAuth types) |
| Creates a calendar in Microsoft Calendar. | Calendars.ReadWrite |
| Creates an event in a calendar, by calendar ID, in Microsoft Calendar. | Calendars.ReadWrite |
| Creates a contact in a mailbox or one of its contact folders in Microsoft Calendar. | Contacts.ReadWrite (not in the Scopes list; add it as an Application permission for Client credentials) |
| Creates a contact folder in a mailbox in Microsoft Calendar. | Contacts.ReadWrite (not in the Scopes list; add it as an Application permission for Client credentials) |
| Creates an event on another user's calendar (or the signed-in user's, when no user ID is given) in Microsoft Calendar. | Calendars.ReadWrite (Calendars.ReadWrite.Shared for another user's calendar on the OAuth types) |
| Creates a virtual event town hall in draft mode in Microsoft Calendar. | VirtualEvent.ReadWrite (delegated types only) |
| Creates a virtual event webinar in draft mode in Microsoft Calendar. | VirtualEvent.ReadWrite (delegated types only) |
| Declines a meeting invitation for an event in Microsoft Calendar. | Calendars.ReadWrite |
| Deletes a calendar event by calendar and event ID in Microsoft Calendar. | Calendars.ReadWrite |
| Deletes an event attachment in Microsoft Calendar. | Calendars.ReadWrite |
| Deletes a contact by its ID in Microsoft Calendar. | Contacts.ReadWrite (not in the Scopes list; add it as an Application permission for Client credentials) |
| Deletes a contact folder and every contact in it in Microsoft Calendar. | Contacts.ReadWrite (not in the Scopes list; add it as an Application permission for Client credentials) |
| Gets one contact by its ID in Microsoft Calendar. | Contacts.Read (not in the Scopes list; add it as an Application permission for Client credentials) |
| Gets one contact folder by its ID in Microsoft Calendar. | Contacts.Read (not in the Scopes list; add it as an Application permission for Client credentials) |
| Fetches an event by ID from Microsoft Calendar. | Calendars.ReadBasic (or Calendars.Read) |
| Fetches the full details of an event by ID from a specific user's mailbox, including the ID of the calendar it belongs to. | Calendars.ReadBasic (or Calendars.Read) |
| Gets a calendar by its ID in Microsoft Calendar. | Calendars.ReadBasic (or Calendars.Read) |
| Gets a calendar event by calendar ID in Microsoft Calendar. | Calendars.ReadBasic (or Calendars.Read) |
| Gets a specific attachment of an event by ID in Microsoft Calendar. | Calendars.Read |
| Gets a specific attachment of an event for a user in Microsoft Calendar. | Calendars.Read |
| Gets the attachments of an event in Microsoft Calendar. | Calendars.Read |
| Gets the attachments of an event in Microsoft Calendar and returns their content as files. | Calendars.Read |
| Gets the attendance report for a Teams meeting. | OnlineMeetingArtifact.Read.All |
| Gets one Teams attendance report with its per-attendee records, in another user's mailbox (or the signed-in user's, when no user ID is given), in Microsoft Calendar. | OnlineMeetingArtifact.Read.All |
| Retrieves the signed-in user's profile (mail, user principal name, display name and ID). Requires a delegated connection. | User.Read (delegated types only) |
| Gets the events added, updated or deleted in a date range of a user's primary calendar since the last delta call. Pass the returned delta token to the next call to get only new changes. | Calendars.Read |
| Gets a file from its content URL in Microsoft Calendar. | The permission for the resource the URL points to, for example OnlineMeetingRecording.Read.All for a meeting recording |
| Gets free/busy events from Microsoft Calendar. | Calendars.ReadBasic (or Calendars.Read) |
| Gets the mailbox settings for a calendar in Microsoft Calendar. | MailboxSettings.Read |
| Retrieves a specific online meeting by its meeting ID in Microsoft Calendar. | Delegated: OnlineMeetings.Read; Application: OnlineMeetings.Read.All |
| Gets the content of a single transcript of an online meeting in Microsoft Calendar. | OnlineMeetingTranscript.Read.All |
| Gets the content of a single transcript of an online meeting for a specific user in Microsoft Calendar. | OnlineMeetingTranscript.Read.All |
| Gets the free/busy schedule for a user in Microsoft Calendar. | Calendars.ReadBasic (or Calendars.Read) |
| Gets the free/busy schedule for a user in Microsoft Calendar. | Calendars.ReadBasic (or Calendars.Read) |
| Retrieves a virtual event town hall by its ID in Microsoft Calendar. | Delegated: VirtualEvent.Read; Application: VirtualEvent.Read.All |
| Gets user information by user ID from Microsoft Calendar. | Delegated: User.ReadBasic.All (or User.Read.All); Application: User.Read.All |
| Gets a user's mailbox settings for a calendar in Microsoft Calendar. | MailboxSettings.Read |
| Gets all users associated with the account that have a given display name. | Delegated: User.ReadBasic.All (or User.Read.All); Application: User.Read.All |
| Gets all users associated with the account that match a given prefix. | Delegated: User.ReadBasic.All (or User.Read.All); Application: User.Read.All |
| Retrieves a virtual event webinar by its ID in Microsoft Calendar. | Delegated: VirtualEvent.Read; Application: VirtualEvent.Read.All |
| Lists all instances (occurrences) of a recurring event. When no calendar is given, the event is looked up anywhere in the user's mailbox. | Calendars.ReadBasic (or Calendars.Read) |
| Lists all attachments of an event in Microsoft Calendar. | Calendars.Read |
| Lists all attendance records for a Teams meeting in Microsoft Calendar. | OnlineMeetingArtifact.Read.All |
| Lists all attendance reports for a specific Teams meeting. | OnlineMeetingArtifact.Read.All |
| Lists the attendance reports of a Teams online meeting in another user's mailbox (or the signed-in user's, when no user ID is given) in Microsoft Calendar. | OnlineMeetingArtifact.Read.All |
| Lists the sharing permissions of a calendar in Microsoft Calendar. | Calendars.ReadBasic (or Calendars.Read) |
| Lists the events in a calendar view within a time range. Times are returned in UTC. | Calendars.ReadBasic (or Calendars.Read) |
| Lists the events in a calendar view within a time range for a specific user. | Calendars.ReadBasic (or Calendars.Read) |
| Lists calendars in Microsoft Calendar. | Calendars.ReadBasic (or Calendars.Read) |
| Lists the contact folders of a mailbox in Microsoft Calendar. | Contacts.Read (not in the Scopes list; add it as an Application permission for Client credentials) |
| Lists the contacts in a mailbox or one of its contact folders in Microsoft Calendar. | Contacts.Read (not in the Scopes list; add it as an Application permission for Client credentials) |
| Lists events from a calendar in Microsoft Calendar, using the user's default calendar when no calendar is given. | Calendars.ReadBasic (or Calendars.Read) |
| Fetches the members or owners of a group in Microsoft Calendar. | GroupMember.Read.All (not in the Scopes list; add it as an Application permission for Client credentials) |
| Lists the recordings of an online meeting in Microsoft Calendar. | OnlineMeetingRecording.Read.All |
| Lists the recordings of a Teams online meeting in another user's mailbox (or the signed-in user's, when no user ID is given) in Microsoft Calendar. | OnlineMeetingRecording.Read.All |
| Lists the transcripts of an online meeting in Microsoft Calendar. | OnlineMeetingTranscript.Read.All |
| Lists the transcripts of an online meeting for a specific user in Microsoft Calendar. | OnlineMeetingTranscript.Read.All |
| Lists online meetings in Microsoft Calendar. | Delegated: OnlineMeetings.Read; Application: OnlineMeetings.Read.All |
| Lists online meetings for a specific user in Microsoft Calendar. | Delegated: OnlineMeetings.Read; Application: OnlineMeetings.Read.All |
| Lists the recurring series masters on a calendar (the repeating meetings themselves, not their occurrences) in Microsoft Calendar. | Calendars.ReadBasic (or Calendars.Read) |
| Lists all presenters of a virtual event town hall in Microsoft Calendar. | Delegated: VirtualEvent.Read; Application: VirtualEvent.Read.All |
| Lists the session summaries of a virtual event town hall in Microsoft Calendar. | Delegated: VirtualEvent.Read; Application: VirtualEvent.Read.All |
| Lists all virtual event town halls created in the tenant in Microsoft Calendar. | Application only: VirtualEvent.Read.All (Client credentials; the organizers need a Teams application access policy) |
| Lists users in Microsoft Calendar. | Delegated: User.ReadBasic.All (or User.Read.All); Application: User.Read.All |
| Lists all virtual event webinars created in the tenant in Microsoft Calendar. | Application only: VirtualEvent.Read.All (Client credentials; the organizers need a Teams application access policy) |
| Publishes a virtual event town hall to make it visible to its audience in Microsoft Calendar. | VirtualEvent.ReadWrite (delegated types only) |
| Accepts, tentatively accepts or declines a meeting invitation on another user's calendar (or the signed-in user's, when no user ID is given) in Microsoft Calendar. | Calendars.ReadWrite (Calendars.ReadWrite.Shared for another user's calendar on the OAuth types) |
| Searches calendar events by KQL query (participants, subject, date range) using the Microsoft Graph Search API. | Calendars.Read (delegated types only; Microsoft Search covers only the signed-in user's own calendar) |
| Searches calendar events in batches in Microsoft Calendar. | Calendars.ReadBasic (or Calendars.Read) |
| Searches calendars in batches in Microsoft Calendar. | Calendars.ReadBasic (or Calendars.Read) |
| Searches the mailbox contacts by name, company or email address in Microsoft Calendar. | Contacts.Read (not in the Scopes list; add it as an Application permission for Client credentials) |
| Searches the people most relevant to the signed-in user, across their contacts and their organization, in Microsoft Calendar. | Delegated: People.Read; Application: People.Read.All |
| Updates an event by calendar and event ID in Microsoft Calendar. | Calendars.ReadWrite |
| Updates the given fields of a contact in Microsoft Calendar. | Contacts.ReadWrite (not in the Scopes list; add it as an Application permission for Client credentials) |
| Renames a contact folder in Microsoft Calendar. | Contacts.ReadWrite (not in the Scopes list; add it as an Application permission for Client credentials) |
Triggers
Triggers | Description | Scopes Required |
|---|---|---|
| Triggers in real time when a calendar event is created, updated or deleted in Microsoft Calendar. | Calendars.Read (with the OAuth types, only the signed-in user's own calendar) |
| Triggers when a calendar event is deleted in Microsoft Calendar. | Calendars.Read |
| Triggers when a new calendar event is created in Microsoft Calendar. | Calendars.Read |
| Triggers when a calendar event is updated in Microsoft Calendar. | Calendars.Read |