<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.acl.html">acl</a></h1>
<h2>Instance Methods</h2>
<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, ruleId)</a></code></p>
<p class="firstline">Deletes an access control rule.</p>
<p class="toc_element">
  <code><a href="#get">get(calendarId, ruleId)</a></code></p>
<p class="firstline">Returns an access control rule.</p>
<p class="toc_element">
  <code><a href="#insert">insert(calendarId, body=None, sendNotifications=None)</a></code></p>
<p class="firstline">Creates an access control rule.</p>
<p class="toc_element">
  <code><a href="#list">list(calendarId, maxResults=None, pageToken=None, showDeleted=None, syncToken=None)</a></code></p>
<p class="firstline">Returns the rules in the access control list for the calendar.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(calendarId, ruleId, body=None, sendNotifications=None)</a></code></p>
<p class="firstline">Updates an access control rule. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(calendarId, ruleId, body=None, sendNotifications=None)</a></code></p>
<p class="firstline">Updates an access control rule.</p>
<p class="toc_element">
  <code><a href="#watch">watch(calendarId, body=None, maxResults=None, pageToken=None, showDeleted=None, syncToken=None)</a></code></p>
<p class="firstline">Watch for changes to ACL resources.</p>
<h3>Method Details</h3>
<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, ruleId)</code>
  <pre>Deletes an access control rule.

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)
  ruleId: string, ACL rule identifier. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(calendarId, ruleId)</code>
  <pre>Returns an access control rule.

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)
  ruleId: string, ACL rule identifier. (required)

Returns:
  An object of the form:

    {
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;id&quot;: &quot;A String&quot;, # Identifier of the Access Control List (ACL) rule. See Sharing calendars.
  &quot;kind&quot;: &quot;calendar#aclRule&quot;, # Type of the resource (&quot;calendar#aclRule&quot;).
  &quot;role&quot;: &quot;A String&quot;, # The role assigned to the scope. Possible values are:
      # - &quot;none&quot; - Provides no access.
      # - &quot;freeBusyReader&quot; - Provides read access to free/busy information.
      # - &quot;reader&quot; - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden.
      # - &quot;writer&quot; - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible.
      # - &quot;owner&quot; - Provides ownership of the calendar. This role has all of the permissions of the writer role with the additional ability to see and manipulate ACLs.
  &quot;scope&quot;: { # The extent to which calendar access is granted by this ACL rule.
    &quot;type&quot;: &quot;A String&quot;, # The type of the scope. Possible values are:
        # - &quot;default&quot; - The public scope. This is the default value.
        # - &quot;user&quot; - Limits the scope to a single user.
        # - &quot;group&quot; - Limits the scope to a group.
        # - &quot;domain&quot; - Limits the scope to a domain.  Note: The permissions granted to the &quot;default&quot;, or public, scope apply to any user, authenticated or not.
    &quot;value&quot;: &quot;A String&quot;, # The email address of a user or group, or the name of a domain, depending on the scope type. Omitted for type &quot;default&quot;.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(calendarId, body=None, sendNotifications=None)</code>
  <pre>Creates an access control rule.

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;etag&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;id&quot;: &quot;A String&quot;, # Identifier of the Access Control List (ACL) rule. See Sharing calendars.
  &quot;kind&quot;: &quot;calendar#aclRule&quot;, # Type of the resource (&quot;calendar#aclRule&quot;).
  &quot;role&quot;: &quot;A String&quot;, # The role assigned to the scope. Possible values are:
      # - &quot;none&quot; - Provides no access.
      # - &quot;freeBusyReader&quot; - Provides read access to free/busy information.
      # - &quot;reader&quot; - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden.
      # - &quot;writer&quot; - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible.
      # - &quot;owner&quot; - Provides ownership of the calendar. This role has all of the permissions of the writer role with the additional ability to see and manipulate ACLs.
  &quot;scope&quot;: { # The extent to which calendar access is granted by this ACL rule.
    &quot;type&quot;: &quot;A String&quot;, # The type of the scope. Possible values are:
        # - &quot;default&quot; - The public scope. This is the default value.
        # - &quot;user&quot; - Limits the scope to a single user.
        # - &quot;group&quot; - Limits the scope to a group.
        # - &quot;domain&quot; - Limits the scope to a domain.  Note: The permissions granted to the &quot;default&quot;, or public, scope apply to any user, authenticated or not.
    &quot;value&quot;: &quot;A String&quot;, # The email address of a user or group, or the name of a domain, depending on the scope type. Omitted for type &quot;default&quot;.
  },
}

  sendNotifications: boolean, Whether to send notifications about the calendar sharing change. Optional. The default is True.

Returns:
  An object of the form:

    {
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;id&quot;: &quot;A String&quot;, # Identifier of the Access Control List (ACL) rule. See Sharing calendars.
  &quot;kind&quot;: &quot;calendar#aclRule&quot;, # Type of the resource (&quot;calendar#aclRule&quot;).
  &quot;role&quot;: &quot;A String&quot;, # The role assigned to the scope. Possible values are:
      # - &quot;none&quot; - Provides no access.
      # - &quot;freeBusyReader&quot; - Provides read access to free/busy information.
      # - &quot;reader&quot; - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden.
      # - &quot;writer&quot; - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible.
      # - &quot;owner&quot; - Provides ownership of the calendar. This role has all of the permissions of the writer role with the additional ability to see and manipulate ACLs.
  &quot;scope&quot;: { # The extent to which calendar access is granted by this ACL rule.
    &quot;type&quot;: &quot;A String&quot;, # The type of the scope. Possible values are:
        # - &quot;default&quot; - The public scope. This is the default value.
        # - &quot;user&quot; - Limits the scope to a single user.
        # - &quot;group&quot; - Limits the scope to a group.
        # - &quot;domain&quot; - Limits the scope to a domain.  Note: The permissions granted to the &quot;default&quot;, or public, scope apply to any user, authenticated or not.
    &quot;value&quot;: &quot;A String&quot;, # The email address of a user or group, or the name of a domain, depending on the scope type. Omitted for type &quot;default&quot;.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(calendarId, maxResults=None, pageToken=None, showDeleted=None, syncToken=None)</code>
  <pre>Returns the rules in the access control list for the 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)
  maxResults: integer, Maximum number of entries returned on one result page. By default the value is 100 entries. The page size can never be larger than 250 entries. Optional.
  pageToken: string, Token specifying which result page to return. Optional.
  showDeleted: boolean, Whether to include deleted ACLs in the result. Deleted ACLs are represented by role equal to &quot;none&quot;. Deleted ACLs will always be included if syncToken is provided. Optional. The default is False.
  syncToken: string, Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then. All entries deleted since the previous list request will always be in the result set and it is not allowed to set showDeleted to False.
If the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken.
Learn more about incremental synchronization.
Optional. The default is to return all entries.

Returns:
  An object of the form:

    {
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the collection.
  &quot;items&quot;: [ # List of rules on the access control list.
    {
      &quot;etag&quot;: &quot;A String&quot;, # ETag of the resource.
      &quot;id&quot;: &quot;A String&quot;, # Identifier of the Access Control List (ACL) rule. See Sharing calendars.
      &quot;kind&quot;: &quot;calendar#aclRule&quot;, # Type of the resource (&quot;calendar#aclRule&quot;).
      &quot;role&quot;: &quot;A String&quot;, # The role assigned to the scope. Possible values are:
          # - &quot;none&quot; - Provides no access.
          # - &quot;freeBusyReader&quot; - Provides read access to free/busy information.
          # - &quot;reader&quot; - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden.
          # - &quot;writer&quot; - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible.
          # - &quot;owner&quot; - Provides ownership of the calendar. This role has all of the permissions of the writer role with the additional ability to see and manipulate ACLs.
      &quot;scope&quot;: { # The extent to which calendar access is granted by this ACL rule.
        &quot;type&quot;: &quot;A String&quot;, # The type of the scope. Possible values are:
            # - &quot;default&quot; - The public scope. This is the default value.
            # - &quot;user&quot; - Limits the scope to a single user.
            # - &quot;group&quot; - Limits the scope to a group.
            # - &quot;domain&quot; - Limits the scope to a domain.  Note: The permissions granted to the &quot;default&quot;, or public, scope apply to any user, authenticated or not.
        &quot;value&quot;: &quot;A String&quot;, # The email address of a user or group, or the name of a domain, depending on the scope type. Omitted for type &quot;default&quot;.
      },
    },
  ],
  &quot;kind&quot;: &quot;calendar#acl&quot;, # Type of the collection (&quot;calendar#acl&quot;).
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token used to access the next page of this result. Omitted if no further results are available, in which case nextSyncToken is provided.
  &quot;nextSyncToken&quot;: &quot;A String&quot;, # Token used at a later point in time to retrieve only the entries that have changed since this result was returned. Omitted if further results are available, in which case nextPageToken is provided.
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(calendarId, ruleId, body=None, sendNotifications=None)</code>
  <pre>Updates an access control rule. 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)
  ruleId: string, ACL rule identifier. (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;id&quot;: &quot;A String&quot;, # Identifier of the Access Control List (ACL) rule. See Sharing calendars.
  &quot;kind&quot;: &quot;calendar#aclRule&quot;, # Type of the resource (&quot;calendar#aclRule&quot;).
  &quot;role&quot;: &quot;A String&quot;, # The role assigned to the scope. Possible values are:
      # - &quot;none&quot; - Provides no access.
      # - &quot;freeBusyReader&quot; - Provides read access to free/busy information.
      # - &quot;reader&quot; - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden.
      # - &quot;writer&quot; - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible.
      # - &quot;owner&quot; - Provides ownership of the calendar. This role has all of the permissions of the writer role with the additional ability to see and manipulate ACLs.
  &quot;scope&quot;: { # The extent to which calendar access is granted by this ACL rule.
    &quot;type&quot;: &quot;A String&quot;, # The type of the scope. Possible values are:
        # - &quot;default&quot; - The public scope. This is the default value.
        # - &quot;user&quot; - Limits the scope to a single user.
        # - &quot;group&quot; - Limits the scope to a group.
        # - &quot;domain&quot; - Limits the scope to a domain.  Note: The permissions granted to the &quot;default&quot;, or public, scope apply to any user, authenticated or not.
    &quot;value&quot;: &quot;A String&quot;, # The email address of a user or group, or the name of a domain, depending on the scope type. Omitted for type &quot;default&quot;.
  },
}

  sendNotifications: boolean, Whether to send notifications about the calendar sharing change. Note that there are no notifications on access removal. Optional. The default is True.

Returns:
  An object of the form:

    {
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;id&quot;: &quot;A String&quot;, # Identifier of the Access Control List (ACL) rule. See Sharing calendars.
  &quot;kind&quot;: &quot;calendar#aclRule&quot;, # Type of the resource (&quot;calendar#aclRule&quot;).
  &quot;role&quot;: &quot;A String&quot;, # The role assigned to the scope. Possible values are:
      # - &quot;none&quot; - Provides no access.
      # - &quot;freeBusyReader&quot; - Provides read access to free/busy information.
      # - &quot;reader&quot; - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden.
      # - &quot;writer&quot; - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible.
      # - &quot;owner&quot; - Provides ownership of the calendar. This role has all of the permissions of the writer role with the additional ability to see and manipulate ACLs.
  &quot;scope&quot;: { # The extent to which calendar access is granted by this ACL rule.
    &quot;type&quot;: &quot;A String&quot;, # The type of the scope. Possible values are:
        # - &quot;default&quot; - The public scope. This is the default value.
        # - &quot;user&quot; - Limits the scope to a single user.
        # - &quot;group&quot; - Limits the scope to a group.
        # - &quot;domain&quot; - Limits the scope to a domain.  Note: The permissions granted to the &quot;default&quot;, or public, scope apply to any user, authenticated or not.
    &quot;value&quot;: &quot;A String&quot;, # The email address of a user or group, or the name of a domain, depending on the scope type. Omitted for type &quot;default&quot;.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="update">update(calendarId, ruleId, body=None, sendNotifications=None)</code>
  <pre>Updates an access control rule.

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)
  ruleId: string, ACL rule identifier. (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;id&quot;: &quot;A String&quot;, # Identifier of the Access Control List (ACL) rule. See Sharing calendars.
  &quot;kind&quot;: &quot;calendar#aclRule&quot;, # Type of the resource (&quot;calendar#aclRule&quot;).
  &quot;role&quot;: &quot;A String&quot;, # The role assigned to the scope. Possible values are:
      # - &quot;none&quot; - Provides no access.
      # - &quot;freeBusyReader&quot; - Provides read access to free/busy information.
      # - &quot;reader&quot; - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden.
      # - &quot;writer&quot; - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible.
      # - &quot;owner&quot; - Provides ownership of the calendar. This role has all of the permissions of the writer role with the additional ability to see and manipulate ACLs.
  &quot;scope&quot;: { # The extent to which calendar access is granted by this ACL rule.
    &quot;type&quot;: &quot;A String&quot;, # The type of the scope. Possible values are:
        # - &quot;default&quot; - The public scope. This is the default value.
        # - &quot;user&quot; - Limits the scope to a single user.
        # - &quot;group&quot; - Limits the scope to a group.
        # - &quot;domain&quot; - Limits the scope to a domain.  Note: The permissions granted to the &quot;default&quot;, or public, scope apply to any user, authenticated or not.
    &quot;value&quot;: &quot;A String&quot;, # The email address of a user or group, or the name of a domain, depending on the scope type. Omitted for type &quot;default&quot;.
  },
}

  sendNotifications: boolean, Whether to send notifications about the calendar sharing change. Note that there are no notifications on access removal. Optional. The default is True.

Returns:
  An object of the form:

    {
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;id&quot;: &quot;A String&quot;, # Identifier of the Access Control List (ACL) rule. See Sharing calendars.
  &quot;kind&quot;: &quot;calendar#aclRule&quot;, # Type of the resource (&quot;calendar#aclRule&quot;).
  &quot;role&quot;: &quot;A String&quot;, # The role assigned to the scope. Possible values are:
      # - &quot;none&quot; - Provides no access.
      # - &quot;freeBusyReader&quot; - Provides read access to free/busy information.
      # - &quot;reader&quot; - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden.
      # - &quot;writer&quot; - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible.
      # - &quot;owner&quot; - Provides ownership of the calendar. This role has all of the permissions of the writer role with the additional ability to see and manipulate ACLs.
  &quot;scope&quot;: { # The extent to which calendar access is granted by this ACL rule.
    &quot;type&quot;: &quot;A String&quot;, # The type of the scope. Possible values are:
        # - &quot;default&quot; - The public scope. This is the default value.
        # - &quot;user&quot; - Limits the scope to a single user.
        # - &quot;group&quot; - Limits the scope to a group.
        # - &quot;domain&quot; - Limits the scope to a domain.  Note: The permissions granted to the &quot;default&quot;, or public, scope apply to any user, authenticated or not.
    &quot;value&quot;: &quot;A String&quot;, # The email address of a user or group, or the name of a domain, depending on the scope type. Omitted for type &quot;default&quot;.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="watch">watch(calendarId, body=None, maxResults=None, pageToken=None, showDeleted=None, syncToken=None)</code>
  <pre>Watch for changes to ACL resources.

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;address&quot;: &quot;A String&quot;, # The address where notifications are delivered for this channel.
  &quot;expiration&quot;: &quot;A String&quot;, # Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds. Optional.
  &quot;id&quot;: &quot;A String&quot;, # A UUID or similar unique string that identifies this channel.
  &quot;kind&quot;: &quot;api#channel&quot;, # Identifies this as a notification channel used to watch for changes to a resource, which is &quot;api#channel&quot;.
  &quot;params&quot;: { # Additional parameters controlling delivery channel behavior. Optional.
    &quot;a_key&quot;: &quot;A String&quot;, # Declares a new parameter by name.
  },
  &quot;payload&quot;: True or False, # A Boolean value to indicate whether payload is wanted. Optional.
  &quot;resourceId&quot;: &quot;A String&quot;, # An opaque ID that identifies the resource being watched on this channel. Stable across different API versions.
  &quot;resourceUri&quot;: &quot;A String&quot;, # A version-specific identifier for the watched resource.
  &quot;token&quot;: &quot;A String&quot;, # An arbitrary string delivered to the target address with each notification delivered over this channel. Optional.
  &quot;type&quot;: &quot;A String&quot;, # The type of delivery mechanism used for this channel. Valid values are &quot;web_hook&quot; (or &quot;webhook&quot;). Both values refer to a channel where Http requests are used to deliver messages.
}

  maxResults: integer, Maximum number of entries returned on one result page. By default the value is 100 entries. The page size can never be larger than 250 entries. Optional.
  pageToken: string, Token specifying which result page to return. Optional.
  showDeleted: boolean, Whether to include deleted ACLs in the result. Deleted ACLs are represented by role equal to &quot;none&quot;. Deleted ACLs will always be included if syncToken is provided. Optional. The default is False.
  syncToken: string, Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then. All entries deleted since the previous list request will always be in the result set and it is not allowed to set showDeleted to False.
If the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken.
Learn more about incremental synchronization.
Optional. The default is to return all entries.

Returns:
  An object of the form:

    {
  &quot;address&quot;: &quot;A String&quot;, # The address where notifications are delivered for this channel.
  &quot;expiration&quot;: &quot;A String&quot;, # Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds. Optional.
  &quot;id&quot;: &quot;A String&quot;, # A UUID or similar unique string that identifies this channel.
  &quot;kind&quot;: &quot;api#channel&quot;, # Identifies this as a notification channel used to watch for changes to a resource, which is &quot;api#channel&quot;.
  &quot;params&quot;: { # Additional parameters controlling delivery channel behavior. Optional.
    &quot;a_key&quot;: &quot;A String&quot;, # Declares a new parameter by name.
  },
  &quot;payload&quot;: True or False, # A Boolean value to indicate whether payload is wanted. Optional.
  &quot;resourceId&quot;: &quot;A String&quot;, # An opaque ID that identifies the resource being watched on this channel. Stable across different API versions.
  &quot;resourceUri&quot;: &quot;A String&quot;, # A version-specific identifier for the watched resource.
  &quot;token&quot;: &quot;A String&quot;, # An arbitrary string delivered to the target address with each notification delivered over this channel. Optional.
  &quot;type&quot;: &quot;A String&quot;, # The type of delivery mechanism used for this channel. Valid values are &quot;web_hook&quot; (or &quot;webhook&quot;). Both values refer to a channel where Http requests are used to deliver messages.
}</pre>
</div>

</body></html>