2

Solution Below ! ! !

This my friends, is a beautiful msft graph api call that filters, the top 50 calendar results by a not null SeriesMasterId! Also keep in mind, if this top 50 filter is not defined, the json returned only shows the FIRST 10 RESULTS from your calendar that match your query.

https://graph.microsoft.com/v1.0/me/calendarView?startDateTime=2015-10-20T10:13:32-07:00&endDateTime=2016-10-20T10:13:32-07:00&$select=subject,type,seriesMasterId&$top=50&$filter=seriesMasterId ne null

Original Post Below

I am having issues with retrieving a SeriesMasterId for recurring calendar events using the Microsoft Graph API. I am using the Microsoft Graph Explorer logged in with my @{alias}.microsoft.com account to test, as I am a currently a Microsoft employee. The SeriesMasterId is always returned as null for my recurring events :/ when I make my REST call.

Here's the call:

https://graph.microsoft.com/v1.0/me/events

Thanks for your time and any feedback on why I am getting this null SeriesMasterId or what is returned in your use cases for this call is much appreciated!

Get ISO 8601 timestamps from here.

I also get the following result when using a call to filter a series like the following.

https://graph.microsoft.com/v1.0/me/calendarView?startDateTime=2016-09-30T15:57:28-07:00&endDateTime=2016-10-20T10:13:32-07:00

Result

{
            "@odata.etag": "W/\"KD/rRxyX+ESoOfWCZfnfFwAANhX0Bw==\"",
            "id": "AAMkADc5NzQyYWI2LWMxOTctNDRmZi05ZTA3LWE3NmRmYmY1MDQ0MgBGAAAAAADXlwbV2STsRLeDUWHghS8MBwDHXzszvWCLTrbQs5TTKyesAAAAtujXAAAoP_tHHJf4RKg59YJl_d8XAAAEs3bpAAA=",
            "createdDateTime": "2015-09-21T16:45:22.8816871Z",
            "lastModifiedDateTime": "2015-10-02T15:47:15.0711136Z",
            "changeKey": "KD/rRxyX+ESoOfWCZfnfFwAANhX0Bw==",
            "categories": [],
            "originalStartTimeZone": "Pacific Standard Time",
            "originalEndTimeZone": "Pacific Standard Time",
            "responseStatus": {
                "response": "none",
                "time": "0001-01-01T00:00:00Z"
            },
            "iCalUId": "040000008200E00074C5B7101A82E00800000000F07EA63A52F4D001000000000000000010000000FF2DCB149338304FB698D41CCC6A4BF7",
            "reminderMinutesBeforeStart": 15,
            "isReminderOn": false,
            "hasAttachments": false,
            "subject": "Azure 532",
            "body": {
                "contentType": "html",
                "content": "<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n<meta content=\"text/html; charset=us-ascii\">\r\n<meta name=\"ProgId\" content=\"Word.Document\">\r\n<meta name=\"Generator\" content=\"Microsoft Word 15\">\r\n<meta name=\"Originator\" content=\"Microsoft Word 15\">\r\n<link rel=\"File-List\" href=\"cid:filelist.xml@01D0F452.3AA54670\"><style>\r\n<!--\r\n@font-face\r\n\t{font-family:\"Cambria Math\"}\r\n@font-face\r\n\t{font-family:Calibri}\r\np.MsoNormal, li.MsoNormal, div.MsoNormal\r\n\t{margin:0in;\r\n\tmargin-bottom:.0001pt;\r\n\tfont-size:11.0pt;\r\n\tfont-family:\"Calibri\",sans-serif}\r\na:link, span.MsoHyperlink\r\n\t{color:#0563C1;\r\n\ttext-decoration:underline}\r\na:visited, span.MsoHyperlinkFollowed\r\n\t{color:#954F72;\r\n\ttext-decoration:underline}\r\nspan.EmailStyle17\r\n\t{font-family:\"Calibri\",sans-serif;\r\n\tcolor:windowtext}\r\n.MsoChpDefault\r\n\t{font-family:\"Calibri\",sans-serif}\r\n@page WordSection1\r\n\t{margin:1.0in 1.0in 1.0in 1.0in}\r\ndiv.WordSection1\r\n\t{}\r\n-->\r\n</style>\r\n</head>\r\n<body lang=\"EN-US\" link=\"#0563C1\" vlink=\"#954F72\" style=\"\">\r\n<div class=\"WordSection1\">\r\n<p class=\"MsoNormal\">&nbsp;</p>\r\n</div>\r\n</body>\r\n</html>\r\n"
            },
            "bodyPreview": "",
            "importance": "normal",
            "sensitivity": "normal",
            "start": {
                "dateTime": "2015-10-02T15:00:00.0000000",
                "timeZone": "UTC"
            },
            "end": {
                "dateTime": "2015-10-03T00:00:00.0000000",
                "timeZone": "UTC"
            },
            "location": {
                "displayName": "",
                "address": {}
            },
            "isAllDay": false,
            "isCancelled": false,
            "isOrganizer": true,
            "recurrence": null,
            "responseRequested": true,
            "seriesMasterId": null,
            "showAs": "busy",
            "type": "singleInstance",
            "attendees": [
                {
                    "status": {
                        "response": "none",
                        "time": "0001-01-01T00:00:00Z"
                    },
                    "type": "required",
                    "emailAddress": {
                        "name": "Gregory Degruy",
                        "address": "grdegr@microsoft.com"
                    }
                }
            ],
            "organizer": {
                "emailAddress": {
                    "name": "Greg Degruy",
                    "address": "Gregory.Degruy@microsoft.com"
                }
            },
            "webLink": "https://outlook.office365.com/owa/?ItemID=AAMkADc5NzQyYWI2LWMxOTctNDRmZi05ZTA3LWE3NmRmYmY1MDQ0MgBGAAAAAADXlwbV2STsRLeDUWHghS8MBwDHXzszvWCLTrbQs5TTKyesAAAAtujXAAAoP%2BtHHJf4RKg59YJl%2Bd8XAAAEs3bpAAA%3D&exvsurl=1&viewModel=ICalendarItemDetailsViewModelFactory",
            "onlineMeetingUrl": null
        },
        {
            "@odata.etag": "W/\"KD/rRxyX+ESoOfWCZfnfFwAAPP4w8g==\"",
            "id": "AAMkADc5NzQyYWI2LWMxOTctNDRmZi05ZTA3LWE3NmRmYmY1MDQ0MgBGAAAAAADXlwbV2STsRLeDUWHghS8MBwDHXzszvWCLTrbQs5TTKyesAAAAtujXAAAoP_tHHJf4RKg59YJl_d8XAAAEs3cBAAA=",
            "createdDateTime": "2015-09-28T19:17:52.276469Z",
            "lastModifiedDateTime": "2015-10-05T19:27:50.3175476Z",
            "changeKey": "KD/rRxyX+ESoOfWCZfnfFwAAPP4w8g==",
            "categories": [],
            "originalStartTimeZone": "tzone://Microsoft/Custom",
            "originalEndTimeZone": "tzone://Microsoft/Custom",
            "responseStatus": {
                "response": "none",
                "time": "0001-01-01T00:00:00Z"
            },
            "iCalUId": "040000008200E00074C5B7101A82E00800000000C00F90AFE7F9D001000000000000000010000000161F82080B826D4CBCB580B6CA119A08",
            "reminderMinutesBeforeStart": 15,
            "isReminderOn": false,
            "hasAttachments": false,
            "subject": "Azure Exam 532",
            "body": {
                "contentType": "text",
                "content": "\r\n"
            },
            "bodyPreview": "",
            "importance": "normal",
            "sensitivity": "normal",
            "start": {
                "dateTime": "2015-10-05T15:00:00.0000000",
                "timeZone": "UTC"
            },
            "end": {
                "dateTime": "2015-10-05T19:30:00.0000000",
                "timeZone": "UTC"
            },
            "location": {
                "displayName": "Testing Center"
            },
            "isAllDay": false,
            "isCancelled": false,
            "isOrganizer": true,
            "recurrence": null,
            "responseRequested": true,
            "seriesMasterId": null,
            "showAs": "busy",
            "type": "singleInstance",
            "attendees": [],
            "organizer": {
                "emailAddress": {
                    "name": "Greg Degruy",
                    "address": "Gregory.Degruy@microsoft.com"
                }
            },
            "webLink": "https://outlook.office365.com/owa/?ItemID=AAMkADc5NzQyYWI2LWMxOTctNDRmZi05ZTA3LWE3NmRmYmY1MDQ0MgBGAAAAAADXlwbV2STsRLeDUWHghS8MBwDHXzszvWCLTrbQs5TTKyesAAAAtujXAAAoP%2BtHHJf4RKg59YJl%2Bd8XAAAEs3cBAAA%3D&exvsurl=1&viewModel=ICalendarItemDetailsViewModelFactory",
            "onlineMeetingUrl": null
        }
greg
  • 1,118
  • 1
  • 20
  • 40

2 Answers2

1

I believe SeriesMasterId would only apply to single occurrences of a recurring event, which you won't see with /me/events. Getting events that way returns only the master event. Try listing a calendar view, which will expand recurring events.

Jason Johnston
  • 17,194
  • 2
  • 20
  • 34
  • In the REST example `/users//calendarView?startDateTime={start_datetime}&endDateTime={end_datetime}` what would be an example of a param to place in the `/` field and can the `/users` field be replaced with the "me" param? – greg Oct 19 '16 at 16:46
  • 1
    You can use their primary SMTP address there, and yes, you can use `/me` in place of the `/users//`. – Jason Johnston Oct 19 '16 at 17:52
  • perfect! I'll test out using `/me` in place of `/users/` – greg Oct 19 '16 at 18:35
  • I am still seeing a null SeriesMasterId when using the suggested api call. Here's the call I used `https://graph.microsoft.com/v1.0/me/calendarView?startDateTime=2015-09-30T15:57:28-07:00&endDateTime=2016-10-20T10:13:32-07:00` – greg Oct 20 '16 at 17:20
  • 1
    Post the JSON representation of one of these events. – Jason Johnston Oct 20 '16 at 17:33
  • I've added the JSON to my original post. – greg Oct 20 '16 at 18:08
  • Those both have `type` of `singleInstance`, meaning they are not recurring, so there would be no series master in this case. You want to look at appointments that have a `type` of `occurrence`. – Jason Johnston Oct 20 '16 at 18:33
  • Let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/126260/discussion-between-greg-degruy-and-jason-johnston). – greg Oct 20 '16 at 18:38
0

You dont need SeriesMasterId to download the instances of a series. You can check recurrence object in respones and send those meeting ids (id) in below sample API

GET https://graph.microsoft.com/v1.0/me/events/{meeting_id}/instances?startDateTime=2019-04-08T09:00:00.0000000&endDateTime=2019-04-30T09:00:00.0000000&$select=subject,bodyPreview,seriesMasterId,type,recurrence,start,end

Murali
  • 1,869
  • 1
  • 14
  • 22