diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,28 @@
+# gogol-cloudasset
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.3.0`
+
+
+## Description
+
+A client library for the Google Cloud Asset.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/gogol/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `gogol-gen` for more information.
+
+
+## Licence
+
+`gogol-cloudasset` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import           Distribution.Simple
+main = defaultMain
diff --git a/gen/Network/Google/CloudAsset.hs b/gen/Network/Google/CloudAsset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudAsset.hs
@@ -0,0 +1,208 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.CloudAsset
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The cloud asset API manages the history and inventory of cloud
+-- resources.
+--
+-- /See:/ <https://console.cloud.google.com/apis/api/cloudasset.googleapis.com/overview Cloud Asset API Reference>
+module Network.Google.CloudAsset
+    (
+    -- * Service Configuration
+      cloudAssetService
+
+    -- * OAuth Scopes
+    , cloudPlatformScope
+
+    -- * API Declaration
+    , CloudAssetAPI
+
+    -- * Resources
+
+    -- ** cloudasset.organizations.batchGetAssetsHistory
+    , module Network.Google.Resource.CloudAsset.Organizations.BatchGetAssetsHistory
+
+    -- ** cloudasset.organizations.exportAssets
+    , module Network.Google.Resource.CloudAsset.Organizations.ExportAssets
+
+    -- ** cloudasset.organizations.operations.get
+    , module Network.Google.Resource.CloudAsset.Organizations.Operations.Get
+
+    -- ** cloudasset.projects.batchGetAssetsHistory
+    , module Network.Google.Resource.CloudAsset.Projects.BatchGetAssetsHistory
+
+    -- ** cloudasset.projects.exportAssets
+    , module Network.Google.Resource.CloudAsset.Projects.ExportAssets
+
+    -- ** cloudasset.projects.operations.get
+    , module Network.Google.Resource.CloudAsset.Projects.Operations.Get
+
+    -- * Types
+
+    -- ** Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- ** ExportAssetsRequestContentType
+    , ExportAssetsRequestContentType (..)
+
+    -- ** AuditConfig
+    , AuditConfig
+    , auditConfig
+    , acService
+    , acAuditLogConfigs
+
+    -- ** Expr
+    , Expr
+    , expr
+    , eLocation
+    , eExpression
+    , eTitle
+    , eDescription
+
+    -- ** Operation
+    , Operation
+    , operation
+    , oDone
+    , oError
+    , oResponse
+    , oName
+    , oMetadata
+
+    -- ** Asset
+    , Asset
+    , asset
+    , aName
+    , aResource
+    , aIAMPolicy
+    , aAssetType
+
+    -- ** GcsDestination
+    , GcsDestination
+    , gcsDestination
+    , gdURI
+
+    -- ** StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- ** ExportAssetsRequest
+    , ExportAssetsRequest
+    , exportAssetsRequest
+    , earReadTime
+    , earAssetTypes
+    , earOutputConfig
+    , earContentType
+
+    -- ** TimeWindow
+    , TimeWindow
+    , timeWindow
+    , twStartTime
+    , twEndTime
+
+    -- ** TemporalAsset
+    , TemporalAsset
+    , temporalAsset
+    , taWindow
+    , taAsset
+    , taDeleted
+
+    -- ** AuditLogConfigLogType
+    , AuditLogConfigLogType (..)
+
+    -- ** Resource
+    , Resource
+    , resource
+    , rParent
+    , rData
+    , rVersion
+    , rDiscoveryName
+    , rDiscoveryDocumentURI
+    , rResourceURL
+
+    -- ** Xgafv
+    , Xgafv (..)
+
+    -- ** ResourceData
+    , ResourceData
+    , resourceData
+    , rdAddtional
+
+    -- ** OutputConfig
+    , OutputConfig
+    , outputConfig
+    , ocGcsDestination
+
+    -- ** Policy
+    , Policy
+    , policy
+    , pAuditConfigs
+    , pEtag
+    , pVersion
+    , pBindings
+
+    -- ** BatchGetAssetsHistoryResponse
+    , BatchGetAssetsHistoryResponse
+    , batchGetAssetsHistoryResponse
+    , bgahrAssets
+
+    -- ** OperationMetadata
+    , OperationMetadata
+    , operationMetadata
+    , omAddtional
+
+    -- ** AuditLogConfig
+    , AuditLogConfig
+    , auditLogConfig
+    , alcLogType
+    , alcExemptedMembers
+
+    -- ** OperationResponse
+    , OperationResponse
+    , operationResponse
+    , orAddtional
+
+    -- ** Binding
+    , Binding
+    , binding
+    , bMembers
+    , bRole
+    , bCondition
+    ) where
+
+import           Network.Google.CloudAsset.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.CloudAsset.Organizations.BatchGetAssetsHistory
+import           Network.Google.Resource.CloudAsset.Organizations.ExportAssets
+import           Network.Google.Resource.CloudAsset.Organizations.Operations.Get
+import           Network.Google.Resource.CloudAsset.Projects.BatchGetAssetsHistory
+import           Network.Google.Resource.CloudAsset.Projects.ExportAssets
+import           Network.Google.Resource.CloudAsset.Projects.Operations.Get
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Cloud Asset API service.
+type CloudAssetAPI =
+     OrganizationsOperationsGetResource :<|>
+       OrganizationsExportAssetsResource
+       :<|> OrganizationsBatchGetAssetsHistoryResource
+       :<|> ProjectsOperationsGetResource
+       :<|> ProjectsExportAssetsResource
+       :<|> ProjectsBatchGetAssetsHistoryResource
diff --git a/gen/Network/Google/CloudAsset/Types.hs b/gen/Network/Google/CloudAsset/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudAsset/Types.hs
@@ -0,0 +1,172 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.CloudAsset.Types
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.CloudAsset.Types
+    (
+    -- * Service Configuration
+      cloudAssetService
+
+    -- * OAuth Scopes
+    , cloudPlatformScope
+
+    -- * Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- * ExportAssetsRequestContentType
+    , ExportAssetsRequestContentType (..)
+
+    -- * AuditConfig
+    , AuditConfig
+    , auditConfig
+    , acService
+    , acAuditLogConfigs
+
+    -- * Expr
+    , Expr
+    , expr
+    , eLocation
+    , eExpression
+    , eTitle
+    , eDescription
+
+    -- * Operation
+    , Operation
+    , operation
+    , oDone
+    , oError
+    , oResponse
+    , oName
+    , oMetadata
+
+    -- * Asset
+    , Asset
+    , asset
+    , aName
+    , aResource
+    , aIAMPolicy
+    , aAssetType
+
+    -- * GcsDestination
+    , GcsDestination
+    , gcsDestination
+    , gdURI
+
+    -- * StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- * ExportAssetsRequest
+    , ExportAssetsRequest
+    , exportAssetsRequest
+    , earReadTime
+    , earAssetTypes
+    , earOutputConfig
+    , earContentType
+
+    -- * TimeWindow
+    , TimeWindow
+    , timeWindow
+    , twStartTime
+    , twEndTime
+
+    -- * TemporalAsset
+    , TemporalAsset
+    , temporalAsset
+    , taWindow
+    , taAsset
+    , taDeleted
+
+    -- * AuditLogConfigLogType
+    , AuditLogConfigLogType (..)
+
+    -- * Resource
+    , Resource
+    , resource
+    , rParent
+    , rData
+    , rVersion
+    , rDiscoveryName
+    , rDiscoveryDocumentURI
+    , rResourceURL
+
+    -- * Xgafv
+    , Xgafv (..)
+
+    -- * ResourceData
+    , ResourceData
+    , resourceData
+    , rdAddtional
+
+    -- * OutputConfig
+    , OutputConfig
+    , outputConfig
+    , ocGcsDestination
+
+    -- * Policy
+    , Policy
+    , policy
+    , pAuditConfigs
+    , pEtag
+    , pVersion
+    , pBindings
+
+    -- * BatchGetAssetsHistoryResponse
+    , BatchGetAssetsHistoryResponse
+    , batchGetAssetsHistoryResponse
+    , bgahrAssets
+
+    -- * OperationMetadata
+    , OperationMetadata
+    , operationMetadata
+    , omAddtional
+
+    -- * AuditLogConfig
+    , AuditLogConfig
+    , auditLogConfig
+    , alcLogType
+    , alcExemptedMembers
+
+    -- * OperationResponse
+    , OperationResponse
+    , operationResponse
+    , orAddtional
+
+    -- * Binding
+    , Binding
+    , binding
+    , bMembers
+    , bRole
+    , bCondition
+    ) where
+
+import           Network.Google.CloudAsset.Types.Product
+import           Network.Google.CloudAsset.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1beta1' of the Cloud Asset API. This contains the host and root path used as a starting point for constructing service requests.
+cloudAssetService :: ServiceConfig
+cloudAssetService
+  = defaultService (ServiceId "cloudasset:v1beta1")
+      "cloudasset.googleapis.com"
+
+-- | View and manage your data across Google Cloud Platform services
+cloudPlatformScope :: Proxy '["https://www.googleapis.com/auth/cloud-platform"]
+cloudPlatformScope = Proxy;
diff --git a/gen/Network/Google/CloudAsset/Types/Product.hs b/gen/Network/Google/CloudAsset/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudAsset/Types/Product.hs
@@ -0,0 +1,1215 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.CloudAsset.Types.Product
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.CloudAsset.Types.Product where
+
+import           Network.Google.CloudAsset.Types.Sum
+import           Network.Google.Prelude
+
+-- | 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). 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.
+--
+-- /See:/ 'status' smart constructor.
+data Status = Status'
+    { _sDetails :: !(Maybe [StatusDetailsItem])
+    , _sCode    :: !(Maybe (Textual Int32))
+    , _sMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Status' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sDetails'
+--
+-- * 'sCode'
+--
+-- * 'sMessage'
+status
+    :: Status
+status =
+    Status'
+    { _sDetails = Nothing
+    , _sCode = Nothing
+    , _sMessage = Nothing
+    }
+
+-- | A list of messages that carry the error details. There is a common set
+-- of message types for APIs to use.
+sDetails :: Lens' Status [StatusDetailsItem]
+sDetails
+  = lens _sDetails (\ s a -> s{_sDetails = a}) .
+      _Default
+      . _Coerce
+
+-- | The status code, which should be an enum value of google.rpc.Code.
+sCode :: Lens' Status (Maybe Int32)
+sCode
+  = lens _sCode (\ s a -> s{_sCode = a}) .
+      mapping _Coerce
+
+-- | 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.
+sMessage :: Lens' Status (Maybe Text)
+sMessage = lens _sMessage (\ s a -> s{_sMessage = a})
+
+instance FromJSON Status where
+        parseJSON
+          = withObject "Status"
+              (\ o ->
+                 Status' <$>
+                   (o .:? "details" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON Status where
+        toJSON Status'{..}
+          = object
+              (catMaybes
+                 [("details" .=) <$> _sDetails,
+                  ("code" .=) <$> _sCode,
+                  ("message" .=) <$> _sMessage])
+
+-- | 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.
+--
+-- /See:/ 'auditConfig' smart constructor.
+data AuditConfig = AuditConfig'
+    { _acService         :: !(Maybe Text)
+    , _acAuditLogConfigs :: !(Maybe [AuditLogConfig])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AuditConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acService'
+--
+-- * 'acAuditLogConfigs'
+auditConfig
+    :: AuditConfig
+auditConfig =
+    AuditConfig'
+    { _acService = Nothing
+    , _acAuditLogConfigs = Nothing
+    }
+
+-- | 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.
+acService :: Lens' AuditConfig (Maybe Text)
+acService
+  = lens _acService (\ s a -> s{_acService = a})
+
+-- | The configuration for logging of each type of permission.
+acAuditLogConfigs :: Lens' AuditConfig [AuditLogConfig]
+acAuditLogConfigs
+  = lens _acAuditLogConfigs
+      (\ s a -> s{_acAuditLogConfigs = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON AuditConfig where
+        parseJSON
+          = withObject "AuditConfig"
+              (\ o ->
+                 AuditConfig' <$>
+                   (o .:? "service") <*>
+                     (o .:? "auditLogConfigs" .!= mempty))
+
+instance ToJSON AuditConfig where
+        toJSON AuditConfig'{..}
+          = object
+              (catMaybes
+                 [("service" .=) <$> _acService,
+                  ("auditLogConfigs" .=) <$> _acAuditLogConfigs])
+
+-- | Represents an expression text. Example: title: \"User account presence\"
+-- description: \"Determines whether the request has a user account\"
+-- expression: \"size(request.user) > 0\"
+--
+-- /See:/ 'expr' smart constructor.
+data Expr = Expr'
+    { _eLocation    :: !(Maybe Text)
+    , _eExpression  :: !(Maybe Text)
+    , _eTitle       :: !(Maybe Text)
+    , _eDescription :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Expr' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eLocation'
+--
+-- * 'eExpression'
+--
+-- * 'eTitle'
+--
+-- * 'eDescription'
+expr
+    :: Expr
+expr =
+    Expr'
+    { _eLocation = Nothing
+    , _eExpression = Nothing
+    , _eTitle = Nothing
+    , _eDescription = Nothing
+    }
+
+-- | An optional string indicating the location of the expression for error
+-- reporting, e.g. a file name and a position in the file.
+eLocation :: Lens' Expr (Maybe Text)
+eLocation
+  = lens _eLocation (\ s a -> s{_eLocation = a})
+
+-- | 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.
+eExpression :: Lens' Expr (Maybe Text)
+eExpression
+  = lens _eExpression (\ s a -> s{_eExpression = a})
+
+-- | 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.
+eTitle :: Lens' Expr (Maybe Text)
+eTitle = lens _eTitle (\ s a -> s{_eTitle = a})
+
+-- | An optional description of the expression. This is a longer text which
+-- describes the expression, e.g. when hovered over it in a UI.
+eDescription :: Lens' Expr (Maybe Text)
+eDescription
+  = lens _eDescription (\ s a -> s{_eDescription = a})
+
+instance FromJSON Expr where
+        parseJSON
+          = withObject "Expr"
+              (\ o ->
+                 Expr' <$>
+                   (o .:? "location") <*> (o .:? "expression") <*>
+                     (o .:? "title")
+                     <*> (o .:? "description"))
+
+instance ToJSON Expr where
+        toJSON Expr'{..}
+          = object
+              (catMaybes
+                 [("location" .=) <$> _eLocation,
+                  ("expression" .=) <$> _eExpression,
+                  ("title" .=) <$> _eTitle,
+                  ("description" .=) <$> _eDescription])
+
+-- | This resource represents a long-running operation that is the result of
+-- a network API call.
+--
+-- /See:/ 'operation' smart constructor.
+data Operation = Operation'
+    { _oDone     :: !(Maybe Bool)
+    , _oError    :: !(Maybe Status)
+    , _oResponse :: !(Maybe OperationResponse)
+    , _oName     :: !(Maybe Text)
+    , _oMetadata :: !(Maybe OperationMetadata)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Operation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oDone'
+--
+-- * 'oError'
+--
+-- * 'oResponse'
+--
+-- * 'oName'
+--
+-- * 'oMetadata'
+operation
+    :: Operation
+operation =
+    Operation'
+    { _oDone = Nothing
+    , _oError = Nothing
+    , _oResponse = Nothing
+    , _oName = Nothing
+    , _oMetadata = Nothing
+    }
+
+-- | 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.
+oDone :: Lens' Operation (Maybe Bool)
+oDone = lens _oDone (\ s a -> s{_oDone = a})
+
+-- | The error result of the operation in case of failure or cancellation.
+oError :: Lens' Operation (Maybe Status)
+oError = lens _oError (\ s a -> s{_oError = a})
+
+-- | 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\`.
+oResponse :: Lens' Operation (Maybe OperationResponse)
+oResponse
+  = lens _oResponse (\ s a -> s{_oResponse = a})
+
+-- | 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\`.
+oName :: Lens' Operation (Maybe Text)
+oName = lens _oName (\ s a -> s{_oName = a})
+
+-- | 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.
+oMetadata :: Lens' Operation (Maybe OperationMetadata)
+oMetadata
+  = lens _oMetadata (\ s a -> s{_oMetadata = a})
+
+instance FromJSON Operation where
+        parseJSON
+          = withObject "Operation"
+              (\ o ->
+                 Operation' <$>
+                   (o .:? "done") <*> (o .:? "error") <*>
+                     (o .:? "response")
+                     <*> (o .:? "name")
+                     <*> (o .:? "metadata"))
+
+instance ToJSON Operation where
+        toJSON Operation'{..}
+          = object
+              (catMaybes
+                 [("done" .=) <$> _oDone, ("error" .=) <$> _oError,
+                  ("response" .=) <$> _oResponse,
+                  ("name" .=) <$> _oName,
+                  ("metadata" .=) <$> _oMetadata])
+
+-- | Cloud asset. This includes all Google Cloud Platform resources, Cloud
+-- IAM policies, and other non-GCP assets.
+--
+-- /See:/ 'asset' smart constructor.
+data Asset = Asset'
+    { _aName      :: !(Maybe Text)
+    , _aResource  :: !(Maybe Resource)
+    , _aIAMPolicy :: !(Maybe Policy)
+    , _aAssetType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Asset' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aName'
+--
+-- * 'aResource'
+--
+-- * 'aIAMPolicy'
+--
+-- * 'aAssetType'
+asset
+    :: Asset
+asset =
+    Asset'
+    { _aName = Nothing
+    , _aResource = Nothing
+    , _aIAMPolicy = Nothing
+    , _aAssetType = Nothing
+    }
+
+-- | 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.
+aName :: Lens' Asset (Maybe Text)
+aName = lens _aName (\ s a -> s{_aName = a})
+
+-- | Representation of the resource.
+aResource :: Lens' Asset (Maybe Resource)
+aResource
+  = lens _aResource (\ s a -> s{_aResource = a})
+
+-- | 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.
+aIAMPolicy :: Lens' Asset (Maybe Policy)
+aIAMPolicy
+  = lens _aIAMPolicy (\ s a -> s{_aIAMPolicy = a})
+
+-- | Type of the asset. Example: \"google.compute.Disk\".
+aAssetType :: Lens' Asset (Maybe Text)
+aAssetType
+  = lens _aAssetType (\ s a -> s{_aAssetType = a})
+
+instance FromJSON Asset where
+        parseJSON
+          = withObject "Asset"
+              (\ o ->
+                 Asset' <$>
+                   (o .:? "name") <*> (o .:? "resource") <*>
+                     (o .:? "iamPolicy")
+                     <*> (o .:? "assetType"))
+
+instance ToJSON Asset where
+        toJSON Asset'{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _aName,
+                  ("resource" .=) <$> _aResource,
+                  ("iamPolicy" .=) <$> _aIAMPolicy,
+                  ("assetType" .=) <$> _aAssetType])
+
+-- | A Cloud Storage location.
+--
+-- /See:/ 'gcsDestination' smart constructor.
+newtype GcsDestination = GcsDestination'
+    { _gdURI :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GcsDestination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdURI'
+gcsDestination
+    :: GcsDestination
+gcsDestination =
+    GcsDestination'
+    { _gdURI = Nothing
+    }
+
+-- | 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.
+gdURI :: Lens' GcsDestination (Maybe Text)
+gdURI = lens _gdURI (\ s a -> s{_gdURI = a})
+
+instance FromJSON GcsDestination where
+        parseJSON
+          = withObject "GcsDestination"
+              (\ o -> GcsDestination' <$> (o .:? "uri"))
+
+instance ToJSON GcsDestination where
+        toJSON GcsDestination'{..}
+          = object (catMaybes [("uri" .=) <$> _gdURI])
+
+--
+-- /See:/ 'statusDetailsItem' smart constructor.
+newtype StatusDetailsItem = StatusDetailsItem'
+    { _sdiAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StatusDetailsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdiAddtional'
+statusDetailsItem
+    :: HashMap Text JSONValue -- ^ 'sdiAddtional'
+    -> StatusDetailsItem
+statusDetailsItem pSdiAddtional_ =
+    StatusDetailsItem'
+    { _sdiAddtional = _Coerce # pSdiAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+sdiAddtional :: Lens' StatusDetailsItem (HashMap Text JSONValue)
+sdiAddtional
+  = lens _sdiAddtional (\ s a -> s{_sdiAddtional = a})
+      . _Coerce
+
+instance FromJSON StatusDetailsItem where
+        parseJSON
+          = withObject "StatusDetailsItem"
+              (\ o -> StatusDetailsItem' <$> (parseJSONObject o))
+
+instance ToJSON StatusDetailsItem where
+        toJSON = toJSON . _sdiAddtional
+
+-- | Export asset request.
+--
+-- /See:/ 'exportAssetsRequest' smart constructor.
+data ExportAssetsRequest = ExportAssetsRequest'
+    { _earReadTime     :: !(Maybe DateTime')
+    , _earAssetTypes   :: !(Maybe [Text])
+    , _earOutputConfig :: !(Maybe OutputConfig)
+    , _earContentType  :: !(Maybe ExportAssetsRequestContentType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExportAssetsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'earReadTime'
+--
+-- * 'earAssetTypes'
+--
+-- * 'earOutputConfig'
+--
+-- * 'earContentType'
+exportAssetsRequest
+    :: ExportAssetsRequest
+exportAssetsRequest =
+    ExportAssetsRequest'
+    { _earReadTime = Nothing
+    , _earAssetTypes = Nothing
+    , _earOutputConfig = Nothing
+    , _earContentType = Nothing
+    }
+
+-- | 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.
+earReadTime :: Lens' ExportAssetsRequest (Maybe UTCTime)
+earReadTime
+  = lens _earReadTime (\ s a -> s{_earReadTime = a}) .
+      mapping _DateTime
+
+-- | A list of asset types of which to take a snapshot for. For example:
+-- \"google.compute.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.
+earAssetTypes :: Lens' ExportAssetsRequest [Text]
+earAssetTypes
+  = lens _earAssetTypes
+      (\ s a -> s{_earAssetTypes = a})
+      . _Default
+      . _Coerce
+
+-- | Required. Output configuration indicating where the results will be
+-- output to. All results will be in newline delimited JSON format.
+earOutputConfig :: Lens' ExportAssetsRequest (Maybe OutputConfig)
+earOutputConfig
+  = lens _earOutputConfig
+      (\ s a -> s{_earOutputConfig = a})
+
+-- | Asset content type. If not specified, no content but the asset name will
+-- be returned.
+earContentType :: Lens' ExportAssetsRequest (Maybe ExportAssetsRequestContentType)
+earContentType
+  = lens _earContentType
+      (\ s a -> s{_earContentType = a})
+
+instance FromJSON ExportAssetsRequest where
+        parseJSON
+          = withObject "ExportAssetsRequest"
+              (\ o ->
+                 ExportAssetsRequest' <$>
+                   (o .:? "readTime") <*>
+                     (o .:? "assetTypes" .!= mempty)
+                     <*> (o .:? "outputConfig")
+                     <*> (o .:? "contentType"))
+
+instance ToJSON ExportAssetsRequest where
+        toJSON ExportAssetsRequest'{..}
+          = object
+              (catMaybes
+                 [("readTime" .=) <$> _earReadTime,
+                  ("assetTypes" .=) <$> _earAssetTypes,
+                  ("outputConfig" .=) <$> _earOutputConfig,
+                  ("contentType" .=) <$> _earContentType])
+
+-- | A time window of (start_time, end_time].
+--
+-- /See:/ 'timeWindow' smart constructor.
+data TimeWindow = TimeWindow'
+    { _twStartTime :: !(Maybe DateTime')
+    , _twEndTime   :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TimeWindow' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'twStartTime'
+--
+-- * 'twEndTime'
+timeWindow
+    :: TimeWindow
+timeWindow =
+    TimeWindow'
+    { _twStartTime = Nothing
+    , _twEndTime = Nothing
+    }
+
+-- | Start time of the time window (exclusive).
+twStartTime :: Lens' TimeWindow (Maybe UTCTime)
+twStartTime
+  = lens _twStartTime (\ s a -> s{_twStartTime = a}) .
+      mapping _DateTime
+
+-- | End time of the time window (inclusive). Current timestamp if not
+-- specified.
+twEndTime :: Lens' TimeWindow (Maybe UTCTime)
+twEndTime
+  = lens _twEndTime (\ s a -> s{_twEndTime = a}) .
+      mapping _DateTime
+
+instance FromJSON TimeWindow where
+        parseJSON
+          = withObject "TimeWindow"
+              (\ o ->
+                 TimeWindow' <$>
+                   (o .:? "startTime") <*> (o .:? "endTime"))
+
+instance ToJSON TimeWindow where
+        toJSON TimeWindow'{..}
+          = object
+              (catMaybes
+                 [("startTime" .=) <$> _twStartTime,
+                  ("endTime" .=) <$> _twEndTime])
+
+-- | Temporal asset. In addition to the asset, the temporal asset includes
+-- the status of the asset and valid from and to time of it.
+--
+-- /See:/ 'temporalAsset' smart constructor.
+data TemporalAsset = TemporalAsset'
+    { _taWindow  :: !(Maybe TimeWindow)
+    , _taAsset   :: !(Maybe Asset)
+    , _taDeleted :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TemporalAsset' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'taWindow'
+--
+-- * 'taAsset'
+--
+-- * 'taDeleted'
+temporalAsset
+    :: TemporalAsset
+temporalAsset =
+    TemporalAsset'
+    { _taWindow = Nothing
+    , _taAsset = Nothing
+    , _taDeleted = Nothing
+    }
+
+-- | The time window when the asset data and state was observed.
+taWindow :: Lens' TemporalAsset (Maybe TimeWindow)
+taWindow = lens _taWindow (\ s a -> s{_taWindow = a})
+
+-- | Asset.
+taAsset :: Lens' TemporalAsset (Maybe Asset)
+taAsset = lens _taAsset (\ s a -> s{_taAsset = a})
+
+-- | If the asset is deleted or not.
+taDeleted :: Lens' TemporalAsset (Maybe Bool)
+taDeleted
+  = lens _taDeleted (\ s a -> s{_taDeleted = a})
+
+instance FromJSON TemporalAsset where
+        parseJSON
+          = withObject "TemporalAsset"
+              (\ o ->
+                 TemporalAsset' <$>
+                   (o .:? "window") <*> (o .:? "asset") <*>
+                     (o .:? "deleted"))
+
+instance ToJSON TemporalAsset where
+        toJSON TemporalAsset'{..}
+          = object
+              (catMaybes
+                 [("window" .=) <$> _taWindow,
+                  ("asset" .=) <$> _taAsset,
+                  ("deleted" .=) <$> _taDeleted])
+
+-- | Representation of a cloud resource.
+--
+-- /See:/ 'resource' smart constructor.
+data Resource = Resource'
+    { _rParent               :: !(Maybe Text)
+    , _rData                 :: !(Maybe ResourceData)
+    , _rVersion              :: !(Maybe Text)
+    , _rDiscoveryName        :: !(Maybe Text)
+    , _rDiscoveryDocumentURI :: !(Maybe Text)
+    , _rResourceURL          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Resource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rParent'
+--
+-- * 'rData'
+--
+-- * 'rVersion'
+--
+-- * 'rDiscoveryName'
+--
+-- * 'rDiscoveryDocumentURI'
+--
+-- * 'rResourceURL'
+resource
+    :: Resource
+resource =
+    Resource'
+    { _rParent = Nothing
+    , _rData = Nothing
+    , _rVersion = Nothing
+    , _rDiscoveryName = Nothing
+    , _rDiscoveryDocumentURI = Nothing
+    , _rResourceURL = Nothing
+    }
+
+-- | 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.
+rParent :: Lens' Resource (Maybe Text)
+rParent = lens _rParent (\ s a -> s{_rParent = a})
+
+-- | The content of the resource, in which some sensitive fields are scrubbed
+-- away and may not be present.
+rData :: Lens' Resource (Maybe ResourceData)
+rData = lens _rData (\ s a -> s{_rData = a})
+
+-- | The API version. Example: \"v1\".
+rVersion :: Lens' Resource (Maybe Text)
+rVersion = lens _rVersion (\ s a -> s{_rVersion = a})
+
+-- | 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.
+rDiscoveryName :: Lens' Resource (Maybe Text)
+rDiscoveryName
+  = lens _rDiscoveryName
+      (\ s a -> s{_rDiscoveryName = a})
+
+-- | 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.
+rDiscoveryDocumentURI :: Lens' Resource (Maybe Text)
+rDiscoveryDocumentURI
+  = lens _rDiscoveryDocumentURI
+      (\ s a -> s{_rDiscoveryDocumentURI = a})
+
+-- | 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.
+rResourceURL :: Lens' Resource (Maybe Text)
+rResourceURL
+  = lens _rResourceURL (\ s a -> s{_rResourceURL = a})
+
+instance FromJSON Resource where
+        parseJSON
+          = withObject "Resource"
+              (\ o ->
+                 Resource' <$>
+                   (o .:? "parent") <*> (o .:? "data") <*>
+                     (o .:? "version")
+                     <*> (o .:? "discoveryName")
+                     <*> (o .:? "discoveryDocumentUri")
+                     <*> (o .:? "resourceUrl"))
+
+instance ToJSON Resource where
+        toJSON Resource'{..}
+          = object
+              (catMaybes
+                 [("parent" .=) <$> _rParent, ("data" .=) <$> _rData,
+                  ("version" .=) <$> _rVersion,
+                  ("discoveryName" .=) <$> _rDiscoveryName,
+                  ("discoveryDocumentUri" .=) <$>
+                    _rDiscoveryDocumentURI,
+                  ("resourceUrl" .=) <$> _rResourceURL])
+
+-- | The content of the resource, in which some sensitive fields are scrubbed
+-- away and may not be present.
+--
+-- /See:/ 'resourceData' smart constructor.
+newtype ResourceData = ResourceData'
+    { _rdAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourceData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rdAddtional'
+resourceData
+    :: HashMap Text JSONValue -- ^ 'rdAddtional'
+    -> ResourceData
+resourceData pRdAddtional_ =
+    ResourceData'
+    { _rdAddtional = _Coerce # pRdAddtional_
+    }
+
+-- | Properties of the object.
+rdAddtional :: Lens' ResourceData (HashMap Text JSONValue)
+rdAddtional
+  = lens _rdAddtional (\ s a -> s{_rdAddtional = a}) .
+      _Coerce
+
+instance FromJSON ResourceData where
+        parseJSON
+          = withObject "ResourceData"
+              (\ o -> ResourceData' <$> (parseJSONObject o))
+
+instance ToJSON ResourceData where
+        toJSON = toJSON . _rdAddtional
+
+-- | Output configuration for export assets destination.
+--
+-- /See:/ 'outputConfig' smart constructor.
+newtype OutputConfig = OutputConfig'
+    { _ocGcsDestination :: Maybe GcsDestination
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OutputConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ocGcsDestination'
+outputConfig
+    :: OutputConfig
+outputConfig =
+    OutputConfig'
+    { _ocGcsDestination = Nothing
+    }
+
+-- | Destination on Cloud Storage.
+ocGcsDestination :: Lens' OutputConfig (Maybe GcsDestination)
+ocGcsDestination
+  = lens _ocGcsDestination
+      (\ s a -> s{_ocGcsDestination = a})
+
+instance FromJSON OutputConfig where
+        parseJSON
+          = withObject "OutputConfig"
+              (\ o -> OutputConfig' <$> (o .:? "gcsDestination"))
+
+instance ToJSON OutputConfig where
+        toJSON OutputConfig'{..}
+          = object
+              (catMaybes
+                 [("gcsDestination" .=) <$> _ocGcsDestination])
+
+-- | Defines an Identity and Access Management (IAM) policy. It is used to
+-- 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).
+--
+-- /See:/ 'policy' smart constructor.
+data Policy = Policy'
+    { _pAuditConfigs :: !(Maybe [AuditConfig])
+    , _pEtag         :: !(Maybe Bytes)
+    , _pVersion      :: !(Maybe (Textual Int32))
+    , _pBindings     :: !(Maybe [Binding])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Policy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pAuditConfigs'
+--
+-- * 'pEtag'
+--
+-- * 'pVersion'
+--
+-- * 'pBindings'
+policy
+    :: Policy
+policy =
+    Policy'
+    { _pAuditConfigs = Nothing
+    , _pEtag = Nothing
+    , _pVersion = Nothing
+    , _pBindings = Nothing
+    }
+
+-- | Specifies cloud audit logging configuration for this policy.
+pAuditConfigs :: Lens' Policy [AuditConfig]
+pAuditConfigs
+  = lens _pAuditConfigs
+      (\ s a -> s{_pAuditConfigs = a})
+      . _Default
+      . _Coerce
+
+-- | \`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.
+pEtag :: Lens' Policy (Maybe ByteString)
+pEtag
+  = lens _pEtag (\ s a -> s{_pEtag = a}) .
+      mapping _Bytes
+
+-- | Deprecated.
+pVersion :: Lens' Policy (Maybe Int32)
+pVersion
+  = lens _pVersion (\ s a -> s{_pVersion = a}) .
+      mapping _Coerce
+
+-- | Associates a list of \`members\` to a \`role\`. \`bindings\` with no
+-- members will result in an error.
+pBindings :: Lens' Policy [Binding]
+pBindings
+  = lens _pBindings (\ s a -> s{_pBindings = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Policy where
+        parseJSON
+          = withObject "Policy"
+              (\ o ->
+                 Policy' <$>
+                   (o .:? "auditConfigs" .!= mempty) <*> (o .:? "etag")
+                     <*> (o .:? "version")
+                     <*> (o .:? "bindings" .!= mempty))
+
+instance ToJSON Policy where
+        toJSON Policy'{..}
+          = object
+              (catMaybes
+                 [("auditConfigs" .=) <$> _pAuditConfigs,
+                  ("etag" .=) <$> _pEtag, ("version" .=) <$> _pVersion,
+                  ("bindings" .=) <$> _pBindings])
+
+-- | Batch get assets history response.
+--
+-- /See:/ 'batchGetAssetsHistoryResponse' smart constructor.
+newtype BatchGetAssetsHistoryResponse = BatchGetAssetsHistoryResponse'
+    { _bgahrAssets :: Maybe [TemporalAsset]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BatchGetAssetsHistoryResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bgahrAssets'
+batchGetAssetsHistoryResponse
+    :: BatchGetAssetsHistoryResponse
+batchGetAssetsHistoryResponse =
+    BatchGetAssetsHistoryResponse'
+    { _bgahrAssets = Nothing
+    }
+
+-- | A list of assets with valid time windows.
+bgahrAssets :: Lens' BatchGetAssetsHistoryResponse [TemporalAsset]
+bgahrAssets
+  = lens _bgahrAssets (\ s a -> s{_bgahrAssets = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON BatchGetAssetsHistoryResponse where
+        parseJSON
+          = withObject "BatchGetAssetsHistoryResponse"
+              (\ o ->
+                 BatchGetAssetsHistoryResponse' <$>
+                   (o .:? "assets" .!= mempty))
+
+instance ToJSON BatchGetAssetsHistoryResponse where
+        toJSON BatchGetAssetsHistoryResponse'{..}
+          = object (catMaybes [("assets" .=) <$> _bgahrAssets])
+
+-- | 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.
+--
+-- /See:/ 'operationMetadata' smart constructor.
+newtype OperationMetadata = OperationMetadata'
+    { _omAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'omAddtional'
+operationMetadata
+    :: HashMap Text JSONValue -- ^ 'omAddtional'
+    -> OperationMetadata
+operationMetadata pOmAddtional_ =
+    OperationMetadata'
+    { _omAddtional = _Coerce # pOmAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+omAddtional :: Lens' OperationMetadata (HashMap Text JSONValue)
+omAddtional
+  = lens _omAddtional (\ s a -> s{_omAddtional = a}) .
+      _Coerce
+
+instance FromJSON OperationMetadata where
+        parseJSON
+          = withObject "OperationMetadata"
+              (\ o -> OperationMetadata' <$> (parseJSONObject o))
+
+instance ToJSON OperationMetadata where
+        toJSON = toJSON . _omAddtional
+
+-- | 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.
+--
+-- /See:/ 'auditLogConfig' smart constructor.
+data AuditLogConfig = AuditLogConfig'
+    { _alcLogType         :: !(Maybe AuditLogConfigLogType)
+    , _alcExemptedMembers :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AuditLogConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'alcLogType'
+--
+-- * 'alcExemptedMembers'
+auditLogConfig
+    :: AuditLogConfig
+auditLogConfig =
+    AuditLogConfig'
+    { _alcLogType = Nothing
+    , _alcExemptedMembers = Nothing
+    }
+
+-- | The log type that this config enables.
+alcLogType :: Lens' AuditLogConfig (Maybe AuditLogConfigLogType)
+alcLogType
+  = lens _alcLogType (\ s a -> s{_alcLogType = a})
+
+-- | Specifies the identities that do not cause logging for this type of
+-- permission. Follows the same format of Binding.members.
+alcExemptedMembers :: Lens' AuditLogConfig [Text]
+alcExemptedMembers
+  = lens _alcExemptedMembers
+      (\ s a -> s{_alcExemptedMembers = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON AuditLogConfig where
+        parseJSON
+          = withObject "AuditLogConfig"
+              (\ o ->
+                 AuditLogConfig' <$>
+                   (o .:? "logType") <*>
+                     (o .:? "exemptedMembers" .!= mempty))
+
+instance ToJSON AuditLogConfig where
+        toJSON AuditLogConfig'{..}
+          = object
+              (catMaybes
+                 [("logType" .=) <$> _alcLogType,
+                  ("exemptedMembers" .=) <$> _alcExemptedMembers])
+
+-- | 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\`.
+--
+-- /See:/ 'operationResponse' smart constructor.
+newtype OperationResponse = OperationResponse'
+    { _orAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'orAddtional'
+operationResponse
+    :: HashMap Text JSONValue -- ^ 'orAddtional'
+    -> OperationResponse
+operationResponse pOrAddtional_ =
+    OperationResponse'
+    { _orAddtional = _Coerce # pOrAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+orAddtional :: Lens' OperationResponse (HashMap Text JSONValue)
+orAddtional
+  = lens _orAddtional (\ s a -> s{_orAddtional = a}) .
+      _Coerce
+
+instance FromJSON OperationResponse where
+        parseJSON
+          = withObject "OperationResponse"
+              (\ o -> OperationResponse' <$> (parseJSONObject o))
+
+instance ToJSON OperationResponse where
+        toJSON = toJSON . _orAddtional
+
+-- | Associates \`members\` with a \`role\`.
+--
+-- /See:/ 'binding' smart constructor.
+data Binding = Binding'
+    { _bMembers   :: !(Maybe [Text])
+    , _bRole      :: !(Maybe Text)
+    , _bCondition :: !(Maybe Expr)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Binding' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bMembers'
+--
+-- * 'bRole'
+--
+-- * 'bCondition'
+binding
+    :: Binding
+binding =
+    Binding'
+    { _bMembers = Nothing
+    , _bRole = Nothing
+    , _bCondition = Nothing
+    }
+
+-- | 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}\`: A Google Apps domain
+-- name that represents all the users of that domain. For example,
+-- \`google.com\` or \`example.com\`.
+bMembers :: Lens' Binding [Text]
+bMembers
+  = lens _bMembers (\ s a -> s{_bMembers = a}) .
+      _Default
+      . _Coerce
+
+-- | Role that is assigned to \`members\`. For example, \`roles\/viewer\`,
+-- \`roles\/editor\`, or \`roles\/owner\`.
+bRole :: Lens' Binding (Maybe Text)
+bRole = lens _bRole (\ s a -> s{_bRole = a})
+
+-- | Unimplemented. 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.
+bCondition :: Lens' Binding (Maybe Expr)
+bCondition
+  = lens _bCondition (\ s a -> s{_bCondition = a})
+
+instance FromJSON Binding where
+        parseJSON
+          = withObject "Binding"
+              (\ o ->
+                 Binding' <$>
+                   (o .:? "members" .!= mempty) <*> (o .:? "role") <*>
+                     (o .:? "condition"))
+
+instance ToJSON Binding where
+        toJSON Binding'{..}
+          = object
+              (catMaybes
+                 [("members" .=) <$> _bMembers,
+                  ("role" .=) <$> _bRole,
+                  ("condition" .=) <$> _bCondition])
diff --git a/gen/Network/Google/CloudAsset/Types/Sum.hs b/gen/Network/Google/CloudAsset/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudAsset/Types/Sum.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.CloudAsset.Types.Sum
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.CloudAsset.Types.Sum where
+
+import           Network.Google.Prelude hiding (Bytes)
+
+-- | Asset content type. If not specified, no content but the asset name will
+-- be returned.
+data ExportAssetsRequestContentType
+    = EARCTContentTypeUnspecified
+      -- ^ @CONTENT_TYPE_UNSPECIFIED@
+      -- Unspecified content type.
+    | EARCTResource
+      -- ^ @RESOURCE@
+      -- Resource metadata.
+    | EARCTIAMPolicy
+      -- ^ @IAM_POLICY@
+      -- The actual IAM policy set on a resource.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ExportAssetsRequestContentType
+
+instance FromHttpApiData ExportAssetsRequestContentType where
+    parseQueryParam = \case
+        "CONTENT_TYPE_UNSPECIFIED" -> Right EARCTContentTypeUnspecified
+        "RESOURCE" -> Right EARCTResource
+        "IAM_POLICY" -> Right EARCTIAMPolicy
+        x -> Left ("Unable to parse ExportAssetsRequestContentType from: " <> x)
+
+instance ToHttpApiData ExportAssetsRequestContentType where
+    toQueryParam = \case
+        EARCTContentTypeUnspecified -> "CONTENT_TYPE_UNSPECIFIED"
+        EARCTResource -> "RESOURCE"
+        EARCTIAMPolicy -> "IAM_POLICY"
+
+instance FromJSON ExportAssetsRequestContentType where
+    parseJSON = parseJSONText "ExportAssetsRequestContentType"
+
+instance ToJSON ExportAssetsRequestContentType where
+    toJSON = toJSONText
+
+-- | The log type that this config enables.
+data AuditLogConfigLogType
+    = LogTypeUnspecified
+      -- ^ @LOG_TYPE_UNSPECIFIED@
+      -- Default case. Should never be this.
+    | AdminRead
+      -- ^ @ADMIN_READ@
+      -- Admin reads. Example: CloudIAM getIamPolicy
+    | DataWrite
+      -- ^ @DATA_WRITE@
+      -- Data writes. Example: CloudSQL Users create
+    | DataRead
+      -- ^ @DATA_READ@
+      -- Data reads. Example: CloudSQL Users list
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable AuditLogConfigLogType
+
+instance FromHttpApiData AuditLogConfigLogType where
+    parseQueryParam = \case
+        "LOG_TYPE_UNSPECIFIED" -> Right LogTypeUnspecified
+        "ADMIN_READ" -> Right AdminRead
+        "DATA_WRITE" -> Right DataWrite
+        "DATA_READ" -> Right DataRead
+        x -> Left ("Unable to parse AuditLogConfigLogType from: " <> x)
+
+instance ToHttpApiData AuditLogConfigLogType where
+    toQueryParam = \case
+        LogTypeUnspecified -> "LOG_TYPE_UNSPECIFIED"
+        AdminRead -> "ADMIN_READ"
+        DataWrite -> "DATA_WRITE"
+        DataRead -> "DATA_READ"
+
+instance FromJSON AuditLogConfigLogType where
+    parseJSON = parseJSONText "AuditLogConfigLogType"
+
+instance ToJSON AuditLogConfigLogType where
+    toJSON = toJSONText
+
+-- | V1 error format.
+data Xgafv
+    = X1
+      -- ^ @1@
+      -- v1 error format
+    | X2
+      -- ^ @2@
+      -- v2 error format
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable Xgafv
+
+instance FromHttpApiData Xgafv where
+    parseQueryParam = \case
+        "1" -> Right X1
+        "2" -> Right X2
+        x -> Left ("Unable to parse Xgafv from: " <> x)
+
+instance ToHttpApiData Xgafv where
+    toQueryParam = \case
+        X1 -> "1"
+        X2 -> "2"
+
+instance FromJSON Xgafv where
+    parseJSON = parseJSONText "Xgafv"
+
+instance ToJSON Xgafv where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/CloudAsset/Organizations/BatchGetAssetsHistory.hs b/gen/Network/Google/Resource/CloudAsset/Organizations/BatchGetAssetsHistory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudAsset/Organizations/BatchGetAssetsHistory.hs
@@ -0,0 +1,225 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudAsset.Organizations.BatchGetAssetsHistory
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- 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.
+--
+-- /See:/ <https://console.cloud.google.com/apis/api/cloudasset.googleapis.com/overview Cloud Asset API Reference> for @cloudasset.organizations.batchGetAssetsHistory@.
+module Network.Google.Resource.CloudAsset.Organizations.BatchGetAssetsHistory
+    (
+    -- * REST Resource
+      OrganizationsBatchGetAssetsHistoryResource
+
+    -- * Creating a Request
+    , organizationsBatchGetAssetsHistory
+    , OrganizationsBatchGetAssetsHistory
+
+    -- * Request Lenses
+    , obgahParent
+    , obgahXgafv
+    , obgahReadTimeWindowEndTime
+    , obgahUploadProtocol
+    , obgahAccessToken
+    , obgahUploadType
+    , obgahAssetNames
+    , obgahReadTimeWindowStartTime
+    , obgahContentType
+    , obgahCallback
+    ) where
+
+import           Network.Google.CloudAsset.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudasset.organizations.batchGetAssetsHistory@ method which the
+-- 'OrganizationsBatchGetAssetsHistory' request conforms to.
+type OrganizationsBatchGetAssetsHistoryResource =
+     "v1beta1" :>
+       CaptureMode "parent" "batchGetAssetsHistory" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "readTimeWindow.endTime" DateTime' :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParams "assetNames" Text :>
+                     QueryParam "readTimeWindow.startTime" DateTime' :>
+                       QueryParam "contentType" Text :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] BatchGetAssetsHistoryResponse
+
+-- | 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.
+--
+-- /See:/ 'organizationsBatchGetAssetsHistory' smart constructor.
+data OrganizationsBatchGetAssetsHistory = OrganizationsBatchGetAssetsHistory'
+    { _obgahParent                  :: !Text
+    , _obgahXgafv                   :: !(Maybe Xgafv)
+    , _obgahReadTimeWindowEndTime   :: !(Maybe DateTime')
+    , _obgahUploadProtocol          :: !(Maybe Text)
+    , _obgahAccessToken             :: !(Maybe Text)
+    , _obgahUploadType              :: !(Maybe Text)
+    , _obgahAssetNames              :: !(Maybe [Text])
+    , _obgahReadTimeWindowStartTime :: !(Maybe DateTime')
+    , _obgahContentType             :: !(Maybe Text)
+    , _obgahCallback                :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OrganizationsBatchGetAssetsHistory' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'obgahParent'
+--
+-- * 'obgahXgafv'
+--
+-- * 'obgahReadTimeWindowEndTime'
+--
+-- * 'obgahUploadProtocol'
+--
+-- * 'obgahAccessToken'
+--
+-- * 'obgahUploadType'
+--
+-- * 'obgahAssetNames'
+--
+-- * 'obgahReadTimeWindowStartTime'
+--
+-- * 'obgahContentType'
+--
+-- * 'obgahCallback'
+organizationsBatchGetAssetsHistory
+    :: Text -- ^ 'obgahParent'
+    -> OrganizationsBatchGetAssetsHistory
+organizationsBatchGetAssetsHistory pObgahParent_ =
+    OrganizationsBatchGetAssetsHistory'
+    { _obgahParent = pObgahParent_
+    , _obgahXgafv = Nothing
+    , _obgahReadTimeWindowEndTime = Nothing
+    , _obgahUploadProtocol = Nothing
+    , _obgahAccessToken = Nothing
+    , _obgahUploadType = Nothing
+    , _obgahAssetNames = Nothing
+    , _obgahReadTimeWindowStartTime = Nothing
+    , _obgahContentType = Nothing
+    , _obgahCallback = Nothing
+    }
+
+-- | 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\").
+obgahParent :: Lens' OrganizationsBatchGetAssetsHistory Text
+obgahParent
+  = lens _obgahParent (\ s a -> s{_obgahParent = a})
+
+-- | V1 error format.
+obgahXgafv :: Lens' OrganizationsBatchGetAssetsHistory (Maybe Xgafv)
+obgahXgafv
+  = lens _obgahXgafv (\ s a -> s{_obgahXgafv = a})
+
+-- | End time of the time window (inclusive). Current timestamp if not
+-- specified.
+obgahReadTimeWindowEndTime :: Lens' OrganizationsBatchGetAssetsHistory (Maybe UTCTime)
+obgahReadTimeWindowEndTime
+  = lens _obgahReadTimeWindowEndTime
+      (\ s a -> s{_obgahReadTimeWindowEndTime = a})
+      . mapping _DateTime
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+obgahUploadProtocol :: Lens' OrganizationsBatchGetAssetsHistory (Maybe Text)
+obgahUploadProtocol
+  = lens _obgahUploadProtocol
+      (\ s a -> s{_obgahUploadProtocol = a})
+
+-- | OAuth access token.
+obgahAccessToken :: Lens' OrganizationsBatchGetAssetsHistory (Maybe Text)
+obgahAccessToken
+  = lens _obgahAccessToken
+      (\ s a -> s{_obgahAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+obgahUploadType :: Lens' OrganizationsBatchGetAssetsHistory (Maybe Text)
+obgahUploadType
+  = lens _obgahUploadType
+      (\ s a -> s{_obgahUploadType = a})
+
+-- | 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)
+-- 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.
+obgahAssetNames :: Lens' OrganizationsBatchGetAssetsHistory [Text]
+obgahAssetNames
+  = lens _obgahAssetNames
+      (\ s a -> s{_obgahAssetNames = a})
+      . _Default
+      . _Coerce
+
+-- | Start time of the time window (exclusive).
+obgahReadTimeWindowStartTime :: Lens' OrganizationsBatchGetAssetsHistory (Maybe UTCTime)
+obgahReadTimeWindowStartTime
+  = lens _obgahReadTimeWindowStartTime
+      (\ s a -> s{_obgahReadTimeWindowStartTime = a})
+      . mapping _DateTime
+
+-- | Required. The content type.
+obgahContentType :: Lens' OrganizationsBatchGetAssetsHistory (Maybe Text)
+obgahContentType
+  = lens _obgahContentType
+      (\ s a -> s{_obgahContentType = a})
+
+-- | JSONP
+obgahCallback :: Lens' OrganizationsBatchGetAssetsHistory (Maybe Text)
+obgahCallback
+  = lens _obgahCallback
+      (\ s a -> s{_obgahCallback = a})
+
+instance GoogleRequest
+         OrganizationsBatchGetAssetsHistory where
+        type Rs OrganizationsBatchGetAssetsHistory =
+             BatchGetAssetsHistoryResponse
+        type Scopes OrganizationsBatchGetAssetsHistory =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient OrganizationsBatchGetAssetsHistory'{..}
+          = go _obgahParent _obgahXgafv
+              _obgahReadTimeWindowEndTime
+              _obgahUploadProtocol
+              _obgahAccessToken
+              _obgahUploadType
+              (_obgahAssetNames ^. _Default)
+              _obgahReadTimeWindowStartTime
+              _obgahContentType
+              _obgahCallback
+              (Just AltJSON)
+              cloudAssetService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy OrganizationsBatchGetAssetsHistoryResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudAsset/Organizations/ExportAssets.hs b/gen/Network/Google/Resource/CloudAsset/Organizations/ExportAssets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudAsset/Organizations/ExportAssets.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudAsset.Organizations.ExportAssets
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- 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.
+--
+-- /See:/ <https://console.cloud.google.com/apis/api/cloudasset.googleapis.com/overview Cloud Asset API Reference> for @cloudasset.organizations.exportAssets@.
+module Network.Google.Resource.CloudAsset.Organizations.ExportAssets
+    (
+    -- * REST Resource
+      OrganizationsExportAssetsResource
+
+    -- * Creating a Request
+    , organizationsExportAssets
+    , OrganizationsExportAssets
+
+    -- * Request Lenses
+    , oeaParent
+    , oeaXgafv
+    , oeaUploadProtocol
+    , oeaAccessToken
+    , oeaUploadType
+    , oeaPayload
+    , oeaCallback
+    ) where
+
+import           Network.Google.CloudAsset.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudasset.organizations.exportAssets@ method which the
+-- 'OrganizationsExportAssets' request conforms to.
+type OrganizationsExportAssetsResource =
+     "v1beta1" :>
+       CaptureMode "parent" "exportAssets" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] ExportAssetsRequest :>
+                       Post '[JSON] Operation
+
+-- | 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.
+--
+-- /See:/ 'organizationsExportAssets' smart constructor.
+data OrganizationsExportAssets = OrganizationsExportAssets'
+    { _oeaParent         :: !Text
+    , _oeaXgafv          :: !(Maybe Xgafv)
+    , _oeaUploadProtocol :: !(Maybe Text)
+    , _oeaAccessToken    :: !(Maybe Text)
+    , _oeaUploadType     :: !(Maybe Text)
+    , _oeaPayload        :: !ExportAssetsRequest
+    , _oeaCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OrganizationsExportAssets' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oeaParent'
+--
+-- * 'oeaXgafv'
+--
+-- * 'oeaUploadProtocol'
+--
+-- * 'oeaAccessToken'
+--
+-- * 'oeaUploadType'
+--
+-- * 'oeaPayload'
+--
+-- * 'oeaCallback'
+organizationsExportAssets
+    :: Text -- ^ 'oeaParent'
+    -> ExportAssetsRequest -- ^ 'oeaPayload'
+    -> OrganizationsExportAssets
+organizationsExportAssets pOeaParent_ pOeaPayload_ =
+    OrganizationsExportAssets'
+    { _oeaParent = pOeaParent_
+    , _oeaXgafv = Nothing
+    , _oeaUploadProtocol = Nothing
+    , _oeaAccessToken = Nothing
+    , _oeaUploadType = Nothing
+    , _oeaPayload = pOeaPayload_
+    , _oeaCallback = Nothing
+    }
+
+-- | 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\").
+oeaParent :: Lens' OrganizationsExportAssets Text
+oeaParent
+  = lens _oeaParent (\ s a -> s{_oeaParent = a})
+
+-- | V1 error format.
+oeaXgafv :: Lens' OrganizationsExportAssets (Maybe Xgafv)
+oeaXgafv = lens _oeaXgafv (\ s a -> s{_oeaXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+oeaUploadProtocol :: Lens' OrganizationsExportAssets (Maybe Text)
+oeaUploadProtocol
+  = lens _oeaUploadProtocol
+      (\ s a -> s{_oeaUploadProtocol = a})
+
+-- | OAuth access token.
+oeaAccessToken :: Lens' OrganizationsExportAssets (Maybe Text)
+oeaAccessToken
+  = lens _oeaAccessToken
+      (\ s a -> s{_oeaAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+oeaUploadType :: Lens' OrganizationsExportAssets (Maybe Text)
+oeaUploadType
+  = lens _oeaUploadType
+      (\ s a -> s{_oeaUploadType = a})
+
+-- | Multipart request metadata.
+oeaPayload :: Lens' OrganizationsExportAssets ExportAssetsRequest
+oeaPayload
+  = lens _oeaPayload (\ s a -> s{_oeaPayload = a})
+
+-- | JSONP
+oeaCallback :: Lens' OrganizationsExportAssets (Maybe Text)
+oeaCallback
+  = lens _oeaCallback (\ s a -> s{_oeaCallback = a})
+
+instance GoogleRequest OrganizationsExportAssets
+         where
+        type Rs OrganizationsExportAssets = Operation
+        type Scopes OrganizationsExportAssets =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient OrganizationsExportAssets'{..}
+          = go _oeaParent _oeaXgafv _oeaUploadProtocol
+              _oeaAccessToken
+              _oeaUploadType
+              _oeaCallback
+              (Just AltJSON)
+              _oeaPayload
+              cloudAssetService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy OrganizationsExportAssetsResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudAsset/Organizations/Operations/Get.hs b/gen/Network/Google/Resource/CloudAsset/Organizations/Operations/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudAsset/Organizations/Operations/Get.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudAsset.Organizations.Operations.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the latest state of a long-running operation. Clients can use this
+-- method to poll the operation result at intervals as recommended by the
+-- API service.
+--
+-- /See:/ <https://console.cloud.google.com/apis/api/cloudasset.googleapis.com/overview Cloud Asset API Reference> for @cloudasset.organizations.operations.get@.
+module Network.Google.Resource.CloudAsset.Organizations.Operations.Get
+    (
+    -- * REST Resource
+      OrganizationsOperationsGetResource
+
+    -- * Creating a Request
+    , organizationsOperationsGet
+    , OrganizationsOperationsGet
+
+    -- * Request Lenses
+    , oogXgafv
+    , oogUploadProtocol
+    , oogAccessToken
+    , oogUploadType
+    , oogName
+    , oogCallback
+    ) where
+
+import           Network.Google.CloudAsset.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudasset.organizations.operations.get@ method which the
+-- 'OrganizationsOperationsGet' request conforms to.
+type OrganizationsOperationsGetResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Operation
+
+-- | Gets the latest state of a long-running operation. Clients can use this
+-- method to poll the operation result at intervals as recommended by the
+-- API service.
+--
+-- /See:/ 'organizationsOperationsGet' smart constructor.
+data OrganizationsOperationsGet = OrganizationsOperationsGet'
+    { _oogXgafv          :: !(Maybe Xgafv)
+    , _oogUploadProtocol :: !(Maybe Text)
+    , _oogAccessToken    :: !(Maybe Text)
+    , _oogUploadType     :: !(Maybe Text)
+    , _oogName           :: !Text
+    , _oogCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OrganizationsOperationsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oogXgafv'
+--
+-- * 'oogUploadProtocol'
+--
+-- * 'oogAccessToken'
+--
+-- * 'oogUploadType'
+--
+-- * 'oogName'
+--
+-- * 'oogCallback'
+organizationsOperationsGet
+    :: Text -- ^ 'oogName'
+    -> OrganizationsOperationsGet
+organizationsOperationsGet pOogName_ =
+    OrganizationsOperationsGet'
+    { _oogXgafv = Nothing
+    , _oogUploadProtocol = Nothing
+    , _oogAccessToken = Nothing
+    , _oogUploadType = Nothing
+    , _oogName = pOogName_
+    , _oogCallback = Nothing
+    }
+
+-- | V1 error format.
+oogXgafv :: Lens' OrganizationsOperationsGet (Maybe Xgafv)
+oogXgafv = lens _oogXgafv (\ s a -> s{_oogXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+oogUploadProtocol :: Lens' OrganizationsOperationsGet (Maybe Text)
+oogUploadProtocol
+  = lens _oogUploadProtocol
+      (\ s a -> s{_oogUploadProtocol = a})
+
+-- | OAuth access token.
+oogAccessToken :: Lens' OrganizationsOperationsGet (Maybe Text)
+oogAccessToken
+  = lens _oogAccessToken
+      (\ s a -> s{_oogAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+oogUploadType :: Lens' OrganizationsOperationsGet (Maybe Text)
+oogUploadType
+  = lens _oogUploadType
+      (\ s a -> s{_oogUploadType = a})
+
+-- | The name of the operation resource.
+oogName :: Lens' OrganizationsOperationsGet Text
+oogName = lens _oogName (\ s a -> s{_oogName = a})
+
+-- | JSONP
+oogCallback :: Lens' OrganizationsOperationsGet (Maybe Text)
+oogCallback
+  = lens _oogCallback (\ s a -> s{_oogCallback = a})
+
+instance GoogleRequest OrganizationsOperationsGet
+         where
+        type Rs OrganizationsOperationsGet = Operation
+        type Scopes OrganizationsOperationsGet =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient OrganizationsOperationsGet'{..}
+          = go _oogName _oogXgafv _oogUploadProtocol
+              _oogAccessToken
+              _oogUploadType
+              _oogCallback
+              (Just AltJSON)
+              cloudAssetService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy OrganizationsOperationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudAsset/Projects/BatchGetAssetsHistory.hs b/gen/Network/Google/Resource/CloudAsset/Projects/BatchGetAssetsHistory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudAsset/Projects/BatchGetAssetsHistory.hs
@@ -0,0 +1,225 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudAsset.Projects.BatchGetAssetsHistory
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- 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.
+--
+-- /See:/ <https://console.cloud.google.com/apis/api/cloudasset.googleapis.com/overview Cloud Asset API Reference> for @cloudasset.projects.batchGetAssetsHistory@.
+module Network.Google.Resource.CloudAsset.Projects.BatchGetAssetsHistory
+    (
+    -- * REST Resource
+      ProjectsBatchGetAssetsHistoryResource
+
+    -- * Creating a Request
+    , projectsBatchGetAssetsHistory
+    , ProjectsBatchGetAssetsHistory
+
+    -- * Request Lenses
+    , pbgahParent
+    , pbgahXgafv
+    , pbgahReadTimeWindowEndTime
+    , pbgahUploadProtocol
+    , pbgahAccessToken
+    , pbgahUploadType
+    , pbgahAssetNames
+    , pbgahReadTimeWindowStartTime
+    , pbgahContentType
+    , pbgahCallback
+    ) where
+
+import           Network.Google.CloudAsset.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudasset.projects.batchGetAssetsHistory@ method which the
+-- 'ProjectsBatchGetAssetsHistory' request conforms to.
+type ProjectsBatchGetAssetsHistoryResource =
+     "v1beta1" :>
+       CaptureMode "parent" "batchGetAssetsHistory" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "readTimeWindow.endTime" DateTime' :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParams "assetNames" Text :>
+                     QueryParam "readTimeWindow.startTime" DateTime' :>
+                       QueryParam "contentType" Text :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] BatchGetAssetsHistoryResponse
+
+-- | 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.
+--
+-- /See:/ 'projectsBatchGetAssetsHistory' smart constructor.
+data ProjectsBatchGetAssetsHistory = ProjectsBatchGetAssetsHistory'
+    { _pbgahParent                  :: !Text
+    , _pbgahXgafv                   :: !(Maybe Xgafv)
+    , _pbgahReadTimeWindowEndTime   :: !(Maybe DateTime')
+    , _pbgahUploadProtocol          :: !(Maybe Text)
+    , _pbgahAccessToken             :: !(Maybe Text)
+    , _pbgahUploadType              :: !(Maybe Text)
+    , _pbgahAssetNames              :: !(Maybe [Text])
+    , _pbgahReadTimeWindowStartTime :: !(Maybe DateTime')
+    , _pbgahContentType             :: !(Maybe Text)
+    , _pbgahCallback                :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsBatchGetAssetsHistory' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pbgahParent'
+--
+-- * 'pbgahXgafv'
+--
+-- * 'pbgahReadTimeWindowEndTime'
+--
+-- * 'pbgahUploadProtocol'
+--
+-- * 'pbgahAccessToken'
+--
+-- * 'pbgahUploadType'
+--
+-- * 'pbgahAssetNames'
+--
+-- * 'pbgahReadTimeWindowStartTime'
+--
+-- * 'pbgahContentType'
+--
+-- * 'pbgahCallback'
+projectsBatchGetAssetsHistory
+    :: Text -- ^ 'pbgahParent'
+    -> ProjectsBatchGetAssetsHistory
+projectsBatchGetAssetsHistory pPbgahParent_ =
+    ProjectsBatchGetAssetsHistory'
+    { _pbgahParent = pPbgahParent_
+    , _pbgahXgafv = Nothing
+    , _pbgahReadTimeWindowEndTime = Nothing
+    , _pbgahUploadProtocol = Nothing
+    , _pbgahAccessToken = Nothing
+    , _pbgahUploadType = Nothing
+    , _pbgahAssetNames = Nothing
+    , _pbgahReadTimeWindowStartTime = Nothing
+    , _pbgahContentType = Nothing
+    , _pbgahCallback = Nothing
+    }
+
+-- | 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\").
+pbgahParent :: Lens' ProjectsBatchGetAssetsHistory Text
+pbgahParent
+  = lens _pbgahParent (\ s a -> s{_pbgahParent = a})
+
+-- | V1 error format.
+pbgahXgafv :: Lens' ProjectsBatchGetAssetsHistory (Maybe Xgafv)
+pbgahXgafv
+  = lens _pbgahXgafv (\ s a -> s{_pbgahXgafv = a})
+
+-- | End time of the time window (inclusive). Current timestamp if not
+-- specified.
+pbgahReadTimeWindowEndTime :: Lens' ProjectsBatchGetAssetsHistory (Maybe UTCTime)
+pbgahReadTimeWindowEndTime
+  = lens _pbgahReadTimeWindowEndTime
+      (\ s a -> s{_pbgahReadTimeWindowEndTime = a})
+      . mapping _DateTime
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pbgahUploadProtocol :: Lens' ProjectsBatchGetAssetsHistory (Maybe Text)
+pbgahUploadProtocol
+  = lens _pbgahUploadProtocol
+      (\ s a -> s{_pbgahUploadProtocol = a})
+
+-- | OAuth access token.
+pbgahAccessToken :: Lens' ProjectsBatchGetAssetsHistory (Maybe Text)
+pbgahAccessToken
+  = lens _pbgahAccessToken
+      (\ s a -> s{_pbgahAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pbgahUploadType :: Lens' ProjectsBatchGetAssetsHistory (Maybe Text)
+pbgahUploadType
+  = lens _pbgahUploadType
+      (\ s a -> s{_pbgahUploadType = a})
+
+-- | 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)
+-- 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.
+pbgahAssetNames :: Lens' ProjectsBatchGetAssetsHistory [Text]
+pbgahAssetNames
+  = lens _pbgahAssetNames
+      (\ s a -> s{_pbgahAssetNames = a})
+      . _Default
+      . _Coerce
+
+-- | Start time of the time window (exclusive).
+pbgahReadTimeWindowStartTime :: Lens' ProjectsBatchGetAssetsHistory (Maybe UTCTime)
+pbgahReadTimeWindowStartTime
+  = lens _pbgahReadTimeWindowStartTime
+      (\ s a -> s{_pbgahReadTimeWindowStartTime = a})
+      . mapping _DateTime
+
+-- | Required. The content type.
+pbgahContentType :: Lens' ProjectsBatchGetAssetsHistory (Maybe Text)
+pbgahContentType
+  = lens _pbgahContentType
+      (\ s a -> s{_pbgahContentType = a})
+
+-- | JSONP
+pbgahCallback :: Lens' ProjectsBatchGetAssetsHistory (Maybe Text)
+pbgahCallback
+  = lens _pbgahCallback
+      (\ s a -> s{_pbgahCallback = a})
+
+instance GoogleRequest ProjectsBatchGetAssetsHistory
+         where
+        type Rs ProjectsBatchGetAssetsHistory =
+             BatchGetAssetsHistoryResponse
+        type Scopes ProjectsBatchGetAssetsHistory =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsBatchGetAssetsHistory'{..}
+          = go _pbgahParent _pbgahXgafv
+              _pbgahReadTimeWindowEndTime
+              _pbgahUploadProtocol
+              _pbgahAccessToken
+              _pbgahUploadType
+              (_pbgahAssetNames ^. _Default)
+              _pbgahReadTimeWindowStartTime
+              _pbgahContentType
+              _pbgahCallback
+              (Just AltJSON)
+              cloudAssetService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsBatchGetAssetsHistoryResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudAsset/Projects/ExportAssets.hs b/gen/Network/Google/Resource/CloudAsset/Projects/ExportAssets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudAsset/Projects/ExportAssets.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudAsset.Projects.ExportAssets
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- 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.
+--
+-- /See:/ <https://console.cloud.google.com/apis/api/cloudasset.googleapis.com/overview Cloud Asset API Reference> for @cloudasset.projects.exportAssets@.
+module Network.Google.Resource.CloudAsset.Projects.ExportAssets
+    (
+    -- * REST Resource
+      ProjectsExportAssetsResource
+
+    -- * Creating a Request
+    , projectsExportAssets
+    , ProjectsExportAssets
+
+    -- * Request Lenses
+    , peaParent
+    , peaXgafv
+    , peaUploadProtocol
+    , peaAccessToken
+    , peaUploadType
+    , peaPayload
+    , peaCallback
+    ) where
+
+import           Network.Google.CloudAsset.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudasset.projects.exportAssets@ method which the
+-- 'ProjectsExportAssets' request conforms to.
+type ProjectsExportAssetsResource =
+     "v1beta1" :>
+       CaptureMode "parent" "exportAssets" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] ExportAssetsRequest :>
+                       Post '[JSON] Operation
+
+-- | 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.
+--
+-- /See:/ 'projectsExportAssets' smart constructor.
+data ProjectsExportAssets = ProjectsExportAssets'
+    { _peaParent         :: !Text
+    , _peaXgafv          :: !(Maybe Xgafv)
+    , _peaUploadProtocol :: !(Maybe Text)
+    , _peaAccessToken    :: !(Maybe Text)
+    , _peaUploadType     :: !(Maybe Text)
+    , _peaPayload        :: !ExportAssetsRequest
+    , _peaCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsExportAssets' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'peaParent'
+--
+-- * 'peaXgafv'
+--
+-- * 'peaUploadProtocol'
+--
+-- * 'peaAccessToken'
+--
+-- * 'peaUploadType'
+--
+-- * 'peaPayload'
+--
+-- * 'peaCallback'
+projectsExportAssets
+    :: Text -- ^ 'peaParent'
+    -> ExportAssetsRequest -- ^ 'peaPayload'
+    -> ProjectsExportAssets
+projectsExportAssets pPeaParent_ pPeaPayload_ =
+    ProjectsExportAssets'
+    { _peaParent = pPeaParent_
+    , _peaXgafv = Nothing
+    , _peaUploadProtocol = Nothing
+    , _peaAccessToken = Nothing
+    , _peaUploadType = Nothing
+    , _peaPayload = pPeaPayload_
+    , _peaCallback = Nothing
+    }
+
+-- | 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\").
+peaParent :: Lens' ProjectsExportAssets Text
+peaParent
+  = lens _peaParent (\ s a -> s{_peaParent = a})
+
+-- | V1 error format.
+peaXgafv :: Lens' ProjectsExportAssets (Maybe Xgafv)
+peaXgafv = lens _peaXgafv (\ s a -> s{_peaXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+peaUploadProtocol :: Lens' ProjectsExportAssets (Maybe Text)
+peaUploadProtocol
+  = lens _peaUploadProtocol
+      (\ s a -> s{_peaUploadProtocol = a})
+
+-- | OAuth access token.
+peaAccessToken :: Lens' ProjectsExportAssets (Maybe Text)
+peaAccessToken
+  = lens _peaAccessToken
+      (\ s a -> s{_peaAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+peaUploadType :: Lens' ProjectsExportAssets (Maybe Text)
+peaUploadType
+  = lens _peaUploadType
+      (\ s a -> s{_peaUploadType = a})
+
+-- | Multipart request metadata.
+peaPayload :: Lens' ProjectsExportAssets ExportAssetsRequest
+peaPayload
+  = lens _peaPayload (\ s a -> s{_peaPayload = a})
+
+-- | JSONP
+peaCallback :: Lens' ProjectsExportAssets (Maybe Text)
+peaCallback
+  = lens _peaCallback (\ s a -> s{_peaCallback = a})
+
+instance GoogleRequest ProjectsExportAssets where
+        type Rs ProjectsExportAssets = Operation
+        type Scopes ProjectsExportAssets =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsExportAssets'{..}
+          = go _peaParent _peaXgafv _peaUploadProtocol
+              _peaAccessToken
+              _peaUploadType
+              _peaCallback
+              (Just AltJSON)
+              _peaPayload
+              cloudAssetService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsExportAssetsResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudAsset/Projects/Operations/Get.hs b/gen/Network/Google/Resource/CloudAsset/Projects/Operations/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudAsset/Projects/Operations/Get.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudAsset.Projects.Operations.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the latest state of a long-running operation. Clients can use this
+-- method to poll the operation result at intervals as recommended by the
+-- API service.
+--
+-- /See:/ <https://console.cloud.google.com/apis/api/cloudasset.googleapis.com/overview Cloud Asset API Reference> for @cloudasset.projects.operations.get@.
+module Network.Google.Resource.CloudAsset.Projects.Operations.Get
+    (
+    -- * REST Resource
+      ProjectsOperationsGetResource
+
+    -- * Creating a Request
+    , projectsOperationsGet
+    , ProjectsOperationsGet
+
+    -- * Request Lenses
+    , pogXgafv
+    , pogUploadProtocol
+    , pogAccessToken
+    , pogUploadType
+    , pogName
+    , pogCallback
+    ) where
+
+import           Network.Google.CloudAsset.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudasset.projects.operations.get@ method which the
+-- 'ProjectsOperationsGet' request conforms to.
+type ProjectsOperationsGetResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Operation
+
+-- | Gets the latest state of a long-running operation. Clients can use this
+-- method to poll the operation result at intervals as recommended by the
+-- API service.
+--
+-- /See:/ 'projectsOperationsGet' smart constructor.
+data ProjectsOperationsGet = ProjectsOperationsGet'
+    { _pogXgafv          :: !(Maybe Xgafv)
+    , _pogUploadProtocol :: !(Maybe Text)
+    , _pogAccessToken    :: !(Maybe Text)
+    , _pogUploadType     :: !(Maybe Text)
+    , _pogName           :: !Text
+    , _pogCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsOperationsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pogXgafv'
+--
+-- * 'pogUploadProtocol'
+--
+-- * 'pogAccessToken'
+--
+-- * 'pogUploadType'
+--
+-- * 'pogName'
+--
+-- * 'pogCallback'
+projectsOperationsGet
+    :: Text -- ^ 'pogName'
+    -> ProjectsOperationsGet
+projectsOperationsGet pPogName_ =
+    ProjectsOperationsGet'
+    { _pogXgafv = Nothing
+    , _pogUploadProtocol = Nothing
+    , _pogAccessToken = Nothing
+    , _pogUploadType = Nothing
+    , _pogName = pPogName_
+    , _pogCallback = Nothing
+    }
+
+-- | V1 error format.
+pogXgafv :: Lens' ProjectsOperationsGet (Maybe Xgafv)
+pogXgafv = lens _pogXgafv (\ s a -> s{_pogXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pogUploadProtocol :: Lens' ProjectsOperationsGet (Maybe Text)
+pogUploadProtocol
+  = lens _pogUploadProtocol
+      (\ s a -> s{_pogUploadProtocol = a})
+
+-- | OAuth access token.
+pogAccessToken :: Lens' ProjectsOperationsGet (Maybe Text)
+pogAccessToken
+  = lens _pogAccessToken
+      (\ s a -> s{_pogAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pogUploadType :: Lens' ProjectsOperationsGet (Maybe Text)
+pogUploadType
+  = lens _pogUploadType
+      (\ s a -> s{_pogUploadType = a})
+
+-- | The name of the operation resource.
+pogName :: Lens' ProjectsOperationsGet Text
+pogName = lens _pogName (\ s a -> s{_pogName = a})
+
+-- | JSONP
+pogCallback :: Lens' ProjectsOperationsGet (Maybe Text)
+pogCallback
+  = lens _pogCallback (\ s a -> s{_pogCallback = a})
+
+instance GoogleRequest ProjectsOperationsGet where
+        type Rs ProjectsOperationsGet = Operation
+        type Scopes ProjectsOperationsGet =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsOperationsGet'{..}
+          = go _pogName _pogXgafv _pogUploadProtocol
+              _pogAccessToken
+              _pogUploadType
+              _pogCallback
+              (Just AltJSON)
+              cloudAssetService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsOperationsGetResource)
+                      mempty
diff --git a/gogol-cloudasset.cabal b/gogol-cloudasset.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-cloudasset.cabal
@@ -0,0 +1,52 @@
+name:                  gogol-cloudasset
+version:               0.4.0
+synopsis:              Google Cloud Asset SDK.
+homepage:              https://github.com/brendanhay/gogol
+bug-reports:           https://github.com/brendanhay/gogol/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2015-2016 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md src/.gitkeep
+
+description:
+    The cloud asset API manages the history and inventory of cloud
+    resources.
+    .
+    /Warning:/ This is an experimental prototype/preview release which is still
+    under exploratory development and not intended for public use, caveat emptor!
+    .
+    This library is compatible with version @v1beta1@
+    of the API.
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/gogol.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.Google.CloudAsset
+        , Network.Google.CloudAsset.Types
+        , Network.Google.Resource.CloudAsset.Organizations.BatchGetAssetsHistory
+        , Network.Google.Resource.CloudAsset.Organizations.ExportAssets
+        , Network.Google.Resource.CloudAsset.Organizations.Operations.Get
+        , Network.Google.Resource.CloudAsset.Projects.BatchGetAssetsHistory
+        , Network.Google.Resource.CloudAsset.Projects.ExportAssets
+        , Network.Google.Resource.CloudAsset.Projects.Operations.Get
+
+    other-modules:
+          Network.Google.CloudAsset.Types.Product
+        , Network.Google.CloudAsset.Types.Sum
+
+    build-depends:
+          gogol-core == 0.4.0.*
+        , base       >= 4.7 && < 5
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
