An API that connects multiple Microsoft services, enabling data access and automation across platforms
The documented permission model supports this scenario:
-
Calendars.ReadBasicdelegated permission is available for consent in personal Microsoft accounts. - Listing events from a user calendar is supported for delegated personal Microsoft accounts with
Calendars.ReadBasic,Calendars.Read, orCalendars.ReadWrite. - MSAL requires requesting the Graph scope explicitly when acquiring tokens.
Given the reported setup, the most likely causes are:
- The access token is not actually a Microsoft Graph token
- A successful sign-in and a cached token do not by themselves prove the token is valid for Graph.
- The supported pattern is to request Graph scopes such as
https://graph.microsoft.com/User.Readandhttps://graph.microsoft.com/Calendar.Readwhen acquiring the token. - Since token audience was not independently verified, the first diagnostic is to confirm the token is for Microsoft Graph.
- The request is authenticated correctly but the mailbox/account path is the failing component
- The Graph permission reference says
Calendars.ReadBasicis supported for personal Microsoft accounts. - The calendar API documentation says delegated personal Microsoft accounts can call calendar event APIs with
Calendars.ReadBasic. - If the token is confirmed as a Graph token and the scope is present, repeated 401 responses on
/me/calendarsand calendar endpoints point more toward an account or mailbox-side issue than a consent-flow issue.
- The Graph permission reference says
- Scope selection may be too narrow for diagnosis
- The context shows examples of requesting both
User.Readand a calendar scope. - Adding
User.Readas a diagnostic does not increase calendar access and helps verify that the same token can call a basic Graph endpoint such as/me. - If
/mesucceeds with the same token while calendar endpoints return 401, that separates general token validity from calendar/mailbox access.
- The context shows examples of requesting both
Useful non-sensitive diagnostics:
- Verify the token is a Graph token
- Confirm the token audience is Microsoft Graph.
- Confirm the granted delegated scope includes
Calendars.ReadBasic.
- Add
User.Readtemporarily for diagnosis- Request
https://graph.microsoft.com/User.Readtogether with the calendar scope. - Acquire a fresh delegated token.
- Test a basic Graph call such as
/me. - Expected result:
-
/mesucceeds, calendar calls fail: token acquisition is broadly correct; focus shifts to calendar/mailbox-specific behavior. -
/mealso fails with 401: focus shifts to token audience, scope request, or authorization configuration.
-
- Request
- Keep using delegated permissions only
- For personal Microsoft accounts, the accepted guidance in similar cases is to use delegated permissions.
- Personal Microsoft account scenarios that try to use app-only/application permission patterns can produce 401 behavior.
- The current no-client-secret interactive delegated setup is aligned with that guidance.
- Confirm the authority and account type remain aligned
- For personal Microsoft accounts, accepted guidance is to use the
consumersendpoint orcommonfor sign-in compatibility. - The current
consumersauthority matches the personal-account-only app registration.
- For personal Microsoft accounts, accepted guidance is to use the
- Capture full HTTP response metadata on the failing Graph calls
- Preserve the Graph response status, headers, request ID, and UTC timestamp.
- The existing request IDs are useful, but exact UTC timestamps are also important for correlation.
- This is the safest next diagnostic if the token audience and
/metest do not explain the issue.
- Compare with a broader read permission only if needed
- If minimum-permission diagnosis stalls, test once with delegated
Calendars.Read. - If
Calendars.Readworks andCalendars.ReadBasicdoes not, that isolates the issue to permission handling rather than general authentication. - If both fail with a confirmed Graph token, that strengthens the mailbox/account-issue hypothesis.
- If minimum-permission diagnosis stalls, test once with delegated
What the current evidence already rules out:
- It does not look like a basic-auth issue.
- It does not look like an application-permission design issue, because the flow described is delegated and interactive.
- It does not suggest that personal Microsoft accounts are unsupported for
Calendars.ReadBasic; the documentation explicitly says they are supported.
Most effective decision tree:
- Confirm token audience is Graph.
- Request
User.Read+Calendars.ReadBasicand test/me. - If
/mesucceeds but calendar endpoints still return 401, treat it as likely mailbox/account-specific and collect exact UTC timestamps with the request IDs. - If needed, test once with delegated
Calendars.Readto determine whether the failure is specific toReadBasicor affects calendar access generally.