Microsoft Calendar
MICROSOFT 365 · CALENDAR
Read free/busy and schedule meetings through Microsoft Graph.
Connect Microsoft Calendar with Fabriq Developer
Your user consents at Microsoft Calendar. The credential lands in a vault your agent cannot read, and the tool list it gets back is the intersection of that user’s grant and the agent’s own scopes.
Provider names are surfaces, not vendors, and the authoritative list is the capabilities endpoint rather than any page including this one — an unknown name returns 400 with the valid list. Fabriq Developer is free to start and needs no provider paperwork. Start free or read the quickstart.
Connecting Microsoft Calendar in practice
Calendar is throttled by Exchange per mailbox, not per tenant, so one app working one person’s calendar gets 10,000 requests per 10 minutes and only four concurrent requests however large the organization is. The scope names actively mislead: Calendars.Read.All is not tenant-wide calendar access but work-hours-and-locations settings, and the real tenant-wide read is the application form of plain Calendars.Read.
Scopes that draw scrutiny
Calendars.ReadTwo very different grants under one name. Delegated it reads the signed-in user’s calendars with no admin consent; as an application permission it is "Read calendars in all mailboxes" and requires admin consent.Calendars.ReadWriteSame split. The application form creates, reads, updates and deletes events in every mailbox in the tenant, which is the ability to put a meeting on anyone’s calendar.Calendars.Read.AllApplication-only and admin-consented, but it covers "work hours and locations settings, recurrences, and occurrences" — not event bodies. Teams pick it expecting tenant-wide event reads and get the wrong data.Calendars.ReadBasicDelegated, no admin consent, and it excludes body, attachments and extensions. The narrowest scope that still answers "when is this person free".Calendars.ReadWrite.SharedDelegated, no admin consent, and it reaches every calendar in the organization the user has access to, including delegate and shared calendars — so a user can grant well beyond their own data without an admin in the loop.
Rate limits
- Outlook service: 10,000 API requests in a 10-minute period per app ID and mailbox combination, on both v1.0 and beta.
- Four concurrent requests per app and mailbox. An unordered JSON batch is handed to Outlook four requests at a time, so batching buys no extra concurrency.
- 150 MB of upload (PATCH, POST, PUT) in a 5-minute period per app and mailbox.
- getSchedule: availabilityViewInterval defaults to 30 minutes, minimum 5, maximum 1,440.
- Microsoft Graph global limit: 130,000 requests per 10 seconds per app across all tenants.
Who has to approve
The application forms of Calendars.Read and Calendars.ReadWrite require tenant admin consent in Microsoft Entra; their delegated forms do not. An admin can additionally apply an application access policy so that an app-only token reaches only named mailboxes even though the app holds a tenant-wide calendar permission.
Worth knowing
- A change-notification subscription on event lasts at most 10,080 minutes (under seven days), and only 1,440 minutes (under one day) if you ask for resource data in the notification, so renewal is a scheduled job rather than a setup step.
- A mailbox allows 1,000 active event subscriptions across all applications, not per app, so the budget is shared with every other integration the user has installed.
- getSchedule fails with error 5006 — "The result set contains too many calendar entries. The allowed size is 1000" — when a queried slot holds more than 1,000 entries, which busy room and resource mailboxes routinely do.
- getSchedule is not supported for personal Microsoft accounts at all, so free/busy lookup only exists for work and school tenants.
Checked against Microsoft Graph throttling limits — Outlook service (2026-09-29), Microsoft Graph permissions reference (2026-09-29), calendar: getSchedule (2026-09-29), Change notifications: supported resources and expiration (2026-09-29)
What an agent can do
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
Often connected alongside
Put Microsoft Calendar behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.