Jana Lima
Jana Lima

Reputation: 33

Fetch events from shared calendar with Office 365 REST API

Loading shared calendar from a user works so far. However, as soon as you want to load the events, we get the following error message:

ErrorAccessDenied
Access is denied. Check credentials and try again.

The URL looks like this:

https://outlook.office.com/api/v2.0/users/{userName}/calendars/{sharedCalendarId}/calendarView

Query:

{
  "query": {
    "$select": "Subject,Location,Start,End,IsAllDay,BodyPreview,Extensions",
    "$expand": "Extensions($filter=Id eq \"Microsoft.OutlookServices.OpenTypeExtension.custom.string.here\")",
    "startDateTime": "2018-07-09T22:00:00.000Z",
    "endDateTime": "2018-11-09T23:00:00.000Z"
  },
  "headers": {
    "Prefer": [
      "odata.track-changes",
      "odata.maxpagesize=200"
    ]
  }
}

The following scopes were set:

"openid",
"profiles",
"offline_access", // for refresh token
"https://outlook.office.com/calendars.readwrite",
"https://outlook.office.com/calendars.read.shared",
"https://outlook.office.com/calendars.readwrite.shared"

Upvotes: 3

Views: 5581

Answers (1)

FIL
FIL

Reputation: 1218

The Outlook REST API requests are always performed on behalf of the current user (authenticated user). That's why the endpoint /me/calendars works but users/{userId}/calendars does not. You can not get access to another user's calendar using this API. More information is provided here.

To access the other user's calendar you should switch to Microsoft Graph API. Then you could use the following endpoints:

Using https://graph.microsoft.com/v1.0/

GET /me/calendar/calendarView
GET /users/{id | userPrincipalName}/calendar/calendarView
GET /groups/{id}/calendar/calendarView

Remember to specify permissions for accessing user's calendars.

Upvotes: 4

Related Questions