An API that connects multiple Microsoft services, enabling data access and automation across platforms
Hello @Peter Holdorf
Hi,
Yes, according to the Microsoft Graph documentation, Calendars.ReadBasic is the least-privileged delegated permission for GET /me/calendars and it is supported for personal Microsoft accounts.
So you should not need to add Calendars.Read just to list the calendars, and no additional identity scope such as User.Read should be required for authorization to this endpoint.
Since the authenticated request returns 401, I would focus on the access token itself. Microsoft documents 401 as meaning that the authentication information is missing or not valid for the requested resource.
For a fresh reproduction, decode the access token locally and verify at least:
aud -> Microsoft Graph
scp -> contains Calendars.ReadBasic
exp -> token has not expired
Do not post the actual token publicly.
I would also test once with a completely fresh token/cache and explicitly request:
https://graph.microsoft.com/Calendars.ReadBasic
If that still produces an empty HTTP 401, capture the following response/request metadata:
request-id
client-request-id
Date
HTTP status
UTC timestamp
App/Client ID
Microsoft specifically recommends supplying client-request-id, response request-id, and Date when troubleshooting Graph calls with Microsoft Support.
I am not aware of a documented requirement for an additional scope in this scenario. If aud and scp are correct and a newly acquired token still fails, this would warrant a Microsoft Graph support investigation rather than increasing the application's permissions.
If this helps resolve your issue, please don’t forget to mark the answer as Accepted / Resolved.