<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="calendar_v3.html">Calendar API</a> . <a href="calendar_v3.calendars.html">calendars</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#clear">clear(calendarId)</a></code></p>
<p class="firstline">Clears a primary calendar. This operation deletes all events associated with the primary calendar of an account.</p>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#delete">delete(calendarId)</a></code></p>
<p class="firstline">Deletes a secondary calendar. Use calendars.clear for clearing all events on primary calendars.</p>
<p class="toc_element">
  <code><a href="#get">get(calendarId)</a></code></p>
<p class="firstline">Returns metadata for a calendar.</p>
<p class="toc_element">
  <code><a href="#insert">insert(body=None)</a></code></p>
<p class="firstline">Creates a secondary calendar.</p>
<p class="toc_element">
  <code><a href="#patch">patch(calendarId, body=None)</a></code></p>
<p class="firstline">Updates metadata for a calendar. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(calendarId, body=None)</a></code></p>
<p class="firstline">Updates metadata for a calendar.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="clear">clear(calendarId)</code>
  <pre>Clears a primary calendar. This operation deletes all events associated with the primary calendar of an account.

Args:
  calendarId: string, Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the &quot;primary&quot; keyword. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(calendarId)</code>
  <pre>Deletes a secondary calendar. Use calendars.clear for clearing all events on primary calendars.

Args:
  calendarId: string, Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the &quot;primary&quot; keyword. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(calendarId)</code>
  <pre>Returns metadata for a calendar.

Args:
  calendarId: string, Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the &quot;primary&quot; keyword. (required)

Returns:
  An object of the form:

    {
  &quot;conferenceProperties&quot;: { # Conferencing properties for this calendar, for example what types of conferences are allowed.
    &quot;allowedConferenceSolutionTypes&quot;: [ # The types of conference solutions that are supported for this calendar.
        # The possible values are:
        # - &quot;eventHangout&quot;
        # - &quot;eventNamedHangout&quot;
        # - &quot;hangoutsMeet&quot;  Optional.
      &quot;A String&quot;,
    ],
  },
  &quot;description&quot;: &quot;A String&quot;, # Description of the calendar. Optional.
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;id&quot;: &quot;A String&quot;, # Identifier of the calendar. To retrieve IDs call the calendarList.list() method.
  &quot;kind&quot;: &quot;calendar#calendar&quot;, # Type of the resource (&quot;calendar#calendar&quot;).
  &quot;location&quot;: &quot;A String&quot;, # Geographic location of the calendar as free-form text. Optional.
  &quot;summary&quot;: &quot;A String&quot;, # Title of the calendar.
  &quot;timeZone&quot;: &quot;A String&quot;, # The time zone of the calendar. (Formatted as an IANA Time Zone Database name, e.g. &quot;Europe/Zurich&quot;.) Optional.
}</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(body=None)</code>
  <pre>Creates a secondary calendar.

Args:
  body: object, The request body.
    The object takes the form of:

{
  &quot;conferenceProperties&quot;: { # Conferencing properties for this calendar, for example what types of conferences are allowed.
    &quot;allowedConferenceSolutionTypes&quot;: [ # The types of conference solutions that are supported for this calendar.
        # The possible values are:
        # - &quot;eventHangout&quot;
        # - &quot;eventNamedHangout&quot;
        # - &quot;hangoutsMeet&quot;  Optional.
      &quot;A String&quot;,
    ],
  },
  &quot;description&quot;: &quot;A String&quot;, # Description of the calendar. Optional.
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;id&quot;: &quot;A String&quot;, # Identifier of the calendar. To retrieve IDs call the calendarList.list() method.
  &quot;kind&quot;: &quot;calendar#calendar&quot;, # Type of the resource (&quot;calendar#calendar&quot;).
  &quot;location&quot;: &quot;A String&quot;, # Geographic location of the calendar as free-form text. Optional.
  &quot;summary&quot;: &quot;A String&quot;, # Title of the calendar.
  &quot;timeZone&quot;: &quot;A String&quot;, # The time zone of the calendar. (Formatted as an IANA Time Zone Database name, e.g. &quot;Europe/Zurich&quot;.) Optional.
}


Returns:
  An object of the form:

    {
  &quot;conferenceProperties&quot;: { # Conferencing properties for this calendar, for example what types of conferences are allowed.
    &quot;allowedConferenceSolutionTypes&quot;: [ # The types of conference solutions that are supported for this calendar.
        # The possible values are:
        # - &quot;eventHangout&quot;
        # - &quot;eventNamedHangout&quot;
        # - &quot;hangoutsMeet&quot;  Optional.
      &quot;A String&quot;,
    ],
  },
  &quot;description&quot;: &quot;A String&quot;, # Description of the calendar. Optional.
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;id&quot;: &quot;A String&quot;, # Identifier of the calendar. To retrieve IDs call the calendarList.list() method.
  &quot;kind&quot;: &quot;calendar#calendar&quot;, # Type of the resource (&quot;calendar#calendar&quot;).
  &quot;location&quot;: &quot;A String&quot;, # Geographic location of the calendar as free-form text. Optional.
  &quot;summary&quot;: &quot;A String&quot;, # Title of the calendar.
  &quot;timeZone&quot;: &quot;A String&quot;, # The time zone of the calendar. (Formatted as an IANA Time Zone Database name, e.g. &quot;Europe/Zurich&quot;.) Optional.
}</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(calendarId, body=None)</code>
  <pre>Updates metadata for a calendar. This method supports patch semantics.

Args:
  calendarId: string, Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the &quot;primary&quot; keyword. (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;conferenceProperties&quot;: { # Conferencing properties for this calendar, for example what types of conferences are allowed.
    &quot;allowedConferenceSolutionTypes&quot;: [ # The types of conference solutions that are supported for this calendar.
        # The possible values are:
        # - &quot;eventHangout&quot;
        # - &quot;eventNamedHangout&quot;
        # - &quot;hangoutsMeet&quot;  Optional.
      &quot;A String&quot;,
    ],
  },
  &quot;description&quot;: &quot;A String&quot;, # Description of the calendar. Optional.
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;id&quot;: &quot;A String&quot;, # Identifier of the calendar. To retrieve IDs call the calendarList.list() method.
  &quot;kind&quot;: &quot;calendar#calendar&quot;, # Type of the resource (&quot;calendar#calendar&quot;).
  &quot;location&quot;: &quot;A String&quot;, # Geographic location of the calendar as free-form text. Optional.
  &quot;summary&quot;: &quot;A String&quot;, # Title of the calendar.
  &quot;timeZone&quot;: &quot;A String&quot;, # The time zone of the calendar. (Formatted as an IANA Time Zone Database name, e.g. &quot;Europe/Zurich&quot;.) Optional.
}


Returns:
  An object of the form:

    {
  &quot;conferenceProperties&quot;: { # Conferencing properties for this calendar, for example what types of conferences are allowed.
    &quot;allowedConferenceSolutionTypes&quot;: [ # The types of conference solutions that are supported for this calendar.
        # The possible values are:
        # - &quot;eventHangout&quot;
        # - &quot;eventNamedHangout&quot;
        # - &quot;hangoutsMeet&quot;  Optional.
      &quot;A String&quot;,
    ],
  },
  &quot;description&quot;: &quot;A String&quot;, # Description of the calendar. Optional.
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;id&quot;: &quot;A String&quot;, # Identifier of the calendar. To retrieve IDs call the calendarList.list() method.
  &quot;kind&quot;: &quot;calendar#calendar&quot;, # Type of the resource (&quot;calendar#calendar&quot;).
  &quot;location&quot;: &quot;A String&quot;, # Geographic location of the calendar as free-form text. Optional.
  &quot;summary&quot;: &quot;A String&quot;, # Title of the calendar.
  &quot;timeZone&quot;: &quot;A String&quot;, # The time zone of the calendar. (Formatted as an IANA Time Zone Database name, e.g. &quot;Europe/Zurich&quot;.) Optional.
}</pre>
</div>

<div class="method">
    <code class="details" id="update">update(calendarId, body=None)</code>
  <pre>Updates metadata for a calendar.

Args:
  calendarId: string, Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the &quot;primary&quot; keyword. (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;conferenceProperties&quot;: { # Conferencing properties for this calendar, for example what types of conferences are allowed.
    &quot;allowedConferenceSolutionTypes&quot;: [ # The types of conference solutions that are supported for this calendar.
        # The possible values are:
        # - &quot;eventHangout&quot;
        # - &quot;eventNamedHangout&quot;
        # - &quot;hangoutsMeet&quot;  Optional.
      &quot;A String&quot;,
    ],
  },
  &quot;description&quot;: &quot;A String&quot;, # Description of the calendar. Optional.
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;id&quot;: &quot;A String&quot;, # Identifier of the calendar. To retrieve IDs call the calendarList.list() method.
  &quot;kind&quot;: &quot;calendar#calendar&quot;, # Type of the resource (&quot;calendar#calendar&quot;).
  &quot;location&quot;: &quot;A String&quot;, # Geographic location of the calendar as free-form text. Optional.
  &quot;summary&quot;: &quot;A String&quot;, # Title of the calendar.
  &quot;timeZone&quot;: &quot;A String&quot;, # The time zone of the calendar. (Formatted as an IANA Time Zone Database name, e.g. &quot;Europe/Zurich&quot;.) Optional.
}


Returns:
  An object of the form:

    {
  &quot;conferenceProperties&quot;: { # Conferencing properties for this calendar, for example what types of conferences are allowed.
    &quot;allowedConferenceSolutionTypes&quot;: [ # The types of conference solutions that are supported for this calendar.
        # The possible values are:
        # - &quot;eventHangout&quot;
        # - &quot;eventNamedHangout&quot;
        # - &quot;hangoutsMeet&quot;  Optional.
      &quot;A String&quot;,
    ],
  },
  &quot;description&quot;: &quot;A String&quot;, # Description of the calendar. Optional.
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;id&quot;: &quot;A String&quot;, # Identifier of the calendar. To retrieve IDs call the calendarList.list() method.
  &quot;kind&quot;: &quot;calendar#calendar&quot;, # Type of the resource (&quot;calendar#calendar&quot;).
  &quot;location&quot;: &quot;A String&quot;, # Geographic location of the calendar as free-form text. Optional.
  &quot;summary&quot;: &quot;A String&quot;, # Title of the calendar.
  &quot;timeZone&quot;: &quot;A String&quot;, # The time zone of the calendar. (Formatted as an IANA Time Zone Database name, e.g. &quot;Europe/Zurich&quot;.) Optional.
}</pre>
</div>

</body></html>