Search code examples
google-calendar-api

How can we differentiate between a secondary and shared calendar in Google Calendar API response


I have a query with respect to the Calendar List API for Google Calendar: https://developers.google.com/calendar/api/v3/reference/calendarList/list

We have a scenario where user1 has shared his calendar with user2 with Make Changes and Manage Sharing permission.

Now if we invoke the list calendar API on user2, we receive a response as below:

{
  "kind": "calendar#calendarListEntry",
  "etag": "\"<redacted>\"",
  "id": "user1@gmail.com",
  "summary": "user1@gmail.com",
  "timeZone": "Asia/Kolkata",
  "colorId": "4",
  "backgroundColor": "#fa573c",
  "foregroundColor": "#000000",
  "accessRole": "owner",
  "defaultReminders": [],
  "conferenceProperties": {
    "allowedConferenceSolutionTypes": [
      "hangoutsMeet"
    ]
  }
}

We can see that the access role above for the user1's calendar is owner and the primary value is absent(false).

Now if user2 has a secondary calendar we again see something similar in the listcalendar API response:

{
  "kind": "calendar#calendarListEntry",
  "etag": "\"<redacted>\"",
  "id": "<redacted>@group.calendar.google.com",
  "summary": "Secondary Calendar",
  "timeZone": "Asia/Kolkata",
  "colorId": "1",
  "backgroundColor": "#ac725e",
  "foregroundColor": "#000000",
  "selected": true,
  "accessRole": "owner",
  "defaultReminders": [],
  "conferenceProperties": {
    "allowedConferenceSolutionTypes": [
      "hangoutsMeet"
    ]
  }
}

Access role above for the secondary calendar is owner and the primary value is absent(false).

So how can we differentiate between a secondary and shared calendar for user2? We require the same for some specific processing in our application.


Solution

  • As discussed in the comments there does not seem to be a clear way to differentiate the secondary calendars, except for the id and the appearance of the primary field.

    Without having a database to control it, it does not seem to be possible to differentiate between a secondary calendar and a shared calendar, except for the calendar id.

    You can use this template to explain your case to Google and ask to always have a field where you specify the calendar owner or another element that allows you to identify it.