<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="monitoring_v3.html">Cloud Monitoring API</a> . <a href="monitoring_v3.projects.html">projects</a> . <a href="monitoring_v3.projects.notificationChannels.html">notificationChannels</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="#create">create(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new notification channel, representing a single notification endpoint such as an email address, SMS number, or PagerDuty service.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, force=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a notification channel.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a single notification channel. The channel includes the relevant configuration details with which the channel was created. However, the response may truncate or omit passwords, API keys, or other private key matter and thus the response may not be 100% identical to the information that was supplied in the call to the create method.</p>
<p class="toc_element">
  <code><a href="#getVerificationCode">getVerificationCode(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Requests a verification code for an already verified channel that can then be used in a call to VerifyNotificationChannel() on a different channel with an equivalent identity in the same or in a different project. This makes it possible to copy a channel between projects without requiring manual reverification of the channel. If the channel is not in the verified state, this method will fail (in other words, this may only be used if the SendNotificationChannelVerificationCode and VerifyNotificationChannel paths have already been used to put the given channel into the verified state).There is no guarantee that the verification codes returned by this method will be of a similar structure or form as the ones that are delivered to the channel via SendNotificationChannelVerificationCode; while VerifyNotificationChannel() will recognize both the codes delivered via SendNotificationChannelVerificationCode() and returned from GetNotificationChannelVerificationCode(), it is typically the case that the verification codes delivered via SendNotificationChannelVerificationCode() will be shorter and also have a shorter expiration (e.g. codes such as "G-123456") whereas GetVerificationCode() will typically return a much longer, websafe base 64 encoded string that has a longer expiration time.</p>
<p class="toc_element">
  <code><a href="#list">list(name, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the notification channels that have been created for the project.</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(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a notification channel. Fields not specified in the field mask remain unchanged.</p>
<p class="toc_element">
  <code><a href="#sendVerificationCode">sendVerificationCode(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Causes a verification code to be delivered to the channel. The code can then be supplied in VerifyNotificationChannel to verify the channel.</p>
<p class="toc_element">
  <code><a href="#verify">verify(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Verifies a NotificationChannel by proving receipt of the code delivered to the channel as a result of calling SendNotificationChannelVerificationCode.</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="create">create(name, body=None, x__xgafv=None)</code>
  <pre>Creates a new notification channel, representing a single notification endpoint such as an email address, SMS number, or PagerDuty service.

Args:
  name: string, Required. The project (https://cloud.google.com/monitoring/api/v3#project_name) on which to execute the request. The format is: projects/[PROJECT_ID_OR_NUMBER] This names the container into which the channel will be written, this does not name the newly created channel. The resulting channel&#x27;s name will have a normalized version of this field as a prefix, but will add /notificationChannels/[CHANNEL_ID] to identify the channel. (required)
  body: object, The request body.
    The object takes the form of:

{ # A NotificationChannel is a medium through which an alert is delivered when a policy violation is detected. Examples of channels include email, SMS, and third-party messaging applications. Fields containing sensitive information like authentication tokens or contact info are only partially populated on retrieval.
  &quot;creationRecord&quot;: { # Describes a change made to a configuration. # Record of the creation of this channel.
    &quot;mutateTime&quot;: &quot;A String&quot;, # When the change occurred.
    &quot;mutatedBy&quot;: &quot;A String&quot;, # The email address of the user making the change.
  },
  &quot;description&quot;: &quot;A String&quot;, # An optional human-readable description of this notification channel. This description may provide additional details, beyond the display name, for the channel. This may not exceed 1024 Unicode characters.
  &quot;displayName&quot;: &quot;A String&quot;, # An optional human-readable name for this notification channel. It is recommended that you specify a non-empty and unique name in order to make it easier to identify the channels in your project, though this is not enforced. The display name is limited to 512 Unicode characters.
  &quot;enabled&quot;: True or False, # Whether notifications are forwarded to the described channel. This makes it possible to disable delivery of notifications to a particular channel without removing the channel from all alerting policies that reference the channel. This is a more convenient approach when the change is temporary and you want to receive notifications from the same set of alerting policies on the channel at some point in the future.
  &quot;labels&quot;: { # Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the NotificationChannelDescriptor.labels of the NotificationChannelDescriptor corresponding to the type field.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;mutationRecords&quot;: [ # Records of the modification of this channel.
    { # Describes a change made to a configuration.
      &quot;mutateTime&quot;: &quot;A String&quot;, # When the change occurred.
      &quot;mutatedBy&quot;: &quot;A String&quot;, # The email address of the user making the change.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The full REST resource name for this channel. The format is: projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID] The [CHANNEL_ID] is automatically assigned by the server on creation.
  &quot;type&quot;: &quot;A String&quot;, # The type of the notification channel. This field matches the value of the NotificationChannelDescriptor.type field.
  &quot;userLabels&quot;: { # User-supplied key/value data that does not need to conform to the corresponding NotificationChannelDescriptor&#x27;s schema, unlike the labels field. This field is intended to be used for organizing and identifying the NotificationChannel objects.The field can contain up to 64 entries. Each key and value is limited to 63 Unicode characters or 128 bytes, whichever is smaller. Labels and values can contain only lowercase letters, numerals, underscores, and dashes. Keys must begin with a letter.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;verificationStatus&quot;: &quot;A String&quot;, # Indicates whether this channel has been verified or not. On a ListNotificationChannels or GetNotificationChannel operation, this field is expected to be populated.If the value is UNVERIFIED, then it indicates that the channel is non-functioning (it both requires verification and lacks verification); otherwise, it is assumed that the channel works.If the channel is neither VERIFIED nor UNVERIFIED, it implies that the channel is of a type that does not require verification or that this specific channel has been exempted from verification because it was created prior to verification being required for channels of this type.This field cannot be modified using a standard UpdateNotificationChannel operation. To change the value of this field, you must call VerifyNotificationChannel.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A NotificationChannel is a medium through which an alert is delivered when a policy violation is detected. Examples of channels include email, SMS, and third-party messaging applications. Fields containing sensitive information like authentication tokens or contact info are only partially populated on retrieval.
  &quot;creationRecord&quot;: { # Describes a change made to a configuration. # Record of the creation of this channel.
    &quot;mutateTime&quot;: &quot;A String&quot;, # When the change occurred.
    &quot;mutatedBy&quot;: &quot;A String&quot;, # The email address of the user making the change.
  },
  &quot;description&quot;: &quot;A String&quot;, # An optional human-readable description of this notification channel. This description may provide additional details, beyond the display name, for the channel. This may not exceed 1024 Unicode characters.
  &quot;displayName&quot;: &quot;A String&quot;, # An optional human-readable name for this notification channel. It is recommended that you specify a non-empty and unique name in order to make it easier to identify the channels in your project, though this is not enforced. The display name is limited to 512 Unicode characters.
  &quot;enabled&quot;: True or False, # Whether notifications are forwarded to the described channel. This makes it possible to disable delivery of notifications to a particular channel without removing the channel from all alerting policies that reference the channel. This is a more convenient approach when the change is temporary and you want to receive notifications from the same set of alerting policies on the channel at some point in the future.
  &quot;labels&quot;: { # Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the NotificationChannelDescriptor.labels of the NotificationChannelDescriptor corresponding to the type field.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;mutationRecords&quot;: [ # Records of the modification of this channel.
    { # Describes a change made to a configuration.
      &quot;mutateTime&quot;: &quot;A String&quot;, # When the change occurred.
      &quot;mutatedBy&quot;: &quot;A String&quot;, # The email address of the user making the change.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The full REST resource name for this channel. The format is: projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID] The [CHANNEL_ID] is automatically assigned by the server on creation.
  &quot;type&quot;: &quot;A String&quot;, # The type of the notification channel. This field matches the value of the NotificationChannelDescriptor.type field.
  &quot;userLabels&quot;: { # User-supplied key/value data that does not need to conform to the corresponding NotificationChannelDescriptor&#x27;s schema, unlike the labels field. This field is intended to be used for organizing and identifying the NotificationChannel objects.The field can contain up to 64 entries. Each key and value is limited to 63 Unicode characters or 128 bytes, whichever is smaller. Labels and values can contain only lowercase letters, numerals, underscores, and dashes. Keys must begin with a letter.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;verificationStatus&quot;: &quot;A String&quot;, # Indicates whether this channel has been verified or not. On a ListNotificationChannels or GetNotificationChannel operation, this field is expected to be populated.If the value is UNVERIFIED, then it indicates that the channel is non-functioning (it both requires verification and lacks verification); otherwise, it is assumed that the channel works.If the channel is neither VERIFIED nor UNVERIFIED, it implies that the channel is of a type that does not require verification or that this specific channel has been exempted from verification because it was created prior to verification being required for channels of this type.This field cannot be modified using a standard UpdateNotificationChannel operation. To change the value of this field, you must call VerifyNotificationChannel.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, force=None, x__xgafv=None)</code>
  <pre>Deletes a notification channel.

Args:
  name: string, Required. The channel for which to execute the request. The format is: projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID]  (required)
  force: boolean, If true, the notification channel will be deleted regardless of its use in alert policies (the policies will be updated to remove the channel). If false, channels that are still referenced by an existing alerting policy will fail to be deleted in a delete operation.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets a single notification channel. The channel includes the relevant configuration details with which the channel was created. However, the response may truncate or omit passwords, API keys, or other private key matter and thus the response may not be 100% identical to the information that was supplied in the call to the create method.

Args:
  name: string, Required. The channel for which to execute the request. The format is: projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID]  (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A NotificationChannel is a medium through which an alert is delivered when a policy violation is detected. Examples of channels include email, SMS, and third-party messaging applications. Fields containing sensitive information like authentication tokens or contact info are only partially populated on retrieval.
  &quot;creationRecord&quot;: { # Describes a change made to a configuration. # Record of the creation of this channel.
    &quot;mutateTime&quot;: &quot;A String&quot;, # When the change occurred.
    &quot;mutatedBy&quot;: &quot;A String&quot;, # The email address of the user making the change.
  },
  &quot;description&quot;: &quot;A String&quot;, # An optional human-readable description of this notification channel. This description may provide additional details, beyond the display name, for the channel. This may not exceed 1024 Unicode characters.
  &quot;displayName&quot;: &quot;A String&quot;, # An optional human-readable name for this notification channel. It is recommended that you specify a non-empty and unique name in order to make it easier to identify the channels in your project, though this is not enforced. The display name is limited to 512 Unicode characters.
  &quot;enabled&quot;: True or False, # Whether notifications are forwarded to the described channel. This makes it possible to disable delivery of notifications to a particular channel without removing the channel from all alerting policies that reference the channel. This is a more convenient approach when the change is temporary and you want to receive notifications from the same set of alerting policies on the channel at some point in the future.
  &quot;labels&quot;: { # Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the NotificationChannelDescriptor.labels of the NotificationChannelDescriptor corresponding to the type field.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;mutationRecords&quot;: [ # Records of the modification of this channel.
    { # Describes a change made to a configuration.
      &quot;mutateTime&quot;: &quot;A String&quot;, # When the change occurred.
      &quot;mutatedBy&quot;: &quot;A String&quot;, # The email address of the user making the change.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The full REST resource name for this channel. The format is: projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID] The [CHANNEL_ID] is automatically assigned by the server on creation.
  &quot;type&quot;: &quot;A String&quot;, # The type of the notification channel. This field matches the value of the NotificationChannelDescriptor.type field.
  &quot;userLabels&quot;: { # User-supplied key/value data that does not need to conform to the corresponding NotificationChannelDescriptor&#x27;s schema, unlike the labels field. This field is intended to be used for organizing and identifying the NotificationChannel objects.The field can contain up to 64 entries. Each key and value is limited to 63 Unicode characters or 128 bytes, whichever is smaller. Labels and values can contain only lowercase letters, numerals, underscores, and dashes. Keys must begin with a letter.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;verificationStatus&quot;: &quot;A String&quot;, # Indicates whether this channel has been verified or not. On a ListNotificationChannels or GetNotificationChannel operation, this field is expected to be populated.If the value is UNVERIFIED, then it indicates that the channel is non-functioning (it both requires verification and lacks verification); otherwise, it is assumed that the channel works.If the channel is neither VERIFIED nor UNVERIFIED, it implies that the channel is of a type that does not require verification or that this specific channel has been exempted from verification because it was created prior to verification being required for channels of this type.This field cannot be modified using a standard UpdateNotificationChannel operation. To change the value of this field, you must call VerifyNotificationChannel.
}</pre>
</div>

<div class="method">
    <code class="details" id="getVerificationCode">getVerificationCode(name, body=None, x__xgafv=None)</code>
  <pre>Requests a verification code for an already verified channel that can then be used in a call to VerifyNotificationChannel() on a different channel with an equivalent identity in the same or in a different project. This makes it possible to copy a channel between projects without requiring manual reverification of the channel. If the channel is not in the verified state, this method will fail (in other words, this may only be used if the SendNotificationChannelVerificationCode and VerifyNotificationChannel paths have already been used to put the given channel into the verified state).There is no guarantee that the verification codes returned by this method will be of a similar structure or form as the ones that are delivered to the channel via SendNotificationChannelVerificationCode; while VerifyNotificationChannel() will recognize both the codes delivered via SendNotificationChannelVerificationCode() and returned from GetNotificationChannelVerificationCode(), it is typically the case that the verification codes delivered via SendNotificationChannelVerificationCode() will be shorter and also have a shorter expiration (e.g. codes such as &quot;G-123456&quot;) whereas GetVerificationCode() will typically return a much longer, websafe base 64 encoded string that has a longer expiration time.

Args:
  name: string, Required. The notification channel for which a verification code is to be generated and retrieved. This must name a channel that is already verified; if the specified channel is not verified, the request will fail. (required)
  body: object, The request body.
    The object takes the form of:

{ # The GetNotificationChannelVerificationCode request.
  &quot;expireTime&quot;: &quot;A String&quot;, # The desired expiration time. If specified, the API will guarantee that the returned code will not be valid after the specified timestamp; however, the API cannot guarantee that the returned code will be valid for at least as long as the requested time (the API puts an upper bound on the amount of time for which a code may be valid). If omitted, a default expiration will be used, which may be less than the max permissible expiration (so specifying an expiration may extend the code&#x27;s lifetime over omitting an expiration, even though the API does impose an upper limit on the maximum expiration that is permitted).
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The GetNotificationChannelVerificationCode request.
  &quot;code&quot;: &quot;A String&quot;, # The verification code, which may be used to verify other channels that have an equivalent identity (i.e. other channels of the same type with the same fingerprint such as other email channels with the same email address or other sms channels with the same number).
  &quot;expireTime&quot;: &quot;A String&quot;, # The expiration time associated with the code that was returned. If an expiration was provided in the request, this is the minimum of the requested expiration in the request and the max permitted expiration.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(name, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists the notification channels that have been created for the project.

Args:
  name: string, Required. The project (https://cloud.google.com/monitoring/api/v3#project_name) on which to execute the request. The format is: projects/[PROJECT_ID_OR_NUMBER] This names the container in which to look for the notification channels; it does not name a specific channel. To query a specific channel by REST resource name, use the GetNotificationChannel operation. (required)
  filter: string, If provided, this field specifies the criteria that must be met by notification channels to be included in the response.For more details, see sorting and filtering (https://cloud.google.com/monitoring/api/v3/sorting-and-filtering).
  orderBy: string, A comma-separated list of fields by which to sort the result. Supports the same set of fields as in filter. Entries can be prefixed with a minus sign to sort in descending rather than ascending order.For more details, see sorting and filtering (https://cloud.google.com/monitoring/api/v3/sorting-and-filtering).
  pageSize: integer, The maximum number of results to return in a single response. If not set to a positive number, a reasonable value will be chosen by the service.
  pageToken: string, If non-empty, page_token must contain a value returned as the next_page_token in a previous response to request the next set of results.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The ListNotificationChannels response.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # If not empty, indicates that there may be more results that match the request. Use the value in the page_token field in a subsequent request to fetch the next set of results. If empty, all results have been returned.
  &quot;notificationChannels&quot;: [ # The notification channels defined for the specified project.
    { # A NotificationChannel is a medium through which an alert is delivered when a policy violation is detected. Examples of channels include email, SMS, and third-party messaging applications. Fields containing sensitive information like authentication tokens or contact info are only partially populated on retrieval.
      &quot;creationRecord&quot;: { # Describes a change made to a configuration. # Record of the creation of this channel.
        &quot;mutateTime&quot;: &quot;A String&quot;, # When the change occurred.
        &quot;mutatedBy&quot;: &quot;A String&quot;, # The email address of the user making the change.
      },
      &quot;description&quot;: &quot;A String&quot;, # An optional human-readable description of this notification channel. This description may provide additional details, beyond the display name, for the channel. This may not exceed 1024 Unicode characters.
      &quot;displayName&quot;: &quot;A String&quot;, # An optional human-readable name for this notification channel. It is recommended that you specify a non-empty and unique name in order to make it easier to identify the channels in your project, though this is not enforced. The display name is limited to 512 Unicode characters.
      &quot;enabled&quot;: True or False, # Whether notifications are forwarded to the described channel. This makes it possible to disable delivery of notifications to a particular channel without removing the channel from all alerting policies that reference the channel. This is a more convenient approach when the change is temporary and you want to receive notifications from the same set of alerting policies on the channel at some point in the future.
      &quot;labels&quot;: { # Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the NotificationChannelDescriptor.labels of the NotificationChannelDescriptor corresponding to the type field.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;mutationRecords&quot;: [ # Records of the modification of this channel.
        { # Describes a change made to a configuration.
          &quot;mutateTime&quot;: &quot;A String&quot;, # When the change occurred.
          &quot;mutatedBy&quot;: &quot;A String&quot;, # The email address of the user making the change.
        },
      ],
      &quot;name&quot;: &quot;A String&quot;, # The full REST resource name for this channel. The format is: projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID] The [CHANNEL_ID] is automatically assigned by the server on creation.
      &quot;type&quot;: &quot;A String&quot;, # The type of the notification channel. This field matches the value of the NotificationChannelDescriptor.type field.
      &quot;userLabels&quot;: { # User-supplied key/value data that does not need to conform to the corresponding NotificationChannelDescriptor&#x27;s schema, unlike the labels field. This field is intended to be used for organizing and identifying the NotificationChannel objects.The field can contain up to 64 entries. Each key and value is limited to 63 Unicode characters or 128 bytes, whichever is smaller. Labels and values can contain only lowercase letters, numerals, underscores, and dashes. Keys must begin with a letter.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;verificationStatus&quot;: &quot;A String&quot;, # Indicates whether this channel has been verified or not. On a ListNotificationChannels or GetNotificationChannel operation, this field is expected to be populated.If the value is UNVERIFIED, then it indicates that the channel is non-functioning (it both requires verification and lacks verification); otherwise, it is assumed that the channel works.If the channel is neither VERIFIED nor UNVERIFIED, it implies that the channel is of a type that does not require verification or that this specific channel has been exempted from verification because it was created prior to verification being required for channels of this type.This field cannot be modified using a standard UpdateNotificationChannel operation. To change the value of this field, you must call VerifyNotificationChannel.
    },
  ],
  &quot;totalSize&quot;: 42, # The total number of notification channels in all pages. This number is only an estimate, and may change in subsequent pages. https://aip.dev/158
}</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(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates a notification channel. Fields not specified in the field mask remain unchanged.

Args:
  name: string, The full REST resource name for this channel. The format is: projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID] The [CHANNEL_ID] is automatically assigned by the server on creation. (required)
  body: object, The request body.
    The object takes the form of:

{ # A NotificationChannel is a medium through which an alert is delivered when a policy violation is detected. Examples of channels include email, SMS, and third-party messaging applications. Fields containing sensitive information like authentication tokens or contact info are only partially populated on retrieval.
  &quot;creationRecord&quot;: { # Describes a change made to a configuration. # Record of the creation of this channel.
    &quot;mutateTime&quot;: &quot;A String&quot;, # When the change occurred.
    &quot;mutatedBy&quot;: &quot;A String&quot;, # The email address of the user making the change.
  },
  &quot;description&quot;: &quot;A String&quot;, # An optional human-readable description of this notification channel. This description may provide additional details, beyond the display name, for the channel. This may not exceed 1024 Unicode characters.
  &quot;displayName&quot;: &quot;A String&quot;, # An optional human-readable name for this notification channel. It is recommended that you specify a non-empty and unique name in order to make it easier to identify the channels in your project, though this is not enforced. The display name is limited to 512 Unicode characters.
  &quot;enabled&quot;: True or False, # Whether notifications are forwarded to the described channel. This makes it possible to disable delivery of notifications to a particular channel without removing the channel from all alerting policies that reference the channel. This is a more convenient approach when the change is temporary and you want to receive notifications from the same set of alerting policies on the channel at some point in the future.
  &quot;labels&quot;: { # Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the NotificationChannelDescriptor.labels of the NotificationChannelDescriptor corresponding to the type field.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;mutationRecords&quot;: [ # Records of the modification of this channel.
    { # Describes a change made to a configuration.
      &quot;mutateTime&quot;: &quot;A String&quot;, # When the change occurred.
      &quot;mutatedBy&quot;: &quot;A String&quot;, # The email address of the user making the change.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The full REST resource name for this channel. The format is: projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID] The [CHANNEL_ID] is automatically assigned by the server on creation.
  &quot;type&quot;: &quot;A String&quot;, # The type of the notification channel. This field matches the value of the NotificationChannelDescriptor.type field.
  &quot;userLabels&quot;: { # User-supplied key/value data that does not need to conform to the corresponding NotificationChannelDescriptor&#x27;s schema, unlike the labels field. This field is intended to be used for organizing and identifying the NotificationChannel objects.The field can contain up to 64 entries. Each key and value is limited to 63 Unicode characters or 128 bytes, whichever is smaller. Labels and values can contain only lowercase letters, numerals, underscores, and dashes. Keys must begin with a letter.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;verificationStatus&quot;: &quot;A String&quot;, # Indicates whether this channel has been verified or not. On a ListNotificationChannels or GetNotificationChannel operation, this field is expected to be populated.If the value is UNVERIFIED, then it indicates that the channel is non-functioning (it both requires verification and lacks verification); otherwise, it is assumed that the channel works.If the channel is neither VERIFIED nor UNVERIFIED, it implies that the channel is of a type that does not require verification or that this specific channel has been exempted from verification because it was created prior to verification being required for channels of this type.This field cannot be modified using a standard UpdateNotificationChannel operation. To change the value of this field, you must call VerifyNotificationChannel.
}

  updateMask: string, The fields to update.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A NotificationChannel is a medium through which an alert is delivered when a policy violation is detected. Examples of channels include email, SMS, and third-party messaging applications. Fields containing sensitive information like authentication tokens or contact info are only partially populated on retrieval.
  &quot;creationRecord&quot;: { # Describes a change made to a configuration. # Record of the creation of this channel.
    &quot;mutateTime&quot;: &quot;A String&quot;, # When the change occurred.
    &quot;mutatedBy&quot;: &quot;A String&quot;, # The email address of the user making the change.
  },
  &quot;description&quot;: &quot;A String&quot;, # An optional human-readable description of this notification channel. This description may provide additional details, beyond the display name, for the channel. This may not exceed 1024 Unicode characters.
  &quot;displayName&quot;: &quot;A String&quot;, # An optional human-readable name for this notification channel. It is recommended that you specify a non-empty and unique name in order to make it easier to identify the channels in your project, though this is not enforced. The display name is limited to 512 Unicode characters.
  &quot;enabled&quot;: True or False, # Whether notifications are forwarded to the described channel. This makes it possible to disable delivery of notifications to a particular channel without removing the channel from all alerting policies that reference the channel. This is a more convenient approach when the change is temporary and you want to receive notifications from the same set of alerting policies on the channel at some point in the future.
  &quot;labels&quot;: { # Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the NotificationChannelDescriptor.labels of the NotificationChannelDescriptor corresponding to the type field.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;mutationRecords&quot;: [ # Records of the modification of this channel.
    { # Describes a change made to a configuration.
      &quot;mutateTime&quot;: &quot;A String&quot;, # When the change occurred.
      &quot;mutatedBy&quot;: &quot;A String&quot;, # The email address of the user making the change.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The full REST resource name for this channel. The format is: projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID] The [CHANNEL_ID] is automatically assigned by the server on creation.
  &quot;type&quot;: &quot;A String&quot;, # The type of the notification channel. This field matches the value of the NotificationChannelDescriptor.type field.
  &quot;userLabels&quot;: { # User-supplied key/value data that does not need to conform to the corresponding NotificationChannelDescriptor&#x27;s schema, unlike the labels field. This field is intended to be used for organizing and identifying the NotificationChannel objects.The field can contain up to 64 entries. Each key and value is limited to 63 Unicode characters or 128 bytes, whichever is smaller. Labels and values can contain only lowercase letters, numerals, underscores, and dashes. Keys must begin with a letter.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;verificationStatus&quot;: &quot;A String&quot;, # Indicates whether this channel has been verified or not. On a ListNotificationChannels or GetNotificationChannel operation, this field is expected to be populated.If the value is UNVERIFIED, then it indicates that the channel is non-functioning (it both requires verification and lacks verification); otherwise, it is assumed that the channel works.If the channel is neither VERIFIED nor UNVERIFIED, it implies that the channel is of a type that does not require verification or that this specific channel has been exempted from verification because it was created prior to verification being required for channels of this type.This field cannot be modified using a standard UpdateNotificationChannel operation. To change the value of this field, you must call VerifyNotificationChannel.
}</pre>
</div>

<div class="method">
    <code class="details" id="sendVerificationCode">sendVerificationCode(name, body=None, x__xgafv=None)</code>
  <pre>Causes a verification code to be delivered to the channel. The code can then be supplied in VerifyNotificationChannel to verify the channel.

Args:
  name: string, Required. The notification channel to which to send a verification code. (required)
  body: object, The request body.
    The object takes the form of:

{ # The SendNotificationChannelVerificationCode request.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
}</pre>
</div>

<div class="method">
    <code class="details" id="verify">verify(name, body=None, x__xgafv=None)</code>
  <pre>Verifies a NotificationChannel by proving receipt of the code delivered to the channel as a result of calling SendNotificationChannelVerificationCode.

Args:
  name: string, Required. The notification channel to verify. (required)
  body: object, The request body.
    The object takes the form of:

{ # The VerifyNotificationChannel request.
  &quot;code&quot;: &quot;A String&quot;, # Required. The verification code that was delivered to the channel as a result of invoking the SendNotificationChannelVerificationCode API method or that was retrieved from a verified channel via GetNotificationChannelVerificationCode. For example, one might have &quot;G-123456&quot; or &quot;TKNZGhhd2EyN3I1MnRnMjRv&quot; (in general, one is only guaranteed that the code is valid UTF-8; one should not make any assumptions regarding the structure or format of the code).
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A NotificationChannel is a medium through which an alert is delivered when a policy violation is detected. Examples of channels include email, SMS, and third-party messaging applications. Fields containing sensitive information like authentication tokens or contact info are only partially populated on retrieval.
  &quot;creationRecord&quot;: { # Describes a change made to a configuration. # Record of the creation of this channel.
    &quot;mutateTime&quot;: &quot;A String&quot;, # When the change occurred.
    &quot;mutatedBy&quot;: &quot;A String&quot;, # The email address of the user making the change.
  },
  &quot;description&quot;: &quot;A String&quot;, # An optional human-readable description of this notification channel. This description may provide additional details, beyond the display name, for the channel. This may not exceed 1024 Unicode characters.
  &quot;displayName&quot;: &quot;A String&quot;, # An optional human-readable name for this notification channel. It is recommended that you specify a non-empty and unique name in order to make it easier to identify the channels in your project, though this is not enforced. The display name is limited to 512 Unicode characters.
  &quot;enabled&quot;: True or False, # Whether notifications are forwarded to the described channel. This makes it possible to disable delivery of notifications to a particular channel without removing the channel from all alerting policies that reference the channel. This is a more convenient approach when the change is temporary and you want to receive notifications from the same set of alerting policies on the channel at some point in the future.
  &quot;labels&quot;: { # Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the NotificationChannelDescriptor.labels of the NotificationChannelDescriptor corresponding to the type field.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;mutationRecords&quot;: [ # Records of the modification of this channel.
    { # Describes a change made to a configuration.
      &quot;mutateTime&quot;: &quot;A String&quot;, # When the change occurred.
      &quot;mutatedBy&quot;: &quot;A String&quot;, # The email address of the user making the change.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The full REST resource name for this channel. The format is: projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID] The [CHANNEL_ID] is automatically assigned by the server on creation.
  &quot;type&quot;: &quot;A String&quot;, # The type of the notification channel. This field matches the value of the NotificationChannelDescriptor.type field.
  &quot;userLabels&quot;: { # User-supplied key/value data that does not need to conform to the corresponding NotificationChannelDescriptor&#x27;s schema, unlike the labels field. This field is intended to be used for organizing and identifying the NotificationChannel objects.The field can contain up to 64 entries. Each key and value is limited to 63 Unicode characters or 128 bytes, whichever is smaller. Labels and values can contain only lowercase letters, numerals, underscores, and dashes. Keys must begin with a letter.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;verificationStatus&quot;: &quot;A String&quot;, # Indicates whether this channel has been verified or not. On a ListNotificationChannels or GetNotificationChannel operation, this field is expected to be populated.If the value is UNVERIFIED, then it indicates that the channel is non-functioning (it both requires verification and lacks verification); otherwise, it is assumed that the channel works.If the channel is neither VERIFIED nor UNVERIFIED, it implies that the channel is of a type that does not require verification or that this specific channel has been exempted from verification because it was created prior to verification being required for channels of this type.This field cannot be modified using a standard UpdateNotificationChannel operation. To change the value of this field, you must call VerifyNotificationChannel.
}</pre>
</div>

</body></html>