<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="cloudasset_v1.html">Cloud Asset API</a> . <a href="cloudasset_v1.v1.html">v1</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#batchGetAssetsHistory">batchGetAssetsHistory(parent, contentType=None, assetNames=None, readTimeWindow_startTime=None, readTimeWindow_endTime=None, x__xgafv=None)</a></code></p>
<p class="firstline">Batch gets the update history of assets that overlap a time window.</p>
<p class="toc_element">
  <code><a href="#exportAssets">exportAssets(parent, body, x__xgafv=None)</a></code></p>
<p class="firstline">Exports assets with time and resource types to a given Cloud Storage</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="batchGetAssetsHistory">batchGetAssetsHistory(parent, contentType=None, assetNames=None, readTimeWindow_startTime=None, readTimeWindow_endTime=None, x__xgafv=None)</code>
  <pre>Batch gets the update history of assets that overlap a time window.
For RESOURCE content, this API outputs history with asset in both
non-delete or deleted status.
For IAM_POLICY content, this API outputs history when the asset and its
attached IAM POLICY both exist. This can create gaps in the output history.
If a specified asset does not exist, this API returns an INVALID_ARGUMENT
error.

Args:
  parent: string, Required. The relative name of the root asset. It can only be an
organization number (such as "organizations/123"), a project ID (such as
"projects/my-project-id")", or a project number (such as "projects/12345"). (required)
  contentType: string, Required. The content type.
  assetNames: string, A list of the full names of the assets. For example:
`//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
See [Resource
Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
and [Resource Name
Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
for more info.

The request becomes a no-op if the asset name list is empty, and the max
size of the asset name list is 100 in one request. (repeated)
  readTimeWindow_startTime: string, Start time of the time window (exclusive).
  readTimeWindow_endTime: string, End time of the time window (inclusive).
Current timestamp if not specified.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Batch get assets history response.
    "assets": [ # A list of assets with valid time windows.
      { # Temporal asset. In addition to the asset, the temporal asset includes the
          # status of the asset and valid from and to time of it.
        "deleted": True or False, # If the asset is deleted or not.
        "window": { # A time window of (start_time, end_time]. # The time window when the asset data and state was observed.
          "endTime": "A String", # End time of the time window (inclusive).
              # Current timestamp if not specified.
          "startTime": "A String", # Start time of the time window (exclusive).
        },
        "asset": { # Cloud asset. This includes all Google Cloud Platform resources, # Asset.
            # Cloud IAM policies, and other non-GCP assets.
          "iamPolicy": { # Defines an Identity and Access Management (IAM) policy. It is used to # Representation of the actual Cloud IAM policy set on a cloud resource. For
              # each resource, there must be at most one Cloud IAM policy set on it.
              # specify access control policies for Cloud Platform resources.
              #
              #
              # A `Policy` consists of a list of `bindings`. A `binding` binds a list of
              # `members` to a `role`, where the members can be user accounts, Google groups,
              # Google domains, and service accounts. A `role` is a named list of permissions
              # defined by IAM.
              #
              # **JSON Example**
              #
              #     {
              #       "bindings": [
              #         {
              #           "role": "roles/owner",
              #           "members": [
              #             "user:mike@example.com",
              #             "group:admins@example.com",
              #             "domain:google.com",
              #             "serviceAccount:my-other-app@appspot.gserviceaccount.com"
              #           ]
              #         },
              #         {
              #           "role": "roles/viewer",
              #           "members": ["user:sean@example.com"]
              #         }
              #       ]
              #     }
              #
              # **YAML Example**
              #
              #     bindings:
              #     - members:
              #       - user:mike@example.com
              #       - group:admins@example.com
              #       - domain:google.com
              #       - serviceAccount:my-other-app@appspot.gserviceaccount.com
              #       role: roles/owner
              #     - members:
              #       - user:sean@example.com
              #       role: roles/viewer
              #
              #
              # For a description of IAM and its features, see the
              # [IAM developer's guide](https://cloud.google.com/iam/docs).
            "bindings": [ # Associates a list of `members` to a `role`.
                # `bindings` with no members will result in an error.
              { # Associates `members` with a `role`.
                "role": "A String", # Role that is assigned to `members`.
                    # For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
                "members": [ # Specifies the identities requesting access for a Cloud Platform resource.
                    # `members` can have the following values:
                    #
                    # * `allUsers`: A special identifier that represents anyone who is
                    #    on the internet; with or without a Google account.
                    #
                    # * `allAuthenticatedUsers`: A special identifier that represents anyone
                    #    who is authenticated with a Google account or a service account.
                    #
                    # * `user:{emailid}`: An email address that represents a specific Google
                    #    account. For example, `alice@gmail.com` .
                    #
                    #
                    # * `serviceAccount:{emailid}`: An email address that represents a service
                    #    account. For example, `my-other-app@appspot.gserviceaccount.com`.
                    #
                    # * `group:{emailid}`: An email address that represents a Google group.
                    #    For example, `admins@example.com`.
                    #
                    #
                    # * `domain:{domain}`: The G Suite domain (primary) that represents all the
                    #    users of that domain. For example, `google.com` or `example.com`.
                    #
                  "A String",
                ],
                "condition": { # Represents an expression text. Example: # The condition that is associated with this binding.
                    # NOTE: An unsatisfied condition will not allow user access via current
                    # binding. Different bindings, including their conditions, are examined
                    # independently.
                    #
                    #     title: "User account presence"
                    #     description: "Determines whether the request has a user account"
                    #     expression: "size(request.user) > 0"
                  "description": "A String", # An optional description of the expression. This is a longer text which
                      # describes the expression, e.g. when hovered over it in a UI.
                  "expression": "A String", # Textual representation of an expression in
                      # Common Expression Language syntax.
                      #
                      # The application context of the containing message determines which
                      # well-known feature set of CEL is supported.
                  "location": "A String", # An optional string indicating the location of the expression for error
                      # reporting, e.g. a file name and a position in the file.
                  "title": "A String", # An optional title for the expression, i.e. a short string describing
                      # its purpose. This can be used e.g. in UIs which allow to enter the
                      # expression.
                },
              },
            ],
            "auditConfigs": [ # Specifies cloud audit logging configuration for this policy.
              { # Specifies the audit configuration for a service.
                  # The configuration determines which permission types are logged, and what
                  # identities, if any, are exempted from logging.
                  # An AuditConfig must have one or more AuditLogConfigs.
                  #
                  # If there are AuditConfigs for both `allServices` and a specific service,
                  # the union of the two AuditConfigs is used for that service: the log_types
                  # specified in each AuditConfig are enabled, and the exempted_members in each
                  # AuditLogConfig are exempted.
                  #
                  # Example Policy with multiple AuditConfigs:
                  #
                  #     {
                  #       "audit_configs": [
                  #         {
                  #           "service": "allServices"
                  #           "audit_log_configs": [
                  #             {
                  #               "log_type": "DATA_READ",
                  #               "exempted_members": [
                  #                 "user:foo@gmail.com"
                  #               ]
                  #             },
                  #             {
                  #               "log_type": "DATA_WRITE",
                  #             },
                  #             {
                  #               "log_type": "ADMIN_READ",
                  #             }
                  #           ]
                  #         },
                  #         {
                  #           "service": "fooservice.googleapis.com"
                  #           "audit_log_configs": [
                  #             {
                  #               "log_type": "DATA_READ",
                  #             },
                  #             {
                  #               "log_type": "DATA_WRITE",
                  #               "exempted_members": [
                  #                 "user:bar@gmail.com"
                  #               ]
                  #             }
                  #           ]
                  #         }
                  #       ]
                  #     }
                  #
                  # For fooservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ
                  # logging. It also exempts foo@gmail.com from DATA_READ logging, and
                  # bar@gmail.com from DATA_WRITE logging.
                "auditLogConfigs": [ # The configuration for logging of each type of permission.
                  { # Provides the configuration for logging a type of permissions.
                      # Example:
                      #
                      #     {
                      #       "audit_log_configs": [
                      #         {
                      #           "log_type": "DATA_READ",
                      #           "exempted_members": [
                      #             "user:foo@gmail.com"
                      #           ]
                      #         },
                      #         {
                      #           "log_type": "DATA_WRITE",
                      #         }
                      #       ]
                      #     }
                      #
                      # This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting
                      # foo@gmail.com from DATA_READ logging.
                    "exemptedMembers": [ # Specifies the identities that do not cause logging for this type of
                        # permission.
                        # Follows the same format of Binding.members.
                      "A String",
                    ],
                    "logType": "A String", # The log type that this config enables.
                  },
                ],
                "service": "A String", # Specifies a service that will be enabled for audit logging.
                    # For example, `storage.googleapis.com`, `cloudsql.googleapis.com`.
                    # `allServices` is a special value that covers all services.
              },
            ],
            "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help
                # prevent simultaneous updates of a policy from overwriting each other.
                # It is strongly suggested that systems make use of the `etag` in the
                # read-modify-write cycle to perform policy updates in order to avoid race
                # conditions: An `etag` is returned in the response to `getIamPolicy`, and
                # systems are expected to put that etag in the request to `setIamPolicy` to
                # ensure that their change will be applied to the same version of the policy.
                #
                # If no `etag` is provided in the call to `setIamPolicy`, then the existing
                # policy is overwritten blindly.
            "version": 42, # Deprecated.
          },
          "assetType": "A String", # Type of the asset. Example: "compute.googleapis.com/Disk".
          "resource": { # Representation of a cloud resource. # Representation of the resource.
            "resourceUrl": "A String", # The REST URL for accessing the resource. An HTTP GET operation using this
                # URL returns the resource itself.
                # Example:
                # `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123`.
                # It will be left unspecified for resources without a REST API.
            "parent": "A String", # The full name of the immediate parent of this resource. See
                # [Resource
                # Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
                # for more information.
                #
                # For GCP assets, it is the parent resource defined in the [Cloud IAM policy
                # hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy).
                # For example:
                # `"//cloudresourcemanager.googleapis.com/projects/my_project_123"`.
                #
                # For third-party assets, it is up to the users to define.
            "discoveryDocumentUri": "A String", # The URL of the discovery document containing the resource's JSON schema.
                # For example:
                # `"https://www.googleapis.com/discovery/v1/apis/compute/v1/rest"`.
                # It will be left unspecified for resources without a discovery-based API,
                # such as Cloud Bigtable.
            "discoveryName": "A String", # The JSON schema name listed in the discovery document.
                # Example: "Project". It will be left unspecified for resources (such as
                # Cloud Bigtable) without a discovery-based API.
            "version": "A String", # The API version. Example: "v1".
            "data": { # The content of the resource, in which some sensitive fields are scrubbed
                # away and may not be present.
              "a_key": "", # Properties of the object.
            },
          },
          "name": "A String", # The full name of the asset. For example:
              # `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
              # See [Resource
              # Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
              # for more information.
        },
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="exportAssets">exportAssets(parent, body, x__xgafv=None)</code>
  <pre>Exports assets with time and resource types to a given Cloud Storage
location. The output format is newline-delimited JSON.
This API implements the google.longrunning.Operation API allowing you
to keep track of the export.

Args:
  parent: string, Required. The relative name of the root asset. This can only be an
organization number (such as "organizations/123"), a project ID (such as
"projects/my-project-id"), or a project number (such as "projects/12345"),
or a folder number (such as "folders/123"). (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Export asset request.
    "assetTypes": [ # A list of asset types of which to take a snapshot for. For example:
        # "compute.googleapis.com/Disk". If specified, only matching assets will be
        # returned. See [Introduction to Cloud Asset
        # Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
        # for all supported asset types.
      "A String",
    ],
    "contentType": "A String", # Asset content type. If not specified, no content but the asset name will be
        # returned.
    "outputConfig": { # Output configuration for export assets destination. # Required. Output configuration indicating where the results will be output
        # to. All results will be in newline delimited JSON format.
      "gcsDestination": { # A Cloud Storage location. # Destination on Cloud Storage.
        "uriPrefix": "A String", # The uri prefix of all generated Cloud Storage objects. For example:
            # "gs://bucket_name/object_name_prefix". Each object uri is in format:
            # "gs://bucket_name/object_name_prefix/<asset type>/<shard number> and only
            # contains assets for that type. <shard number> starts from 0. For example:
            # "gs://bucket_name/object_name_prefix/compute.googleapis.com/Disk/0" is
            # the first shard of output objects containing all
            # compute.googleapis.com/Disk assets. An INVALID_ARGUMENT error will be
            # returned if file with the same name "gs://bucket_name/object_name_prefix"
            # already exists.
        "uri": "A String", # The uri of the Cloud Storage object. It's the same uri that is used by
            # gsutil. For example: "gs://bucket_name/object_name". See [Viewing and
            # Editing Object
            # Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata)
            # for more information.
      },
    },
    "readTime": "A String", # Timestamp to take an asset snapshot. This can only be set to a timestamp
        # between 2018-10-02 UTC (inclusive) and the current time. If not specified,
        # the current time will be used. Due to delays in resource data collection
        # and indexing, there is a volatile window during which running the same
        # query may get different results.
  }

  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). The error model is designed to be:
        #
        # - Simple to use and understand for most users
        # - Flexible enough to meet unexpected needs
        #
        # # Overview
        #
        # The `Status` message contains three pieces of data: error code, error
        # message, and error details. The error code should be an enum value of
        # google.rpc.Code, but it may accept additional error codes if needed.  The
        # error message should be a developer-facing English message that helps
        # developers *understand* and *resolve* the error. If a localized user-facing
        # error message is needed, put the localized message in the error details or
        # localize it in the client. The optional error details may contain arbitrary
        # information about the error. There is a predefined set of error detail types
        # in the package `google.rpc` that can be used for common error conditions.
        #
        # # Language mapping
        #
        # The `Status` message is the logical representation of the error model, but it
        # is not necessarily the actual wire format. When the `Status` message is
        # exposed in different client libraries and different wire protocols, it can be
        # mapped differently. For example, it will likely be mapped to some exceptions
        # in Java, but more likely mapped to some error codes in C.
        #
        # # Other uses
        #
        # The error model and the `Status` message can be used in a variety of
        # environments, either with or without APIs, to provide a
        # consistent developer experience across different environments.
        #
        # Example uses of this error model include:
        #
        # - Partial errors. If a service needs to return partial errors to the client,
        #     it may embed the `Status` in the normal response to indicate the partial
        #     errors.
        #
        # - Workflow errors. A typical workflow has multiple steps. Each step may
        #     have a `Status` message for error reporting.
        #
        # - Batch operations. If a client uses batch request and batch response, the
        #     `Status` message should be used directly inside batch response, one for
        #     each error sub-response.
        #
        # - Asynchronous operations. If an API call embeds asynchronous operation
        #     results in its response, the status of those operations should be
        #     represented directly using the `Status` message.
        #
        # - Logging. If some API errors are stored in logs, the message `Status` could
        #     be used directly after any stripping needed for security/privacy reasons.
      "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 have the format of `operations/some/unique/name`.
  }</pre>
</div>

</body></html>