<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="alertcenter_v1beta1.html">G Suite Alert Center API</a> . <a href="alertcenter_v1beta1.alerts.html">alerts</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="alertcenter_v1beta1.alerts.feedback.html">feedback()</a></code>
</p>
<p class="firstline">Returns the feedback Resource.</p>

<p class="toc_element">
  <code><a href="#batchDelete">batchDelete(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Performs batch delete operation on alerts.</p>
<p class="toc_element">
  <code><a href="#batchUndelete">batchUndelete(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Performs batch undelete operation on alerts.</p>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#delete">delete(alertId, customerId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Marks the specified alert for deletion. An alert that has been marked for deletion is removed from Alert Center after 30 days. Marking an alert for deletion has no effect on an alert which has already been marked for deletion. Attempting to mark a nonexistent alert for deletion results in a `NOT_FOUND` error.</p>
<p class="toc_element">
  <code><a href="#get">get(alertId, customerId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the specified alert. Attempting to get a nonexistent alert returns `NOT_FOUND` error.</p>
<p class="toc_element">
  <code><a href="#getMetadata">getMetadata(alertId, customerId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the metadata of an alert. Attempting to get metadata for a non-existent alert returns `NOT_FOUND` error.</p>
<p class="toc_element">
  <code><a href="#list">list(customerId=None, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the alerts.</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="#undelete">undelete(alertId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Restores, or "undeletes", an alert that was marked for deletion within the past 30 days. Attempting to undelete an alert which was marked for deletion over 30 days ago (which has been removed from the Alert Center database) or a nonexistent alert returns a `NOT_FOUND` error. Attempting to undelete an alert which has not been marked for deletion has no effect.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="batchDelete">batchDelete(body=None, x__xgafv=None)</code>
  <pre>Performs batch delete operation on alerts.

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

{ # A request to perform batch delete on alerts.
  &quot;alertId&quot;: [ # Required. list of alert IDs.
    &quot;A String&quot;,
  ],
  &quot;customerId&quot;: &quot;A String&quot;, # Optional. The unique identifier of the G Suite organization account of the customer the alerts are associated with.
}

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

Returns:
  An object of the form:

    { # Response to batch delete operation on alerts.
  &quot;failedAlertStatus&quot;: { # The status details for each failed alert_id.
    &quot;a_key&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
    },
  },
  &quot;successAlertIds&quot;: [ # The successful list of alert IDs.
    &quot;A String&quot;,
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="batchUndelete">batchUndelete(body=None, x__xgafv=None)</code>
  <pre>Performs batch undelete operation on alerts.

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

{ # A request to perform batch undelete on alerts.
  &quot;alertId&quot;: [ # Required. list of alert IDs.
    &quot;A String&quot;,
  ],
  &quot;customerId&quot;: &quot;A String&quot;, # Optional. The unique identifier of the G Suite organization account of the customer the alerts are associated with.
}

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

Returns:
  An object of the form:

    { # Response to batch undelete operation on alerts.
  &quot;failedAlertStatus&quot;: { # The status details for each failed alert_id.
    &quot;a_key&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
    },
  },
  &quot;successAlertIds&quot;: [ # The successful list of alert IDs.
    &quot;A String&quot;,
  ],
}</pre>
</div>

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

<div class="method">
    <code class="details" id="delete">delete(alertId, customerId=None, x__xgafv=None)</code>
  <pre>Marks the specified alert for deletion. An alert that has been marked for deletion is removed from Alert Center after 30 days. Marking an alert for deletion has no effect on an alert which has already been marked for deletion. Attempting to mark a nonexistent alert for deletion results in a `NOT_FOUND` error.

Args:
  alertId: string, Required. The identifier of the alert to delete. (required)
  customerId: string, Optional. The unique identifier of the G Suite organization account of the customer the alert is associated with. Inferred from the caller identity if not provided.
  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(alertId, customerId=None, x__xgafv=None)</code>
  <pre>Gets the specified alert. Attempting to get a nonexistent alert returns `NOT_FOUND` error.

Args:
  alertId: string, Required. The identifier of the alert to retrieve. (required)
  customerId: string, Optional. The unique identifier of the G Suite organization account of the customer the alert is associated with. Inferred from the caller identity if not provided.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An alert affecting a customer.
  &quot;alertId&quot;: &quot;A String&quot;, # Output only. The unique identifier for the alert.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time this alert was created.
  &quot;customerId&quot;: &quot;A String&quot;, # Output only. The unique identifier of the Google account of the customer.
  &quot;data&quot;: { # Optional. The data associated with this alert, for example google.apps.alertcenter.type.DeviceCompromised.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;deleted&quot;: True or False, # Output only. `True` if this alert is marked for deletion.
  &quot;endTime&quot;: &quot;A String&quot;, # Optional. The time the event that caused this alert ceased being active. If provided, the end time must not be earlier than the start time. If not provided, it indicates an ongoing alert.
  &quot;etag&quot;: &quot;A String&quot;, # Optional. `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of an alert from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform alert updates in order to avoid race conditions: An `etag` is returned in the response which contains alerts, and systems are expected to put that etag in the request to update alert to ensure that their change will be applied to the same version of the alert. If no `etag` is provided in the call to update alert, then the existing alert is overwritten blindly.
  &quot;metadata&quot;: { # An alert metadata. # Output only. The metadata associated with this alert.
    &quot;alertId&quot;: &quot;A String&quot;, # Output only. The alert identifier.
    &quot;assignee&quot;: &quot;A String&quot;, # The email address of the user assigned to the alert.
    &quot;customerId&quot;: &quot;A String&quot;, # Output only. The unique identifier of the Google account of the customer.
    &quot;etag&quot;: &quot;A String&quot;, # Optional. `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of an alert metadata from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform metatdata updates in order to avoid race conditions: An `etag` is returned in the response which contains alert metadata, and systems are expected to put that etag in the request to update alert metadata to ensure that their change will be applied to the same version of the alert metadata. If no `etag` is provided in the call to update alert metadata, then the existing alert metadata is overwritten blindly.
    &quot;severity&quot;: &quot;A String&quot;, # The severity value of the alert. Alert Center will set this field at alert creation time, default&#x27;s to an empty string when it could not be determined. The supported values for update actions on this field are the following: * HIGH * MEDIUM * LOW
    &quot;status&quot;: &quot;A String&quot;, # The current status of the alert. The supported values are the following: * NOT_STARTED * IN_PROGRESS * CLOSED
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this metadata was last updated.
  },
  &quot;securityInvestigationToolLink&quot;: &quot;A String&quot;, # Output only. An optional [Security Investigation Tool](https://support.google.com/a/answer/7575955) query for this alert.
  &quot;source&quot;: &quot;A String&quot;, # Required. A unique identifier for the system that reported the alert. This is output only after alert is created. Supported sources are any of the following: * Google Operations * Mobile device management * Gmail phishing * Domain wide takeout * State sponsored attack * Google identity
  &quot;startTime&quot;: &quot;A String&quot;, # Required. The time the event that caused this alert was started or detected.
  &quot;type&quot;: &quot;A String&quot;, # Required. The type of the alert. This is output only after alert is created. For a list of available alert types see [G Suite Alert types](/admin-sdk/alertcenter/reference/alert-types).
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this alert was last updated.
}</pre>
</div>

<div class="method">
    <code class="details" id="getMetadata">getMetadata(alertId, customerId=None, x__xgafv=None)</code>
  <pre>Returns the metadata of an alert. Attempting to get metadata for a non-existent alert returns `NOT_FOUND` error.

Args:
  alertId: string, Required. The identifier of the alert this metadata belongs to. (required)
  customerId: string, Optional. The unique identifier of the G Suite organization account of the customer the alert metadata is associated with. Inferred from the caller identity if not provided.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An alert metadata.
  &quot;alertId&quot;: &quot;A String&quot;, # Output only. The alert identifier.
  &quot;assignee&quot;: &quot;A String&quot;, # The email address of the user assigned to the alert.
  &quot;customerId&quot;: &quot;A String&quot;, # Output only. The unique identifier of the Google account of the customer.
  &quot;etag&quot;: &quot;A String&quot;, # Optional. `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of an alert metadata from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform metatdata updates in order to avoid race conditions: An `etag` is returned in the response which contains alert metadata, and systems are expected to put that etag in the request to update alert metadata to ensure that their change will be applied to the same version of the alert metadata. If no `etag` is provided in the call to update alert metadata, then the existing alert metadata is overwritten blindly.
  &quot;severity&quot;: &quot;A String&quot;, # The severity value of the alert. Alert Center will set this field at alert creation time, default&#x27;s to an empty string when it could not be determined. The supported values for update actions on this field are the following: * HIGH * MEDIUM * LOW
  &quot;status&quot;: &quot;A String&quot;, # The current status of the alert. The supported values are the following: * NOT_STARTED * IN_PROGRESS * CLOSED
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this metadata was last updated.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(customerId=None, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists the alerts.

Args:
  customerId: string, Optional. The unique identifier of the G Suite organization account of the customer the alerts are associated with. Inferred from the caller identity if not provided.
  filter: string, Optional. A query string for filtering alert results. For more details, see [Query filters](/admin-sdk/alertcenter/guides/query-filters) and [Supported query filter fields](/admin-sdk/alertcenter/reference/filter-fields#alerts.list).
  orderBy: string, Optional. The sort order of the list results. If not specified results may be returned in arbitrary order. You can sort the results in descending order based on the creation timestamp using `order_by=&quot;create_time desc&quot;`. Currently, supported sorting are `create_time asc`, `create_time desc`, `update_time desc`
  pageSize: integer, Optional. The requested page size. Server may return fewer items than requested. If unspecified, server picks an appropriate default.
  pageToken: string, Optional. A token identifying a page of results the server should return. If empty, a new iteration is started. To continue an iteration, pass in the value from the previous ListAlertsResponse&#x27;s next_page_token field.
  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 an alert listing request.
  &quot;alerts&quot;: [ # The list of alerts.
    { # An alert affecting a customer.
      &quot;alertId&quot;: &quot;A String&quot;, # Output only. The unique identifier for the alert.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time this alert was created.
      &quot;customerId&quot;: &quot;A String&quot;, # Output only. The unique identifier of the Google account of the customer.
      &quot;data&quot;: { # Optional. The data associated with this alert, for example google.apps.alertcenter.type.DeviceCompromised.
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
      &quot;deleted&quot;: True or False, # Output only. `True` if this alert is marked for deletion.
      &quot;endTime&quot;: &quot;A String&quot;, # Optional. The time the event that caused this alert ceased being active. If provided, the end time must not be earlier than the start time. If not provided, it indicates an ongoing alert.
      &quot;etag&quot;: &quot;A String&quot;, # Optional. `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of an alert from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform alert updates in order to avoid race conditions: An `etag` is returned in the response which contains alerts, and systems are expected to put that etag in the request to update alert to ensure that their change will be applied to the same version of the alert. If no `etag` is provided in the call to update alert, then the existing alert is overwritten blindly.
      &quot;metadata&quot;: { # An alert metadata. # Output only. The metadata associated with this alert.
        &quot;alertId&quot;: &quot;A String&quot;, # Output only. The alert identifier.
        &quot;assignee&quot;: &quot;A String&quot;, # The email address of the user assigned to the alert.
        &quot;customerId&quot;: &quot;A String&quot;, # Output only. The unique identifier of the Google account of the customer.
        &quot;etag&quot;: &quot;A String&quot;, # Optional. `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of an alert metadata from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform metatdata updates in order to avoid race conditions: An `etag` is returned in the response which contains alert metadata, and systems are expected to put that etag in the request to update alert metadata to ensure that their change will be applied to the same version of the alert metadata. If no `etag` is provided in the call to update alert metadata, then the existing alert metadata is overwritten blindly.
        &quot;severity&quot;: &quot;A String&quot;, # The severity value of the alert. Alert Center will set this field at alert creation time, default&#x27;s to an empty string when it could not be determined. The supported values for update actions on this field are the following: * HIGH * MEDIUM * LOW
        &quot;status&quot;: &quot;A String&quot;, # The current status of the alert. The supported values are the following: * NOT_STARTED * IN_PROGRESS * CLOSED
        &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this metadata was last updated.
      },
      &quot;securityInvestigationToolLink&quot;: &quot;A String&quot;, # Output only. An optional [Security Investigation Tool](https://support.google.com/a/answer/7575955) query for this alert.
      &quot;source&quot;: &quot;A String&quot;, # Required. A unique identifier for the system that reported the alert. This is output only after alert is created. Supported sources are any of the following: * Google Operations * Mobile device management * Gmail phishing * Domain wide takeout * State sponsored attack * Google identity
      &quot;startTime&quot;: &quot;A String&quot;, # Required. The time the event that caused this alert was started or detected.
      &quot;type&quot;: &quot;A String&quot;, # Required. The type of the alert. This is output only after alert is created. For a list of available alert types see [G Suite Alert types](/admin-sdk/alertcenter/reference/alert-types).
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this alert was last updated.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The token for the next page. If not empty, indicates that there may be more alerts that match the listing request; this value can be used in a subsequent ListAlertsRequest to get alerts continuing from last result of the current list call.
}</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="undelete">undelete(alertId, body=None, x__xgafv=None)</code>
  <pre>Restores, or &quot;undeletes&quot;, an alert that was marked for deletion within the past 30 days. Attempting to undelete an alert which was marked for deletion over 30 days ago (which has been removed from the Alert Center database) or a nonexistent alert returns a `NOT_FOUND` error. Attempting to undelete an alert which has not been marked for deletion has no effect.

Args:
  alertId: string, Required. The identifier of the alert to undelete. (required)
  body: object, The request body.
    The object takes the form of:

{ # A request to undelete a specific alert that was marked for deletion.
  &quot;customerId&quot;: &quot;A String&quot;, # Optional. The unique identifier of the G Suite organization account of the customer the alert is associated with. Inferred from the caller identity if not provided.
}

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

Returns:
  An object of the form:

    { # An alert affecting a customer.
  &quot;alertId&quot;: &quot;A String&quot;, # Output only. The unique identifier for the alert.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time this alert was created.
  &quot;customerId&quot;: &quot;A String&quot;, # Output only. The unique identifier of the Google account of the customer.
  &quot;data&quot;: { # Optional. The data associated with this alert, for example google.apps.alertcenter.type.DeviceCompromised.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;deleted&quot;: True or False, # Output only. `True` if this alert is marked for deletion.
  &quot;endTime&quot;: &quot;A String&quot;, # Optional. The time the event that caused this alert ceased being active. If provided, the end time must not be earlier than the start time. If not provided, it indicates an ongoing alert.
  &quot;etag&quot;: &quot;A String&quot;, # Optional. `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of an alert from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform alert updates in order to avoid race conditions: An `etag` is returned in the response which contains alerts, and systems are expected to put that etag in the request to update alert to ensure that their change will be applied to the same version of the alert. If no `etag` is provided in the call to update alert, then the existing alert is overwritten blindly.
  &quot;metadata&quot;: { # An alert metadata. # Output only. The metadata associated with this alert.
    &quot;alertId&quot;: &quot;A String&quot;, # Output only. The alert identifier.
    &quot;assignee&quot;: &quot;A String&quot;, # The email address of the user assigned to the alert.
    &quot;customerId&quot;: &quot;A String&quot;, # Output only. The unique identifier of the Google account of the customer.
    &quot;etag&quot;: &quot;A String&quot;, # Optional. `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of an alert metadata from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform metatdata updates in order to avoid race conditions: An `etag` is returned in the response which contains alert metadata, and systems are expected to put that etag in the request to update alert metadata to ensure that their change will be applied to the same version of the alert metadata. If no `etag` is provided in the call to update alert metadata, then the existing alert metadata is overwritten blindly.
    &quot;severity&quot;: &quot;A String&quot;, # The severity value of the alert. Alert Center will set this field at alert creation time, default&#x27;s to an empty string when it could not be determined. The supported values for update actions on this field are the following: * HIGH * MEDIUM * LOW
    &quot;status&quot;: &quot;A String&quot;, # The current status of the alert. The supported values are the following: * NOT_STARTED * IN_PROGRESS * CLOSED
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this metadata was last updated.
  },
  &quot;securityInvestigationToolLink&quot;: &quot;A String&quot;, # Output only. An optional [Security Investigation Tool](https://support.google.com/a/answer/7575955) query for this alert.
  &quot;source&quot;: &quot;A String&quot;, # Required. A unique identifier for the system that reported the alert. This is output only after alert is created. Supported sources are any of the following: * Google Operations * Mobile device management * Gmail phishing * Domain wide takeout * State sponsored attack * Google identity
  &quot;startTime&quot;: &quot;A String&quot;, # Required. The time the event that caused this alert was started or detected.
  &quot;type&quot;: &quot;A String&quot;, # Required. The type of the alert. This is output only after alert is created. For a list of available alert types see [G Suite Alert types](/admin-sdk/alertcenter/reference/alert-types).
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this alert was last updated.
}</pre>
</div>

</body></html>