<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_v1beta1.html">Cloud Security Command Center API</a> . <a href="securitycenter_v1beta1.organizations.html">organizations</a> . <a href="securitycenter_v1beta1.organizations.assets.html">assets</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#group">group(parent, body, x__xgafv=None)</a></code></p>
<p class="firstline">Filters an organization's assets and  groups them by their specified</p>
<p class="toc_element">
  <code><a href="#group_next">group_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="#list">list(parent, orderBy=None, pageSize=None, x__xgafv=None, compareDuration=None, pageToken=None, fieldMask=None, readTime=None, filter=None)</a></code></p>
<p class="firstline">Lists an organization's assets.</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="#runDiscovery">runDiscovery(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Runs asset discovery. The discovery is tracked with a long-running</p>
<p class="toc_element">
  <code><a href="#updateSecurityMarks">updateSecurityMarks(name, body, startTime=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates security marks.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="group">group(parent, body, x__xgafv=None)</code>
  <pre>Filters an organization's assets and  groups them by their specified
properties.

Args:
  parent: string, Name of the organization to groupBy. Its format is
"organizations/[organization_id]". (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request message for grouping by assets.
    "compareDuration": "A String", # When compare_duration is set, the Asset's "state" property is updated to
        # indicate whether the asset was added, removed, or remained present during
        # the compare_duration period of time that precedes the read_time. This is
        # the time between (read_time - compare_duration) and read_time.
        # 
        # The state value is derived based on the presence of the asset at the two
        # points in time. Intermediate state changes between the two times don't
        # affect the result. For example, the results aren't affected if the asset is
        # removed and re-created again.
        # 
        # Possible "state" values when compare_duration is specified:
        # 
        # * "ADDED": indicates that the asset was not present before
        #              compare_duration, but present at reference_time.
        # * "REMOVED": indicates that the asset was present at the start of
        #              compare_duration, but not present at reference_time.
        # * "ACTIVE": indicates that the asset was present at both the
        #              start and the end of the time period defined by
        #              compare_duration and reference_time.
        # 
        # This field is ignored if `state` is not a field in `group_by`.
    "pageSize": 42, # The maximum number of results to return in a single response. Default is
        # 10, minimum is 1, maximum is 1000.
    "filter": "A String", # Expression that defines the filter to apply across assets.
        # The expression is a list of zero or more restrictions combined via logical
        # operators `AND` and `OR`.
        # Parentheses are not supported, and `OR` has higher precedence than `AND`.
        # 
        # Restrictions have the form `<field> <operator> <value>` and may have a `-`
        # character in front of them to indicate negation. The fields map to those
        # defined in the Asset resource. Examples include:
        # 
        # * name
        # * security_center_properties.resource_name
        # * resource_properties.a_property
        # * security_marks.marks.marka
        # 
        # The supported operators are:
        # 
        # * `=` for all value types.
        # * `>`, `<`, `>=`, `<=` for integer values.
        # * `:`, meaning substring matching, for strings.
        # 
        # The supported value types are:
        # 
        # * string literals in quotes.
        # * integer literals without quotes.
        # * boolean literals `true` and `false` without quotes.
        # 
        # For example, `resource_properties.size = 100` is a valid filter string.
    "pageToken": "A String", # The value returned by the last `GroupAssetsResponse`; indicates
        # that this is a continuation of a prior `GroupAssets` call, and that the
        # system should return the next page of data.
    "groupBy": "A String", # Expression that defines what assets fields to use for grouping. The string
        # value should follow SQL syntax: comma separated list of fields. For
        # example:
        # "security_center_properties.resource_project,security_center_properties.project".
        # 
        # The following fields are supported when compare_duration is not set:
        # 
        # * security_center_properties.resource_project
        # * security_center_properties.resource_type
        # * security_center_properties.resource_parent
        # 
        # The following fields are supported when compare_duration is set:
        # 
        # * security_center_properties.resource_type
    "readTime": "A String", # Time used as a reference point when filtering assets. The filter is limited
        # to assets existing at the supplied time and their values are those at that
        # specific time. Absence of this field will default to the API's version of
        # NOW.
  }

  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 grouping by assets.
    "nextPageToken": "A String", # Token to retrieve the next page of results, or empty if there are no more
        # results.
    "groupByResults": [ # Group results. There exists an element for each existing unique
        # combination of property/values. The element contains a count for the number
        # of times those specific property/values appear.
      { # Result containing the properties and count of a groupBy request.
        "count": "A String", # Total count of resources for the given properties.
        "properties": { # Properties matching the groupBy fields in the request.
          "a_key": "",
        },
      },
    ],
    "readTime": "A String", # Time used for executing the groupBy request.
  }</pre>
</div>

<div class="method">
    <code class="details" id="group_next">group_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 'execute()' 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="list">list(parent, orderBy=None, pageSize=None, x__xgafv=None, compareDuration=None, pageToken=None, fieldMask=None, readTime=None, filter=None)</code>
  <pre>Lists an organization's assets.

Args:
  parent: string, Name of the organization assets should belong to. Its format is
"organizations/[organization_id]". (required)
  orderBy: string, Expression that defines what fields and order to use for sorting. The
string value should follow SQL syntax: comma separated list of fields. For
example: "name,resource_properties.a_property". The default sorting order
is ascending. To specify descending order for a field, a suffix " desc"
should be appended to the field name. For example: "name
desc,resource_properties.a_property". Redundant space characters in the
syntax are insignificant. "name desc,resource_properties.a_property" and "
name     desc  ,   resource_properties.a_property  " are equivalent.
  pageSize: integer, The maximum number of results to return in a single response. Default is
10, minimum is 1, maximum is 1000.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  compareDuration: string, When compare_duration is set, the ListAssetResult's "state" attribute is
updated to indicate whether the asset was added, removed, or remained
present during the compare_duration period of time that precedes the
read_time. This is the time between (read_time -
compare_duration) and read_time.

The state value is derived based on the presence of the asset at the two
points in time. Intermediate state changes between the two times don't
affect the result. For example, the results aren't affected if the asset is
removed and re-created again.

Possible "state" values when compare_duration is specified:

* "ADDED": indicates that the asset was not present before
             compare_duration, but present at read_time.
* "REMOVED": indicates that the asset was present at the start of
             compare_duration, but not present at read_time.
* "ACTIVE": indicates that the asset was present at both the
             start and the end of the time period defined by
             compare_duration and read_time.

If compare_duration is not specified, then the only possible state is
"UNUSED", which indicates that the asset is present at read_time.
  pageToken: string, The value returned by the last `ListAssetsResponse`; indicates
that this is a continuation of a prior `ListAssets` call, and
that the system should return the next page of data.
  fieldMask: string, Optional.

A field mask to specify the ListAssetsResult fields to be listed in the
response.
An empty field mask will list all fields.
  readTime: string, Time used as a reference point when filtering assets. The filter is limited
to assets existing at the supplied time and their values are those at that
specific time. Absence of this field will default to the API's version of
NOW.
  filter: string, Expression that defines the filter to apply across assets.
The expression is a list of zero or more restrictions combined via logical
operators `AND` and `OR`.
Parentheses are not supported, and `OR` has higher precedence than `AND`.

Restrictions have the form `<field> <operator> <value>` and may have a `-`
character in front of them to indicate negation. The fields map to those
defined in the Asset resource. Examples include:

* name
* security_center_properties.resource_name
* resource_properties.a_property
* security_marks.marks.marka

The supported operators are:

* `=` for all value types.
* `>`, `<`, `>=`, `<=` for integer values.
* `:`, meaning substring matching, for strings.

The supported value types are:

* string literals in quotes.
* integer literals without quotes.
* boolean literals `true` and `false` without quotes.

For example, `resource_properties.size = 100` is a valid filter string.

Returns:
  An object of the form:

    { # Response message for listing assets.
    "nextPageToken": "A String", # Token to retrieve the next page of results, or empty if there are no more
        # results.
    "totalSize": 42, # The total number of assets matching the query.
    "listAssetsResults": [ # Assets matching the list request.
      { # Result containing the Asset and its State.
        "state": "A String", # State of the asset.
        "asset": { # Cloud Security Command Center's (Cloud SCC) representation of a Google Cloud # Asset matching the search request.
            # Platform (GCP) resource.
            #
            # The Asset is a Cloud SCC resource that captures information about a single
            # GCP resource. All modifications to an Asset are only within the context of
            # Cloud SCC and don't affect the referenced GCP resource.
          "updateTime": "A String", # The time at which the asset was last updated, added, or deleted in Cloud
              # SCC.
          "name": "A String", # The relative resource name of this asset. See:
              # https://cloud.google.com/apis/design/resource_names#relative_resource_name
              # Example:
              # "organizations/123/assets/456".
          "securityCenterProperties": { # Cloud SCC managed properties. These properties are managed by Cloud SCC and # Cloud SCC managed properties. These properties are managed by
              # Cloud SCC and cannot be modified by the user.
              # cannot be modified by the user.
            "resourceType": "A String", # The type of the GCP resource. Examples include: APPLICATION,
                # PROJECT, and ORGANIZATION. This is a case insensitive field defined by
                # Cloud SCC and/or the producer of the resource and is immutable
                # after create time.
            "resourceName": "A String", # The full resource name of the GCP resource this asset
                # represents. This field is immutable after create time. See:
                # https://cloud.google.com/apis/design/resource_names#full_resource_name
            "resourceParent": "A String", # The full resource name of the immediate parent of the resource. See:
                # https://cloud.google.com/apis/design/resource_names#full_resource_name
            "resourceProject": "A String", # The full resource name of the project the resource belongs to. See:
                # https://cloud.google.com/apis/design/resource_names#full_resource_name
            "resourceOwners": [ # Owners of the Google Cloud resource.
              "A String",
            ],
          },
          "resourceProperties": { # Resource managed properties. These properties are managed and defined by
              # the GCP resource and cannot be modified by the user.
            "a_key": "",
          },
          "securityMarks": { # User specified security marks that are attached to the parent Cloud Security # User specified security marks. These marks are entirely managed by the user
              # and come from the SecurityMarks resource that belongs to the asset.
                # Command Center (Cloud SCC) resource. Security marks are scoped within a Cloud
                # SCC organization -- they can be modified and viewed by all users who have
                # proper permissions on the organization.
              "name": "A String", # The relative resource name of the SecurityMarks. See:
                  # https://cloud.google.com/apis/design/resource_names#relative_resource_name
                  # Examples:
                  # "organizations/123/assets/456/securityMarks"
                  # "organizations/123/sources/456/findings/789/securityMarks".
              "marks": { # Mutable user specified security marks belonging to the parent resource.
                  # Constraints are as follows:
                  #   - Keys and values are treated as case insensitive
                  #   - Keys must be between 1 - 256 characters (inclusive)
                  #   - Keys must be letters, numbers, underscores, or dashes
                  #   - Values have leading and trailing whitespace trimmed, remaining
                  #     characters must be between 1 - 4096 characters (inclusive)
                "a_key": "A String",
              },
            },
          "createTime": "A String", # The time at which the asset was created in Cloud SCC.
        },
      },
    ],
    "readTime": "A String", # Time used for executing the list request.
  }</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 'execute()' 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="runDiscovery">runDiscovery(parent, body=None, x__xgafv=None)</code>
  <pre>Runs asset discovery. The discovery is tracked with a long-running
operation.

This API can only be called with limited frequency for an organization. If
it is called too frequently the caller will receive a TOO_MANY_REQUESTS
error.

Args:
  parent: string, Name of the organization to run asset discovery for. Its format is
"organizations/[organization_id]". (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for running asset discovery for an organization.
  }

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

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "metadata": { # Service-specific metadata associated with the operation.  It typically
        # contains progress information and common metadata such as create time.
        # Some services might not provide such metadata.  Any method that returns a
        # long-running operation should document the metadata type, if any.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # 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).
      "message": "A String", # 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.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="updateSecurityMarks">updateSecurityMarks(name, body, startTime=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates security marks.

Args:
  name: string, The relative resource name of the SecurityMarks. See:
https://cloud.google.com/apis/design/resource_names#relative_resource_name
Examples:
"organizations/123/assets/456/securityMarks"
"organizations/123/sources/456/findings/789/securityMarks". (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # User specified security marks that are attached to the parent Cloud Security
      # Command Center (Cloud SCC) resource. Security marks are scoped within a Cloud
      # SCC organization -- they can be modified and viewed by all users who have
      # proper permissions on the organization.
    "name": "A String", # The relative resource name of the SecurityMarks. See:
        # https://cloud.google.com/apis/design/resource_names#relative_resource_name
        # Examples:
        # "organizations/123/assets/456/securityMarks"
        # "organizations/123/sources/456/findings/789/securityMarks".
    "marks": { # Mutable user specified security marks belonging to the parent resource.
        # Constraints are as follows:
        #   - Keys and values are treated as case insensitive
        #   - Keys must be between 1 - 256 characters (inclusive)
        #   - Keys must be letters, numbers, underscores, or dashes
        #   - Values have leading and trailing whitespace trimmed, remaining
        #     characters must be between 1 - 4096 characters (inclusive)
      "a_key": "A String",
    },
  }

  startTime: string, The time at which the updated SecurityMarks take effect.
  updateMask: string, The FieldMask to use when updating the security marks resource.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # User specified security marks that are attached to the parent Cloud Security
        # Command Center (Cloud SCC) resource. Security marks are scoped within a Cloud
        # SCC organization -- they can be modified and viewed by all users who have
        # proper permissions on the organization.
      "name": "A String", # The relative resource name of the SecurityMarks. See:
          # https://cloud.google.com/apis/design/resource_names#relative_resource_name
          # Examples:
          # "organizations/123/assets/456/securityMarks"
          # "organizations/123/sources/456/findings/789/securityMarks".
      "marks": { # Mutable user specified security marks belonging to the parent resource.
          # Constraints are as follows:
          #   - Keys and values are treated as case insensitive
          #   - Keys must be between 1 - 256 characters (inclusive)
          #   - Keys must be letters, numbers, underscores, or dashes
          #   - Values have leading and trailing whitespace trimmed, remaining
          #     characters must be between 1 - 4096 characters (inclusive)
        "a_key": "A String",
      },
    }</pre>
</div>

</body></html>