<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="securitycenter_v1.html">Security Command Center API</a> . <a href="securitycenter_v1.organizations.html">organizations</a> . <a href="securitycenter_v1.organizations.muteConfigs.html">muteConfigs</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(parent, body=None, muteConfigId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a mute config.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes an existing mute config.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a mute config.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists mute configs.</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 mute config.</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(parent, body=None, muteConfigId=None, x__xgafv=None)</code>
  <pre>Creates a mute config.

Args:
  parent: string, Required. Resource name of the new mute configs&#x27;s parent. Its format is &quot;organizations/[organization_id]&quot;, &quot;folders/[folder_id]&quot;, or &quot;projects/[project_id]&quot;. (required)
  body: object, The request body.
    The object takes the form of:

{ # A mute config is a Cloud SCC resource that contains the configuration to mute create/update events of findings.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the mute config was created. This field is set by the server and will be ignored if provided on config creation.
  &quot;description&quot;: &quot;A String&quot;, # A description of the mute config.
  &quot;displayName&quot;: &quot;A String&quot;, # The human readable name to be displayed for the mute config.
  &quot;filter&quot;: &quot;A String&quot;, # Required. An expression that defines the filter to apply across create/update events of findings. While creating a filter string, be mindful of the scope in which the mute configuration is being created. E.g., If a filter contains project = X but is created under the project = Y scope, it might not match any findings. The following field and operator combinations are supported: * severity: `=`, `:` * category: `=`, `:` * resource.name: `=`, `:` * resource.project_name: `=`, `:` * resource.project_display_name: `=`, `:` * resource.folders.resource_folder: `=`, `:` * resource.parent_name: `=`, `:` * resource.parent_display_name: `=`, `:` * resource.type: `=`, `:` * finding_class: `=`, `:` * indicator.ip_addresses: `=`, `:` * indicator.domains: `=`, `:`
  &quot;mostRecentEditor&quot;: &quot;A String&quot;, # Output only. Email address of the user who last edited the mute config. This field is set by the server and will be ignored if provided on config creation or update.
  &quot;name&quot;: &quot;A String&quot;, # This field will be ignored if provided on config creation. Format &quot;organizations/{organization}/muteConfigs/{mute_config}&quot; &quot;folders/{folder}/muteConfigs/{mute_config}&quot; &quot;projects/{project}/muteConfigs/{mute_config}&quot;
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The most recent time at which the mute config was updated. This field is set by the server and will be ignored if provided on config creation or update.
}

  muteConfigId: string, Required. Unique identifier provided by the client within the parent scope. It must consist of lower case letters, numbers, and hyphen, with the first character a letter, the last a letter or a number, and a 63 character maximum.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A mute config is a Cloud SCC resource that contains the configuration to mute create/update events of findings.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the mute config was created. This field is set by the server and will be ignored if provided on config creation.
  &quot;description&quot;: &quot;A String&quot;, # A description of the mute config.
  &quot;displayName&quot;: &quot;A String&quot;, # The human readable name to be displayed for the mute config.
  &quot;filter&quot;: &quot;A String&quot;, # Required. An expression that defines the filter to apply across create/update events of findings. While creating a filter string, be mindful of the scope in which the mute configuration is being created. E.g., If a filter contains project = X but is created under the project = Y scope, it might not match any findings. The following field and operator combinations are supported: * severity: `=`, `:` * category: `=`, `:` * resource.name: `=`, `:` * resource.project_name: `=`, `:` * resource.project_display_name: `=`, `:` * resource.folders.resource_folder: `=`, `:` * resource.parent_name: `=`, `:` * resource.parent_display_name: `=`, `:` * resource.type: `=`, `:` * finding_class: `=`, `:` * indicator.ip_addresses: `=`, `:` * indicator.domains: `=`, `:`
  &quot;mostRecentEditor&quot;: &quot;A String&quot;, # Output only. Email address of the user who last edited the mute config. This field is set by the server and will be ignored if provided on config creation or update.
  &quot;name&quot;: &quot;A String&quot;, # This field will be ignored if provided on config creation. Format &quot;organizations/{organization}/muteConfigs/{mute_config}&quot; &quot;folders/{folder}/muteConfigs/{mute_config}&quot; &quot;projects/{project}/muteConfigs/{mute_config}&quot;
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The most recent time at which the mute config was updated. This field is set by the server and will be ignored if provided on config creation or update.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes an existing mute config.

Args:
  name: string, Required. Name of the mute config to delete. Its format is organizations/{organization}/muteConfigs/{config_id}, folders/{folder}/muteConfigs/{config_id}, or projects/{project}/muteConfigs/{config_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 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); } The JSON representation for `Empty` is empty JSON object `{}`.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets a mute config.

Args:
  name: string, Required. Name of the mute config to retrieve. Its format is organizations/{organization}/muteConfigs/{config_id}, folders/{folder}/muteConfigs/{config_id}, or projects/{project}/muteConfigs/{config_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 mute config is a Cloud SCC resource that contains the configuration to mute create/update events of findings.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the mute config was created. This field is set by the server and will be ignored if provided on config creation.
  &quot;description&quot;: &quot;A String&quot;, # A description of the mute config.
  &quot;displayName&quot;: &quot;A String&quot;, # The human readable name to be displayed for the mute config.
  &quot;filter&quot;: &quot;A String&quot;, # Required. An expression that defines the filter to apply across create/update events of findings. While creating a filter string, be mindful of the scope in which the mute configuration is being created. E.g., If a filter contains project = X but is created under the project = Y scope, it might not match any findings. The following field and operator combinations are supported: * severity: `=`, `:` * category: `=`, `:` * resource.name: `=`, `:` * resource.project_name: `=`, `:` * resource.project_display_name: `=`, `:` * resource.folders.resource_folder: `=`, `:` * resource.parent_name: `=`, `:` * resource.parent_display_name: `=`, `:` * resource.type: `=`, `:` * finding_class: `=`, `:` * indicator.ip_addresses: `=`, `:` * indicator.domains: `=`, `:`
  &quot;mostRecentEditor&quot;: &quot;A String&quot;, # Output only. Email address of the user who last edited the mute config. This field is set by the server and will be ignored if provided on config creation or update.
  &quot;name&quot;: &quot;A String&quot;, # This field will be ignored if provided on config creation. Format &quot;organizations/{organization}/muteConfigs/{mute_config}&quot; &quot;folders/{folder}/muteConfigs/{mute_config}&quot; &quot;projects/{project}/muteConfigs/{mute_config}&quot;
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The most recent time at which the mute config was updated. This field is set by the server and will be ignored if provided on config creation or update.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists mute configs.

Args:
  parent: string, Required. The parent, which owns the collection of mute configs. Its format is &quot;organizations/[organization_id]&quot;, &quot;folders/[folder_id]&quot;, &quot;projects/[project_id]&quot;. (required)
  pageSize: integer, The maximum number of configs to return. The service may return fewer than this value. If unspecified, at most 10 configs will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.
  pageToken: string, A page token, received from a previous `ListMuteConfigs` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListMuteConfigs` must match the call that provided the page token.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for listing mute configs.
  &quot;muteConfigs&quot;: [ # The mute configs from the specified parent.
    { # A mute config is a Cloud SCC resource that contains the configuration to mute create/update events of findings.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the mute config was created. This field is set by the server and will be ignored if provided on config creation.
      &quot;description&quot;: &quot;A String&quot;, # A description of the mute config.
      &quot;displayName&quot;: &quot;A String&quot;, # The human readable name to be displayed for the mute config.
      &quot;filter&quot;: &quot;A String&quot;, # Required. An expression that defines the filter to apply across create/update events of findings. While creating a filter string, be mindful of the scope in which the mute configuration is being created. E.g., If a filter contains project = X but is created under the project = Y scope, it might not match any findings. The following field and operator combinations are supported: * severity: `=`, `:` * category: `=`, `:` * resource.name: `=`, `:` * resource.project_name: `=`, `:` * resource.project_display_name: `=`, `:` * resource.folders.resource_folder: `=`, `:` * resource.parent_name: `=`, `:` * resource.parent_display_name: `=`, `:` * resource.type: `=`, `:` * finding_class: `=`, `:` * indicator.ip_addresses: `=`, `:` * indicator.domains: `=`, `:`
      &quot;mostRecentEditor&quot;: &quot;A String&quot;, # Output only. Email address of the user who last edited the mute config. This field is set by the server and will be ignored if provided on config creation or update.
      &quot;name&quot;: &quot;A String&quot;, # This field will be ignored if provided on config creation. Format &quot;organizations/{organization}/muteConfigs/{mute_config}&quot; &quot;folders/{folder}/muteConfigs/{mute_config}&quot; &quot;projects/{project}/muteConfigs/{mute_config}&quot;
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The most recent time at which the mute config was updated. This field is set by the server and will be ignored if provided on config creation or update.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.
}</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 mute config.

Args:
  name: string, This field will be ignored if provided on config creation. Format &quot;organizations/{organization}/muteConfigs/{mute_config}&quot; &quot;folders/{folder}/muteConfigs/{mute_config}&quot; &quot;projects/{project}/muteConfigs/{mute_config}&quot; (required)
  body: object, The request body.
    The object takes the form of:

{ # A mute config is a Cloud SCC resource that contains the configuration to mute create/update events of findings.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the mute config was created. This field is set by the server and will be ignored if provided on config creation.
  &quot;description&quot;: &quot;A String&quot;, # A description of the mute config.
  &quot;displayName&quot;: &quot;A String&quot;, # The human readable name to be displayed for the mute config.
  &quot;filter&quot;: &quot;A String&quot;, # Required. An expression that defines the filter to apply across create/update events of findings. While creating a filter string, be mindful of the scope in which the mute configuration is being created. E.g., If a filter contains project = X but is created under the project = Y scope, it might not match any findings. The following field and operator combinations are supported: * severity: `=`, `:` * category: `=`, `:` * resource.name: `=`, `:` * resource.project_name: `=`, `:` * resource.project_display_name: `=`, `:` * resource.folders.resource_folder: `=`, `:` * resource.parent_name: `=`, `:` * resource.parent_display_name: `=`, `:` * resource.type: `=`, `:` * finding_class: `=`, `:` * indicator.ip_addresses: `=`, `:` * indicator.domains: `=`, `:`
  &quot;mostRecentEditor&quot;: &quot;A String&quot;, # Output only. Email address of the user who last edited the mute config. This field is set by the server and will be ignored if provided on config creation or update.
  &quot;name&quot;: &quot;A String&quot;, # This field will be ignored if provided on config creation. Format &quot;organizations/{organization}/muteConfigs/{mute_config}&quot; &quot;folders/{folder}/muteConfigs/{mute_config}&quot; &quot;projects/{project}/muteConfigs/{mute_config}&quot;
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The most recent time at which the mute config was updated. This field is set by the server and will be ignored if provided on config creation or update.
}

  updateMask: string, The list of fields to be updated. If empty all mutable fields will be updated.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A mute config is a Cloud SCC resource that contains the configuration to mute create/update events of findings.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the mute config was created. This field is set by the server and will be ignored if provided on config creation.
  &quot;description&quot;: &quot;A String&quot;, # A description of the mute config.
  &quot;displayName&quot;: &quot;A String&quot;, # The human readable name to be displayed for the mute config.
  &quot;filter&quot;: &quot;A String&quot;, # Required. An expression that defines the filter to apply across create/update events of findings. While creating a filter string, be mindful of the scope in which the mute configuration is being created. E.g., If a filter contains project = X but is created under the project = Y scope, it might not match any findings. The following field and operator combinations are supported: * severity: `=`, `:` * category: `=`, `:` * resource.name: `=`, `:` * resource.project_name: `=`, `:` * resource.project_display_name: `=`, `:` * resource.folders.resource_folder: `=`, `:` * resource.parent_name: `=`, `:` * resource.parent_display_name: `=`, `:` * resource.type: `=`, `:` * finding_class: `=`, `:` * indicator.ip_addresses: `=`, `:` * indicator.domains: `=`, `:`
  &quot;mostRecentEditor&quot;: &quot;A String&quot;, # Output only. Email address of the user who last edited the mute config. This field is set by the server and will be ignored if provided on config creation or update.
  &quot;name&quot;: &quot;A String&quot;, # This field will be ignored if provided on config creation. Format &quot;organizations/{organization}/muteConfigs/{mute_config}&quot; &quot;folders/{folder}/muteConfigs/{mute_config}&quot; &quot;projects/{project}/muteConfigs/{mute_config}&quot;
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The most recent time at which the mute config was updated. This field is set by the server and will be ignored if provided on config creation or update.
}</pre>
</div>

</body></html>