This question has been asked several times and as per answers such as this it seems the API didn't support this then until recently as here which mentions that there are new scopes which allow accessing the shared calendars. But it still does not work.
I have tested this on two platforms: Azure and Microsoft Graph
My application in Azure AD has all the required permissions:
I make a call to Office API v.1.0 as:
Authorise URL:
https://login.microsoftonline.com/common/oauth2/authorize?client_id=%1$s&redirect_uri=%2$s&response_type=code
Token URL:
https://login.microsoftonline.com/common/oauth2/token
Calendars URL:
https://outlook.office.com/api/v1.0/Me/Calendars
It only gives me the calendar created by the current logged-in/authorising user.
Since this didn't work, I tried with the version 2 of the API but I got the following:
Additional technical information: Correlation ID: 7abf370a-d918-4514-bd74-cf5fc93fe3cf Timestamp: 2016-10-31 09:32:06Z AADSTS70001: Application 'f7571710-84e2-4444-8bfe-5eef92f4a46d' is not supported for this API version.
So I tried with a Microsoft Graph Application
My application here also contains all the required permissions.
I make call to the office API v2.0 as:
Authorize URL:
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=%1$s&redirect_uri=%2$s&response_type=code&scope=%3$s
Where scopes are:
private static $scopes = array( 'https://outlook.office.com/calendars.read', 'https://outlook.office.com/calendars.readwrite', 'https://outlook.office.com/calendars.read.shared', 'https://outlook.office.com/calendars.readwrite.shared', );
Token URL:
https://login.microsoftonline.com/common/oauth2/v2.0/token
Calendars URL:
https://outlook.office.com/api/v2.0/Me/Calendars
Again does not give me the shared calendars.
Any help is appreciated.
A lot of stuff going on here :) However it seems the crux here is that you're expecting /Me/Calendars
to include shared calendars. It does not. In order to access someone else's calendar that has been shared, you must access via the /Users/<id>/Calendars/
URL.
So for example if [email protected] logs in, and [email protected] has shared his calendar with him, then:
/Me/Calendars
would ONLY show calendars in Bob's mailbox/Users/[email protected]/Calendars
would show calendars Bill has shared with BobUpdate: It seems there's a blocking issue on our side. We're working on it.
I've been able to do what I believe you're asking about (using the Outlook API to get the events from calendars which have been shared with your outlook calendar) by using the following endpoint:
.../api/v2.0/Users('PRIMARY_USER_ID')/Calendars('SHARED_CALENDAR_ID')/Events
From this endpoint, you should be able to grab events/info from any calendar that has been directly shared with your outlook/office 365 account.
The PRIMARY_USER_ID (just what I'm calling it here) comes back to you as part of the response object when you first sign in with your outlook account and go through Microsoft's auth process. This isn't the ID of the calendar you're trying to access, but the ID of the primary calendar (the one you can find at the api/v2.0/me
endpoint) that the other calendars are shared with. All of the IDs I've seen have come back in the form of a bunch of letters and numbers separated by dashes.
The CALENDAR_ID is the ID of the shared calendar you're trying to get the events from. You can see these IDs for each of your shared calendars if you make a request to .../api/v2.0/me/calendars/
. This will return each of the calendars that are shared with you, info about the owner, and the 'ID' of that calendar.
If you plug in those ids, and make a request to url above, you should be able to get calendar events back from the API.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With