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-cloudprivatecatalogproducer
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.5.0`
+
+
+## Description
+
+A client library for the Google Cloud Private Catalog Producer.
+
+
+## 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-cloudprivatecatalogproducer` 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/CloudPrivateCatalogProducer.hs b/gen/Network/Google/CloudPrivateCatalogProducer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudPrivateCatalogProducer.hs
@@ -0,0 +1,386 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.CloudPrivateCatalogProducer
+-- 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)
+--
+-- Enables cloud users to manage and share enterprise catalogs intheir
+-- organizations.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference>
+module Network.Google.CloudPrivateCatalogProducer
+    (
+    -- * Service Configuration
+      cloudPrivateCatalogProducerService
+
+    -- * OAuth Scopes
+    , cloudPlatformScope
+
+    -- * API Declaration
+    , CloudPrivateCatalogProducerAPI
+
+    -- * Resources
+
+    -- ** cloudprivatecatalogproducer.catalogs.associations.create
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Associations.Create
+
+    -- ** cloudprivatecatalogproducer.catalogs.associations.delete
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Associations.Delete
+
+    -- ** cloudprivatecatalogproducer.catalogs.associations.get
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Associations.Get
+
+    -- ** cloudprivatecatalogproducer.catalogs.associations.list
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Associations.List
+
+    -- ** cloudprivatecatalogproducer.catalogs.create
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Create
+
+    -- ** cloudprivatecatalogproducer.catalogs.delete
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Delete
+
+    -- ** cloudprivatecatalogproducer.catalogs.get
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Get
+
+    -- ** cloudprivatecatalogproducer.catalogs.getIamPolicy
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.GetIAMPolicy
+
+    -- ** cloudprivatecatalogproducer.catalogs.list
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.List
+
+    -- ** cloudprivatecatalogproducer.catalogs.patch
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Patch
+
+    -- ** cloudprivatecatalogproducer.catalogs.products.copy
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Copy
+
+    -- ** cloudprivatecatalogproducer.catalogs.products.create
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Create
+
+    -- ** cloudprivatecatalogproducer.catalogs.products.delete
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Delete
+
+    -- ** cloudprivatecatalogproducer.catalogs.products.get
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Get
+
+    -- ** cloudprivatecatalogproducer.catalogs.products.icons.upload
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Icons.Upload
+
+    -- ** cloudprivatecatalogproducer.catalogs.products.list
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.List
+
+    -- ** cloudprivatecatalogproducer.catalogs.products.patch
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Patch
+
+    -- ** cloudprivatecatalogproducer.catalogs.products.versions.create
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Create
+
+    -- ** cloudprivatecatalogproducer.catalogs.products.versions.delete
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Delete
+
+    -- ** cloudprivatecatalogproducer.catalogs.products.versions.get
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Get
+
+    -- ** cloudprivatecatalogproducer.catalogs.products.versions.list
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.List
+
+    -- ** cloudprivatecatalogproducer.catalogs.products.versions.patch
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Patch
+
+    -- ** cloudprivatecatalogproducer.catalogs.setIamPolicy
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.SetIAMPolicy
+
+    -- ** cloudprivatecatalogproducer.catalogs.testIamPermissions
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.TestIAMPermissions
+
+    -- ** cloudprivatecatalogproducer.catalogs.undelete
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Undelete
+
+    -- ** cloudprivatecatalogproducer.operations.cancel
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Operations.Cancel
+
+    -- ** cloudprivatecatalogproducer.operations.delete
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Operations.Delete
+
+    -- ** cloudprivatecatalogproducer.operations.get
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Operations.Get
+
+    -- ** cloudprivatecatalogproducer.operations.list
+    , module Network.Google.Resource.CloudPrivateCatalogProducer.Operations.List
+
+    -- * Types
+
+    -- ** GoogleRpcStatus
+    , GoogleRpcStatus
+    , googleRpcStatus
+    , grsDetails
+    , grsCode
+    , grsMessage
+
+    -- ** GoogleIAMV1AuditLogConfigLogType
+    , GoogleIAMV1AuditLogConfigLogType (..)
+
+    -- ** GoogleLongrunningOperationMetadata
+    , GoogleLongrunningOperationMetadata
+    , googleLongrunningOperationMetadata
+    , glomAddtional
+
+    -- ** GoogleCloudPrivatecatalogproducerV1beta1ListVersionsResponse
+    , GoogleCloudPrivatecatalogproducerV1beta1ListVersionsResponse
+    , googleCloudPrivatecatalogproducerV1beta1ListVersionsResponse
+    , gcpvlvrNextPageToken
+    , gcpvlvrVersions
+
+    -- ** GoogleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest
+    , GoogleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest
+    , googleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest
+
+    -- ** GoogleIAMV1Binding
+    , GoogleIAMV1Binding
+    , googleIAMV1Binding
+    , givbMembers
+    , givbRole
+    , givbCondition
+
+    -- ** GoogleIAMV1SetIAMPolicyRequest
+    , GoogleIAMV1SetIAMPolicyRequest
+    , googleIAMV1SetIAMPolicyRequest
+    , givsiprUpdateMask
+    , givsiprPolicy
+
+    -- ** GoogleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse
+    , GoogleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse
+    , googleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse
+    , gcpvlcrNextPageToken
+    , gcpvlcrCatalogs
+
+    -- ** GoogleProtobufEmpty
+    , GoogleProtobufEmpty
+    , googleProtobufEmpty
+
+    -- ** GoogleRpcStatusDetailsItem
+    , GoogleRpcStatusDetailsItem
+    , googleRpcStatusDetailsItem
+    , grsdiAddtional
+
+    -- ** GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest
+    , GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest
+    , googleCloudPrivatecatalogproducerV1beta1UploadIconRequest
+    , gcpvuirIcon
+
+    -- ** GoogleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata
+    , GoogleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata
+    , googleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata
+    , gcpvpdmAddtional
+
+    -- ** GoogleLongrunningCancelOperationRequest
+    , GoogleLongrunningCancelOperationRequest
+    , googleLongrunningCancelOperationRequest
+
+    -- ** GoogleCloudPrivatecatalogproducerV1beta1Catalog
+    , GoogleCloudPrivatecatalogproducerV1beta1Catalog
+    , googleCloudPrivatecatalogproducerV1beta1Catalog
+    , gcpvcParent
+    , gcpvcUpdateTime
+    , gcpvcName
+    , gcpvcDisplayName
+    , gcpvcDescription
+    , gcpvcCreateTime
+
+    -- ** GoogleIAMV1TestIAMPermissionsRequest
+    , GoogleIAMV1TestIAMPermissionsRequest
+    , googleIAMV1TestIAMPermissionsRequest
+    , givtiprPermissions
+
+    -- ** GoogleIAMV1AuditConfig
+    , GoogleIAMV1AuditConfig
+    , googleIAMV1AuditConfig
+    , givacService
+    , givacAuditLogConfigs
+
+    -- ** Xgafv
+    , Xgafv (..)
+
+    -- ** GoogleLongrunningOperationResponse
+    , GoogleLongrunningOperationResponse
+    , googleLongrunningOperationResponse
+    , glorAddtional
+
+    -- ** GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest
+    , GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest
+    , googleCloudPrivatecatalogproducerV1beta1CopyProductRequest
+    , gcpvcprDestinationProductName
+
+    -- ** GoogleIAMV1AuditLogConfig
+    , GoogleIAMV1AuditLogConfig
+    , googleIAMV1AuditLogConfig
+    , givalcLogType
+    , givalcExemptedMembers
+
+    -- ** GoogleCloudPrivatecatalogproducerV1beta1Version
+    , GoogleCloudPrivatecatalogproducerV1beta1Version
+    , googleCloudPrivatecatalogproducerV1beta1Version
+    , gcpvvAsset
+    , gcpvvOriginalAsset
+    , gcpvvUpdateTime
+    , gcpvvName
+    , gcpvvDescription
+    , gcpvvCreateTime
+
+    -- ** GoogleCloudPrivatecatalogproducerV1beta1VersionAsset
+    , GoogleCloudPrivatecatalogproducerV1beta1VersionAsset
+    , googleCloudPrivatecatalogproducerV1beta1VersionAsset
+    , gcpvvaAddtional
+
+    -- ** GoogleLongrunningListOperationsResponse
+    , GoogleLongrunningListOperationsResponse
+    , googleLongrunningListOperationsResponse
+    , gllorNextPageToken
+    , gllorOperations
+
+    -- ** GoogleIAMV1Policy
+    , GoogleIAMV1Policy
+    , googleIAMV1Policy
+    , givpAuditConfigs
+    , givpEtag
+    , givpVersion
+    , givpBindings
+
+    -- ** GoogleCloudPrivatecatalogproducerV1beta1Association
+    , GoogleCloudPrivatecatalogproducerV1beta1Association
+    , googleCloudPrivatecatalogproducerV1beta1Association
+    , gcpvaName
+    , gcpvaResource
+    , gcpvaCreateTime
+
+    -- ** GoogleCloudPrivatecatalogproducerV1beta1ListProductsResponse
+    , GoogleCloudPrivatecatalogproducerV1beta1ListProductsResponse
+    , googleCloudPrivatecatalogproducerV1beta1ListProductsResponse
+    , gcpvlprNextPageToken
+    , gcpvlprProducts
+
+    -- ** GoogleIAMV1TestIAMPermissionsResponse
+    , GoogleIAMV1TestIAMPermissionsResponse
+    , googleIAMV1TestIAMPermissionsResponse
+    , giamvtiamprPermissions
+
+    -- ** GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest
+    , GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest
+    , googleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest
+    , gcpvcarAssociation
+
+    -- ** GoogleTypeExpr
+    , GoogleTypeExpr
+    , googleTypeExpr
+    , gteLocation
+    , gteExpression
+    , gteTitle
+    , gteDescription
+
+    -- ** GoogleLongrunningOperation
+    , GoogleLongrunningOperation
+    , googleLongrunningOperation
+    , gloDone
+    , gloError
+    , gloResponse
+    , gloName
+    , gloMetadata
+
+    -- ** GoogleCloudPrivatecatalogproducerV1beta1Product
+    , GoogleCloudPrivatecatalogproducerV1beta1Product
+    , googleCloudPrivatecatalogproducerV1beta1Product
+    , gcpvpIconURI
+    , gcpvpUpdateTime
+    , gcpvpDisplayMetadata
+    , gcpvpName
+    , gcpvpAssetType
+    , gcpvpCreateTime
+
+    -- ** GoogleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset
+    , GoogleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset
+    , googleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset
+    , gcpvvoaAddtional
+
+    -- ** GoogleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse
+    , GoogleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse
+    , googleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse
+    , gcpvlarNextPageToken
+    , gcpvlarAssociations
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Associations.Create
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Associations.Delete
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Associations.Get
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Associations.List
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Create
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Delete
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Get
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.GetIAMPolicy
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.List
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Patch
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Copy
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Create
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Delete
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Get
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Icons.Upload
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.List
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Patch
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Create
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Delete
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Get
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.List
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Patch
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.SetIAMPolicy
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.TestIAMPermissions
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Undelete
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Operations.Cancel
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Operations.Delete
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Operations.Get
+import           Network.Google.Resource.CloudPrivateCatalogProducer.Operations.List
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Cloud Private Catalog Producer API service.
+type CloudPrivateCatalogProducerAPI =
+     CatalogsAssociationsListResource :<|>
+       CatalogsAssociationsGetResource
+       :<|> CatalogsAssociationsCreateResource
+       :<|> CatalogsAssociationsDeleteResource
+       :<|> CatalogsProductsIconsUploadResource
+       :<|> CatalogsProductsVersionsListResource
+       :<|> CatalogsProductsVersionsPatchResource
+       :<|> CatalogsProductsVersionsGetResource
+       :<|> CatalogsProductsVersionsCreateResource
+       :<|> CatalogsProductsVersionsDeleteResource
+       :<|> CatalogsProductsListResource
+       :<|> CatalogsProductsCopyResource
+       :<|> CatalogsProductsPatchResource
+       :<|> CatalogsProductsGetResource
+       :<|> CatalogsProductsCreateResource
+       :<|> CatalogsProductsDeleteResource
+       :<|> CatalogsListResource
+       :<|> CatalogsUndeleteResource
+       :<|> CatalogsGetIAMPolicyResource
+       :<|> CatalogsPatchResource
+       :<|> CatalogsGetResource
+       :<|> CatalogsCreateResource
+       :<|> CatalogsSetIAMPolicyResource
+       :<|> CatalogsTestIAMPermissionsResource
+       :<|> CatalogsDeleteResource
+       :<|> OperationsListResource
+       :<|> OperationsGetResource
+       :<|> OperationsCancelResource
+       :<|> OperationsDeleteResource
diff --git a/gen/Network/Google/CloudPrivateCatalogProducer/Types.hs b/gen/Network/Google/CloudPrivateCatalogProducer/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudPrivateCatalogProducer/Types.hs
@@ -0,0 +1,236 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.CloudPrivateCatalogProducer.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.CloudPrivateCatalogProducer.Types
+    (
+    -- * Service Configuration
+      cloudPrivateCatalogProducerService
+
+    -- * OAuth Scopes
+    , cloudPlatformScope
+
+    -- * GoogleRpcStatus
+    , GoogleRpcStatus
+    , googleRpcStatus
+    , grsDetails
+    , grsCode
+    , grsMessage
+
+    -- * GoogleIAMV1AuditLogConfigLogType
+    , GoogleIAMV1AuditLogConfigLogType (..)
+
+    -- * GoogleLongrunningOperationMetadata
+    , GoogleLongrunningOperationMetadata
+    , googleLongrunningOperationMetadata
+    , glomAddtional
+
+    -- * GoogleCloudPrivatecatalogproducerV1beta1ListVersionsResponse
+    , GoogleCloudPrivatecatalogproducerV1beta1ListVersionsResponse
+    , googleCloudPrivatecatalogproducerV1beta1ListVersionsResponse
+    , gcpvlvrNextPageToken
+    , gcpvlvrVersions
+
+    -- * GoogleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest
+    , GoogleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest
+    , googleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest
+
+    -- * GoogleIAMV1Binding
+    , GoogleIAMV1Binding
+    , googleIAMV1Binding
+    , givbMembers
+    , givbRole
+    , givbCondition
+
+    -- * GoogleIAMV1SetIAMPolicyRequest
+    , GoogleIAMV1SetIAMPolicyRequest
+    , googleIAMV1SetIAMPolicyRequest
+    , givsiprUpdateMask
+    , givsiprPolicy
+
+    -- * GoogleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse
+    , GoogleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse
+    , googleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse
+    , gcpvlcrNextPageToken
+    , gcpvlcrCatalogs
+
+    -- * GoogleProtobufEmpty
+    , GoogleProtobufEmpty
+    , googleProtobufEmpty
+
+    -- * GoogleRpcStatusDetailsItem
+    , GoogleRpcStatusDetailsItem
+    , googleRpcStatusDetailsItem
+    , grsdiAddtional
+
+    -- * GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest
+    , GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest
+    , googleCloudPrivatecatalogproducerV1beta1UploadIconRequest
+    , gcpvuirIcon
+
+    -- * GoogleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata
+    , GoogleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata
+    , googleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata
+    , gcpvpdmAddtional
+
+    -- * GoogleLongrunningCancelOperationRequest
+    , GoogleLongrunningCancelOperationRequest
+    , googleLongrunningCancelOperationRequest
+
+    -- * GoogleCloudPrivatecatalogproducerV1beta1Catalog
+    , GoogleCloudPrivatecatalogproducerV1beta1Catalog
+    , googleCloudPrivatecatalogproducerV1beta1Catalog
+    , gcpvcParent
+    , gcpvcUpdateTime
+    , gcpvcName
+    , gcpvcDisplayName
+    , gcpvcDescription
+    , gcpvcCreateTime
+
+    -- * GoogleIAMV1TestIAMPermissionsRequest
+    , GoogleIAMV1TestIAMPermissionsRequest
+    , googleIAMV1TestIAMPermissionsRequest
+    , givtiprPermissions
+
+    -- * GoogleIAMV1AuditConfig
+    , GoogleIAMV1AuditConfig
+    , googleIAMV1AuditConfig
+    , givacService
+    , givacAuditLogConfigs
+
+    -- * Xgafv
+    , Xgafv (..)
+
+    -- * GoogleLongrunningOperationResponse
+    , GoogleLongrunningOperationResponse
+    , googleLongrunningOperationResponse
+    , glorAddtional
+
+    -- * GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest
+    , GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest
+    , googleCloudPrivatecatalogproducerV1beta1CopyProductRequest
+    , gcpvcprDestinationProductName
+
+    -- * GoogleIAMV1AuditLogConfig
+    , GoogleIAMV1AuditLogConfig
+    , googleIAMV1AuditLogConfig
+    , givalcLogType
+    , givalcExemptedMembers
+
+    -- * GoogleCloudPrivatecatalogproducerV1beta1Version
+    , GoogleCloudPrivatecatalogproducerV1beta1Version
+    , googleCloudPrivatecatalogproducerV1beta1Version
+    , gcpvvAsset
+    , gcpvvOriginalAsset
+    , gcpvvUpdateTime
+    , gcpvvName
+    , gcpvvDescription
+    , gcpvvCreateTime
+
+    -- * GoogleCloudPrivatecatalogproducerV1beta1VersionAsset
+    , GoogleCloudPrivatecatalogproducerV1beta1VersionAsset
+    , googleCloudPrivatecatalogproducerV1beta1VersionAsset
+    , gcpvvaAddtional
+
+    -- * GoogleLongrunningListOperationsResponse
+    , GoogleLongrunningListOperationsResponse
+    , googleLongrunningListOperationsResponse
+    , gllorNextPageToken
+    , gllorOperations
+
+    -- * GoogleIAMV1Policy
+    , GoogleIAMV1Policy
+    , googleIAMV1Policy
+    , givpAuditConfigs
+    , givpEtag
+    , givpVersion
+    , givpBindings
+
+    -- * GoogleCloudPrivatecatalogproducerV1beta1Association
+    , GoogleCloudPrivatecatalogproducerV1beta1Association
+    , googleCloudPrivatecatalogproducerV1beta1Association
+    , gcpvaName
+    , gcpvaResource
+    , gcpvaCreateTime
+
+    -- * GoogleCloudPrivatecatalogproducerV1beta1ListProductsResponse
+    , GoogleCloudPrivatecatalogproducerV1beta1ListProductsResponse
+    , googleCloudPrivatecatalogproducerV1beta1ListProductsResponse
+    , gcpvlprNextPageToken
+    , gcpvlprProducts
+
+    -- * GoogleIAMV1TestIAMPermissionsResponse
+    , GoogleIAMV1TestIAMPermissionsResponse
+    , googleIAMV1TestIAMPermissionsResponse
+    , giamvtiamprPermissions
+
+    -- * GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest
+    , GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest
+    , googleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest
+    , gcpvcarAssociation
+
+    -- * GoogleTypeExpr
+    , GoogleTypeExpr
+    , googleTypeExpr
+    , gteLocation
+    , gteExpression
+    , gteTitle
+    , gteDescription
+
+    -- * GoogleLongrunningOperation
+    , GoogleLongrunningOperation
+    , googleLongrunningOperation
+    , gloDone
+    , gloError
+    , gloResponse
+    , gloName
+    , gloMetadata
+
+    -- * GoogleCloudPrivatecatalogproducerV1beta1Product
+    , GoogleCloudPrivatecatalogproducerV1beta1Product
+    , googleCloudPrivatecatalogproducerV1beta1Product
+    , gcpvpIconURI
+    , gcpvpUpdateTime
+    , gcpvpDisplayMetadata
+    , gcpvpName
+    , gcpvpAssetType
+    , gcpvpCreateTime
+
+    -- * GoogleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset
+    , GoogleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset
+    , googleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset
+    , gcpvvoaAddtional
+
+    -- * GoogleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse
+    , GoogleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse
+    , googleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse
+    , gcpvlarNextPageToken
+    , gcpvlarAssociations
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types.Product
+import           Network.Google.CloudPrivateCatalogProducer.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1beta1' of the Cloud Private Catalog Producer API. This contains the host and root path used as a starting point for constructing service requests.
+cloudPrivateCatalogProducerService :: ServiceConfig
+cloudPrivateCatalogProducerService
+  = defaultService
+      (ServiceId "cloudprivatecatalogproducer:v1beta1")
+      "cloudprivatecatalogproducer.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/CloudPrivateCatalogProducer/Types/Product.hs b/gen/Network/Google/CloudPrivateCatalogProducer/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudPrivateCatalogProducer/Types/Product.hs
@@ -0,0 +1,2080 @@
+{-# 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.CloudPrivateCatalogProducer.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.CloudPrivateCatalogProducer.Types.Product where
+
+import           Network.Google.CloudPrivateCatalogProducer.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:/ 'googleRpcStatus' smart constructor.
+data GoogleRpcStatus =
+  GoogleRpcStatus'
+    { _grsDetails :: !(Maybe [GoogleRpcStatusDetailsItem])
+    , _grsCode    :: !(Maybe (Textual Int32))
+    , _grsMessage :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleRpcStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'grsDetails'
+--
+-- * 'grsCode'
+--
+-- * 'grsMessage'
+googleRpcStatus
+    :: GoogleRpcStatus
+googleRpcStatus =
+  GoogleRpcStatus'
+    {_grsDetails = Nothing, _grsCode = Nothing, _grsMessage = Nothing}
+
+
+-- | A list of messages that carry the error details. There is a common set
+-- of message types for APIs to use.
+grsDetails :: Lens' GoogleRpcStatus [GoogleRpcStatusDetailsItem]
+grsDetails
+  = lens _grsDetails (\ s a -> s{_grsDetails = a}) .
+      _Default
+      . _Coerce
+
+-- | The status code, which should be an enum value of google.rpc.Code.
+grsCode :: Lens' GoogleRpcStatus (Maybe Int32)
+grsCode
+  = lens _grsCode (\ s a -> s{_grsCode = 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.
+grsMessage :: Lens' GoogleRpcStatus (Maybe Text)
+grsMessage
+  = lens _grsMessage (\ s a -> s{_grsMessage = a})
+
+instance FromJSON GoogleRpcStatus where
+        parseJSON
+          = withObject "GoogleRpcStatus"
+              (\ o ->
+                 GoogleRpcStatus' <$>
+                   (o .:? "details" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON GoogleRpcStatus where
+        toJSON GoogleRpcStatus'{..}
+          = object
+              (catMaybes
+                 [("details" .=) <$> _grsDetails,
+                  ("code" .=) <$> _grsCode,
+                  ("message" .=) <$> _grsMessage])
+
+-- | 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:/ 'googleLongrunningOperationMetadata' smart constructor.
+newtype GoogleLongrunningOperationMetadata =
+  GoogleLongrunningOperationMetadata'
+    { _glomAddtional :: HashMap Text JSONValue
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleLongrunningOperationMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'glomAddtional'
+googleLongrunningOperationMetadata
+    :: HashMap Text JSONValue -- ^ 'glomAddtional'
+    -> GoogleLongrunningOperationMetadata
+googleLongrunningOperationMetadata pGlomAddtional_ =
+  GoogleLongrunningOperationMetadata'
+    {_glomAddtional = _Coerce # pGlomAddtional_}
+
+
+-- | Properties of the object. Contains field \'type with type URL.
+glomAddtional :: Lens' GoogleLongrunningOperationMetadata (HashMap Text JSONValue)
+glomAddtional
+  = lens _glomAddtional
+      (\ s a -> s{_glomAddtional = a})
+      . _Coerce
+
+instance FromJSON GoogleLongrunningOperationMetadata
+         where
+        parseJSON
+          = withObject "GoogleLongrunningOperationMetadata"
+              (\ o ->
+                 GoogleLongrunningOperationMetadata' <$>
+                   (parseJSONObject o))
+
+instance ToJSON GoogleLongrunningOperationMetadata
+         where
+        toJSON = toJSON . _glomAddtional
+
+--
+-- /See:/ 'googleCloudPrivatecatalogproducerV1beta1ListVersionsResponse' smart constructor.
+data GoogleCloudPrivatecatalogproducerV1beta1ListVersionsResponse =
+  GoogleCloudPrivatecatalogproducerV1beta1ListVersionsResponse'
+    { _gcpvlvrNextPageToken :: !(Maybe Text)
+    , _gcpvlvrVersions      :: !(Maybe [GoogleCloudPrivatecatalogproducerV1beta1Version])
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleCloudPrivatecatalogproducerV1beta1ListVersionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcpvlvrNextPageToken'
+--
+-- * 'gcpvlvrVersions'
+googleCloudPrivatecatalogproducerV1beta1ListVersionsResponse
+    :: GoogleCloudPrivatecatalogproducerV1beta1ListVersionsResponse
+googleCloudPrivatecatalogproducerV1beta1ListVersionsResponse =
+  GoogleCloudPrivatecatalogproducerV1beta1ListVersionsResponse'
+    {_gcpvlvrNextPageToken = Nothing, _gcpvlvrVersions = Nothing}
+
+
+-- | A pagination token returned from a previous call to ListProducts that
+-- indicates where the listing should continue from. This field is
+-- optional.
+gcpvlvrNextPageToken :: Lens' GoogleCloudPrivatecatalogproducerV1beta1ListVersionsResponse (Maybe Text)
+gcpvlvrNextPageToken
+  = lens _gcpvlvrNextPageToken
+      (\ s a -> s{_gcpvlvrNextPageToken = a})
+
+-- | The \`VersiVersionon\` returned from the list call.
+gcpvlvrVersions :: Lens' GoogleCloudPrivatecatalogproducerV1beta1ListVersionsResponse [GoogleCloudPrivatecatalogproducerV1beta1Version]
+gcpvlvrVersions
+  = lens _gcpvlvrVersions
+      (\ s a -> s{_gcpvlvrVersions = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+           GoogleCloudPrivatecatalogproducerV1beta1ListVersionsResponse
+         where
+        parseJSON
+          = withObject
+              "GoogleCloudPrivatecatalogproducerV1beta1ListVersionsResponse"
+              (\ o ->
+                 GoogleCloudPrivatecatalogproducerV1beta1ListVersionsResponse'
+                   <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "versions" .!= mempty))
+
+instance ToJSON
+           GoogleCloudPrivatecatalogproducerV1beta1ListVersionsResponse
+         where
+        toJSON
+          GoogleCloudPrivatecatalogproducerV1beta1ListVersionsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _gcpvlvrNextPageToken,
+                  ("versions" .=) <$> _gcpvlvrVersions])
+
+--
+-- /See:/ 'googleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest' smart constructor.
+data GoogleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest =
+  GoogleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest'
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest' with the minimum fields required to make a request.
+--
+googleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest
+    :: GoogleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest
+googleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest =
+  GoogleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest'
+
+
+instance FromJSON
+           GoogleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest
+         where
+        parseJSON
+          = withObject
+              "GoogleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest"
+              (\ o ->
+                 pure
+                   GoogleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest')
+
+instance ToJSON
+           GoogleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest
+         where
+        toJSON = const emptyObject
+
+-- | Associates \`members\` with a \`role\`.
+--
+-- /See:/ 'googleIAMV1Binding' smart constructor.
+data GoogleIAMV1Binding =
+  GoogleIAMV1Binding'
+    { _givbMembers   :: !(Maybe [Text])
+    , _givbRole      :: !(Maybe Text)
+    , _givbCondition :: !(Maybe GoogleTypeExpr)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleIAMV1Binding' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'givbMembers'
+--
+-- * 'givbRole'
+--
+-- * 'givbCondition'
+googleIAMV1Binding
+    :: GoogleIAMV1Binding
+googleIAMV1Binding =
+  GoogleIAMV1Binding'
+    {_givbMembers = Nothing, _givbRole = Nothing, _givbCondition = 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}\`: The G Suite domain
+-- (primary) that represents all the users of that domain. For example,
+-- \`google.com\` or \`example.com\`.
+givbMembers :: Lens' GoogleIAMV1Binding [Text]
+givbMembers
+  = lens _givbMembers (\ s a -> s{_givbMembers = a}) .
+      _Default
+      . _Coerce
+
+-- | Role that is assigned to \`members\`. For example, \`roles\/viewer\`,
+-- \`roles\/editor\`, or \`roles\/owner\`.
+givbRole :: Lens' GoogleIAMV1Binding (Maybe Text)
+givbRole = lens _givbRole (\ s a -> s{_givbRole = a})
+
+-- | 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.
+givbCondition :: Lens' GoogleIAMV1Binding (Maybe GoogleTypeExpr)
+givbCondition
+  = lens _givbCondition
+      (\ s a -> s{_givbCondition = a})
+
+instance FromJSON GoogleIAMV1Binding where
+        parseJSON
+          = withObject "GoogleIAMV1Binding"
+              (\ o ->
+                 GoogleIAMV1Binding' <$>
+                   (o .:? "members" .!= mempty) <*> (o .:? "role") <*>
+                     (o .:? "condition"))
+
+instance ToJSON GoogleIAMV1Binding where
+        toJSON GoogleIAMV1Binding'{..}
+          = object
+              (catMaybes
+                 [("members" .=) <$> _givbMembers,
+                  ("role" .=) <$> _givbRole,
+                  ("condition" .=) <$> _givbCondition])
+
+-- | Request message for \`SetIamPolicy\` method.
+--
+-- /See:/ 'googleIAMV1SetIAMPolicyRequest' smart constructor.
+data GoogleIAMV1SetIAMPolicyRequest =
+  GoogleIAMV1SetIAMPolicyRequest'
+    { _givsiprUpdateMask :: !(Maybe GFieldMask)
+    , _givsiprPolicy     :: !(Maybe GoogleIAMV1Policy)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleIAMV1SetIAMPolicyRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'givsiprUpdateMask'
+--
+-- * 'givsiprPolicy'
+googleIAMV1SetIAMPolicyRequest
+    :: GoogleIAMV1SetIAMPolicyRequest
+googleIAMV1SetIAMPolicyRequest =
+  GoogleIAMV1SetIAMPolicyRequest'
+    {_givsiprUpdateMask = Nothing, _givsiprPolicy = Nothing}
+
+
+-- | OPTIONAL: A FieldMask specifying which fields of the policy to modify.
+-- Only the fields in the mask will be modified. If no mask is provided,
+-- the following default mask is used: paths: \"bindings, etag\" This field
+-- is only used by Cloud IAM.
+givsiprUpdateMask :: Lens' GoogleIAMV1SetIAMPolicyRequest (Maybe GFieldMask)
+givsiprUpdateMask
+  = lens _givsiprUpdateMask
+      (\ s a -> s{_givsiprUpdateMask = a})
+
+-- | REQUIRED: The complete policy to be applied to the \`resource\`. The
+-- size of the policy is limited to a few 10s of KB. An empty policy is a
+-- valid policy but certain Cloud Platform services (such as Projects)
+-- might reject them.
+givsiprPolicy :: Lens' GoogleIAMV1SetIAMPolicyRequest (Maybe GoogleIAMV1Policy)
+givsiprPolicy
+  = lens _givsiprPolicy
+      (\ s a -> s{_givsiprPolicy = a})
+
+instance FromJSON GoogleIAMV1SetIAMPolicyRequest
+         where
+        parseJSON
+          = withObject "GoogleIAMV1SetIAMPolicyRequest"
+              (\ o ->
+                 GoogleIAMV1SetIAMPolicyRequest' <$>
+                   (o .:? "updateMask") <*> (o .:? "policy"))
+
+instance ToJSON GoogleIAMV1SetIAMPolicyRequest where
+        toJSON GoogleIAMV1SetIAMPolicyRequest'{..}
+          = object
+              (catMaybes
+                 [("updateMask" .=) <$> _givsiprUpdateMask,
+                  ("policy" .=) <$> _givsiprPolicy])
+
+--
+-- /See:/ 'googleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse' smart constructor.
+data GoogleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse =
+  GoogleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse'
+    { _gcpvlcrNextPageToken :: !(Maybe Text)
+    , _gcpvlcrCatalogs      :: !(Maybe [GoogleCloudPrivatecatalogproducerV1beta1Catalog])
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcpvlcrNextPageToken'
+--
+-- * 'gcpvlcrCatalogs'
+googleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse
+    :: GoogleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse
+googleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse =
+  GoogleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse'
+    {_gcpvlcrNextPageToken = Nothing, _gcpvlcrCatalogs = Nothing}
+
+
+-- | A pagination token returned from a previous call to ListCatalogs that
+-- indicates where the listing should continue from. This field is
+-- optional.
+gcpvlcrNextPageToken :: Lens' GoogleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse (Maybe Text)
+gcpvlcrNextPageToken
+  = lens _gcpvlcrNextPageToken
+      (\ s a -> s{_gcpvlcrNextPageToken = a})
+
+-- | The \`Catalogs\` returned from the list call.
+gcpvlcrCatalogs :: Lens' GoogleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse [GoogleCloudPrivatecatalogproducerV1beta1Catalog]
+gcpvlcrCatalogs
+  = lens _gcpvlcrCatalogs
+      (\ s a -> s{_gcpvlcrCatalogs = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+           GoogleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse
+         where
+        parseJSON
+          = withObject
+              "GoogleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse"
+              (\ o ->
+                 GoogleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse'
+                   <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "catalogs" .!= mempty))
+
+instance ToJSON
+           GoogleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse
+         where
+        toJSON
+          GoogleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _gcpvlcrNextPageToken,
+                  ("catalogs" .=) <$> _gcpvlcrCatalogs])
+
+-- | A generic empty message that you can re-use to avoid defining duplicated
+-- empty messages in your APIs. A typical example is to use it as the
+-- request or the response type of an API method. For instance: service Foo
+-- { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The
+-- JSON representation for \`Empty\` is empty JSON object \`{}\`.
+--
+-- /See:/ 'googleProtobufEmpty' smart constructor.
+data GoogleProtobufEmpty =
+  GoogleProtobufEmpty'
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleProtobufEmpty' with the minimum fields required to make a request.
+--
+googleProtobufEmpty
+    :: GoogleProtobufEmpty
+googleProtobufEmpty = GoogleProtobufEmpty'
+
+
+instance FromJSON GoogleProtobufEmpty where
+        parseJSON
+          = withObject "GoogleProtobufEmpty"
+              (\ o -> pure GoogleProtobufEmpty')
+
+instance ToJSON GoogleProtobufEmpty where
+        toJSON = const emptyObject
+
+--
+-- /See:/ 'googleRpcStatusDetailsItem' smart constructor.
+newtype GoogleRpcStatusDetailsItem =
+  GoogleRpcStatusDetailsItem'
+    { _grsdiAddtional :: HashMap Text JSONValue
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleRpcStatusDetailsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'grsdiAddtional'
+googleRpcStatusDetailsItem
+    :: HashMap Text JSONValue -- ^ 'grsdiAddtional'
+    -> GoogleRpcStatusDetailsItem
+googleRpcStatusDetailsItem pGrsdiAddtional_ =
+  GoogleRpcStatusDetailsItem' {_grsdiAddtional = _Coerce # pGrsdiAddtional_}
+
+
+-- | Properties of the object. Contains field \'type with type URL.
+grsdiAddtional :: Lens' GoogleRpcStatusDetailsItem (HashMap Text JSONValue)
+grsdiAddtional
+  = lens _grsdiAddtional
+      (\ s a -> s{_grsdiAddtional = a})
+      . _Coerce
+
+instance FromJSON GoogleRpcStatusDetailsItem where
+        parseJSON
+          = withObject "GoogleRpcStatusDetailsItem"
+              (\ o ->
+                 GoogleRpcStatusDetailsItem' <$> (parseJSONObject o))
+
+instance ToJSON GoogleRpcStatusDetailsItem where
+        toJSON = toJSON . _grsdiAddtional
+
+--
+-- /See:/ 'googleCloudPrivatecatalogproducerV1beta1UploadIconRequest' smart constructor.
+newtype GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest =
+  GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest'
+    { _gcpvuirIcon :: Maybe Bytes
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcpvuirIcon'
+googleCloudPrivatecatalogproducerV1beta1UploadIconRequest
+    :: GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest
+googleCloudPrivatecatalogproducerV1beta1UploadIconRequest =
+  GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest'
+    {_gcpvuirIcon = Nothing}
+
+
+-- | The raw icon bytes user-supplied to be uploaded to the product. The
+-- format of the icon can only be PNG or JPEG. The minimum allowed
+-- dimensions are 130x130 pixels and the maximum dimensions are 10000x10000
+-- pixels. Required.
+gcpvuirIcon :: Lens' GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest (Maybe ByteString)
+gcpvuirIcon
+  = lens _gcpvuirIcon (\ s a -> s{_gcpvuirIcon = a}) .
+      mapping _Bytes
+
+instance FromJSON
+           GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest
+         where
+        parseJSON
+          = withObject
+              "GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest"
+              (\ o ->
+                 GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest'
+                   <$> (o .:? "icon"))
+
+instance ToJSON
+           GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest
+         where
+        toJSON
+          GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest'{..}
+          = object (catMaybes [("icon" .=) <$> _gcpvuirIcon])
+
+-- | The user-supplied display metadata to describe the product. The JSON
+-- schema of the metadata differs by Product.asset_type. When the type is
+-- \`google.deploymentmanager.Template\`, the schema is as follows: \`\`\`
+-- \"$schema\": http:\/\/json-schema.org\/draft-04\/schema# type: object
+-- properties: name: type: string minLength: 1 maxLength: 64 description:
+-- type: string minLength: 1 maxLength: 2048 tagline: type: string
+-- minLength: 1 maxLength: 100 support_info: type: string minLength: 1
+-- maxLength: 2048 creator: type: string minLength: 1 maxLength: 100
+-- documentation: type: array items: type: object properties: url: type:
+-- string pattern:
+-- \"^(https?):\/\/[-a-zA-Z0-9+&\'#\/%?=~_|!:,.;]*[-a-zA-Z0-9+&\'#\/%=~_|]\"
+-- title: type: string minLength: 1 maxLength: 64 description: type: string
+-- minLength: 1 maxLength: 2048 required: - name - description
+-- additionalProperties: false \`\`\` When the asset type is
+-- \`google.cloudprivatecatalog.ListingOnly\`, the schema is as follows:
+-- \`\`\` \"$schema\": http:\/\/json-schema.org\/draft-04\/schema# type:
+-- object properties: name: type: string minLength: 1 maxLength: 64
+-- description: type: string minLength: 1 maxLength: 2048 tagline: type:
+-- string minLength: 1 maxLength: 100 support_info: type: string minLength:
+-- 1 maxLength: 2048 creator: type: string minLength: 1 maxLength: 100
+-- documentation: type: array items: type: object properties: url: type:
+-- string pattern:
+-- \"^(https?):\/\/[-a-zA-Z0-9+&\'#\/%?=~_|!:,.;]*[-a-zA-Z0-9+&\'#\/%=~_|]\"
+-- title: type: string minLength: 1 maxLength: 64 description: type: string
+-- minLength: 1 maxLength: 2048 signup_url: type: string pattern:
+-- \"^(https?):\/\/[-a-zA-Z0-9+&\'#\/%?=~_|!:,.;]*[-a-zA-Z0-9+&\'#\/%=~_|]\"
+-- required: - name - description - signup_url additionalProperties: false
+-- \`\`\`
+--
+-- /See:/ 'googleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata' smart constructor.
+newtype GoogleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata =
+  GoogleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata'
+    { _gcpvpdmAddtional :: HashMap Text JSONValue
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcpvpdmAddtional'
+googleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata
+    :: HashMap Text JSONValue -- ^ 'gcpvpdmAddtional'
+    -> GoogleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata
+googleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata pGcpvpdmAddtional_ =
+  GoogleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata'
+    {_gcpvpdmAddtional = _Coerce # pGcpvpdmAddtional_}
+
+
+-- | Properties of the object.
+gcpvpdmAddtional :: Lens' GoogleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata (HashMap Text JSONValue)
+gcpvpdmAddtional
+  = lens _gcpvpdmAddtional
+      (\ s a -> s{_gcpvpdmAddtional = a})
+      . _Coerce
+
+instance FromJSON
+           GoogleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata
+         where
+        parseJSON
+          = withObject
+              "GoogleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata"
+              (\ o ->
+                 GoogleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata'
+                   <$> (parseJSONObject o))
+
+instance ToJSON
+           GoogleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata
+         where
+        toJSON = toJSON . _gcpvpdmAddtional
+
+-- | The request message for Operations.CancelOperation.
+--
+-- /See:/ 'googleLongrunningCancelOperationRequest' smart constructor.
+data GoogleLongrunningCancelOperationRequest =
+  GoogleLongrunningCancelOperationRequest'
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleLongrunningCancelOperationRequest' with the minimum fields required to make a request.
+--
+googleLongrunningCancelOperationRequest
+    :: GoogleLongrunningCancelOperationRequest
+googleLongrunningCancelOperationRequest =
+  GoogleLongrunningCancelOperationRequest'
+
+
+instance FromJSON
+           GoogleLongrunningCancelOperationRequest
+         where
+        parseJSON
+          = withObject
+              "GoogleLongrunningCancelOperationRequest"
+              (\ o ->
+                 pure GoogleLongrunningCancelOperationRequest')
+
+instance ToJSON
+           GoogleLongrunningCancelOperationRequest
+         where
+        toJSON = const emptyObject
+
+-- | The producer representation of a catalog which is a curated collection
+-- of solutions that can be managed, controlled, and shared by cloud
+-- admins.
+--
+-- /See:/ 'googleCloudPrivatecatalogproducerV1beta1Catalog' smart constructor.
+data GoogleCloudPrivatecatalogproducerV1beta1Catalog =
+  GoogleCloudPrivatecatalogproducerV1beta1Catalog'
+    { _gcpvcParent      :: !(Maybe Text)
+    , _gcpvcUpdateTime  :: !(Maybe DateTime')
+    , _gcpvcName        :: !(Maybe Text)
+    , _gcpvcDisplayName :: !(Maybe Text)
+    , _gcpvcDescription :: !(Maybe Text)
+    , _gcpvcCreateTime  :: !(Maybe DateTime')
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleCloudPrivatecatalogproducerV1beta1Catalog' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcpvcParent'
+--
+-- * 'gcpvcUpdateTime'
+--
+-- * 'gcpvcName'
+--
+-- * 'gcpvcDisplayName'
+--
+-- * 'gcpvcDescription'
+--
+-- * 'gcpvcCreateTime'
+googleCloudPrivatecatalogproducerV1beta1Catalog
+    :: GoogleCloudPrivatecatalogproducerV1beta1Catalog
+googleCloudPrivatecatalogproducerV1beta1Catalog =
+  GoogleCloudPrivatecatalogproducerV1beta1Catalog'
+    { _gcpvcParent = Nothing
+    , _gcpvcUpdateTime = Nothing
+    , _gcpvcName = Nothing
+    , _gcpvcDisplayName = Nothing
+    , _gcpvcDescription = Nothing
+    , _gcpvcCreateTime = Nothing
+    }
+
+
+-- | Required. The parent resource name of the catalog, which can\'t be
+-- changed after a catalog is created. It can only be an organization.
+-- Values are of the form
+-- \`\/\/cloudresourcemanager.googleapis.com\/organizations\/\`. Maximum
+-- 256 characters in length.
+gcpvcParent :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Catalog (Maybe Text)
+gcpvcParent
+  = lens _gcpvcParent (\ s a -> s{_gcpvcParent = a})
+
+-- | Output only. The time when the catalog was last updated.
+gcpvcUpdateTime :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Catalog (Maybe UTCTime)
+gcpvcUpdateTime
+  = lens _gcpvcUpdateTime
+      (\ s a -> s{_gcpvcUpdateTime = a})
+      . mapping _DateTime
+
+-- | Output only. The resource name of the catalog, in the format
+-- \`catalogs\/{catalog_id}\'. A unique identifier for the catalog, which
+-- is generated by catalog service.
+gcpvcName :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Catalog (Maybe Text)
+gcpvcName
+  = lens _gcpvcName (\ s a -> s{_gcpvcName = a})
+
+-- | Required. The user-supplied descriptive name of the catalog as it
+-- appears in UIs. Maximum 256 characters in length.
+gcpvcDisplayName :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Catalog (Maybe Text)
+gcpvcDisplayName
+  = lens _gcpvcDisplayName
+      (\ s a -> s{_gcpvcDisplayName = a})
+
+-- | Required. The user-supplied description of the catalog. Maximum of 512
+-- characters.
+gcpvcDescription :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Catalog (Maybe Text)
+gcpvcDescription
+  = lens _gcpvcDescription
+      (\ s a -> s{_gcpvcDescription = a})
+
+-- | Output only. The time when the catalog was created.
+gcpvcCreateTime :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Catalog (Maybe UTCTime)
+gcpvcCreateTime
+  = lens _gcpvcCreateTime
+      (\ s a -> s{_gcpvcCreateTime = a})
+      . mapping _DateTime
+
+instance FromJSON
+           GoogleCloudPrivatecatalogproducerV1beta1Catalog
+         where
+        parseJSON
+          = withObject
+              "GoogleCloudPrivatecatalogproducerV1beta1Catalog"
+              (\ o ->
+                 GoogleCloudPrivatecatalogproducerV1beta1Catalog' <$>
+                   (o .:? "parent") <*> (o .:? "updateTime") <*>
+                     (o .:? "name")
+                     <*> (o .:? "displayName")
+                     <*> (o .:? "description")
+                     <*> (o .:? "createTime"))
+
+instance ToJSON
+           GoogleCloudPrivatecatalogproducerV1beta1Catalog
+         where
+        toJSON
+          GoogleCloudPrivatecatalogproducerV1beta1Catalog'{..}
+          = object
+              (catMaybes
+                 [("parent" .=) <$> _gcpvcParent,
+                  ("updateTime" .=) <$> _gcpvcUpdateTime,
+                  ("name" .=) <$> _gcpvcName,
+                  ("displayName" .=) <$> _gcpvcDisplayName,
+                  ("description" .=) <$> _gcpvcDescription,
+                  ("createTime" .=) <$> _gcpvcCreateTime])
+
+-- | Request message for \`TestIamPermissions\` method.
+--
+-- /See:/ 'googleIAMV1TestIAMPermissionsRequest' smart constructor.
+newtype GoogleIAMV1TestIAMPermissionsRequest =
+  GoogleIAMV1TestIAMPermissionsRequest'
+    { _givtiprPermissions :: Maybe [Text]
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleIAMV1TestIAMPermissionsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'givtiprPermissions'
+googleIAMV1TestIAMPermissionsRequest
+    :: GoogleIAMV1TestIAMPermissionsRequest
+googleIAMV1TestIAMPermissionsRequest =
+  GoogleIAMV1TestIAMPermissionsRequest' {_givtiprPermissions = Nothing}
+
+
+-- | The set of permissions to check for the \`resource\`. Permissions with
+-- wildcards (such as \'*\' or \'storage.*\') are not allowed. For more
+-- information see [IAM
+-- Overview](https:\/\/cloud.google.com\/iam\/docs\/overview#permissions).
+givtiprPermissions :: Lens' GoogleIAMV1TestIAMPermissionsRequest [Text]
+givtiprPermissions
+  = lens _givtiprPermissions
+      (\ s a -> s{_givtiprPermissions = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+           GoogleIAMV1TestIAMPermissionsRequest
+         where
+        parseJSON
+          = withObject "GoogleIAMV1TestIAMPermissionsRequest"
+              (\ o ->
+                 GoogleIAMV1TestIAMPermissionsRequest' <$>
+                   (o .:? "permissions" .!= mempty))
+
+instance ToJSON GoogleIAMV1TestIAMPermissionsRequest
+         where
+        toJSON GoogleIAMV1TestIAMPermissionsRequest'{..}
+          = object
+              (catMaybes
+                 [("permissions" .=) <$> _givtiprPermissions])
+
+-- | 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:/ 'googleIAMV1AuditConfig' smart constructor.
+data GoogleIAMV1AuditConfig =
+  GoogleIAMV1AuditConfig'
+    { _givacService         :: !(Maybe Text)
+    , _givacAuditLogConfigs :: !(Maybe [GoogleIAMV1AuditLogConfig])
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleIAMV1AuditConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'givacService'
+--
+-- * 'givacAuditLogConfigs'
+googleIAMV1AuditConfig
+    :: GoogleIAMV1AuditConfig
+googleIAMV1AuditConfig =
+  GoogleIAMV1AuditConfig'
+    {_givacService = Nothing, _givacAuditLogConfigs = 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.
+givacService :: Lens' GoogleIAMV1AuditConfig (Maybe Text)
+givacService
+  = lens _givacService (\ s a -> s{_givacService = a})
+
+-- | The configuration for logging of each type of permission.
+givacAuditLogConfigs :: Lens' GoogleIAMV1AuditConfig [GoogleIAMV1AuditLogConfig]
+givacAuditLogConfigs
+  = lens _givacAuditLogConfigs
+      (\ s a -> s{_givacAuditLogConfigs = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON GoogleIAMV1AuditConfig where
+        parseJSON
+          = withObject "GoogleIAMV1AuditConfig"
+              (\ o ->
+                 GoogleIAMV1AuditConfig' <$>
+                   (o .:? "service") <*>
+                     (o .:? "auditLogConfigs" .!= mempty))
+
+instance ToJSON GoogleIAMV1AuditConfig where
+        toJSON GoogleIAMV1AuditConfig'{..}
+          = object
+              (catMaybes
+                 [("service" .=) <$> _givacService,
+                  ("auditLogConfigs" .=) <$> _givacAuditLogConfigs])
+
+-- | 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:/ 'googleLongrunningOperationResponse' smart constructor.
+newtype GoogleLongrunningOperationResponse =
+  GoogleLongrunningOperationResponse'
+    { _glorAddtional :: HashMap Text JSONValue
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleLongrunningOperationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'glorAddtional'
+googleLongrunningOperationResponse
+    :: HashMap Text JSONValue -- ^ 'glorAddtional'
+    -> GoogleLongrunningOperationResponse
+googleLongrunningOperationResponse pGlorAddtional_ =
+  GoogleLongrunningOperationResponse'
+    {_glorAddtional = _Coerce # pGlorAddtional_}
+
+
+-- | Properties of the object. Contains field \'type with type URL.
+glorAddtional :: Lens' GoogleLongrunningOperationResponse (HashMap Text JSONValue)
+glorAddtional
+  = lens _glorAddtional
+      (\ s a -> s{_glorAddtional = a})
+      . _Coerce
+
+instance FromJSON GoogleLongrunningOperationResponse
+         where
+        parseJSON
+          = withObject "GoogleLongrunningOperationResponse"
+              (\ o ->
+                 GoogleLongrunningOperationResponse' <$>
+                   (parseJSONObject o))
+
+instance ToJSON GoogleLongrunningOperationResponse
+         where
+        toJSON = toJSON . _glorAddtional
+
+--
+-- /See:/ 'googleCloudPrivatecatalogproducerV1beta1CopyProductRequest' smart constructor.
+newtype GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest =
+  GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest'
+    { _gcpvcprDestinationProductName :: Maybe Text
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcpvcprDestinationProductName'
+googleCloudPrivatecatalogproducerV1beta1CopyProductRequest
+    :: GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest
+googleCloudPrivatecatalogproducerV1beta1CopyProductRequest =
+  GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest'
+    {_gcpvcprDestinationProductName = Nothing}
+
+
+-- | The resource name of the destination product that is copied to.
+gcpvcprDestinationProductName :: Lens' GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest (Maybe Text)
+gcpvcprDestinationProductName
+  = lens _gcpvcprDestinationProductName
+      (\ s a -> s{_gcpvcprDestinationProductName = a})
+
+instance FromJSON
+           GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest
+         where
+        parseJSON
+          = withObject
+              "GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest"
+              (\ o ->
+                 GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest'
+                   <$> (o .:? "destinationProductName"))
+
+instance ToJSON
+           GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest
+         where
+        toJSON
+          GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest'{..}
+          = object
+              (catMaybes
+                 [("destinationProductName" .=) <$>
+                    _gcpvcprDestinationProductName])
+
+-- | 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:/ 'googleIAMV1AuditLogConfig' smart constructor.
+data GoogleIAMV1AuditLogConfig =
+  GoogleIAMV1AuditLogConfig'
+    { _givalcLogType         :: !(Maybe GoogleIAMV1AuditLogConfigLogType)
+    , _givalcExemptedMembers :: !(Maybe [Text])
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleIAMV1AuditLogConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'givalcLogType'
+--
+-- * 'givalcExemptedMembers'
+googleIAMV1AuditLogConfig
+    :: GoogleIAMV1AuditLogConfig
+googleIAMV1AuditLogConfig =
+  GoogleIAMV1AuditLogConfig'
+    {_givalcLogType = Nothing, _givalcExemptedMembers = Nothing}
+
+
+-- | The log type that this config enables.
+givalcLogType :: Lens' GoogleIAMV1AuditLogConfig (Maybe GoogleIAMV1AuditLogConfigLogType)
+givalcLogType
+  = lens _givalcLogType
+      (\ s a -> s{_givalcLogType = a})
+
+-- | Specifies the identities that do not cause logging for this type of
+-- permission. Follows the same format of Binding.members.
+givalcExemptedMembers :: Lens' GoogleIAMV1AuditLogConfig [Text]
+givalcExemptedMembers
+  = lens _givalcExemptedMembers
+      (\ s a -> s{_givalcExemptedMembers = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON GoogleIAMV1AuditLogConfig where
+        parseJSON
+          = withObject "GoogleIAMV1AuditLogConfig"
+              (\ o ->
+                 GoogleIAMV1AuditLogConfig' <$>
+                   (o .:? "logType") <*>
+                     (o .:? "exemptedMembers" .!= mempty))
+
+instance ToJSON GoogleIAMV1AuditLogConfig where
+        toJSON GoogleIAMV1AuditLogConfig'{..}
+          = object
+              (catMaybes
+                 [("logType" .=) <$> _givalcLogType,
+                  ("exemptedMembers" .=) <$> _givalcExemptedMembers])
+
+-- | The producer representation of a version, which is a child resource
+-- under a \`Product\` with asset data.
+--
+-- /See:/ 'googleCloudPrivatecatalogproducerV1beta1Version' smart constructor.
+data GoogleCloudPrivatecatalogproducerV1beta1Version =
+  GoogleCloudPrivatecatalogproducerV1beta1Version'
+    { _gcpvvAsset         :: !(Maybe GoogleCloudPrivatecatalogproducerV1beta1VersionAsset)
+    , _gcpvvOriginalAsset :: !(Maybe GoogleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset)
+    , _gcpvvUpdateTime    :: !(Maybe DateTime')
+    , _gcpvvName          :: !(Maybe Text)
+    , _gcpvvDescription   :: !(Maybe Text)
+    , _gcpvvCreateTime    :: !(Maybe DateTime')
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleCloudPrivatecatalogproducerV1beta1Version' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcpvvAsset'
+--
+-- * 'gcpvvOriginalAsset'
+--
+-- * 'gcpvvUpdateTime'
+--
+-- * 'gcpvvName'
+--
+-- * 'gcpvvDescription'
+--
+-- * 'gcpvvCreateTime'
+googleCloudPrivatecatalogproducerV1beta1Version
+    :: GoogleCloudPrivatecatalogproducerV1beta1Version
+googleCloudPrivatecatalogproducerV1beta1Version =
+  GoogleCloudPrivatecatalogproducerV1beta1Version'
+    { _gcpvvAsset = Nothing
+    , _gcpvvOriginalAsset = Nothing
+    , _gcpvvUpdateTime = Nothing
+    , _gcpvvName = Nothing
+    , _gcpvvDescription = Nothing
+    , _gcpvvCreateTime = Nothing
+    }
+
+
+-- | Output only. The asset which has been validated and is ready to be
+-- provisioned. See Version.original_asset for the schema.
+gcpvvAsset :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Version (Maybe GoogleCloudPrivatecatalogproducerV1beta1VersionAsset)
+gcpvvAsset
+  = lens _gcpvvAsset (\ s a -> s{_gcpvvAsset = a})
+
+-- | The user-supplied asset payload. The maximum size of the payload is 2MB.
+-- The JSON schema of the payload is defined as: \`\`\` type: object
+-- properties: mainTemplate: type: string description: The file name of the
+-- main template and name prefix of schema file. The content of the main
+-- template should be set in the imports list. The schema file name is
+-- expected to be .schema in the imports list. required: true imports:
+-- type: array description: Import template and schema file contents.
+-- Required to have both and .schema files. required: true minItems: 2
+-- items: type: object properties: name: type: string content: type: string
+-- \`\`\`
+gcpvvOriginalAsset :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Version (Maybe GoogleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset)
+gcpvvOriginalAsset
+  = lens _gcpvvOriginalAsset
+      (\ s a -> s{_gcpvvOriginalAsset = a})
+
+-- | Output only. The time when the version was last updated.
+gcpvvUpdateTime :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Version (Maybe UTCTime)
+gcpvvUpdateTime
+  = lens _gcpvvUpdateTime
+      (\ s a -> s{_gcpvvUpdateTime = a})
+      . mapping _DateTime
+
+-- | Required. The resource name of the version, in the format
+-- \`catalogs\/{catalog_id}\/products\/{product_id}\/versions\/a-z*[a-z0-9]\'.
+-- A unique identifier for the version under a product, which can\'t be
+-- changed after the version is created. The final segment of the name must
+-- between 1 and 63 characters in length.
+gcpvvName :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Version (Maybe Text)
+gcpvvName
+  = lens _gcpvvName (\ s a -> s{_gcpvvName = a})
+
+-- | The user-supplied description of the version. Maximum of 256 characters.
+gcpvvDescription :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Version (Maybe Text)
+gcpvvDescription
+  = lens _gcpvvDescription
+      (\ s a -> s{_gcpvvDescription = a})
+
+-- | Output only. The time when the version was created.
+gcpvvCreateTime :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Version (Maybe UTCTime)
+gcpvvCreateTime
+  = lens _gcpvvCreateTime
+      (\ s a -> s{_gcpvvCreateTime = a})
+      . mapping _DateTime
+
+instance FromJSON
+           GoogleCloudPrivatecatalogproducerV1beta1Version
+         where
+        parseJSON
+          = withObject
+              "GoogleCloudPrivatecatalogproducerV1beta1Version"
+              (\ o ->
+                 GoogleCloudPrivatecatalogproducerV1beta1Version' <$>
+                   (o .:? "asset") <*> (o .:? "originalAsset") <*>
+                     (o .:? "updateTime")
+                     <*> (o .:? "name")
+                     <*> (o .:? "description")
+                     <*> (o .:? "createTime"))
+
+instance ToJSON
+           GoogleCloudPrivatecatalogproducerV1beta1Version
+         where
+        toJSON
+          GoogleCloudPrivatecatalogproducerV1beta1Version'{..}
+          = object
+              (catMaybes
+                 [("asset" .=) <$> _gcpvvAsset,
+                  ("originalAsset" .=) <$> _gcpvvOriginalAsset,
+                  ("updateTime" .=) <$> _gcpvvUpdateTime,
+                  ("name" .=) <$> _gcpvvName,
+                  ("description" .=) <$> _gcpvvDescription,
+                  ("createTime" .=) <$> _gcpvvCreateTime])
+
+-- | Output only. The asset which has been validated and is ready to be
+-- provisioned. See Version.original_asset for the schema.
+--
+-- /See:/ 'googleCloudPrivatecatalogproducerV1beta1VersionAsset' smart constructor.
+newtype GoogleCloudPrivatecatalogproducerV1beta1VersionAsset =
+  GoogleCloudPrivatecatalogproducerV1beta1VersionAsset'
+    { _gcpvvaAddtional :: HashMap Text JSONValue
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleCloudPrivatecatalogproducerV1beta1VersionAsset' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcpvvaAddtional'
+googleCloudPrivatecatalogproducerV1beta1VersionAsset
+    :: HashMap Text JSONValue -- ^ 'gcpvvaAddtional'
+    -> GoogleCloudPrivatecatalogproducerV1beta1VersionAsset
+googleCloudPrivatecatalogproducerV1beta1VersionAsset pGcpvvaAddtional_ =
+  GoogleCloudPrivatecatalogproducerV1beta1VersionAsset'
+    {_gcpvvaAddtional = _Coerce # pGcpvvaAddtional_}
+
+
+-- | Properties of the object.
+gcpvvaAddtional :: Lens' GoogleCloudPrivatecatalogproducerV1beta1VersionAsset (HashMap Text JSONValue)
+gcpvvaAddtional
+  = lens _gcpvvaAddtional
+      (\ s a -> s{_gcpvvaAddtional = a})
+      . _Coerce
+
+instance FromJSON
+           GoogleCloudPrivatecatalogproducerV1beta1VersionAsset
+         where
+        parseJSON
+          = withObject
+              "GoogleCloudPrivatecatalogproducerV1beta1VersionAsset"
+              (\ o ->
+                 GoogleCloudPrivatecatalogproducerV1beta1VersionAsset'
+                   <$> (parseJSONObject o))
+
+instance ToJSON
+           GoogleCloudPrivatecatalogproducerV1beta1VersionAsset
+         where
+        toJSON = toJSON . _gcpvvaAddtional
+
+-- | The response message for Operations.ListOperations.
+--
+-- /See:/ 'googleLongrunningListOperationsResponse' smart constructor.
+data GoogleLongrunningListOperationsResponse =
+  GoogleLongrunningListOperationsResponse'
+    { _gllorNextPageToken :: !(Maybe Text)
+    , _gllorOperations    :: !(Maybe [GoogleLongrunningOperation])
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleLongrunningListOperationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gllorNextPageToken'
+--
+-- * 'gllorOperations'
+googleLongrunningListOperationsResponse
+    :: GoogleLongrunningListOperationsResponse
+googleLongrunningListOperationsResponse =
+  GoogleLongrunningListOperationsResponse'
+    {_gllorNextPageToken = Nothing, _gllorOperations = Nothing}
+
+
+-- | The standard List next-page token.
+gllorNextPageToken :: Lens' GoogleLongrunningListOperationsResponse (Maybe Text)
+gllorNextPageToken
+  = lens _gllorNextPageToken
+      (\ s a -> s{_gllorNextPageToken = a})
+
+-- | A list of operations that matches the specified filter in the request.
+gllorOperations :: Lens' GoogleLongrunningListOperationsResponse [GoogleLongrunningOperation]
+gllorOperations
+  = lens _gllorOperations
+      (\ s a -> s{_gllorOperations = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+           GoogleLongrunningListOperationsResponse
+         where
+        parseJSON
+          = withObject
+              "GoogleLongrunningListOperationsResponse"
+              (\ o ->
+                 GoogleLongrunningListOperationsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "operations" .!= mempty))
+
+instance ToJSON
+           GoogleLongrunningListOperationsResponse
+         where
+        toJSON GoogleLongrunningListOperationsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _gllorNextPageToken,
+                  ("operations" .=) <$> _gllorOperations])
+
+-- | 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:/ 'googleIAMV1Policy' smart constructor.
+data GoogleIAMV1Policy =
+  GoogleIAMV1Policy'
+    { _givpAuditConfigs :: !(Maybe [GoogleIAMV1AuditConfig])
+    , _givpEtag         :: !(Maybe Bytes)
+    , _givpVersion      :: !(Maybe (Textual Int32))
+    , _givpBindings     :: !(Maybe [GoogleIAMV1Binding])
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleIAMV1Policy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'givpAuditConfigs'
+--
+-- * 'givpEtag'
+--
+-- * 'givpVersion'
+--
+-- * 'givpBindings'
+googleIAMV1Policy
+    :: GoogleIAMV1Policy
+googleIAMV1Policy =
+  GoogleIAMV1Policy'
+    { _givpAuditConfigs = Nothing
+    , _givpEtag = Nothing
+    , _givpVersion = Nothing
+    , _givpBindings = Nothing
+    }
+
+
+-- | Specifies cloud audit logging configuration for this policy.
+givpAuditConfigs :: Lens' GoogleIAMV1Policy [GoogleIAMV1AuditConfig]
+givpAuditConfigs
+  = lens _givpAuditConfigs
+      (\ s a -> s{_givpAuditConfigs = 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.
+givpEtag :: Lens' GoogleIAMV1Policy (Maybe ByteString)
+givpEtag
+  = lens _givpEtag (\ s a -> s{_givpEtag = a}) .
+      mapping _Bytes
+
+-- | Deprecated.
+givpVersion :: Lens' GoogleIAMV1Policy (Maybe Int32)
+givpVersion
+  = lens _givpVersion (\ s a -> s{_givpVersion = a}) .
+      mapping _Coerce
+
+-- | Associates a list of \`members\` to a \`role\`. \`bindings\` with no
+-- members will result in an error.
+givpBindings :: Lens' GoogleIAMV1Policy [GoogleIAMV1Binding]
+givpBindings
+  = lens _givpBindings (\ s a -> s{_givpBindings = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON GoogleIAMV1Policy where
+        parseJSON
+          = withObject "GoogleIAMV1Policy"
+              (\ o ->
+                 GoogleIAMV1Policy' <$>
+                   (o .:? "auditConfigs" .!= mempty) <*> (o .:? "etag")
+                     <*> (o .:? "version")
+                     <*> (o .:? "bindings" .!= mempty))
+
+instance ToJSON GoogleIAMV1Policy where
+        toJSON GoogleIAMV1Policy'{..}
+          = object
+              (catMaybes
+                 [("auditConfigs" .=) <$> _givpAuditConfigs,
+                  ("etag" .=) <$> _givpEtag,
+                  ("version" .=) <$> _givpVersion,
+                  ("bindings" .=) <$> _givpBindings])
+
+-- | An association tuple that pairs a \`Catalog\` to a resource that can use
+-- the \`Catalog\`. After association, a
+-- google.cloud.privatecatalog.v1beta1.Catalog becomes available to
+-- consumers under specified Association.resource and all of its child
+-- nodes. Users who have the \`cloudprivatecatalog.targets.get\` permission
+-- on any of the resource nodes can access the catalog and child products
+-- under the node. For example, suppose the cloud resource hierarchy is as
+-- follows: * organizations\/example.com * folders\/team * projects\/test
+-- After creating an association with \`organizations\/example.com\`, the
+-- catalog \`catalogs\/1\` is accessible from the following paths: *
+-- organizations\/example.com * folders\/team * projects\/test Users can
+-- access them by google.cloud.v1beta1.PrivateCatalog.SearchCatalogs
+-- action.
+--
+-- /See:/ 'googleCloudPrivatecatalogproducerV1beta1Association' smart constructor.
+data GoogleCloudPrivatecatalogproducerV1beta1Association =
+  GoogleCloudPrivatecatalogproducerV1beta1Association'
+    { _gcpvaName       :: !(Maybe Text)
+    , _gcpvaResource   :: !(Maybe Text)
+    , _gcpvaCreateTime :: !(Maybe DateTime')
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleCloudPrivatecatalogproducerV1beta1Association' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcpvaName'
+--
+-- * 'gcpvaResource'
+--
+-- * 'gcpvaCreateTime'
+googleCloudPrivatecatalogproducerV1beta1Association
+    :: GoogleCloudPrivatecatalogproducerV1beta1Association
+googleCloudPrivatecatalogproducerV1beta1Association =
+  GoogleCloudPrivatecatalogproducerV1beta1Association'
+    {_gcpvaName = Nothing, _gcpvaResource = Nothing, _gcpvaCreateTime = Nothing}
+
+
+-- | Output only. The resource name of the catalog association, in the format
+-- \`catalogs\/{catalog_id}\/associations\/{association_id}\'. A unique
+-- identifier for the catalog association, which is generated by catalog
+-- service.
+gcpvaName :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Association (Maybe Text)
+gcpvaName
+  = lens _gcpvaName (\ s a -> s{_gcpvaName = a})
+
+-- | Required. The user-supplied fully qualified name of the \`Resource\`
+-- associated to the \`Catalog\`. It supports \`Organization\`, \`Folder\`,
+-- and \`Project\`. Values are of the form *
+-- \`\/\/cloudresourcemanager.googleapis.com\/projects\/{product_number}\`
+-- * \`\/\/cloudresourcemanager.googleapis.com\/folders\/{folder_id}\` *
+-- \`\/\/cloudresourcemanager.googleapis.com\/organizations\/{organization_id}\`
+gcpvaResource :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Association (Maybe Text)
+gcpvaResource
+  = lens _gcpvaResource
+      (\ s a -> s{_gcpvaResource = a})
+
+-- | The creation time of the association.
+gcpvaCreateTime :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Association (Maybe UTCTime)
+gcpvaCreateTime
+  = lens _gcpvaCreateTime
+      (\ s a -> s{_gcpvaCreateTime = a})
+      . mapping _DateTime
+
+instance FromJSON
+           GoogleCloudPrivatecatalogproducerV1beta1Association
+         where
+        parseJSON
+          = withObject
+              "GoogleCloudPrivatecatalogproducerV1beta1Association"
+              (\ o ->
+                 GoogleCloudPrivatecatalogproducerV1beta1Association'
+                   <$>
+                   (o .:? "name") <*> (o .:? "resource") <*>
+                     (o .:? "createTime"))
+
+instance ToJSON
+           GoogleCloudPrivatecatalogproducerV1beta1Association
+         where
+        toJSON
+          GoogleCloudPrivatecatalogproducerV1beta1Association'{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _gcpvaName,
+                  ("resource" .=) <$> _gcpvaResource,
+                  ("createTime" .=) <$> _gcpvaCreateTime])
+
+--
+-- /See:/ 'googleCloudPrivatecatalogproducerV1beta1ListProductsResponse' smart constructor.
+data GoogleCloudPrivatecatalogproducerV1beta1ListProductsResponse =
+  GoogleCloudPrivatecatalogproducerV1beta1ListProductsResponse'
+    { _gcpvlprNextPageToken :: !(Maybe Text)
+    , _gcpvlprProducts      :: !(Maybe [GoogleCloudPrivatecatalogproducerV1beta1Product])
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleCloudPrivatecatalogproducerV1beta1ListProductsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcpvlprNextPageToken'
+--
+-- * 'gcpvlprProducts'
+googleCloudPrivatecatalogproducerV1beta1ListProductsResponse
+    :: GoogleCloudPrivatecatalogproducerV1beta1ListProductsResponse
+googleCloudPrivatecatalogproducerV1beta1ListProductsResponse =
+  GoogleCloudPrivatecatalogproducerV1beta1ListProductsResponse'
+    {_gcpvlprNextPageToken = Nothing, _gcpvlprProducts = Nothing}
+
+
+-- | A pagination token returned from a previous call to ListProducts that
+-- indicates where the listing should continue from. This field is
+-- optional.
+gcpvlprNextPageToken :: Lens' GoogleCloudPrivatecatalogproducerV1beta1ListProductsResponse (Maybe Text)
+gcpvlprNextPageToken
+  = lens _gcpvlprNextPageToken
+      (\ s a -> s{_gcpvlprNextPageToken = a})
+
+-- | The \`Product\` returned from the list call.
+gcpvlprProducts :: Lens' GoogleCloudPrivatecatalogproducerV1beta1ListProductsResponse [GoogleCloudPrivatecatalogproducerV1beta1Product]
+gcpvlprProducts
+  = lens _gcpvlprProducts
+      (\ s a -> s{_gcpvlprProducts = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+           GoogleCloudPrivatecatalogproducerV1beta1ListProductsResponse
+         where
+        parseJSON
+          = withObject
+              "GoogleCloudPrivatecatalogproducerV1beta1ListProductsResponse"
+              (\ o ->
+                 GoogleCloudPrivatecatalogproducerV1beta1ListProductsResponse'
+                   <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "products" .!= mempty))
+
+instance ToJSON
+           GoogleCloudPrivatecatalogproducerV1beta1ListProductsResponse
+         where
+        toJSON
+          GoogleCloudPrivatecatalogproducerV1beta1ListProductsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _gcpvlprNextPageToken,
+                  ("products" .=) <$> _gcpvlprProducts])
+
+-- | Response message for \`TestIamPermissions\` method.
+--
+-- /See:/ 'googleIAMV1TestIAMPermissionsResponse' smart constructor.
+newtype GoogleIAMV1TestIAMPermissionsResponse =
+  GoogleIAMV1TestIAMPermissionsResponse'
+    { _giamvtiamprPermissions :: Maybe [Text]
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleIAMV1TestIAMPermissionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'giamvtiamprPermissions'
+googleIAMV1TestIAMPermissionsResponse
+    :: GoogleIAMV1TestIAMPermissionsResponse
+googleIAMV1TestIAMPermissionsResponse =
+  GoogleIAMV1TestIAMPermissionsResponse' {_giamvtiamprPermissions = Nothing}
+
+
+-- | A subset of \`TestPermissionsRequest.permissions\` that the caller is
+-- allowed.
+giamvtiamprPermissions :: Lens' GoogleIAMV1TestIAMPermissionsResponse [Text]
+giamvtiamprPermissions
+  = lens _giamvtiamprPermissions
+      (\ s a -> s{_giamvtiamprPermissions = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+           GoogleIAMV1TestIAMPermissionsResponse
+         where
+        parseJSON
+          = withObject "GoogleIAMV1TestIAMPermissionsResponse"
+              (\ o ->
+                 GoogleIAMV1TestIAMPermissionsResponse' <$>
+                   (o .:? "permissions" .!= mempty))
+
+instance ToJSON GoogleIAMV1TestIAMPermissionsResponse
+         where
+        toJSON GoogleIAMV1TestIAMPermissionsResponse'{..}
+          = object
+              (catMaybes
+                 [("permissions" .=) <$> _giamvtiamprPermissions])
+
+--
+-- /See:/ 'googleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest' smart constructor.
+newtype GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest =
+  GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest'
+    { _gcpvcarAssociation :: Maybe GoogleCloudPrivatecatalogproducerV1beta1Association
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcpvcarAssociation'
+googleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest
+    :: GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest
+googleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest =
+  GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest'
+    {_gcpvcarAssociation = Nothing}
+
+
+-- | The user-supplied \`Association\` that is going to be created. If the
+-- \`resource\` field is set, the
+-- \`privatecatalogproducer.catalogTargets.associate\` permission is
+-- checked on the target resource.
+gcpvcarAssociation :: Lens' GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest (Maybe GoogleCloudPrivatecatalogproducerV1beta1Association)
+gcpvcarAssociation
+  = lens _gcpvcarAssociation
+      (\ s a -> s{_gcpvcarAssociation = a})
+
+instance FromJSON
+           GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest
+         where
+        parseJSON
+          = withObject
+              "GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest"
+              (\ o ->
+                 GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest'
+                   <$> (o .:? "association"))
+
+instance ToJSON
+           GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest
+         where
+        toJSON
+          GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest'{..}
+          = object
+              (catMaybes
+                 [("association" .=) <$> _gcpvcarAssociation])
+
+-- | Represents an expression text. Example: title: \"User account presence\"
+-- description: \"Determines whether the request has a user account\"
+-- expression: \"size(request.user) > 0\"
+--
+-- /See:/ 'googleTypeExpr' smart constructor.
+data GoogleTypeExpr =
+  GoogleTypeExpr'
+    { _gteLocation    :: !(Maybe Text)
+    , _gteExpression  :: !(Maybe Text)
+    , _gteTitle       :: !(Maybe Text)
+    , _gteDescription :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleTypeExpr' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gteLocation'
+--
+-- * 'gteExpression'
+--
+-- * 'gteTitle'
+--
+-- * 'gteDescription'
+googleTypeExpr
+    :: GoogleTypeExpr
+googleTypeExpr =
+  GoogleTypeExpr'
+    { _gteLocation = Nothing
+    , _gteExpression = Nothing
+    , _gteTitle = Nothing
+    , _gteDescription = Nothing
+    }
+
+
+-- | An optional string indicating the location of the expression for error
+-- reporting, e.g. a file name and a position in the file.
+gteLocation :: Lens' GoogleTypeExpr (Maybe Text)
+gteLocation
+  = lens _gteLocation (\ s a -> s{_gteLocation = 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.
+gteExpression :: Lens' GoogleTypeExpr (Maybe Text)
+gteExpression
+  = lens _gteExpression
+      (\ s a -> s{_gteExpression = 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.
+gteTitle :: Lens' GoogleTypeExpr (Maybe Text)
+gteTitle = lens _gteTitle (\ s a -> s{_gteTitle = 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.
+gteDescription :: Lens' GoogleTypeExpr (Maybe Text)
+gteDescription
+  = lens _gteDescription
+      (\ s a -> s{_gteDescription = a})
+
+instance FromJSON GoogleTypeExpr where
+        parseJSON
+          = withObject "GoogleTypeExpr"
+              (\ o ->
+                 GoogleTypeExpr' <$>
+                   (o .:? "location") <*> (o .:? "expression") <*>
+                     (o .:? "title")
+                     <*> (o .:? "description"))
+
+instance ToJSON GoogleTypeExpr where
+        toJSON GoogleTypeExpr'{..}
+          = object
+              (catMaybes
+                 [("location" .=) <$> _gteLocation,
+                  ("expression" .=) <$> _gteExpression,
+                  ("title" .=) <$> _gteTitle,
+                  ("description" .=) <$> _gteDescription])
+
+-- | This resource represents a long-running operation that is the result of
+-- a network API call.
+--
+-- /See:/ 'googleLongrunningOperation' smart constructor.
+data GoogleLongrunningOperation =
+  GoogleLongrunningOperation'
+    { _gloDone     :: !(Maybe Bool)
+    , _gloError    :: !(Maybe GoogleRpcStatus)
+    , _gloResponse :: !(Maybe GoogleLongrunningOperationResponse)
+    , _gloName     :: !(Maybe Text)
+    , _gloMetadata :: !(Maybe GoogleLongrunningOperationMetadata)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleLongrunningOperation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gloDone'
+--
+-- * 'gloError'
+--
+-- * 'gloResponse'
+--
+-- * 'gloName'
+--
+-- * 'gloMetadata'
+googleLongrunningOperation
+    :: GoogleLongrunningOperation
+googleLongrunningOperation =
+  GoogleLongrunningOperation'
+    { _gloDone = Nothing
+    , _gloError = Nothing
+    , _gloResponse = Nothing
+    , _gloName = Nothing
+    , _gloMetadata = 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.
+gloDone :: Lens' GoogleLongrunningOperation (Maybe Bool)
+gloDone = lens _gloDone (\ s a -> s{_gloDone = a})
+
+-- | The error result of the operation in case of failure or cancellation.
+gloError :: Lens' GoogleLongrunningOperation (Maybe GoogleRpcStatus)
+gloError = lens _gloError (\ s a -> s{_gloError = 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\`.
+gloResponse :: Lens' GoogleLongrunningOperation (Maybe GoogleLongrunningOperationResponse)
+gloResponse
+  = lens _gloResponse (\ s a -> s{_gloResponse = 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\`.
+gloName :: Lens' GoogleLongrunningOperation (Maybe Text)
+gloName = lens _gloName (\ s a -> s{_gloName = 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.
+gloMetadata :: Lens' GoogleLongrunningOperation (Maybe GoogleLongrunningOperationMetadata)
+gloMetadata
+  = lens _gloMetadata (\ s a -> s{_gloMetadata = a})
+
+instance FromJSON GoogleLongrunningOperation where
+        parseJSON
+          = withObject "GoogleLongrunningOperation"
+              (\ o ->
+                 GoogleLongrunningOperation' <$>
+                   (o .:? "done") <*> (o .:? "error") <*>
+                     (o .:? "response")
+                     <*> (o .:? "name")
+                     <*> (o .:? "metadata"))
+
+instance ToJSON GoogleLongrunningOperation where
+        toJSON GoogleLongrunningOperation'{..}
+          = object
+              (catMaybes
+                 [("done" .=) <$> _gloDone,
+                  ("error" .=) <$> _gloError,
+                  ("response" .=) <$> _gloResponse,
+                  ("name" .=) <$> _gloName,
+                  ("metadata" .=) <$> _gloMetadata])
+
+-- | The producer representation of a product which is a child resource of
+-- \`Catalog\` with display metadata and a list of \`Version\` resources.
+--
+-- /See:/ 'googleCloudPrivatecatalogproducerV1beta1Product' smart constructor.
+data GoogleCloudPrivatecatalogproducerV1beta1Product =
+  GoogleCloudPrivatecatalogproducerV1beta1Product'
+    { _gcpvpIconURI         :: !(Maybe Text)
+    , _gcpvpUpdateTime      :: !(Maybe DateTime')
+    , _gcpvpDisplayMetadata :: !(Maybe GoogleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata)
+    , _gcpvpName            :: !(Maybe Text)
+    , _gcpvpAssetType       :: !(Maybe Text)
+    , _gcpvpCreateTime      :: !(Maybe DateTime')
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleCloudPrivatecatalogproducerV1beta1Product' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcpvpIconURI'
+--
+-- * 'gcpvpUpdateTime'
+--
+-- * 'gcpvpDisplayMetadata'
+--
+-- * 'gcpvpName'
+--
+-- * 'gcpvpAssetType'
+--
+-- * 'gcpvpCreateTime'
+googleCloudPrivatecatalogproducerV1beta1Product
+    :: GoogleCloudPrivatecatalogproducerV1beta1Product
+googleCloudPrivatecatalogproducerV1beta1Product =
+  GoogleCloudPrivatecatalogproducerV1beta1Product'
+    { _gcpvpIconURI = Nothing
+    , _gcpvpUpdateTime = Nothing
+    , _gcpvpDisplayMetadata = Nothing
+    , _gcpvpName = Nothing
+    , _gcpvpAssetType = Nothing
+    , _gcpvpCreateTime = Nothing
+    }
+
+
+-- | Output only. The public accessible URI of the icon uploaded by
+-- PrivateCatalogProducer.UploadIcon. If no icon is uploaded, it will be
+-- the default icon\'s URI.
+gcpvpIconURI :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Product (Maybe Text)
+gcpvpIconURI
+  = lens _gcpvpIconURI (\ s a -> s{_gcpvpIconURI = a})
+
+-- | Output only. The time when the product was last updated.
+gcpvpUpdateTime :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Product (Maybe UTCTime)
+gcpvpUpdateTime
+  = lens _gcpvpUpdateTime
+      (\ s a -> s{_gcpvpUpdateTime = a})
+      . mapping _DateTime
+
+-- | The user-supplied display metadata to describe the product. The JSON
+-- schema of the metadata differs by Product.asset_type. When the type is
+-- \`google.deploymentmanager.Template\`, the schema is as follows: \`\`\`
+-- \"$schema\": http:\/\/json-schema.org\/draft-04\/schema# type: object
+-- properties: name: type: string minLength: 1 maxLength: 64 description:
+-- type: string minLength: 1 maxLength: 2048 tagline: type: string
+-- minLength: 1 maxLength: 100 support_info: type: string minLength: 1
+-- maxLength: 2048 creator: type: string minLength: 1 maxLength: 100
+-- documentation: type: array items: type: object properties: url: type:
+-- string pattern:
+-- \"^(https?):\/\/[-a-zA-Z0-9+&\'#\/%?=~_|!:,.;]*[-a-zA-Z0-9+&\'#\/%=~_|]\"
+-- title: type: string minLength: 1 maxLength: 64 description: type: string
+-- minLength: 1 maxLength: 2048 required: - name - description
+-- additionalProperties: false \`\`\` When the asset type is
+-- \`google.cloudprivatecatalog.ListingOnly\`, the schema is as follows:
+-- \`\`\` \"$schema\": http:\/\/json-schema.org\/draft-04\/schema# type:
+-- object properties: name: type: string minLength: 1 maxLength: 64
+-- description: type: string minLength: 1 maxLength: 2048 tagline: type:
+-- string minLength: 1 maxLength: 100 support_info: type: string minLength:
+-- 1 maxLength: 2048 creator: type: string minLength: 1 maxLength: 100
+-- documentation: type: array items: type: object properties: url: type:
+-- string pattern:
+-- \"^(https?):\/\/[-a-zA-Z0-9+&\'#\/%?=~_|!:,.;]*[-a-zA-Z0-9+&\'#\/%=~_|]\"
+-- title: type: string minLength: 1 maxLength: 64 description: type: string
+-- minLength: 1 maxLength: 2048 signup_url: type: string pattern:
+-- \"^(https?):\/\/[-a-zA-Z0-9+&\'#\/%?=~_|!:,.;]*[-a-zA-Z0-9+&\'#\/%=~_|]\"
+-- required: - name - description - signup_url additionalProperties: false
+-- \`\`\`
+gcpvpDisplayMetadata :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Product (Maybe GoogleCloudPrivatecatalogproducerV1beta1ProductDisplayMetadata)
+gcpvpDisplayMetadata
+  = lens _gcpvpDisplayMetadata
+      (\ s a -> s{_gcpvpDisplayMetadata = a})
+
+-- | Required. The resource name of the product in the format
+-- \`catalogs\/{catalog_id}\/products\/a-z*[a-z0-9]\'. A unique identifier
+-- for the product under a catalog, which cannot be changed after the
+-- product is created. The final segment of the name must between 1 and 256
+-- characters in length.
+gcpvpName :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Product (Maybe Text)
+gcpvpName
+  = lens _gcpvpName (\ s a -> s{_gcpvpName = a})
+
+-- | Required. The type of the product asset, which cannot be changed after
+-- the product is created. It supports the values
+-- \`google.deploymentmanager.Template\` and
+-- \`google.cloudprivatecatalog.ListingOnly\`. Other values will be
+-- rejected by the server. Read only after creation. The following fields
+-- or resource types have different validation rules under each
+-- \`asset_type\` values: * Product.display_metadata has different
+-- validation schema for each asset type value. See its comment for
+-- details. * Version resource isn\'t allowed to be added under the
+-- \`google.cloudprivatecatalog.ListingOnly\` type.
+gcpvpAssetType :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Product (Maybe Text)
+gcpvpAssetType
+  = lens _gcpvpAssetType
+      (\ s a -> s{_gcpvpAssetType = a})
+
+-- | Output only. The time when the product was created.
+gcpvpCreateTime :: Lens' GoogleCloudPrivatecatalogproducerV1beta1Product (Maybe UTCTime)
+gcpvpCreateTime
+  = lens _gcpvpCreateTime
+      (\ s a -> s{_gcpvpCreateTime = a})
+      . mapping _DateTime
+
+instance FromJSON
+           GoogleCloudPrivatecatalogproducerV1beta1Product
+         where
+        parseJSON
+          = withObject
+              "GoogleCloudPrivatecatalogproducerV1beta1Product"
+              (\ o ->
+                 GoogleCloudPrivatecatalogproducerV1beta1Product' <$>
+                   (o .:? "iconUri") <*> (o .:? "updateTime") <*>
+                     (o .:? "displayMetadata")
+                     <*> (o .:? "name")
+                     <*> (o .:? "assetType")
+                     <*> (o .:? "createTime"))
+
+instance ToJSON
+           GoogleCloudPrivatecatalogproducerV1beta1Product
+         where
+        toJSON
+          GoogleCloudPrivatecatalogproducerV1beta1Product'{..}
+          = object
+              (catMaybes
+                 [("iconUri" .=) <$> _gcpvpIconURI,
+                  ("updateTime" .=) <$> _gcpvpUpdateTime,
+                  ("displayMetadata" .=) <$> _gcpvpDisplayMetadata,
+                  ("name" .=) <$> _gcpvpName,
+                  ("assetType" .=) <$> _gcpvpAssetType,
+                  ("createTime" .=) <$> _gcpvpCreateTime])
+
+-- | The user-supplied asset payload. The maximum size of the payload is 2MB.
+-- The JSON schema of the payload is defined as: \`\`\` type: object
+-- properties: mainTemplate: type: string description: The file name of the
+-- main template and name prefix of schema file. The content of the main
+-- template should be set in the imports list. The schema file name is
+-- expected to be .schema in the imports list. required: true imports:
+-- type: array description: Import template and schema file contents.
+-- Required to have both and .schema files. required: true minItems: 2
+-- items: type: object properties: name: type: string content: type: string
+-- \`\`\`
+--
+-- /See:/ 'googleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset' smart constructor.
+newtype GoogleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset =
+  GoogleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset'
+    { _gcpvvoaAddtional :: HashMap Text JSONValue
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcpvvoaAddtional'
+googleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset
+    :: HashMap Text JSONValue -- ^ 'gcpvvoaAddtional'
+    -> GoogleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset
+googleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset pGcpvvoaAddtional_ =
+  GoogleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset'
+    {_gcpvvoaAddtional = _Coerce # pGcpvvoaAddtional_}
+
+
+-- | Properties of the object.
+gcpvvoaAddtional :: Lens' GoogleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset (HashMap Text JSONValue)
+gcpvvoaAddtional
+  = lens _gcpvvoaAddtional
+      (\ s a -> s{_gcpvvoaAddtional = a})
+      . _Coerce
+
+instance FromJSON
+           GoogleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset
+         where
+        parseJSON
+          = withObject
+              "GoogleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset"
+              (\ o ->
+                 GoogleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset'
+                   <$> (parseJSONObject o))
+
+instance ToJSON
+           GoogleCloudPrivatecatalogproducerV1beta1VersionOriginalAsset
+         where
+        toJSON = toJSON . _gcpvvoaAddtional
+
+--
+-- /See:/ 'googleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse' smart constructor.
+data GoogleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse =
+  GoogleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse'
+    { _gcpvlarNextPageToken :: !(Maybe Text)
+    , _gcpvlarAssociations  :: !(Maybe [GoogleCloudPrivatecatalogproducerV1beta1Association])
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GoogleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcpvlarNextPageToken'
+--
+-- * 'gcpvlarAssociations'
+googleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse
+    :: GoogleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse
+googleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse =
+  GoogleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse'
+    {_gcpvlarNextPageToken = Nothing, _gcpvlarAssociations = Nothing}
+
+
+-- | A pagination token returned from a previous call to \`ListAssociations\`
+-- that indicates where the listing should continue from. This field is
+-- optional.
+gcpvlarNextPageToken :: Lens' GoogleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse (Maybe Text)
+gcpvlarNextPageToken
+  = lens _gcpvlarNextPageToken
+      (\ s a -> s{_gcpvlarNextPageToken = a})
+
+-- | The returned \`Association\` resources from the list call.
+gcpvlarAssociations :: Lens' GoogleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse [GoogleCloudPrivatecatalogproducerV1beta1Association]
+gcpvlarAssociations
+  = lens _gcpvlarAssociations
+      (\ s a -> s{_gcpvlarAssociations = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+           GoogleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse
+         where
+        parseJSON
+          = withObject
+              "GoogleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse"
+              (\ o ->
+                 GoogleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse'
+                   <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "associations" .!= mempty))
+
+instance ToJSON
+           GoogleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse
+         where
+        toJSON
+          GoogleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _gcpvlarNextPageToken,
+                  ("associations" .=) <$> _gcpvlarAssociations])
diff --git a/gen/Network/Google/CloudPrivateCatalogProducer/Types/Sum.hs b/gen/Network/Google/CloudPrivateCatalogProducer/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudPrivateCatalogProducer/Types/Sum.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.CloudPrivateCatalogProducer.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.CloudPrivateCatalogProducer.Types.Sum where
+
+import           Network.Google.Prelude hiding (Bytes)
+
+-- | The log type that this config enables.
+data GoogleIAMV1AuditLogConfigLogType
+    = 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 GoogleIAMV1AuditLogConfigLogType
+
+instance FromHttpApiData GoogleIAMV1AuditLogConfigLogType 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 GoogleIAMV1AuditLogConfigLogType from: " <> x)
+
+instance ToHttpApiData GoogleIAMV1AuditLogConfigLogType where
+    toQueryParam = \case
+        LogTypeUnspecified -> "LOG_TYPE_UNSPECIFIED"
+        AdminRead -> "ADMIN_READ"
+        DataWrite -> "DATA_WRITE"
+        DataRead -> "DATA_READ"
+
+instance FromJSON GoogleIAMV1AuditLogConfigLogType where
+    parseJSON = parseJSONText "GoogleIAMV1AuditLogConfigLogType"
+
+instance ToJSON GoogleIAMV1AuditLogConfigLogType 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/CloudPrivateCatalogProducer/Catalogs/Associations/Create.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Associations/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Associations/Create.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.CloudPrivateCatalogProducer.Catalogs.Associations.Create
+-- 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)
+--
+-- Creates an Association instance under a given Catalog.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.associations.create@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Associations.Create
+    (
+    -- * REST Resource
+      CatalogsAssociationsCreateResource
+
+    -- * Creating a Request
+    , catalogsAssociationsCreate
+    , CatalogsAssociationsCreate
+
+    -- * Request Lenses
+    , cacParent
+    , cacXgafv
+    , cacUploadProtocol
+    , cacAccessToken
+    , cacUploadType
+    , cacPayload
+    , cacCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.associations.create@ method which the
+-- 'CatalogsAssociationsCreate' request conforms to.
+type CatalogsAssociationsCreateResource =
+     "v1beta1" :>
+       Capture "parent" Text :>
+         "associations" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON]
+                         GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest
+                         :>
+                         Post '[JSON]
+                           GoogleCloudPrivatecatalogproducerV1beta1Association
+
+-- | Creates an Association instance under a given Catalog.
+--
+-- /See:/ 'catalogsAssociationsCreate' smart constructor.
+data CatalogsAssociationsCreate =
+  CatalogsAssociationsCreate'
+    { _cacParent         :: !Text
+    , _cacXgafv          :: !(Maybe Xgafv)
+    , _cacUploadProtocol :: !(Maybe Text)
+    , _cacAccessToken    :: !(Maybe Text)
+    , _cacUploadType     :: !(Maybe Text)
+    , _cacPayload        :: !GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest
+    , _cacCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsAssociationsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cacParent'
+--
+-- * 'cacXgafv'
+--
+-- * 'cacUploadProtocol'
+--
+-- * 'cacAccessToken'
+--
+-- * 'cacUploadType'
+--
+-- * 'cacPayload'
+--
+-- * 'cacCallback'
+catalogsAssociationsCreate
+    :: Text -- ^ 'cacParent'
+    -> GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest -- ^ 'cacPayload'
+    -> CatalogsAssociationsCreate
+catalogsAssociationsCreate pCacParent_ pCacPayload_ =
+  CatalogsAssociationsCreate'
+    { _cacParent = pCacParent_
+    , _cacXgafv = Nothing
+    , _cacUploadProtocol = Nothing
+    , _cacAccessToken = Nothing
+    , _cacUploadType = Nothing
+    , _cacPayload = pCacPayload_
+    , _cacCallback = Nothing
+    }
+
+
+-- | The \`Catalog\` resource\'s name.
+cacParent :: Lens' CatalogsAssociationsCreate Text
+cacParent
+  = lens _cacParent (\ s a -> s{_cacParent = a})
+
+-- | V1 error format.
+cacXgafv :: Lens' CatalogsAssociationsCreate (Maybe Xgafv)
+cacXgafv = lens _cacXgafv (\ s a -> s{_cacXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cacUploadProtocol :: Lens' CatalogsAssociationsCreate (Maybe Text)
+cacUploadProtocol
+  = lens _cacUploadProtocol
+      (\ s a -> s{_cacUploadProtocol = a})
+
+-- | OAuth access token.
+cacAccessToken :: Lens' CatalogsAssociationsCreate (Maybe Text)
+cacAccessToken
+  = lens _cacAccessToken
+      (\ s a -> s{_cacAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cacUploadType :: Lens' CatalogsAssociationsCreate (Maybe Text)
+cacUploadType
+  = lens _cacUploadType
+      (\ s a -> s{_cacUploadType = a})
+
+-- | Multipart request metadata.
+cacPayload :: Lens' CatalogsAssociationsCreate GoogleCloudPrivatecatalogproducerV1beta1CreateAssociationRequest
+cacPayload
+  = lens _cacPayload (\ s a -> s{_cacPayload = a})
+
+-- | JSONP
+cacCallback :: Lens' CatalogsAssociationsCreate (Maybe Text)
+cacCallback
+  = lens _cacCallback (\ s a -> s{_cacCallback = a})
+
+instance GoogleRequest CatalogsAssociationsCreate
+         where
+        type Rs CatalogsAssociationsCreate =
+             GoogleCloudPrivatecatalogproducerV1beta1Association
+        type Scopes CatalogsAssociationsCreate =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsAssociationsCreate'{..}
+          = go _cacParent _cacXgafv _cacUploadProtocol
+              _cacAccessToken
+              _cacUploadType
+              _cacCallback
+              (Just AltJSON)
+              _cacPayload
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CatalogsAssociationsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Associations/Delete.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Associations/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Associations/Delete.hs
@@ -0,0 +1,151 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.Associations.Delete
+-- 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)
+--
+-- Deletes the given Association.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.associations.delete@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Associations.Delete
+    (
+    -- * REST Resource
+      CatalogsAssociationsDeleteResource
+
+    -- * Creating a Request
+    , catalogsAssociationsDelete
+    , CatalogsAssociationsDelete
+
+    -- * Request Lenses
+    , cadXgafv
+    , cadUploadProtocol
+    , cadAccessToken
+    , cadUploadType
+    , cadName
+    , cadCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.associations.delete@ method which the
+-- 'CatalogsAssociationsDelete' request conforms to.
+type CatalogsAssociationsDeleteResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     Delete '[JSON] GoogleProtobufEmpty
+
+-- | Deletes the given Association.
+--
+-- /See:/ 'catalogsAssociationsDelete' smart constructor.
+data CatalogsAssociationsDelete =
+  CatalogsAssociationsDelete'
+    { _cadXgafv          :: !(Maybe Xgafv)
+    , _cadUploadProtocol :: !(Maybe Text)
+    , _cadAccessToken    :: !(Maybe Text)
+    , _cadUploadType     :: !(Maybe Text)
+    , _cadName           :: !Text
+    , _cadCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsAssociationsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cadXgafv'
+--
+-- * 'cadUploadProtocol'
+--
+-- * 'cadAccessToken'
+--
+-- * 'cadUploadType'
+--
+-- * 'cadName'
+--
+-- * 'cadCallback'
+catalogsAssociationsDelete
+    :: Text -- ^ 'cadName'
+    -> CatalogsAssociationsDelete
+catalogsAssociationsDelete pCadName_ =
+  CatalogsAssociationsDelete'
+    { _cadXgafv = Nothing
+    , _cadUploadProtocol = Nothing
+    , _cadAccessToken = Nothing
+    , _cadUploadType = Nothing
+    , _cadName = pCadName_
+    , _cadCallback = Nothing
+    }
+
+
+-- | V1 error format.
+cadXgafv :: Lens' CatalogsAssociationsDelete (Maybe Xgafv)
+cadXgafv = lens _cadXgafv (\ s a -> s{_cadXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cadUploadProtocol :: Lens' CatalogsAssociationsDelete (Maybe Text)
+cadUploadProtocol
+  = lens _cadUploadProtocol
+      (\ s a -> s{_cadUploadProtocol = a})
+
+-- | OAuth access token.
+cadAccessToken :: Lens' CatalogsAssociationsDelete (Maybe Text)
+cadAccessToken
+  = lens _cadAccessToken
+      (\ s a -> s{_cadAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cadUploadType :: Lens' CatalogsAssociationsDelete (Maybe Text)
+cadUploadType
+  = lens _cadUploadType
+      (\ s a -> s{_cadUploadType = a})
+
+-- | The resource name of the \`Association\` to delete.
+cadName :: Lens' CatalogsAssociationsDelete Text
+cadName = lens _cadName (\ s a -> s{_cadName = a})
+
+-- | JSONP
+cadCallback :: Lens' CatalogsAssociationsDelete (Maybe Text)
+cadCallback
+  = lens _cadCallback (\ s a -> s{_cadCallback = a})
+
+instance GoogleRequest CatalogsAssociationsDelete
+         where
+        type Rs CatalogsAssociationsDelete =
+             GoogleProtobufEmpty
+        type Scopes CatalogsAssociationsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsAssociationsDelete'{..}
+          = go _cadName _cadXgafv _cadUploadProtocol
+              _cadAccessToken
+              _cadUploadType
+              _cadCallback
+              (Just AltJSON)
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CatalogsAssociationsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Associations/Get.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Associations/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Associations/Get.hs
@@ -0,0 +1,151 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.Associations.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)
+--
+-- Returns the requested Association resource.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.associations.get@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Associations.Get
+    (
+    -- * REST Resource
+      CatalogsAssociationsGetResource
+
+    -- * Creating a Request
+    , catalogsAssociationsGet
+    , CatalogsAssociationsGet
+
+    -- * Request Lenses
+    , cagXgafv
+    , cagUploadProtocol
+    , cagAccessToken
+    , cagUploadType
+    , cagName
+    , cagCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.associations.get@ method which the
+-- 'CatalogsAssociationsGet' request conforms to.
+type CatalogsAssociationsGetResource =
+     "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]
+                       GoogleCloudPrivatecatalogproducerV1beta1Association
+
+-- | Returns the requested Association resource.
+--
+-- /See:/ 'catalogsAssociationsGet' smart constructor.
+data CatalogsAssociationsGet =
+  CatalogsAssociationsGet'
+    { _cagXgafv          :: !(Maybe Xgafv)
+    , _cagUploadProtocol :: !(Maybe Text)
+    , _cagAccessToken    :: !(Maybe Text)
+    , _cagUploadType     :: !(Maybe Text)
+    , _cagName           :: !Text
+    , _cagCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsAssociationsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cagXgafv'
+--
+-- * 'cagUploadProtocol'
+--
+-- * 'cagAccessToken'
+--
+-- * 'cagUploadType'
+--
+-- * 'cagName'
+--
+-- * 'cagCallback'
+catalogsAssociationsGet
+    :: Text -- ^ 'cagName'
+    -> CatalogsAssociationsGet
+catalogsAssociationsGet pCagName_ =
+  CatalogsAssociationsGet'
+    { _cagXgafv = Nothing
+    , _cagUploadProtocol = Nothing
+    , _cagAccessToken = Nothing
+    , _cagUploadType = Nothing
+    , _cagName = pCagName_
+    , _cagCallback = Nothing
+    }
+
+
+-- | V1 error format.
+cagXgafv :: Lens' CatalogsAssociationsGet (Maybe Xgafv)
+cagXgafv = lens _cagXgafv (\ s a -> s{_cagXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cagUploadProtocol :: Lens' CatalogsAssociationsGet (Maybe Text)
+cagUploadProtocol
+  = lens _cagUploadProtocol
+      (\ s a -> s{_cagUploadProtocol = a})
+
+-- | OAuth access token.
+cagAccessToken :: Lens' CatalogsAssociationsGet (Maybe Text)
+cagAccessToken
+  = lens _cagAccessToken
+      (\ s a -> s{_cagAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cagUploadType :: Lens' CatalogsAssociationsGet (Maybe Text)
+cagUploadType
+  = lens _cagUploadType
+      (\ s a -> s{_cagUploadType = a})
+
+-- | The resource name of the \`Association\` to retrieve.
+cagName :: Lens' CatalogsAssociationsGet Text
+cagName = lens _cagName (\ s a -> s{_cagName = a})
+
+-- | JSONP
+cagCallback :: Lens' CatalogsAssociationsGet (Maybe Text)
+cagCallback
+  = lens _cagCallback (\ s a -> s{_cagCallback = a})
+
+instance GoogleRequest CatalogsAssociationsGet where
+        type Rs CatalogsAssociationsGet =
+             GoogleCloudPrivatecatalogproducerV1beta1Association
+        type Scopes CatalogsAssociationsGet =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsAssociationsGet'{..}
+          = go _cagName _cagXgafv _cagUploadProtocol
+              _cagAccessToken
+              _cagUploadType
+              _cagCallback
+              (Just AltJSON)
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CatalogsAssociationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Associations/List.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Associations/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Associations/List.hs
@@ -0,0 +1,180 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.Associations.List
+-- 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)
+--
+-- Lists all Association resources under a catalog.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.associations.list@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Associations.List
+    (
+    -- * REST Resource
+      CatalogsAssociationsListResource
+
+    -- * Creating a Request
+    , catalogsAssociationsList
+    , CatalogsAssociationsList
+
+    -- * Request Lenses
+    , calParent
+    , calXgafv
+    , calUploadProtocol
+    , calAccessToken
+    , calUploadType
+    , calPageToken
+    , calPageSize
+    , calCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.associations.list@ method which the
+-- 'CatalogsAssociationsList' request conforms to.
+type CatalogsAssociationsListResource =
+     "v1beta1" :>
+       Capture "parent" Text :>
+         "associations" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "pageSize" (Textual Int32) :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON]
+                             GoogleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse
+
+-- | Lists all Association resources under a catalog.
+--
+-- /See:/ 'catalogsAssociationsList' smart constructor.
+data CatalogsAssociationsList =
+  CatalogsAssociationsList'
+    { _calParent         :: !Text
+    , _calXgafv          :: !(Maybe Xgafv)
+    , _calUploadProtocol :: !(Maybe Text)
+    , _calAccessToken    :: !(Maybe Text)
+    , _calUploadType     :: !(Maybe Text)
+    , _calPageToken      :: !(Maybe Text)
+    , _calPageSize       :: !(Maybe (Textual Int32))
+    , _calCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsAssociationsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'calParent'
+--
+-- * 'calXgafv'
+--
+-- * 'calUploadProtocol'
+--
+-- * 'calAccessToken'
+--
+-- * 'calUploadType'
+--
+-- * 'calPageToken'
+--
+-- * 'calPageSize'
+--
+-- * 'calCallback'
+catalogsAssociationsList
+    :: Text -- ^ 'calParent'
+    -> CatalogsAssociationsList
+catalogsAssociationsList pCalParent_ =
+  CatalogsAssociationsList'
+    { _calParent = pCalParent_
+    , _calXgafv = Nothing
+    , _calUploadProtocol = Nothing
+    , _calAccessToken = Nothing
+    , _calUploadType = Nothing
+    , _calPageToken = Nothing
+    , _calPageSize = Nothing
+    , _calCallback = Nothing
+    }
+
+
+-- | The resource name of the \`Catalog\` whose \`Associations\` are being
+-- retrieved. In the format \`catalogs\/\`.
+calParent :: Lens' CatalogsAssociationsList Text
+calParent
+  = lens _calParent (\ s a -> s{_calParent = a})
+
+-- | V1 error format.
+calXgafv :: Lens' CatalogsAssociationsList (Maybe Xgafv)
+calXgafv = lens _calXgafv (\ s a -> s{_calXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+calUploadProtocol :: Lens' CatalogsAssociationsList (Maybe Text)
+calUploadProtocol
+  = lens _calUploadProtocol
+      (\ s a -> s{_calUploadProtocol = a})
+
+-- | OAuth access token.
+calAccessToken :: Lens' CatalogsAssociationsList (Maybe Text)
+calAccessToken
+  = lens _calAccessToken
+      (\ s a -> s{_calAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+calUploadType :: Lens' CatalogsAssociationsList (Maybe Text)
+calUploadType
+  = lens _calUploadType
+      (\ s a -> s{_calUploadType = a})
+
+-- | A pagination token returned from the previous call to
+-- \`ListAssociations\`.
+calPageToken :: Lens' CatalogsAssociationsList (Maybe Text)
+calPageToken
+  = lens _calPageToken (\ s a -> s{_calPageToken = a})
+
+-- | The maximum number of catalog associations to return.
+calPageSize :: Lens' CatalogsAssociationsList (Maybe Int32)
+calPageSize
+  = lens _calPageSize (\ s a -> s{_calPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+calCallback :: Lens' CatalogsAssociationsList (Maybe Text)
+calCallback
+  = lens _calCallback (\ s a -> s{_calCallback = a})
+
+instance GoogleRequest CatalogsAssociationsList where
+        type Rs CatalogsAssociationsList =
+             GoogleCloudPrivatecatalogproducerV1beta1ListAssociationsResponse
+        type Scopes CatalogsAssociationsList =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsAssociationsList'{..}
+          = go _calParent _calXgafv _calUploadProtocol
+              _calAccessToken
+              _calUploadType
+              _calPageToken
+              _calPageSize
+              _calCallback
+              (Just AltJSON)
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CatalogsAssociationsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Create.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Create.hs
@@ -0,0 +1,150 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.Create
+-- 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)
+--
+-- Creates a new Catalog resource.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.create@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Create
+    (
+    -- * REST Resource
+      CatalogsCreateResource
+
+    -- * Creating a Request
+    , catalogsCreate
+    , CatalogsCreate
+
+    -- * Request Lenses
+    , ccXgafv
+    , ccUploadProtocol
+    , ccAccessToken
+    , ccUploadType
+    , ccPayload
+    , ccCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.create@ method which the
+-- 'CatalogsCreate' request conforms to.
+type CatalogsCreateResource =
+     "v1beta1" :>
+       "catalogs" :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON]
+                       GoogleCloudPrivatecatalogproducerV1beta1Catalog
+                       :> Post '[JSON] GoogleLongrunningOperation
+
+-- | Creates a new Catalog resource.
+--
+-- /See:/ 'catalogsCreate' smart constructor.
+data CatalogsCreate =
+  CatalogsCreate'
+    { _ccXgafv          :: !(Maybe Xgafv)
+    , _ccUploadProtocol :: !(Maybe Text)
+    , _ccAccessToken    :: !(Maybe Text)
+    , _ccUploadType     :: !(Maybe Text)
+    , _ccPayload        :: !GoogleCloudPrivatecatalogproducerV1beta1Catalog
+    , _ccCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccXgafv'
+--
+-- * 'ccUploadProtocol'
+--
+-- * 'ccAccessToken'
+--
+-- * 'ccUploadType'
+--
+-- * 'ccPayload'
+--
+-- * 'ccCallback'
+catalogsCreate
+    :: GoogleCloudPrivatecatalogproducerV1beta1Catalog -- ^ 'ccPayload'
+    -> CatalogsCreate
+catalogsCreate pCcPayload_ =
+  CatalogsCreate'
+    { _ccXgafv = Nothing
+    , _ccUploadProtocol = Nothing
+    , _ccAccessToken = Nothing
+    , _ccUploadType = Nothing
+    , _ccPayload = pCcPayload_
+    , _ccCallback = Nothing
+    }
+
+
+-- | V1 error format.
+ccXgafv :: Lens' CatalogsCreate (Maybe Xgafv)
+ccXgafv = lens _ccXgafv (\ s a -> s{_ccXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ccUploadProtocol :: Lens' CatalogsCreate (Maybe Text)
+ccUploadProtocol
+  = lens _ccUploadProtocol
+      (\ s a -> s{_ccUploadProtocol = a})
+
+-- | OAuth access token.
+ccAccessToken :: Lens' CatalogsCreate (Maybe Text)
+ccAccessToken
+  = lens _ccAccessToken
+      (\ s a -> s{_ccAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ccUploadType :: Lens' CatalogsCreate (Maybe Text)
+ccUploadType
+  = lens _ccUploadType (\ s a -> s{_ccUploadType = a})
+
+-- | Multipart request metadata.
+ccPayload :: Lens' CatalogsCreate GoogleCloudPrivatecatalogproducerV1beta1Catalog
+ccPayload
+  = lens _ccPayload (\ s a -> s{_ccPayload = a})
+
+-- | JSONP
+ccCallback :: Lens' CatalogsCreate (Maybe Text)
+ccCallback
+  = lens _ccCallback (\ s a -> s{_ccCallback = a})
+
+instance GoogleRequest CatalogsCreate where
+        type Rs CatalogsCreate = GoogleLongrunningOperation
+        type Scopes CatalogsCreate =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsCreate'{..}
+          = go _ccXgafv _ccUploadProtocol _ccAccessToken
+              _ccUploadType
+              _ccCallback
+              (Just AltJSON)
+              _ccPayload
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient (Proxy :: Proxy CatalogsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Delete.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Delete.hs
@@ -0,0 +1,167 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.Delete
+-- 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)
+--
+-- Soft deletes an existing Catalog and all resources under it. The catalog
+-- can only be deleted if there is no associations under it or
+-- DeleteCatalogRequest.force is true. The delete operation can be
+-- recovered by the PrivateCatalogProducer.UndeleteCatalog method.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.delete@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Delete
+    (
+    -- * REST Resource
+      CatalogsDeleteResource
+
+    -- * Creating a Request
+    , catalogsDelete
+    , CatalogsDelete
+
+    -- * Request Lenses
+    , cdXgafv
+    , cdUploadProtocol
+    , cdForce
+    , cdAccessToken
+    , cdUploadType
+    , cdName
+    , cdCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.delete@ method which the
+-- 'CatalogsDelete' request conforms to.
+type CatalogsDeleteResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "force" Bool :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       Delete '[JSON]
+                         GoogleCloudPrivatecatalogproducerV1beta1Catalog
+
+-- | Soft deletes an existing Catalog and all resources under it. The catalog
+-- can only be deleted if there is no associations under it or
+-- DeleteCatalogRequest.force is true. The delete operation can be
+-- recovered by the PrivateCatalogProducer.UndeleteCatalog method.
+--
+-- /See:/ 'catalogsDelete' smart constructor.
+data CatalogsDelete =
+  CatalogsDelete'
+    { _cdXgafv          :: !(Maybe Xgafv)
+    , _cdUploadProtocol :: !(Maybe Text)
+    , _cdForce          :: !(Maybe Bool)
+    , _cdAccessToken    :: !(Maybe Text)
+    , _cdUploadType     :: !(Maybe Text)
+    , _cdName           :: !Text
+    , _cdCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdXgafv'
+--
+-- * 'cdUploadProtocol'
+--
+-- * 'cdForce'
+--
+-- * 'cdAccessToken'
+--
+-- * 'cdUploadType'
+--
+-- * 'cdName'
+--
+-- * 'cdCallback'
+catalogsDelete
+    :: Text -- ^ 'cdName'
+    -> CatalogsDelete
+catalogsDelete pCdName_ =
+  CatalogsDelete'
+    { _cdXgafv = Nothing
+    , _cdUploadProtocol = Nothing
+    , _cdForce = Nothing
+    , _cdAccessToken = Nothing
+    , _cdUploadType = Nothing
+    , _cdName = pCdName_
+    , _cdCallback = Nothing
+    }
+
+
+-- | V1 error format.
+cdXgafv :: Lens' CatalogsDelete (Maybe Xgafv)
+cdXgafv = lens _cdXgafv (\ s a -> s{_cdXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cdUploadProtocol :: Lens' CatalogsDelete (Maybe Text)
+cdUploadProtocol
+  = lens _cdUploadProtocol
+      (\ s a -> s{_cdUploadProtocol = a})
+
+-- | Forces deletion of the \`Catalog\` and its \`Association\` resources. If
+-- the \`Catalog\` is still associated with other resources and force is
+-- not set to true, then the operation fails.
+cdForce :: Lens' CatalogsDelete (Maybe Bool)
+cdForce = lens _cdForce (\ s a -> s{_cdForce = a})
+
+-- | OAuth access token.
+cdAccessToken :: Lens' CatalogsDelete (Maybe Text)
+cdAccessToken
+  = lens _cdAccessToken
+      (\ s a -> s{_cdAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cdUploadType :: Lens' CatalogsDelete (Maybe Text)
+cdUploadType
+  = lens _cdUploadType (\ s a -> s{_cdUploadType = a})
+
+-- | The resource name of the catalog.
+cdName :: Lens' CatalogsDelete Text
+cdName = lens _cdName (\ s a -> s{_cdName = a})
+
+-- | JSONP
+cdCallback :: Lens' CatalogsDelete (Maybe Text)
+cdCallback
+  = lens _cdCallback (\ s a -> s{_cdCallback = a})
+
+instance GoogleRequest CatalogsDelete where
+        type Rs CatalogsDelete =
+             GoogleCloudPrivatecatalogproducerV1beta1Catalog
+        type Scopes CatalogsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsDelete'{..}
+          = go _cdName _cdXgafv _cdUploadProtocol _cdForce
+              _cdAccessToken
+              _cdUploadType
+              _cdCallback
+              (Just AltJSON)
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient (Proxy :: Proxy CatalogsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Get.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/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.CloudPrivateCatalogProducer.Catalogs.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)
+--
+-- Returns the requested Catalog resource.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.get@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Get
+    (
+    -- * REST Resource
+      CatalogsGetResource
+
+    -- * Creating a Request
+    , catalogsGet
+    , CatalogsGet
+
+    -- * Request Lenses
+    , cgXgafv
+    , cgUploadProtocol
+    , cgAccessToken
+    , cgUploadType
+    , cgName
+    , cgCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.get@ method which the
+-- 'CatalogsGet' request conforms to.
+type CatalogsGetResource =
+     "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]
+                       GoogleCloudPrivatecatalogproducerV1beta1Catalog
+
+-- | Returns the requested Catalog resource.
+--
+-- /See:/ 'catalogsGet' smart constructor.
+data CatalogsGet =
+  CatalogsGet'
+    { _cgXgafv          :: !(Maybe Xgafv)
+    , _cgUploadProtocol :: !(Maybe Text)
+    , _cgAccessToken    :: !(Maybe Text)
+    , _cgUploadType     :: !(Maybe Text)
+    , _cgName           :: !Text
+    , _cgCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgXgafv'
+--
+-- * 'cgUploadProtocol'
+--
+-- * 'cgAccessToken'
+--
+-- * 'cgUploadType'
+--
+-- * 'cgName'
+--
+-- * 'cgCallback'
+catalogsGet
+    :: Text -- ^ 'cgName'
+    -> CatalogsGet
+catalogsGet pCgName_ =
+  CatalogsGet'
+    { _cgXgafv = Nothing
+    , _cgUploadProtocol = Nothing
+    , _cgAccessToken = Nothing
+    , _cgUploadType = Nothing
+    , _cgName = pCgName_
+    , _cgCallback = Nothing
+    }
+
+
+-- | V1 error format.
+cgXgafv :: Lens' CatalogsGet (Maybe Xgafv)
+cgXgafv = lens _cgXgafv (\ s a -> s{_cgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cgUploadProtocol :: Lens' CatalogsGet (Maybe Text)
+cgUploadProtocol
+  = lens _cgUploadProtocol
+      (\ s a -> s{_cgUploadProtocol = a})
+
+-- | OAuth access token.
+cgAccessToken :: Lens' CatalogsGet (Maybe Text)
+cgAccessToken
+  = lens _cgAccessToken
+      (\ s a -> s{_cgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cgUploadType :: Lens' CatalogsGet (Maybe Text)
+cgUploadType
+  = lens _cgUploadType (\ s a -> s{_cgUploadType = a})
+
+-- | The resource name of the catalog.
+cgName :: Lens' CatalogsGet Text
+cgName = lens _cgName (\ s a -> s{_cgName = a})
+
+-- | JSONP
+cgCallback :: Lens' CatalogsGet (Maybe Text)
+cgCallback
+  = lens _cgCallback (\ s a -> s{_cgCallback = a})
+
+instance GoogleRequest CatalogsGet where
+        type Rs CatalogsGet =
+             GoogleCloudPrivatecatalogproducerV1beta1Catalog
+        type Scopes CatalogsGet =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsGet'{..}
+          = go _cgName _cgXgafv _cgUploadProtocol
+              _cgAccessToken
+              _cgUploadType
+              _cgCallback
+              (Just AltJSON)
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient (Proxy :: Proxy CatalogsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/GetIAMPolicy.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/GetIAMPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/GetIAMPolicy.hs
@@ -0,0 +1,152 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.GetIAMPolicy
+-- 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 IAM policy for the specified Catalog.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.getIamPolicy@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.GetIAMPolicy
+    (
+    -- * REST Resource
+      CatalogsGetIAMPolicyResource
+
+    -- * Creating a Request
+    , catalogsGetIAMPolicy
+    , CatalogsGetIAMPolicy
+
+    -- * Request Lenses
+    , cgipXgafv
+    , cgipUploadProtocol
+    , cgipAccessToken
+    , cgipUploadType
+    , cgipResource
+    , cgipCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.getIamPolicy@ method which the
+-- 'CatalogsGetIAMPolicy' request conforms to.
+type CatalogsGetIAMPolicyResource =
+     "v1beta1" :>
+       CaptureMode "resource" "getIamPolicy" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     Get '[JSON] GoogleIAMV1Policy
+
+-- | Gets IAM policy for the specified Catalog.
+--
+-- /See:/ 'catalogsGetIAMPolicy' smart constructor.
+data CatalogsGetIAMPolicy =
+  CatalogsGetIAMPolicy'
+    { _cgipXgafv          :: !(Maybe Xgafv)
+    , _cgipUploadProtocol :: !(Maybe Text)
+    , _cgipAccessToken    :: !(Maybe Text)
+    , _cgipUploadType     :: !(Maybe Text)
+    , _cgipResource       :: !Text
+    , _cgipCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsGetIAMPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgipXgafv'
+--
+-- * 'cgipUploadProtocol'
+--
+-- * 'cgipAccessToken'
+--
+-- * 'cgipUploadType'
+--
+-- * 'cgipResource'
+--
+-- * 'cgipCallback'
+catalogsGetIAMPolicy
+    :: Text -- ^ 'cgipResource'
+    -> CatalogsGetIAMPolicy
+catalogsGetIAMPolicy pCgipResource_ =
+  CatalogsGetIAMPolicy'
+    { _cgipXgafv = Nothing
+    , _cgipUploadProtocol = Nothing
+    , _cgipAccessToken = Nothing
+    , _cgipUploadType = Nothing
+    , _cgipResource = pCgipResource_
+    , _cgipCallback = Nothing
+    }
+
+
+-- | V1 error format.
+cgipXgafv :: Lens' CatalogsGetIAMPolicy (Maybe Xgafv)
+cgipXgafv
+  = lens _cgipXgafv (\ s a -> s{_cgipXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cgipUploadProtocol :: Lens' CatalogsGetIAMPolicy (Maybe Text)
+cgipUploadProtocol
+  = lens _cgipUploadProtocol
+      (\ s a -> s{_cgipUploadProtocol = a})
+
+-- | OAuth access token.
+cgipAccessToken :: Lens' CatalogsGetIAMPolicy (Maybe Text)
+cgipAccessToken
+  = lens _cgipAccessToken
+      (\ s a -> s{_cgipAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cgipUploadType :: Lens' CatalogsGetIAMPolicy (Maybe Text)
+cgipUploadType
+  = lens _cgipUploadType
+      (\ s a -> s{_cgipUploadType = a})
+
+-- | REQUIRED: The resource for which the policy is being requested. See the
+-- operation documentation for the appropriate value for this field.
+cgipResource :: Lens' CatalogsGetIAMPolicy Text
+cgipResource
+  = lens _cgipResource (\ s a -> s{_cgipResource = a})
+
+-- | JSONP
+cgipCallback :: Lens' CatalogsGetIAMPolicy (Maybe Text)
+cgipCallback
+  = lens _cgipCallback (\ s a -> s{_cgipCallback = a})
+
+instance GoogleRequest CatalogsGetIAMPolicy where
+        type Rs CatalogsGetIAMPolicy = GoogleIAMV1Policy
+        type Scopes CatalogsGetIAMPolicy =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsGetIAMPolicy'{..}
+          = go _cgipResource _cgipXgafv _cgipUploadProtocol
+              _cgipAccessToken
+              _cgipUploadType
+              _cgipCallback
+              (Just AltJSON)
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CatalogsGetIAMPolicyResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/List.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/List.hs
@@ -0,0 +1,178 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.List
+-- 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)
+--
+-- Lists Catalog resources that the producer has access to, within the
+-- scope of the parent resource.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.list@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.List
+    (
+    -- * REST Resource
+      CatalogsListResource
+
+    -- * Creating a Request
+    , catalogsList
+    , CatalogsList
+
+    -- * Request Lenses
+    , clParent
+    , clXgafv
+    , clUploadProtocol
+    , clAccessToken
+    , clUploadType
+    , clPageToken
+    , clPageSize
+    , clCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.list@ method which the
+-- 'CatalogsList' request conforms to.
+type CatalogsListResource =
+     "v1beta1" :>
+       "catalogs" :>
+         QueryParam "parent" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "pageSize" (Textual Int32) :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON]
+                             GoogleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse
+
+-- | Lists Catalog resources that the producer has access to, within the
+-- scope of the parent resource.
+--
+-- /See:/ 'catalogsList' smart constructor.
+data CatalogsList =
+  CatalogsList'
+    { _clParent         :: !(Maybe Text)
+    , _clXgafv          :: !(Maybe Xgafv)
+    , _clUploadProtocol :: !(Maybe Text)
+    , _clAccessToken    :: !(Maybe Text)
+    , _clUploadType     :: !(Maybe Text)
+    , _clPageToken      :: !(Maybe Text)
+    , _clPageSize       :: !(Maybe (Textual Int32))
+    , _clCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clParent'
+--
+-- * 'clXgafv'
+--
+-- * 'clUploadProtocol'
+--
+-- * 'clAccessToken'
+--
+-- * 'clUploadType'
+--
+-- * 'clPageToken'
+--
+-- * 'clPageSize'
+--
+-- * 'clCallback'
+catalogsList
+    :: CatalogsList
+catalogsList =
+  CatalogsList'
+    { _clParent = Nothing
+    , _clXgafv = Nothing
+    , _clUploadProtocol = Nothing
+    , _clAccessToken = Nothing
+    , _clUploadType = Nothing
+    , _clPageToken = Nothing
+    , _clPageSize = Nothing
+    , _clCallback = Nothing
+    }
+
+
+-- | The resource name of the parent resource.
+clParent :: Lens' CatalogsList (Maybe Text)
+clParent = lens _clParent (\ s a -> s{_clParent = a})
+
+-- | V1 error format.
+clXgafv :: Lens' CatalogsList (Maybe Xgafv)
+clXgafv = lens _clXgafv (\ s a -> s{_clXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+clUploadProtocol :: Lens' CatalogsList (Maybe Text)
+clUploadProtocol
+  = lens _clUploadProtocol
+      (\ s a -> s{_clUploadProtocol = a})
+
+-- | OAuth access token.
+clAccessToken :: Lens' CatalogsList (Maybe Text)
+clAccessToken
+  = lens _clAccessToken
+      (\ s a -> s{_clAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+clUploadType :: Lens' CatalogsList (Maybe Text)
+clUploadType
+  = lens _clUploadType (\ s a -> s{_clUploadType = a})
+
+-- | A pagination token returned from a previous call to ListCatalogs that
+-- indicates where this listing should continue from. This field is
+-- optional.
+clPageToken :: Lens' CatalogsList (Maybe Text)
+clPageToken
+  = lens _clPageToken (\ s a -> s{_clPageToken = a})
+
+-- | The maximum number of catalogs to return.
+clPageSize :: Lens' CatalogsList (Maybe Int32)
+clPageSize
+  = lens _clPageSize (\ s a -> s{_clPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+clCallback :: Lens' CatalogsList (Maybe Text)
+clCallback
+  = lens _clCallback (\ s a -> s{_clCallback = a})
+
+instance GoogleRequest CatalogsList where
+        type Rs CatalogsList =
+             GoogleCloudPrivatecatalogproducerV1beta1ListCatalogsResponse
+        type Scopes CatalogsList =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsList'{..}
+          = go _clParent _clXgafv _clUploadProtocol
+              _clAccessToken
+              _clUploadType
+              _clPageToken
+              _clPageSize
+              _clCallback
+              (Just AltJSON)
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient (Proxy :: Proxy CatalogsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Patch.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Patch.hs
@@ -0,0 +1,177 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.Patch
+-- 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)
+--
+-- Updates a specific Catalog resource.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.patch@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Patch
+    (
+    -- * REST Resource
+      CatalogsPatchResource
+
+    -- * Creating a Request
+    , catalogsPatch
+    , CatalogsPatch
+
+    -- * Request Lenses
+    , cpXgafv
+    , cpUploadProtocol
+    , cpUpdateMask
+    , cpAccessToken
+    , cpUploadType
+    , cpPayload
+    , cpName
+    , cpCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.patch@ method which the
+-- 'CatalogsPatch' request conforms to.
+type CatalogsPatchResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "updateMask" GFieldMask :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON]
+                         GoogleCloudPrivatecatalogproducerV1beta1Catalog
+                         :>
+                         Patch '[JSON]
+                           GoogleCloudPrivatecatalogproducerV1beta1Catalog
+
+-- | Updates a specific Catalog resource.
+--
+-- /See:/ 'catalogsPatch' smart constructor.
+data CatalogsPatch =
+  CatalogsPatch'
+    { _cpXgafv          :: !(Maybe Xgafv)
+    , _cpUploadProtocol :: !(Maybe Text)
+    , _cpUpdateMask     :: !(Maybe GFieldMask)
+    , _cpAccessToken    :: !(Maybe Text)
+    , _cpUploadType     :: !(Maybe Text)
+    , _cpPayload        :: !GoogleCloudPrivatecatalogproducerV1beta1Catalog
+    , _cpName           :: !Text
+    , _cpCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpXgafv'
+--
+-- * 'cpUploadProtocol'
+--
+-- * 'cpUpdateMask'
+--
+-- * 'cpAccessToken'
+--
+-- * 'cpUploadType'
+--
+-- * 'cpPayload'
+--
+-- * 'cpName'
+--
+-- * 'cpCallback'
+catalogsPatch
+    :: GoogleCloudPrivatecatalogproducerV1beta1Catalog -- ^ 'cpPayload'
+    -> Text -- ^ 'cpName'
+    -> CatalogsPatch
+catalogsPatch pCpPayload_ pCpName_ =
+  CatalogsPatch'
+    { _cpXgafv = Nothing
+    , _cpUploadProtocol = Nothing
+    , _cpUpdateMask = Nothing
+    , _cpAccessToken = Nothing
+    , _cpUploadType = Nothing
+    , _cpPayload = pCpPayload_
+    , _cpName = pCpName_
+    , _cpCallback = Nothing
+    }
+
+
+-- | V1 error format.
+cpXgafv :: Lens' CatalogsPatch (Maybe Xgafv)
+cpXgafv = lens _cpXgafv (\ s a -> s{_cpXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cpUploadProtocol :: Lens' CatalogsPatch (Maybe Text)
+cpUploadProtocol
+  = lens _cpUploadProtocol
+      (\ s a -> s{_cpUploadProtocol = a})
+
+-- | Field mask that controls which fields of the catalog should be updated.
+cpUpdateMask :: Lens' CatalogsPatch (Maybe GFieldMask)
+cpUpdateMask
+  = lens _cpUpdateMask (\ s a -> s{_cpUpdateMask = a})
+
+-- | OAuth access token.
+cpAccessToken :: Lens' CatalogsPatch (Maybe Text)
+cpAccessToken
+  = lens _cpAccessToken
+      (\ s a -> s{_cpAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cpUploadType :: Lens' CatalogsPatch (Maybe Text)
+cpUploadType
+  = lens _cpUploadType (\ s a -> s{_cpUploadType = a})
+
+-- | Multipart request metadata.
+cpPayload :: Lens' CatalogsPatch GoogleCloudPrivatecatalogproducerV1beta1Catalog
+cpPayload
+  = lens _cpPayload (\ s a -> s{_cpPayload = a})
+
+-- | Output only. The resource name of the catalog, in the format
+-- \`catalogs\/{catalog_id}\'. A unique identifier for the catalog, which
+-- is generated by catalog service.
+cpName :: Lens' CatalogsPatch Text
+cpName = lens _cpName (\ s a -> s{_cpName = a})
+
+-- | JSONP
+cpCallback :: Lens' CatalogsPatch (Maybe Text)
+cpCallback
+  = lens _cpCallback (\ s a -> s{_cpCallback = a})
+
+instance GoogleRequest CatalogsPatch where
+        type Rs CatalogsPatch =
+             GoogleCloudPrivatecatalogproducerV1beta1Catalog
+        type Scopes CatalogsPatch =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsPatch'{..}
+          = go _cpName _cpXgafv _cpUploadProtocol _cpUpdateMask
+              _cpAccessToken
+              _cpUploadType
+              _cpCallback
+              (Just AltJSON)
+              _cpPayload
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient (Proxy :: Proxy CatalogsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Copy.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Copy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Copy.hs
@@ -0,0 +1,160 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.Products.Copy
+-- 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)
+--
+-- Copies a Product under another Catalog.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.products.copy@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Copy
+    (
+    -- * REST Resource
+      CatalogsProductsCopyResource
+
+    -- * Creating a Request
+    , catalogsProductsCopy
+    , CatalogsProductsCopy
+
+    -- * Request Lenses
+    , cXgafv
+    , cUploadProtocol
+    , cAccessToken
+    , cUploadType
+    , cPayload
+    , cName
+    , cCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.products.copy@ method which the
+-- 'CatalogsProductsCopy' request conforms to.
+type CatalogsProductsCopyResource =
+     "v1beta1" :>
+       CaptureMode "name" "copy" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON]
+                       GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest
+                       :> Post '[JSON] GoogleLongrunningOperation
+
+-- | Copies a Product under another Catalog.
+--
+-- /See:/ 'catalogsProductsCopy' smart constructor.
+data CatalogsProductsCopy =
+  CatalogsProductsCopy'
+    { _cXgafv          :: !(Maybe Xgafv)
+    , _cUploadProtocol :: !(Maybe Text)
+    , _cAccessToken    :: !(Maybe Text)
+    , _cUploadType     :: !(Maybe Text)
+    , _cPayload        :: !GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest
+    , _cName           :: !Text
+    , _cCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsProductsCopy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cXgafv'
+--
+-- * 'cUploadProtocol'
+--
+-- * 'cAccessToken'
+--
+-- * 'cUploadType'
+--
+-- * 'cPayload'
+--
+-- * 'cName'
+--
+-- * 'cCallback'
+catalogsProductsCopy
+    :: GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest -- ^ 'cPayload'
+    -> Text -- ^ 'cName'
+    -> CatalogsProductsCopy
+catalogsProductsCopy pCPayload_ pCName_ =
+  CatalogsProductsCopy'
+    { _cXgafv = Nothing
+    , _cUploadProtocol = Nothing
+    , _cAccessToken = Nothing
+    , _cUploadType = Nothing
+    , _cPayload = pCPayload_
+    , _cName = pCName_
+    , _cCallback = Nothing
+    }
+
+
+-- | V1 error format.
+cXgafv :: Lens' CatalogsProductsCopy (Maybe Xgafv)
+cXgafv = lens _cXgafv (\ s a -> s{_cXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cUploadProtocol :: Lens' CatalogsProductsCopy (Maybe Text)
+cUploadProtocol
+  = lens _cUploadProtocol
+      (\ s a -> s{_cUploadProtocol = a})
+
+-- | OAuth access token.
+cAccessToken :: Lens' CatalogsProductsCopy (Maybe Text)
+cAccessToken
+  = lens _cAccessToken (\ s a -> s{_cAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cUploadType :: Lens' CatalogsProductsCopy (Maybe Text)
+cUploadType
+  = lens _cUploadType (\ s a -> s{_cUploadType = a})
+
+-- | Multipart request metadata.
+cPayload :: Lens' CatalogsProductsCopy GoogleCloudPrivatecatalogproducerV1beta1CopyProductRequest
+cPayload = lens _cPayload (\ s a -> s{_cPayload = a})
+
+-- | The resource name of the current product that is copied from.
+cName :: Lens' CatalogsProductsCopy Text
+cName = lens _cName (\ s a -> s{_cName = a})
+
+-- | JSONP
+cCallback :: Lens' CatalogsProductsCopy (Maybe Text)
+cCallback
+  = lens _cCallback (\ s a -> s{_cCallback = a})
+
+instance GoogleRequest CatalogsProductsCopy where
+        type Rs CatalogsProductsCopy =
+             GoogleLongrunningOperation
+        type Scopes CatalogsProductsCopy =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsProductsCopy'{..}
+          = go _cName _cXgafv _cUploadProtocol _cAccessToken
+              _cUploadType
+              _cCallback
+              (Just AltJSON)
+              _cPayload
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CatalogsProductsCopyResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Create.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Create.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.CloudPrivateCatalogProducer.Catalogs.Products.Create
+-- 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)
+--
+-- Creates a Product instance under a given Catalog.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.products.create@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Create
+    (
+    -- * REST Resource
+      CatalogsProductsCreateResource
+
+    -- * Creating a Request
+    , catalogsProductsCreate
+    , CatalogsProductsCreate
+
+    -- * Request Lenses
+    , cpcParent
+    , cpcXgafv
+    , cpcUploadProtocol
+    , cpcAccessToken
+    , cpcUploadType
+    , cpcPayload
+    , cpcCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.products.create@ method which the
+-- 'CatalogsProductsCreate' request conforms to.
+type CatalogsProductsCreateResource =
+     "v1beta1" :>
+       Capture "parent" Text :>
+         "products" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON]
+                         GoogleCloudPrivatecatalogproducerV1beta1Product
+                         :>
+                         Post '[JSON]
+                           GoogleCloudPrivatecatalogproducerV1beta1Product
+
+-- | Creates a Product instance under a given Catalog.
+--
+-- /See:/ 'catalogsProductsCreate' smart constructor.
+data CatalogsProductsCreate =
+  CatalogsProductsCreate'
+    { _cpcParent         :: !Text
+    , _cpcXgafv          :: !(Maybe Xgafv)
+    , _cpcUploadProtocol :: !(Maybe Text)
+    , _cpcAccessToken    :: !(Maybe Text)
+    , _cpcUploadType     :: !(Maybe Text)
+    , _cpcPayload        :: !GoogleCloudPrivatecatalogproducerV1beta1Product
+    , _cpcCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsProductsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpcParent'
+--
+-- * 'cpcXgafv'
+--
+-- * 'cpcUploadProtocol'
+--
+-- * 'cpcAccessToken'
+--
+-- * 'cpcUploadType'
+--
+-- * 'cpcPayload'
+--
+-- * 'cpcCallback'
+catalogsProductsCreate
+    :: Text -- ^ 'cpcParent'
+    -> GoogleCloudPrivatecatalogproducerV1beta1Product -- ^ 'cpcPayload'
+    -> CatalogsProductsCreate
+catalogsProductsCreate pCpcParent_ pCpcPayload_ =
+  CatalogsProductsCreate'
+    { _cpcParent = pCpcParent_
+    , _cpcXgafv = Nothing
+    , _cpcUploadProtocol = Nothing
+    , _cpcAccessToken = Nothing
+    , _cpcUploadType = Nothing
+    , _cpcPayload = pCpcPayload_
+    , _cpcCallback = Nothing
+    }
+
+
+-- | The catalog name of the new product\'s parent.
+cpcParent :: Lens' CatalogsProductsCreate Text
+cpcParent
+  = lens _cpcParent (\ s a -> s{_cpcParent = a})
+
+-- | V1 error format.
+cpcXgafv :: Lens' CatalogsProductsCreate (Maybe Xgafv)
+cpcXgafv = lens _cpcXgafv (\ s a -> s{_cpcXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cpcUploadProtocol :: Lens' CatalogsProductsCreate (Maybe Text)
+cpcUploadProtocol
+  = lens _cpcUploadProtocol
+      (\ s a -> s{_cpcUploadProtocol = a})
+
+-- | OAuth access token.
+cpcAccessToken :: Lens' CatalogsProductsCreate (Maybe Text)
+cpcAccessToken
+  = lens _cpcAccessToken
+      (\ s a -> s{_cpcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cpcUploadType :: Lens' CatalogsProductsCreate (Maybe Text)
+cpcUploadType
+  = lens _cpcUploadType
+      (\ s a -> s{_cpcUploadType = a})
+
+-- | Multipart request metadata.
+cpcPayload :: Lens' CatalogsProductsCreate GoogleCloudPrivatecatalogproducerV1beta1Product
+cpcPayload
+  = lens _cpcPayload (\ s a -> s{_cpcPayload = a})
+
+-- | JSONP
+cpcCallback :: Lens' CatalogsProductsCreate (Maybe Text)
+cpcCallback
+  = lens _cpcCallback (\ s a -> s{_cpcCallback = a})
+
+instance GoogleRequest CatalogsProductsCreate where
+        type Rs CatalogsProductsCreate =
+             GoogleCloudPrivatecatalogproducerV1beta1Product
+        type Scopes CatalogsProductsCreate =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsProductsCreate'{..}
+          = go _cpcParent _cpcXgafv _cpcUploadProtocol
+              _cpcAccessToken
+              _cpcUploadType
+              _cpcCallback
+              (Just AltJSON)
+              _cpcPayload
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CatalogsProductsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Delete.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Delete.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.CloudPrivateCatalogProducer.Catalogs.Products.Delete
+-- 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)
+--
+-- Hard deletes a Product.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.products.delete@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Delete
+    (
+    -- * REST Resource
+      CatalogsProductsDeleteResource
+
+    -- * Creating a Request
+    , catalogsProductsDelete
+    , CatalogsProductsDelete
+
+    -- * Request Lenses
+    , cpdXgafv
+    , cpdUploadProtocol
+    , cpdAccessToken
+    , cpdUploadType
+    , cpdName
+    , cpdCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.products.delete@ method which the
+-- 'CatalogsProductsDelete' request conforms to.
+type CatalogsProductsDeleteResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     Delete '[JSON] GoogleProtobufEmpty
+
+-- | Hard deletes a Product.
+--
+-- /See:/ 'catalogsProductsDelete' smart constructor.
+data CatalogsProductsDelete =
+  CatalogsProductsDelete'
+    { _cpdXgafv          :: !(Maybe Xgafv)
+    , _cpdUploadProtocol :: !(Maybe Text)
+    , _cpdAccessToken    :: !(Maybe Text)
+    , _cpdUploadType     :: !(Maybe Text)
+    , _cpdName           :: !Text
+    , _cpdCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsProductsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpdXgafv'
+--
+-- * 'cpdUploadProtocol'
+--
+-- * 'cpdAccessToken'
+--
+-- * 'cpdUploadType'
+--
+-- * 'cpdName'
+--
+-- * 'cpdCallback'
+catalogsProductsDelete
+    :: Text -- ^ 'cpdName'
+    -> CatalogsProductsDelete
+catalogsProductsDelete pCpdName_ =
+  CatalogsProductsDelete'
+    { _cpdXgafv = Nothing
+    , _cpdUploadProtocol = Nothing
+    , _cpdAccessToken = Nothing
+    , _cpdUploadType = Nothing
+    , _cpdName = pCpdName_
+    , _cpdCallback = Nothing
+    }
+
+
+-- | V1 error format.
+cpdXgafv :: Lens' CatalogsProductsDelete (Maybe Xgafv)
+cpdXgafv = lens _cpdXgafv (\ s a -> s{_cpdXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cpdUploadProtocol :: Lens' CatalogsProductsDelete (Maybe Text)
+cpdUploadProtocol
+  = lens _cpdUploadProtocol
+      (\ s a -> s{_cpdUploadProtocol = a})
+
+-- | OAuth access token.
+cpdAccessToken :: Lens' CatalogsProductsDelete (Maybe Text)
+cpdAccessToken
+  = lens _cpdAccessToken
+      (\ s a -> s{_cpdAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cpdUploadType :: Lens' CatalogsProductsDelete (Maybe Text)
+cpdUploadType
+  = lens _cpdUploadType
+      (\ s a -> s{_cpdUploadType = a})
+
+-- | The resource name of the product.
+cpdName :: Lens' CatalogsProductsDelete Text
+cpdName = lens _cpdName (\ s a -> s{_cpdName = a})
+
+-- | JSONP
+cpdCallback :: Lens' CatalogsProductsDelete (Maybe Text)
+cpdCallback
+  = lens _cpdCallback (\ s a -> s{_cpdCallback = a})
+
+instance GoogleRequest CatalogsProductsDelete where
+        type Rs CatalogsProductsDelete = GoogleProtobufEmpty
+        type Scopes CatalogsProductsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsProductsDelete'{..}
+          = go _cpdName _cpdXgafv _cpdUploadProtocol
+              _cpdAccessToken
+              _cpdUploadType
+              _cpdCallback
+              (Just AltJSON)
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CatalogsProductsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Get.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Get.hs
@@ -0,0 +1,151 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.Products.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)
+--
+-- Returns the requested Product resource.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.products.get@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Get
+    (
+    -- * REST Resource
+      CatalogsProductsGetResource
+
+    -- * Creating a Request
+    , catalogsProductsGet
+    , CatalogsProductsGet
+
+    -- * Request Lenses
+    , cpgXgafv
+    , cpgUploadProtocol
+    , cpgAccessToken
+    , cpgUploadType
+    , cpgName
+    , cpgCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.products.get@ method which the
+-- 'CatalogsProductsGet' request conforms to.
+type CatalogsProductsGetResource =
+     "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]
+                       GoogleCloudPrivatecatalogproducerV1beta1Product
+
+-- | Returns the requested Product resource.
+--
+-- /See:/ 'catalogsProductsGet' smart constructor.
+data CatalogsProductsGet =
+  CatalogsProductsGet'
+    { _cpgXgafv          :: !(Maybe Xgafv)
+    , _cpgUploadProtocol :: !(Maybe Text)
+    , _cpgAccessToken    :: !(Maybe Text)
+    , _cpgUploadType     :: !(Maybe Text)
+    , _cpgName           :: !Text
+    , _cpgCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsProductsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpgXgafv'
+--
+-- * 'cpgUploadProtocol'
+--
+-- * 'cpgAccessToken'
+--
+-- * 'cpgUploadType'
+--
+-- * 'cpgName'
+--
+-- * 'cpgCallback'
+catalogsProductsGet
+    :: Text -- ^ 'cpgName'
+    -> CatalogsProductsGet
+catalogsProductsGet pCpgName_ =
+  CatalogsProductsGet'
+    { _cpgXgafv = Nothing
+    , _cpgUploadProtocol = Nothing
+    , _cpgAccessToken = Nothing
+    , _cpgUploadType = Nothing
+    , _cpgName = pCpgName_
+    , _cpgCallback = Nothing
+    }
+
+
+-- | V1 error format.
+cpgXgafv :: Lens' CatalogsProductsGet (Maybe Xgafv)
+cpgXgafv = lens _cpgXgafv (\ s a -> s{_cpgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cpgUploadProtocol :: Lens' CatalogsProductsGet (Maybe Text)
+cpgUploadProtocol
+  = lens _cpgUploadProtocol
+      (\ s a -> s{_cpgUploadProtocol = a})
+
+-- | OAuth access token.
+cpgAccessToken :: Lens' CatalogsProductsGet (Maybe Text)
+cpgAccessToken
+  = lens _cpgAccessToken
+      (\ s a -> s{_cpgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cpgUploadType :: Lens' CatalogsProductsGet (Maybe Text)
+cpgUploadType
+  = lens _cpgUploadType
+      (\ s a -> s{_cpgUploadType = a})
+
+-- | The resource name of the product.
+cpgName :: Lens' CatalogsProductsGet Text
+cpgName = lens _cpgName (\ s a -> s{_cpgName = a})
+
+-- | JSONP
+cpgCallback :: Lens' CatalogsProductsGet (Maybe Text)
+cpgCallback
+  = lens _cpgCallback (\ s a -> s{_cpgCallback = a})
+
+instance GoogleRequest CatalogsProductsGet where
+        type Rs CatalogsProductsGet =
+             GoogleCloudPrivatecatalogproducerV1beta1Product
+        type Scopes CatalogsProductsGet =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsProductsGet'{..}
+          = go _cpgName _cpgXgafv _cpgUploadProtocol
+              _cpgAccessToken
+              _cpgUploadType
+              _cpgCallback
+              (Just AltJSON)
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CatalogsProductsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Icons/Upload.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Icons/Upload.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Icons/Upload.hs
@@ -0,0 +1,176 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.Products.Icons.Upload
+-- 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)
+--
+-- Creates an Icon instance under a given Product. If Product only has a
+-- default icon, a new Icon instance is created and associated with the
+-- given Product. If Product already has a non-default icon, the action
+-- creates a new Icon instance, associates the newly created Icon with the
+-- given Product and deletes the old icon.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.products.icons.upload@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Icons.Upload
+    (
+    -- * REST Resource
+      CatalogsProductsIconsUploadResource
+
+    -- * Creating a Request
+    , catalogsProductsIconsUpload
+    , CatalogsProductsIconsUpload
+
+    -- * Request Lenses
+    , cpiuXgafv
+    , cpiuUploadProtocol
+    , cpiuAccessToken
+    , cpiuUploadType
+    , cpiuPayload
+    , cpiuProduct
+    , cpiuCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.products.icons.upload@ method which the
+-- 'CatalogsProductsIconsUpload' request conforms to.
+type CatalogsProductsIconsUploadResource =
+     "v1beta1" :>
+       Capture "product" Text :>
+         "icons:upload" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON]
+                         GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest
+                         :> Post '[JSON] GoogleProtobufEmpty
+
+-- | Creates an Icon instance under a given Product. If Product only has a
+-- default icon, a new Icon instance is created and associated with the
+-- given Product. If Product already has a non-default icon, the action
+-- creates a new Icon instance, associates the newly created Icon with the
+-- given Product and deletes the old icon.
+--
+-- /See:/ 'catalogsProductsIconsUpload' smart constructor.
+data CatalogsProductsIconsUpload =
+  CatalogsProductsIconsUpload'
+    { _cpiuXgafv          :: !(Maybe Xgafv)
+    , _cpiuUploadProtocol :: !(Maybe Text)
+    , _cpiuAccessToken    :: !(Maybe Text)
+    , _cpiuUploadType     :: !(Maybe Text)
+    , _cpiuPayload        :: !GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest
+    , _cpiuProduct        :: !Text
+    , _cpiuCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsProductsIconsUpload' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpiuXgafv'
+--
+-- * 'cpiuUploadProtocol'
+--
+-- * 'cpiuAccessToken'
+--
+-- * 'cpiuUploadType'
+--
+-- * 'cpiuPayload'
+--
+-- * 'cpiuProduct'
+--
+-- * 'cpiuCallback'
+catalogsProductsIconsUpload
+    :: GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest -- ^ 'cpiuPayload'
+    -> Text -- ^ 'cpiuProduct'
+    -> CatalogsProductsIconsUpload
+catalogsProductsIconsUpload pCpiuPayload_ pCpiuProduct_ =
+  CatalogsProductsIconsUpload'
+    { _cpiuXgafv = Nothing
+    , _cpiuUploadProtocol = Nothing
+    , _cpiuAccessToken = Nothing
+    , _cpiuUploadType = Nothing
+    , _cpiuPayload = pCpiuPayload_
+    , _cpiuProduct = pCpiuProduct_
+    , _cpiuCallback = Nothing
+    }
+
+
+-- | V1 error format.
+cpiuXgafv :: Lens' CatalogsProductsIconsUpload (Maybe Xgafv)
+cpiuXgafv
+  = lens _cpiuXgafv (\ s a -> s{_cpiuXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cpiuUploadProtocol :: Lens' CatalogsProductsIconsUpload (Maybe Text)
+cpiuUploadProtocol
+  = lens _cpiuUploadProtocol
+      (\ s a -> s{_cpiuUploadProtocol = a})
+
+-- | OAuth access token.
+cpiuAccessToken :: Lens' CatalogsProductsIconsUpload (Maybe Text)
+cpiuAccessToken
+  = lens _cpiuAccessToken
+      (\ s a -> s{_cpiuAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cpiuUploadType :: Lens' CatalogsProductsIconsUpload (Maybe Text)
+cpiuUploadType
+  = lens _cpiuUploadType
+      (\ s a -> s{_cpiuUploadType = a})
+
+-- | Multipart request metadata.
+cpiuPayload :: Lens' CatalogsProductsIconsUpload GoogleCloudPrivatecatalogproducerV1beta1UploadIconRequest
+cpiuPayload
+  = lens _cpiuPayload (\ s a -> s{_cpiuPayload = a})
+
+-- | The resource name of the product.
+cpiuProduct :: Lens' CatalogsProductsIconsUpload Text
+cpiuProduct
+  = lens _cpiuProduct (\ s a -> s{_cpiuProduct = a})
+
+-- | JSONP
+cpiuCallback :: Lens' CatalogsProductsIconsUpload (Maybe Text)
+cpiuCallback
+  = lens _cpiuCallback (\ s a -> s{_cpiuCallback = a})
+
+instance GoogleRequest CatalogsProductsIconsUpload
+         where
+        type Rs CatalogsProductsIconsUpload =
+             GoogleProtobufEmpty
+        type Scopes CatalogsProductsIconsUpload =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsProductsIconsUpload'{..}
+          = go _cpiuProduct _cpiuXgafv _cpiuUploadProtocol
+              _cpiuAccessToken
+              _cpiuUploadType
+              _cpiuCallback
+              (Just AltJSON)
+              _cpiuPayload
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CatalogsProductsIconsUploadResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/List.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/List.hs
@@ -0,0 +1,195 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.Products.List
+-- 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)
+--
+-- Lists Product resources that the producer has access to, within the
+-- scope of the parent catalog.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.products.list@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.List
+    (
+    -- * REST Resource
+      CatalogsProductsListResource
+
+    -- * Creating a Request
+    , catalogsProductsList
+    , CatalogsProductsList
+
+    -- * Request Lenses
+    , cplParent
+    , cplXgafv
+    , cplUploadProtocol
+    , cplAccessToken
+    , cplUploadType
+    , cplFilter
+    , cplPageToken
+    , cplPageSize
+    , cplCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.products.list@ method which the
+-- 'CatalogsProductsList' request conforms to.
+type CatalogsProductsListResource =
+     "v1beta1" :>
+       Capture "parent" Text :>
+         "products" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "filter" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "pageSize" (Textual Int32) :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON]
+                               GoogleCloudPrivatecatalogproducerV1beta1ListProductsResponse
+
+-- | Lists Product resources that the producer has access to, within the
+-- scope of the parent catalog.
+--
+-- /See:/ 'catalogsProductsList' smart constructor.
+data CatalogsProductsList =
+  CatalogsProductsList'
+    { _cplParent         :: !Text
+    , _cplXgafv          :: !(Maybe Xgafv)
+    , _cplUploadProtocol :: !(Maybe Text)
+    , _cplAccessToken    :: !(Maybe Text)
+    , _cplUploadType     :: !(Maybe Text)
+    , _cplFilter         :: !(Maybe Text)
+    , _cplPageToken      :: !(Maybe Text)
+    , _cplPageSize       :: !(Maybe (Textual Int32))
+    , _cplCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsProductsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cplParent'
+--
+-- * 'cplXgafv'
+--
+-- * 'cplUploadProtocol'
+--
+-- * 'cplAccessToken'
+--
+-- * 'cplUploadType'
+--
+-- * 'cplFilter'
+--
+-- * 'cplPageToken'
+--
+-- * 'cplPageSize'
+--
+-- * 'cplCallback'
+catalogsProductsList
+    :: Text -- ^ 'cplParent'
+    -> CatalogsProductsList
+catalogsProductsList pCplParent_ =
+  CatalogsProductsList'
+    { _cplParent = pCplParent_
+    , _cplXgafv = Nothing
+    , _cplUploadProtocol = Nothing
+    , _cplAccessToken = Nothing
+    , _cplUploadType = Nothing
+    , _cplFilter = Nothing
+    , _cplPageToken = Nothing
+    , _cplPageSize = Nothing
+    , _cplCallback = Nothing
+    }
+
+
+-- | The resource name of the parent resource.
+cplParent :: Lens' CatalogsProductsList Text
+cplParent
+  = lens _cplParent (\ s a -> s{_cplParent = a})
+
+-- | V1 error format.
+cplXgafv :: Lens' CatalogsProductsList (Maybe Xgafv)
+cplXgafv = lens _cplXgafv (\ s a -> s{_cplXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cplUploadProtocol :: Lens' CatalogsProductsList (Maybe Text)
+cplUploadProtocol
+  = lens _cplUploadProtocol
+      (\ s a -> s{_cplUploadProtocol = a})
+
+-- | OAuth access token.
+cplAccessToken :: Lens' CatalogsProductsList (Maybe Text)
+cplAccessToken
+  = lens _cplAccessToken
+      (\ s a -> s{_cplAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cplUploadType :: Lens' CatalogsProductsList (Maybe Text)
+cplUploadType
+  = lens _cplUploadType
+      (\ s a -> s{_cplUploadType = a})
+
+-- | A filter expression used to restrict the returned results based upon
+-- properties of the product.
+cplFilter :: Lens' CatalogsProductsList (Maybe Text)
+cplFilter
+  = lens _cplFilter (\ s a -> s{_cplFilter = a})
+
+-- | A pagination token returned from a previous call to ListProducts that
+-- indicates where this listing should continue from. This field is
+-- optional.
+cplPageToken :: Lens' CatalogsProductsList (Maybe Text)
+cplPageToken
+  = lens _cplPageToken (\ s a -> s{_cplPageToken = a})
+
+-- | The maximum number of products to return.
+cplPageSize :: Lens' CatalogsProductsList (Maybe Int32)
+cplPageSize
+  = lens _cplPageSize (\ s a -> s{_cplPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+cplCallback :: Lens' CatalogsProductsList (Maybe Text)
+cplCallback
+  = lens _cplCallback (\ s a -> s{_cplCallback = a})
+
+instance GoogleRequest CatalogsProductsList where
+        type Rs CatalogsProductsList =
+             GoogleCloudPrivatecatalogproducerV1beta1ListProductsResponse
+        type Scopes CatalogsProductsList =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsProductsList'{..}
+          = go _cplParent _cplXgafv _cplUploadProtocol
+              _cplAccessToken
+              _cplUploadType
+              _cplFilter
+              _cplPageToken
+              _cplPageSize
+              _cplCallback
+              (Just AltJSON)
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CatalogsProductsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Patch.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Patch.hs
@@ -0,0 +1,183 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.Products.Patch
+-- 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)
+--
+-- Updates a specific Product resource.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.products.patch@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Patch
+    (
+    -- * REST Resource
+      CatalogsProductsPatchResource
+
+    -- * Creating a Request
+    , catalogsProductsPatch
+    , CatalogsProductsPatch
+
+    -- * Request Lenses
+    , cppXgafv
+    , cppUploadProtocol
+    , cppUpdateMask
+    , cppAccessToken
+    , cppUploadType
+    , cppPayload
+    , cppName
+    , cppCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.products.patch@ method which the
+-- 'CatalogsProductsPatch' request conforms to.
+type CatalogsProductsPatchResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "updateMask" GFieldMask :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON]
+                         GoogleCloudPrivatecatalogproducerV1beta1Product
+                         :>
+                         Patch '[JSON]
+                           GoogleCloudPrivatecatalogproducerV1beta1Product
+
+-- | Updates a specific Product resource.
+--
+-- /See:/ 'catalogsProductsPatch' smart constructor.
+data CatalogsProductsPatch =
+  CatalogsProductsPatch'
+    { _cppXgafv          :: !(Maybe Xgafv)
+    , _cppUploadProtocol :: !(Maybe Text)
+    , _cppUpdateMask     :: !(Maybe GFieldMask)
+    , _cppAccessToken    :: !(Maybe Text)
+    , _cppUploadType     :: !(Maybe Text)
+    , _cppPayload        :: !GoogleCloudPrivatecatalogproducerV1beta1Product
+    , _cppName           :: !Text
+    , _cppCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsProductsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cppXgafv'
+--
+-- * 'cppUploadProtocol'
+--
+-- * 'cppUpdateMask'
+--
+-- * 'cppAccessToken'
+--
+-- * 'cppUploadType'
+--
+-- * 'cppPayload'
+--
+-- * 'cppName'
+--
+-- * 'cppCallback'
+catalogsProductsPatch
+    :: GoogleCloudPrivatecatalogproducerV1beta1Product -- ^ 'cppPayload'
+    -> Text -- ^ 'cppName'
+    -> CatalogsProductsPatch
+catalogsProductsPatch pCppPayload_ pCppName_ =
+  CatalogsProductsPatch'
+    { _cppXgafv = Nothing
+    , _cppUploadProtocol = Nothing
+    , _cppUpdateMask = Nothing
+    , _cppAccessToken = Nothing
+    , _cppUploadType = Nothing
+    , _cppPayload = pCppPayload_
+    , _cppName = pCppName_
+    , _cppCallback = Nothing
+    }
+
+
+-- | V1 error format.
+cppXgafv :: Lens' CatalogsProductsPatch (Maybe Xgafv)
+cppXgafv = lens _cppXgafv (\ s a -> s{_cppXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cppUploadProtocol :: Lens' CatalogsProductsPatch (Maybe Text)
+cppUploadProtocol
+  = lens _cppUploadProtocol
+      (\ s a -> s{_cppUploadProtocol = a})
+
+-- | Field mask that controls which fields of the product should be updated.
+cppUpdateMask :: Lens' CatalogsProductsPatch (Maybe GFieldMask)
+cppUpdateMask
+  = lens _cppUpdateMask
+      (\ s a -> s{_cppUpdateMask = a})
+
+-- | OAuth access token.
+cppAccessToken :: Lens' CatalogsProductsPatch (Maybe Text)
+cppAccessToken
+  = lens _cppAccessToken
+      (\ s a -> s{_cppAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cppUploadType :: Lens' CatalogsProductsPatch (Maybe Text)
+cppUploadType
+  = lens _cppUploadType
+      (\ s a -> s{_cppUploadType = a})
+
+-- | Multipart request metadata.
+cppPayload :: Lens' CatalogsProductsPatch GoogleCloudPrivatecatalogproducerV1beta1Product
+cppPayload
+  = lens _cppPayload (\ s a -> s{_cppPayload = a})
+
+-- | Required. The resource name of the product in the format
+-- \`catalogs\/{catalog_id}\/products\/a-z*[a-z0-9]\'. A unique identifier
+-- for the product under a catalog, which cannot be changed after the
+-- product is created. The final segment of the name must between 1 and 256
+-- characters in length.
+cppName :: Lens' CatalogsProductsPatch Text
+cppName = lens _cppName (\ s a -> s{_cppName = a})
+
+-- | JSONP
+cppCallback :: Lens' CatalogsProductsPatch (Maybe Text)
+cppCallback
+  = lens _cppCallback (\ s a -> s{_cppCallback = a})
+
+instance GoogleRequest CatalogsProductsPatch where
+        type Rs CatalogsProductsPatch =
+             GoogleCloudPrivatecatalogproducerV1beta1Product
+        type Scopes CatalogsProductsPatch =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsProductsPatch'{..}
+          = go _cppName _cppXgafv _cppUploadProtocol
+              _cppUpdateMask
+              _cppAccessToken
+              _cppUploadType
+              _cppCallback
+              (Just AltJSON)
+              _cppPayload
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CatalogsProductsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Versions/Create.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Versions/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Versions/Create.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.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Create
+-- 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)
+--
+-- Creates a Version instance under a given Product.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.products.versions.create@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Create
+    (
+    -- * REST Resource
+      CatalogsProductsVersionsCreateResource
+
+    -- * Creating a Request
+    , catalogsProductsVersionsCreate
+    , CatalogsProductsVersionsCreate
+
+    -- * Request Lenses
+    , cpvcParent
+    , cpvcXgafv
+    , cpvcUploadProtocol
+    , cpvcAccessToken
+    , cpvcUploadType
+    , cpvcPayload
+    , cpvcCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.products.versions.create@ method which the
+-- 'CatalogsProductsVersionsCreate' request conforms to.
+type CatalogsProductsVersionsCreateResource =
+     "v1beta1" :>
+       Capture "parent" Text :>
+         "versions" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON]
+                         GoogleCloudPrivatecatalogproducerV1beta1Version
+                         :> Post '[JSON] GoogleLongrunningOperation
+
+-- | Creates a Version instance under a given Product.
+--
+-- /See:/ 'catalogsProductsVersionsCreate' smart constructor.
+data CatalogsProductsVersionsCreate =
+  CatalogsProductsVersionsCreate'
+    { _cpvcParent         :: !Text
+    , _cpvcXgafv          :: !(Maybe Xgafv)
+    , _cpvcUploadProtocol :: !(Maybe Text)
+    , _cpvcAccessToken    :: !(Maybe Text)
+    , _cpvcUploadType     :: !(Maybe Text)
+    , _cpvcPayload        :: !GoogleCloudPrivatecatalogproducerV1beta1Version
+    , _cpvcCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsProductsVersionsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpvcParent'
+--
+-- * 'cpvcXgafv'
+--
+-- * 'cpvcUploadProtocol'
+--
+-- * 'cpvcAccessToken'
+--
+-- * 'cpvcUploadType'
+--
+-- * 'cpvcPayload'
+--
+-- * 'cpvcCallback'
+catalogsProductsVersionsCreate
+    :: Text -- ^ 'cpvcParent'
+    -> GoogleCloudPrivatecatalogproducerV1beta1Version -- ^ 'cpvcPayload'
+    -> CatalogsProductsVersionsCreate
+catalogsProductsVersionsCreate pCpvcParent_ pCpvcPayload_ =
+  CatalogsProductsVersionsCreate'
+    { _cpvcParent = pCpvcParent_
+    , _cpvcXgafv = Nothing
+    , _cpvcUploadProtocol = Nothing
+    , _cpvcAccessToken = Nothing
+    , _cpvcUploadType = Nothing
+    , _cpvcPayload = pCpvcPayload_
+    , _cpvcCallback = Nothing
+    }
+
+
+-- | The product name of the new version\'s parent.
+cpvcParent :: Lens' CatalogsProductsVersionsCreate Text
+cpvcParent
+  = lens _cpvcParent (\ s a -> s{_cpvcParent = a})
+
+-- | V1 error format.
+cpvcXgafv :: Lens' CatalogsProductsVersionsCreate (Maybe Xgafv)
+cpvcXgafv
+  = lens _cpvcXgafv (\ s a -> s{_cpvcXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cpvcUploadProtocol :: Lens' CatalogsProductsVersionsCreate (Maybe Text)
+cpvcUploadProtocol
+  = lens _cpvcUploadProtocol
+      (\ s a -> s{_cpvcUploadProtocol = a})
+
+-- | OAuth access token.
+cpvcAccessToken :: Lens' CatalogsProductsVersionsCreate (Maybe Text)
+cpvcAccessToken
+  = lens _cpvcAccessToken
+      (\ s a -> s{_cpvcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cpvcUploadType :: Lens' CatalogsProductsVersionsCreate (Maybe Text)
+cpvcUploadType
+  = lens _cpvcUploadType
+      (\ s a -> s{_cpvcUploadType = a})
+
+-- | Multipart request metadata.
+cpvcPayload :: Lens' CatalogsProductsVersionsCreate GoogleCloudPrivatecatalogproducerV1beta1Version
+cpvcPayload
+  = lens _cpvcPayload (\ s a -> s{_cpvcPayload = a})
+
+-- | JSONP
+cpvcCallback :: Lens' CatalogsProductsVersionsCreate (Maybe Text)
+cpvcCallback
+  = lens _cpvcCallback (\ s a -> s{_cpvcCallback = a})
+
+instance GoogleRequest CatalogsProductsVersionsCreate
+         where
+        type Rs CatalogsProductsVersionsCreate =
+             GoogleLongrunningOperation
+        type Scopes CatalogsProductsVersionsCreate =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsProductsVersionsCreate'{..}
+          = go _cpvcParent _cpvcXgafv _cpvcUploadProtocol
+              _cpvcAccessToken
+              _cpvcUploadType
+              _cpvcCallback
+              (Just AltJSON)
+              _cpvcPayload
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy CatalogsProductsVersionsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Versions/Delete.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Versions/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Versions/Delete.hs
@@ -0,0 +1,153 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Delete
+-- 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)
+--
+-- Hard deletes a Version.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.products.versions.delete@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Delete
+    (
+    -- * REST Resource
+      CatalogsProductsVersionsDeleteResource
+
+    -- * Creating a Request
+    , catalogsProductsVersionsDelete
+    , CatalogsProductsVersionsDelete
+
+    -- * Request Lenses
+    , cpvdXgafv
+    , cpvdUploadProtocol
+    , cpvdAccessToken
+    , cpvdUploadType
+    , cpvdName
+    , cpvdCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.products.versions.delete@ method which the
+-- 'CatalogsProductsVersionsDelete' request conforms to.
+type CatalogsProductsVersionsDeleteResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     Delete '[JSON] GoogleProtobufEmpty
+
+-- | Hard deletes a Version.
+--
+-- /See:/ 'catalogsProductsVersionsDelete' smart constructor.
+data CatalogsProductsVersionsDelete =
+  CatalogsProductsVersionsDelete'
+    { _cpvdXgafv          :: !(Maybe Xgafv)
+    , _cpvdUploadProtocol :: !(Maybe Text)
+    , _cpvdAccessToken    :: !(Maybe Text)
+    , _cpvdUploadType     :: !(Maybe Text)
+    , _cpvdName           :: !Text
+    , _cpvdCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsProductsVersionsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpvdXgafv'
+--
+-- * 'cpvdUploadProtocol'
+--
+-- * 'cpvdAccessToken'
+--
+-- * 'cpvdUploadType'
+--
+-- * 'cpvdName'
+--
+-- * 'cpvdCallback'
+catalogsProductsVersionsDelete
+    :: Text -- ^ 'cpvdName'
+    -> CatalogsProductsVersionsDelete
+catalogsProductsVersionsDelete pCpvdName_ =
+  CatalogsProductsVersionsDelete'
+    { _cpvdXgafv = Nothing
+    , _cpvdUploadProtocol = Nothing
+    , _cpvdAccessToken = Nothing
+    , _cpvdUploadType = Nothing
+    , _cpvdName = pCpvdName_
+    , _cpvdCallback = Nothing
+    }
+
+
+-- | V1 error format.
+cpvdXgafv :: Lens' CatalogsProductsVersionsDelete (Maybe Xgafv)
+cpvdXgafv
+  = lens _cpvdXgafv (\ s a -> s{_cpvdXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cpvdUploadProtocol :: Lens' CatalogsProductsVersionsDelete (Maybe Text)
+cpvdUploadProtocol
+  = lens _cpvdUploadProtocol
+      (\ s a -> s{_cpvdUploadProtocol = a})
+
+-- | OAuth access token.
+cpvdAccessToken :: Lens' CatalogsProductsVersionsDelete (Maybe Text)
+cpvdAccessToken
+  = lens _cpvdAccessToken
+      (\ s a -> s{_cpvdAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cpvdUploadType :: Lens' CatalogsProductsVersionsDelete (Maybe Text)
+cpvdUploadType
+  = lens _cpvdUploadType
+      (\ s a -> s{_cpvdUploadType = a})
+
+-- | The resource name of the version.
+cpvdName :: Lens' CatalogsProductsVersionsDelete Text
+cpvdName = lens _cpvdName (\ s a -> s{_cpvdName = a})
+
+-- | JSONP
+cpvdCallback :: Lens' CatalogsProductsVersionsDelete (Maybe Text)
+cpvdCallback
+  = lens _cpvdCallback (\ s a -> s{_cpvdCallback = a})
+
+instance GoogleRequest CatalogsProductsVersionsDelete
+         where
+        type Rs CatalogsProductsVersionsDelete =
+             GoogleProtobufEmpty
+        type Scopes CatalogsProductsVersionsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsProductsVersionsDelete'{..}
+          = go _cpvdName _cpvdXgafv _cpvdUploadProtocol
+              _cpvdAccessToken
+              _cpvdUploadType
+              _cpvdCallback
+              (Just AltJSON)
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy CatalogsProductsVersionsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Versions/Get.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Versions/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Versions/Get.hs
@@ -0,0 +1,153 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.Products.Versions.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)
+--
+-- Returns the requested Version resource.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.products.versions.get@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Get
+    (
+    -- * REST Resource
+      CatalogsProductsVersionsGetResource
+
+    -- * Creating a Request
+    , catalogsProductsVersionsGet
+    , CatalogsProductsVersionsGet
+
+    -- * Request Lenses
+    , cpvgXgafv
+    , cpvgUploadProtocol
+    , cpvgAccessToken
+    , cpvgUploadType
+    , cpvgName
+    , cpvgCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.products.versions.get@ method which the
+-- 'CatalogsProductsVersionsGet' request conforms to.
+type CatalogsProductsVersionsGetResource =
+     "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]
+                       GoogleCloudPrivatecatalogproducerV1beta1Version
+
+-- | Returns the requested Version resource.
+--
+-- /See:/ 'catalogsProductsVersionsGet' smart constructor.
+data CatalogsProductsVersionsGet =
+  CatalogsProductsVersionsGet'
+    { _cpvgXgafv          :: !(Maybe Xgafv)
+    , _cpvgUploadProtocol :: !(Maybe Text)
+    , _cpvgAccessToken    :: !(Maybe Text)
+    , _cpvgUploadType     :: !(Maybe Text)
+    , _cpvgName           :: !Text
+    , _cpvgCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsProductsVersionsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpvgXgafv'
+--
+-- * 'cpvgUploadProtocol'
+--
+-- * 'cpvgAccessToken'
+--
+-- * 'cpvgUploadType'
+--
+-- * 'cpvgName'
+--
+-- * 'cpvgCallback'
+catalogsProductsVersionsGet
+    :: Text -- ^ 'cpvgName'
+    -> CatalogsProductsVersionsGet
+catalogsProductsVersionsGet pCpvgName_ =
+  CatalogsProductsVersionsGet'
+    { _cpvgXgafv = Nothing
+    , _cpvgUploadProtocol = Nothing
+    , _cpvgAccessToken = Nothing
+    , _cpvgUploadType = Nothing
+    , _cpvgName = pCpvgName_
+    , _cpvgCallback = Nothing
+    }
+
+
+-- | V1 error format.
+cpvgXgafv :: Lens' CatalogsProductsVersionsGet (Maybe Xgafv)
+cpvgXgafv
+  = lens _cpvgXgafv (\ s a -> s{_cpvgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cpvgUploadProtocol :: Lens' CatalogsProductsVersionsGet (Maybe Text)
+cpvgUploadProtocol
+  = lens _cpvgUploadProtocol
+      (\ s a -> s{_cpvgUploadProtocol = a})
+
+-- | OAuth access token.
+cpvgAccessToken :: Lens' CatalogsProductsVersionsGet (Maybe Text)
+cpvgAccessToken
+  = lens _cpvgAccessToken
+      (\ s a -> s{_cpvgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cpvgUploadType :: Lens' CatalogsProductsVersionsGet (Maybe Text)
+cpvgUploadType
+  = lens _cpvgUploadType
+      (\ s a -> s{_cpvgUploadType = a})
+
+-- | The resource name of the version.
+cpvgName :: Lens' CatalogsProductsVersionsGet Text
+cpvgName = lens _cpvgName (\ s a -> s{_cpvgName = a})
+
+-- | JSONP
+cpvgCallback :: Lens' CatalogsProductsVersionsGet (Maybe Text)
+cpvgCallback
+  = lens _cpvgCallback (\ s a -> s{_cpvgCallback = a})
+
+instance GoogleRequest CatalogsProductsVersionsGet
+         where
+        type Rs CatalogsProductsVersionsGet =
+             GoogleCloudPrivatecatalogproducerV1beta1Version
+        type Scopes CatalogsProductsVersionsGet =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsProductsVersionsGet'{..}
+          = go _cpvgName _cpvgXgafv _cpvgUploadProtocol
+              _cpvgAccessToken
+              _cpvgUploadType
+              _cpvgCallback
+              (Just AltJSON)
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CatalogsProductsVersionsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Versions/List.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Versions/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Versions/List.hs
@@ -0,0 +1,185 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.Products.Versions.List
+-- 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)
+--
+-- Lists Version resources that the producer has access to, within the
+-- scope of the parent Product.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.products.versions.list@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.List
+    (
+    -- * REST Resource
+      CatalogsProductsVersionsListResource
+
+    -- * Creating a Request
+    , catalogsProductsVersionsList
+    , CatalogsProductsVersionsList
+
+    -- * Request Lenses
+    , cpvlParent
+    , cpvlXgafv
+    , cpvlUploadProtocol
+    , cpvlAccessToken
+    , cpvlUploadType
+    , cpvlPageToken
+    , cpvlPageSize
+    , cpvlCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.products.versions.list@ method which the
+-- 'CatalogsProductsVersionsList' request conforms to.
+type CatalogsProductsVersionsListResource =
+     "v1beta1" :>
+       Capture "parent" Text :>
+         "versions" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "pageSize" (Textual Int32) :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON]
+                             GoogleCloudPrivatecatalogproducerV1beta1ListVersionsResponse
+
+-- | Lists Version resources that the producer has access to, within the
+-- scope of the parent Product.
+--
+-- /See:/ 'catalogsProductsVersionsList' smart constructor.
+data CatalogsProductsVersionsList =
+  CatalogsProductsVersionsList'
+    { _cpvlParent         :: !Text
+    , _cpvlXgafv          :: !(Maybe Xgafv)
+    , _cpvlUploadProtocol :: !(Maybe Text)
+    , _cpvlAccessToken    :: !(Maybe Text)
+    , _cpvlUploadType     :: !(Maybe Text)
+    , _cpvlPageToken      :: !(Maybe Text)
+    , _cpvlPageSize       :: !(Maybe (Textual Int32))
+    , _cpvlCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsProductsVersionsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpvlParent'
+--
+-- * 'cpvlXgafv'
+--
+-- * 'cpvlUploadProtocol'
+--
+-- * 'cpvlAccessToken'
+--
+-- * 'cpvlUploadType'
+--
+-- * 'cpvlPageToken'
+--
+-- * 'cpvlPageSize'
+--
+-- * 'cpvlCallback'
+catalogsProductsVersionsList
+    :: Text -- ^ 'cpvlParent'
+    -> CatalogsProductsVersionsList
+catalogsProductsVersionsList pCpvlParent_ =
+  CatalogsProductsVersionsList'
+    { _cpvlParent = pCpvlParent_
+    , _cpvlXgafv = Nothing
+    , _cpvlUploadProtocol = Nothing
+    , _cpvlAccessToken = Nothing
+    , _cpvlUploadType = Nothing
+    , _cpvlPageToken = Nothing
+    , _cpvlPageSize = Nothing
+    , _cpvlCallback = Nothing
+    }
+
+
+-- | The resource name of the parent resource.
+cpvlParent :: Lens' CatalogsProductsVersionsList Text
+cpvlParent
+  = lens _cpvlParent (\ s a -> s{_cpvlParent = a})
+
+-- | V1 error format.
+cpvlXgafv :: Lens' CatalogsProductsVersionsList (Maybe Xgafv)
+cpvlXgafv
+  = lens _cpvlXgafv (\ s a -> s{_cpvlXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cpvlUploadProtocol :: Lens' CatalogsProductsVersionsList (Maybe Text)
+cpvlUploadProtocol
+  = lens _cpvlUploadProtocol
+      (\ s a -> s{_cpvlUploadProtocol = a})
+
+-- | OAuth access token.
+cpvlAccessToken :: Lens' CatalogsProductsVersionsList (Maybe Text)
+cpvlAccessToken
+  = lens _cpvlAccessToken
+      (\ s a -> s{_cpvlAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cpvlUploadType :: Lens' CatalogsProductsVersionsList (Maybe Text)
+cpvlUploadType
+  = lens _cpvlUploadType
+      (\ s a -> s{_cpvlUploadType = a})
+
+-- | A pagination token returned from a previous call to ListVersions that
+-- indicates where this listing should continue from. This field is
+-- optional.
+cpvlPageToken :: Lens' CatalogsProductsVersionsList (Maybe Text)
+cpvlPageToken
+  = lens _cpvlPageToken
+      (\ s a -> s{_cpvlPageToken = a})
+
+-- | The maximum number of versions to return.
+cpvlPageSize :: Lens' CatalogsProductsVersionsList (Maybe Int32)
+cpvlPageSize
+  = lens _cpvlPageSize (\ s a -> s{_cpvlPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+cpvlCallback :: Lens' CatalogsProductsVersionsList (Maybe Text)
+cpvlCallback
+  = lens _cpvlCallback (\ s a -> s{_cpvlCallback = a})
+
+instance GoogleRequest CatalogsProductsVersionsList
+         where
+        type Rs CatalogsProductsVersionsList =
+             GoogleCloudPrivatecatalogproducerV1beta1ListVersionsResponse
+        type Scopes CatalogsProductsVersionsList =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsProductsVersionsList'{..}
+          = go _cpvlParent _cpvlXgafv _cpvlUploadProtocol
+              _cpvlAccessToken
+              _cpvlUploadType
+              _cpvlPageToken
+              _cpvlPageSize
+              _cpvlCallback
+              (Just AltJSON)
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CatalogsProductsVersionsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Versions/Patch.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Versions/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Products/Versions/Patch.hs
@@ -0,0 +1,186 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Patch
+-- 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)
+--
+-- Updates a specific Version resource.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.products.versions.patch@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Patch
+    (
+    -- * REST Resource
+      CatalogsProductsVersionsPatchResource
+
+    -- * Creating a Request
+    , catalogsProductsVersionsPatch
+    , CatalogsProductsVersionsPatch
+
+    -- * Request Lenses
+    , cpvpXgafv
+    , cpvpUploadProtocol
+    , cpvpUpdateMask
+    , cpvpAccessToken
+    , cpvpUploadType
+    , cpvpPayload
+    , cpvpName
+    , cpvpCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.products.versions.patch@ method which the
+-- 'CatalogsProductsVersionsPatch' request conforms to.
+type CatalogsProductsVersionsPatchResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "updateMask" GFieldMask :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON]
+                         GoogleCloudPrivatecatalogproducerV1beta1Version
+                         :>
+                         Patch '[JSON]
+                           GoogleCloudPrivatecatalogproducerV1beta1Version
+
+-- | Updates a specific Version resource.
+--
+-- /See:/ 'catalogsProductsVersionsPatch' smart constructor.
+data CatalogsProductsVersionsPatch =
+  CatalogsProductsVersionsPatch'
+    { _cpvpXgafv          :: !(Maybe Xgafv)
+    , _cpvpUploadProtocol :: !(Maybe Text)
+    , _cpvpUpdateMask     :: !(Maybe GFieldMask)
+    , _cpvpAccessToken    :: !(Maybe Text)
+    , _cpvpUploadType     :: !(Maybe Text)
+    , _cpvpPayload        :: !GoogleCloudPrivatecatalogproducerV1beta1Version
+    , _cpvpName           :: !Text
+    , _cpvpCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsProductsVersionsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpvpXgafv'
+--
+-- * 'cpvpUploadProtocol'
+--
+-- * 'cpvpUpdateMask'
+--
+-- * 'cpvpAccessToken'
+--
+-- * 'cpvpUploadType'
+--
+-- * 'cpvpPayload'
+--
+-- * 'cpvpName'
+--
+-- * 'cpvpCallback'
+catalogsProductsVersionsPatch
+    :: GoogleCloudPrivatecatalogproducerV1beta1Version -- ^ 'cpvpPayload'
+    -> Text -- ^ 'cpvpName'
+    -> CatalogsProductsVersionsPatch
+catalogsProductsVersionsPatch pCpvpPayload_ pCpvpName_ =
+  CatalogsProductsVersionsPatch'
+    { _cpvpXgafv = Nothing
+    , _cpvpUploadProtocol = Nothing
+    , _cpvpUpdateMask = Nothing
+    , _cpvpAccessToken = Nothing
+    , _cpvpUploadType = Nothing
+    , _cpvpPayload = pCpvpPayload_
+    , _cpvpName = pCpvpName_
+    , _cpvpCallback = Nothing
+    }
+
+
+-- | V1 error format.
+cpvpXgafv :: Lens' CatalogsProductsVersionsPatch (Maybe Xgafv)
+cpvpXgafv
+  = lens _cpvpXgafv (\ s a -> s{_cpvpXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cpvpUploadProtocol :: Lens' CatalogsProductsVersionsPatch (Maybe Text)
+cpvpUploadProtocol
+  = lens _cpvpUploadProtocol
+      (\ s a -> s{_cpvpUploadProtocol = a})
+
+-- | Field mask that controls which fields of the version should be updated.
+cpvpUpdateMask :: Lens' CatalogsProductsVersionsPatch (Maybe GFieldMask)
+cpvpUpdateMask
+  = lens _cpvpUpdateMask
+      (\ s a -> s{_cpvpUpdateMask = a})
+
+-- | OAuth access token.
+cpvpAccessToken :: Lens' CatalogsProductsVersionsPatch (Maybe Text)
+cpvpAccessToken
+  = lens _cpvpAccessToken
+      (\ s a -> s{_cpvpAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cpvpUploadType :: Lens' CatalogsProductsVersionsPatch (Maybe Text)
+cpvpUploadType
+  = lens _cpvpUploadType
+      (\ s a -> s{_cpvpUploadType = a})
+
+-- | Multipart request metadata.
+cpvpPayload :: Lens' CatalogsProductsVersionsPatch GoogleCloudPrivatecatalogproducerV1beta1Version
+cpvpPayload
+  = lens _cpvpPayload (\ s a -> s{_cpvpPayload = a})
+
+-- | Required. The resource name of the version, in the format
+-- \`catalogs\/{catalog_id}\/products\/{product_id}\/versions\/a-z*[a-z0-9]\'.
+-- A unique identifier for the version under a product, which can\'t be
+-- changed after the version is created. The final segment of the name must
+-- between 1 and 63 characters in length.
+cpvpName :: Lens' CatalogsProductsVersionsPatch Text
+cpvpName = lens _cpvpName (\ s a -> s{_cpvpName = a})
+
+-- | JSONP
+cpvpCallback :: Lens' CatalogsProductsVersionsPatch (Maybe Text)
+cpvpCallback
+  = lens _cpvpCallback (\ s a -> s{_cpvpCallback = a})
+
+instance GoogleRequest CatalogsProductsVersionsPatch
+         where
+        type Rs CatalogsProductsVersionsPatch =
+             GoogleCloudPrivatecatalogproducerV1beta1Version
+        type Scopes CatalogsProductsVersionsPatch =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsProductsVersionsPatch'{..}
+          = go _cpvpName _cpvpXgafv _cpvpUploadProtocol
+              _cpvpUpdateMask
+              _cpvpAccessToken
+              _cpvpUploadType
+              _cpvpCallback
+              (Just AltJSON)
+              _cpvpPayload
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy CatalogsProductsVersionsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/SetIAMPolicy.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/SetIAMPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/SetIAMPolicy.hs
@@ -0,0 +1,165 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.SetIAMPolicy
+-- 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)
+--
+-- Sets the IAM policy for the specified Catalog.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.setIamPolicy@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.SetIAMPolicy
+    (
+    -- * REST Resource
+      CatalogsSetIAMPolicyResource
+
+    -- * Creating a Request
+    , catalogsSetIAMPolicy
+    , CatalogsSetIAMPolicy
+
+    -- * Request Lenses
+    , csipXgafv
+    , csipUploadProtocol
+    , csipAccessToken
+    , csipUploadType
+    , csipPayload
+    , csipResource
+    , csipCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.setIamPolicy@ method which the
+-- 'CatalogsSetIAMPolicy' request conforms to.
+type CatalogsSetIAMPolicyResource =
+     "v1beta1" :>
+       CaptureMode "resource" "setIamPolicy" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] GoogleIAMV1SetIAMPolicyRequest :>
+                       Post '[JSON] GoogleIAMV1Policy
+
+-- | Sets the IAM policy for the specified Catalog.
+--
+-- /See:/ 'catalogsSetIAMPolicy' smart constructor.
+data CatalogsSetIAMPolicy =
+  CatalogsSetIAMPolicy'
+    { _csipXgafv          :: !(Maybe Xgafv)
+    , _csipUploadProtocol :: !(Maybe Text)
+    , _csipAccessToken    :: !(Maybe Text)
+    , _csipUploadType     :: !(Maybe Text)
+    , _csipPayload        :: !GoogleIAMV1SetIAMPolicyRequest
+    , _csipResource       :: !Text
+    , _csipCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsSetIAMPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csipXgafv'
+--
+-- * 'csipUploadProtocol'
+--
+-- * 'csipAccessToken'
+--
+-- * 'csipUploadType'
+--
+-- * 'csipPayload'
+--
+-- * 'csipResource'
+--
+-- * 'csipCallback'
+catalogsSetIAMPolicy
+    :: GoogleIAMV1SetIAMPolicyRequest -- ^ 'csipPayload'
+    -> Text -- ^ 'csipResource'
+    -> CatalogsSetIAMPolicy
+catalogsSetIAMPolicy pCsipPayload_ pCsipResource_ =
+  CatalogsSetIAMPolicy'
+    { _csipXgafv = Nothing
+    , _csipUploadProtocol = Nothing
+    , _csipAccessToken = Nothing
+    , _csipUploadType = Nothing
+    , _csipPayload = pCsipPayload_
+    , _csipResource = pCsipResource_
+    , _csipCallback = Nothing
+    }
+
+
+-- | V1 error format.
+csipXgafv :: Lens' CatalogsSetIAMPolicy (Maybe Xgafv)
+csipXgafv
+  = lens _csipXgafv (\ s a -> s{_csipXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+csipUploadProtocol :: Lens' CatalogsSetIAMPolicy (Maybe Text)
+csipUploadProtocol
+  = lens _csipUploadProtocol
+      (\ s a -> s{_csipUploadProtocol = a})
+
+-- | OAuth access token.
+csipAccessToken :: Lens' CatalogsSetIAMPolicy (Maybe Text)
+csipAccessToken
+  = lens _csipAccessToken
+      (\ s a -> s{_csipAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+csipUploadType :: Lens' CatalogsSetIAMPolicy (Maybe Text)
+csipUploadType
+  = lens _csipUploadType
+      (\ s a -> s{_csipUploadType = a})
+
+-- | Multipart request metadata.
+csipPayload :: Lens' CatalogsSetIAMPolicy GoogleIAMV1SetIAMPolicyRequest
+csipPayload
+  = lens _csipPayload (\ s a -> s{_csipPayload = a})
+
+-- | REQUIRED: The resource for which the policy is being specified. See the
+-- operation documentation for the appropriate value for this field.
+csipResource :: Lens' CatalogsSetIAMPolicy Text
+csipResource
+  = lens _csipResource (\ s a -> s{_csipResource = a})
+
+-- | JSONP
+csipCallback :: Lens' CatalogsSetIAMPolicy (Maybe Text)
+csipCallback
+  = lens _csipCallback (\ s a -> s{_csipCallback = a})
+
+instance GoogleRequest CatalogsSetIAMPolicy where
+        type Rs CatalogsSetIAMPolicy = GoogleIAMV1Policy
+        type Scopes CatalogsSetIAMPolicy =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsSetIAMPolicy'{..}
+          = go _csipResource _csipXgafv _csipUploadProtocol
+              _csipAccessToken
+              _csipUploadType
+              _csipCallback
+              (Just AltJSON)
+              _csipPayload
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CatalogsSetIAMPolicyResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/TestIAMPermissions.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/TestIAMPermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/TestIAMPermissions.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.CloudPrivateCatalogProducer.Catalogs.TestIAMPermissions
+-- 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)
+--
+-- Tests the IAM permissions for the specified Catalog.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.testIamPermissions@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.TestIAMPermissions
+    (
+    -- * REST Resource
+      CatalogsTestIAMPermissionsResource
+
+    -- * Creating a Request
+    , catalogsTestIAMPermissions
+    , CatalogsTestIAMPermissions
+
+    -- * Request Lenses
+    , ctipXgafv
+    , ctipUploadProtocol
+    , ctipAccessToken
+    , ctipUploadType
+    , ctipPayload
+    , ctipResource
+    , ctipCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.testIamPermissions@ method which the
+-- 'CatalogsTestIAMPermissions' request conforms to.
+type CatalogsTestIAMPermissionsResource =
+     "v1beta1" :>
+       CaptureMode "resource" "testIamPermissions" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] GoogleIAMV1TestIAMPermissionsRequest
+                       :> Post '[JSON] GoogleIAMV1TestIAMPermissionsResponse
+
+-- | Tests the IAM permissions for the specified Catalog.
+--
+-- /See:/ 'catalogsTestIAMPermissions' smart constructor.
+data CatalogsTestIAMPermissions =
+  CatalogsTestIAMPermissions'
+    { _ctipXgafv          :: !(Maybe Xgafv)
+    , _ctipUploadProtocol :: !(Maybe Text)
+    , _ctipAccessToken    :: !(Maybe Text)
+    , _ctipUploadType     :: !(Maybe Text)
+    , _ctipPayload        :: !GoogleIAMV1TestIAMPermissionsRequest
+    , _ctipResource       :: !Text
+    , _ctipCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsTestIAMPermissions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctipXgafv'
+--
+-- * 'ctipUploadProtocol'
+--
+-- * 'ctipAccessToken'
+--
+-- * 'ctipUploadType'
+--
+-- * 'ctipPayload'
+--
+-- * 'ctipResource'
+--
+-- * 'ctipCallback'
+catalogsTestIAMPermissions
+    :: GoogleIAMV1TestIAMPermissionsRequest -- ^ 'ctipPayload'
+    -> Text -- ^ 'ctipResource'
+    -> CatalogsTestIAMPermissions
+catalogsTestIAMPermissions pCtipPayload_ pCtipResource_ =
+  CatalogsTestIAMPermissions'
+    { _ctipXgafv = Nothing
+    , _ctipUploadProtocol = Nothing
+    , _ctipAccessToken = Nothing
+    , _ctipUploadType = Nothing
+    , _ctipPayload = pCtipPayload_
+    , _ctipResource = pCtipResource_
+    , _ctipCallback = Nothing
+    }
+
+
+-- | V1 error format.
+ctipXgafv :: Lens' CatalogsTestIAMPermissions (Maybe Xgafv)
+ctipXgafv
+  = lens _ctipXgafv (\ s a -> s{_ctipXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ctipUploadProtocol :: Lens' CatalogsTestIAMPermissions (Maybe Text)
+ctipUploadProtocol
+  = lens _ctipUploadProtocol
+      (\ s a -> s{_ctipUploadProtocol = a})
+
+-- | OAuth access token.
+ctipAccessToken :: Lens' CatalogsTestIAMPermissions (Maybe Text)
+ctipAccessToken
+  = lens _ctipAccessToken
+      (\ s a -> s{_ctipAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ctipUploadType :: Lens' CatalogsTestIAMPermissions (Maybe Text)
+ctipUploadType
+  = lens _ctipUploadType
+      (\ s a -> s{_ctipUploadType = a})
+
+-- | Multipart request metadata.
+ctipPayload :: Lens' CatalogsTestIAMPermissions GoogleIAMV1TestIAMPermissionsRequest
+ctipPayload
+  = lens _ctipPayload (\ s a -> s{_ctipPayload = a})
+
+-- | REQUIRED: The resource for which the policy detail is being requested.
+-- See the operation documentation for the appropriate value for this
+-- field.
+ctipResource :: Lens' CatalogsTestIAMPermissions Text
+ctipResource
+  = lens _ctipResource (\ s a -> s{_ctipResource = a})
+
+-- | JSONP
+ctipCallback :: Lens' CatalogsTestIAMPermissions (Maybe Text)
+ctipCallback
+  = lens _ctipCallback (\ s a -> s{_ctipCallback = a})
+
+instance GoogleRequest CatalogsTestIAMPermissions
+         where
+        type Rs CatalogsTestIAMPermissions =
+             GoogleIAMV1TestIAMPermissionsResponse
+        type Scopes CatalogsTestIAMPermissions =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsTestIAMPermissions'{..}
+          = go _ctipResource _ctipXgafv _ctipUploadProtocol
+              _ctipAccessToken
+              _ctipUploadType
+              _ctipCallback
+              (Just AltJSON)
+              _ctipPayload
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CatalogsTestIAMPermissionsResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Undelete.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Undelete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Catalogs/Undelete.hs
@@ -0,0 +1,165 @@
+{-# 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.CloudPrivateCatalogProducer.Catalogs.Undelete
+-- 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)
+--
+-- Undeletes a deleted Catalog and all resources under it.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.catalogs.undelete@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Undelete
+    (
+    -- * REST Resource
+      CatalogsUndeleteResource
+
+    -- * Creating a Request
+    , catalogsUndelete
+    , CatalogsUndelete
+
+    -- * Request Lenses
+    , cuXgafv
+    , cuUploadProtocol
+    , cuAccessToken
+    , cuUploadType
+    , cuPayload
+    , cuName
+    , cuCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.catalogs.undelete@ method which the
+-- 'CatalogsUndelete' request conforms to.
+type CatalogsUndeleteResource =
+     "v1beta1" :>
+       CaptureMode "name" "undelete" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON]
+                       GoogleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest
+                       :>
+                       Post '[JSON]
+                         GoogleCloudPrivatecatalogproducerV1beta1Catalog
+
+-- | Undeletes a deleted Catalog and all resources under it.
+--
+-- /See:/ 'catalogsUndelete' smart constructor.
+data CatalogsUndelete =
+  CatalogsUndelete'
+    { _cuXgafv          :: !(Maybe Xgafv)
+    , _cuUploadProtocol :: !(Maybe Text)
+    , _cuAccessToken    :: !(Maybe Text)
+    , _cuUploadType     :: !(Maybe Text)
+    , _cuPayload        :: !GoogleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest
+    , _cuName           :: !Text
+    , _cuCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogsUndelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cuXgafv'
+--
+-- * 'cuUploadProtocol'
+--
+-- * 'cuAccessToken'
+--
+-- * 'cuUploadType'
+--
+-- * 'cuPayload'
+--
+-- * 'cuName'
+--
+-- * 'cuCallback'
+catalogsUndelete
+    :: GoogleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest -- ^ 'cuPayload'
+    -> Text -- ^ 'cuName'
+    -> CatalogsUndelete
+catalogsUndelete pCuPayload_ pCuName_ =
+  CatalogsUndelete'
+    { _cuXgafv = Nothing
+    , _cuUploadProtocol = Nothing
+    , _cuAccessToken = Nothing
+    , _cuUploadType = Nothing
+    , _cuPayload = pCuPayload_
+    , _cuName = pCuName_
+    , _cuCallback = Nothing
+    }
+
+
+-- | V1 error format.
+cuXgafv :: Lens' CatalogsUndelete (Maybe Xgafv)
+cuXgafv = lens _cuXgafv (\ s a -> s{_cuXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cuUploadProtocol :: Lens' CatalogsUndelete (Maybe Text)
+cuUploadProtocol
+  = lens _cuUploadProtocol
+      (\ s a -> s{_cuUploadProtocol = a})
+
+-- | OAuth access token.
+cuAccessToken :: Lens' CatalogsUndelete (Maybe Text)
+cuAccessToken
+  = lens _cuAccessToken
+      (\ s a -> s{_cuAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cuUploadType :: Lens' CatalogsUndelete (Maybe Text)
+cuUploadType
+  = lens _cuUploadType (\ s a -> s{_cuUploadType = a})
+
+-- | Multipart request metadata.
+cuPayload :: Lens' CatalogsUndelete GoogleCloudPrivatecatalogproducerV1beta1UndeleteCatalogRequest
+cuPayload
+  = lens _cuPayload (\ s a -> s{_cuPayload = a})
+
+-- | The resource name of the catalog.
+cuName :: Lens' CatalogsUndelete Text
+cuName = lens _cuName (\ s a -> s{_cuName = a})
+
+-- | JSONP
+cuCallback :: Lens' CatalogsUndelete (Maybe Text)
+cuCallback
+  = lens _cuCallback (\ s a -> s{_cuCallback = a})
+
+instance GoogleRequest CatalogsUndelete where
+        type Rs CatalogsUndelete =
+             GoogleCloudPrivatecatalogproducerV1beta1Catalog
+        type Scopes CatalogsUndelete =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient CatalogsUndelete'{..}
+          = go _cuName _cuXgafv _cuUploadProtocol
+              _cuAccessToken
+              _cuUploadType
+              _cuCallback
+              (Just AltJSON)
+              _cuPayload
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CatalogsUndeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Operations/Cancel.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Operations/Cancel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Operations/Cancel.hs
@@ -0,0 +1,178 @@
+{-# 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.CloudPrivateCatalogProducer.Operations.Cancel
+-- 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)
+--
+-- Starts asynchronous cancellation on a long-running operation. The server
+-- makes a best effort to cancel the operation, but success is not
+-- guaranteed. If the server doesn\'t support this method, it returns
+-- \`google.rpc.Code.UNIMPLEMENTED\`. Clients can use
+-- Operations.GetOperation or other methods to check whether the
+-- cancellation succeeded or whether the operation completed despite
+-- cancellation. On successful cancellation, the operation is not deleted;
+-- instead, it becomes an operation with an Operation.error value with a
+-- google.rpc.Status.code of 1, corresponding to \`Code.CANCELLED\`.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.operations.cancel@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Operations.Cancel
+    (
+    -- * REST Resource
+      OperationsCancelResource
+
+    -- * Creating a Request
+    , operationsCancel
+    , OperationsCancel
+
+    -- * Request Lenses
+    , ocXgafv
+    , ocUploadProtocol
+    , ocAccessToken
+    , ocUploadType
+    , ocPayload
+    , ocName
+    , ocCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.operations.cancel@ method which the
+-- 'OperationsCancel' request conforms to.
+type OperationsCancelResource =
+     "v1beta1" :>
+       CaptureMode "name" "cancel" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON]
+                       GoogleLongrunningCancelOperationRequest
+                       :> Post '[JSON] GoogleProtobufEmpty
+
+-- | Starts asynchronous cancellation on a long-running operation. The server
+-- makes a best effort to cancel the operation, but success is not
+-- guaranteed. If the server doesn\'t support this method, it returns
+-- \`google.rpc.Code.UNIMPLEMENTED\`. Clients can use
+-- Operations.GetOperation or other methods to check whether the
+-- cancellation succeeded or whether the operation completed despite
+-- cancellation. On successful cancellation, the operation is not deleted;
+-- instead, it becomes an operation with an Operation.error value with a
+-- google.rpc.Status.code of 1, corresponding to \`Code.CANCELLED\`.
+--
+-- /See:/ 'operationsCancel' smart constructor.
+data OperationsCancel =
+  OperationsCancel'
+    { _ocXgafv          :: !(Maybe Xgafv)
+    , _ocUploadProtocol :: !(Maybe Text)
+    , _ocAccessToken    :: !(Maybe Text)
+    , _ocUploadType     :: !(Maybe Text)
+    , _ocPayload        :: !GoogleLongrunningCancelOperationRequest
+    , _ocName           :: !Text
+    , _ocCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'OperationsCancel' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ocXgafv'
+--
+-- * 'ocUploadProtocol'
+--
+-- * 'ocAccessToken'
+--
+-- * 'ocUploadType'
+--
+-- * 'ocPayload'
+--
+-- * 'ocName'
+--
+-- * 'ocCallback'
+operationsCancel
+    :: GoogleLongrunningCancelOperationRequest -- ^ 'ocPayload'
+    -> Text -- ^ 'ocName'
+    -> OperationsCancel
+operationsCancel pOcPayload_ pOcName_ =
+  OperationsCancel'
+    { _ocXgafv = Nothing
+    , _ocUploadProtocol = Nothing
+    , _ocAccessToken = Nothing
+    , _ocUploadType = Nothing
+    , _ocPayload = pOcPayload_
+    , _ocName = pOcName_
+    , _ocCallback = Nothing
+    }
+
+
+-- | V1 error format.
+ocXgafv :: Lens' OperationsCancel (Maybe Xgafv)
+ocXgafv = lens _ocXgafv (\ s a -> s{_ocXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ocUploadProtocol :: Lens' OperationsCancel (Maybe Text)
+ocUploadProtocol
+  = lens _ocUploadProtocol
+      (\ s a -> s{_ocUploadProtocol = a})
+
+-- | OAuth access token.
+ocAccessToken :: Lens' OperationsCancel (Maybe Text)
+ocAccessToken
+  = lens _ocAccessToken
+      (\ s a -> s{_ocAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ocUploadType :: Lens' OperationsCancel (Maybe Text)
+ocUploadType
+  = lens _ocUploadType (\ s a -> s{_ocUploadType = a})
+
+-- | Multipart request metadata.
+ocPayload :: Lens' OperationsCancel GoogleLongrunningCancelOperationRequest
+ocPayload
+  = lens _ocPayload (\ s a -> s{_ocPayload = a})
+
+-- | The name of the operation resource to be cancelled.
+ocName :: Lens' OperationsCancel Text
+ocName = lens _ocName (\ s a -> s{_ocName = a})
+
+-- | JSONP
+ocCallback :: Lens' OperationsCancel (Maybe Text)
+ocCallback
+  = lens _ocCallback (\ s a -> s{_ocCallback = a})
+
+instance GoogleRequest OperationsCancel where
+        type Rs OperationsCancel = GoogleProtobufEmpty
+        type Scopes OperationsCancel =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient OperationsCancel'{..}
+          = go _ocName _ocXgafv _ocUploadProtocol
+              _ocAccessToken
+              _ocUploadType
+              _ocCallback
+              (Just AltJSON)
+              _ocPayload
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy OperationsCancelResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Operations/Delete.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Operations/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Operations/Delete.hs
@@ -0,0 +1,154 @@
+{-# 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.CloudPrivateCatalogProducer.Operations.Delete
+-- 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)
+--
+-- Deletes a long-running operation. This method indicates that the client
+-- is no longer interested in the operation result. It does not cancel the
+-- operation. If the server doesn\'t support this method, it returns
+-- \`google.rpc.Code.UNIMPLEMENTED\`.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.operations.delete@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Operations.Delete
+    (
+    -- * REST Resource
+      OperationsDeleteResource
+
+    -- * Creating a Request
+    , operationsDelete
+    , OperationsDelete
+
+    -- * Request Lenses
+    , odXgafv
+    , odUploadProtocol
+    , odAccessToken
+    , odUploadType
+    , odName
+    , odCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.operations.delete@ method which the
+-- 'OperationsDelete' request conforms to.
+type OperationsDeleteResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     Delete '[JSON] GoogleProtobufEmpty
+
+-- | Deletes a long-running operation. This method indicates that the client
+-- is no longer interested in the operation result. It does not cancel the
+-- operation. If the server doesn\'t support this method, it returns
+-- \`google.rpc.Code.UNIMPLEMENTED\`.
+--
+-- /See:/ 'operationsDelete' smart constructor.
+data OperationsDelete =
+  OperationsDelete'
+    { _odXgafv          :: !(Maybe Xgafv)
+    , _odUploadProtocol :: !(Maybe Text)
+    , _odAccessToken    :: !(Maybe Text)
+    , _odUploadType     :: !(Maybe Text)
+    , _odName           :: !Text
+    , _odCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'OperationsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'odXgafv'
+--
+-- * 'odUploadProtocol'
+--
+-- * 'odAccessToken'
+--
+-- * 'odUploadType'
+--
+-- * 'odName'
+--
+-- * 'odCallback'
+operationsDelete
+    :: Text -- ^ 'odName'
+    -> OperationsDelete
+operationsDelete pOdName_ =
+  OperationsDelete'
+    { _odXgafv = Nothing
+    , _odUploadProtocol = Nothing
+    , _odAccessToken = Nothing
+    , _odUploadType = Nothing
+    , _odName = pOdName_
+    , _odCallback = Nothing
+    }
+
+
+-- | V1 error format.
+odXgafv :: Lens' OperationsDelete (Maybe Xgafv)
+odXgafv = lens _odXgafv (\ s a -> s{_odXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+odUploadProtocol :: Lens' OperationsDelete (Maybe Text)
+odUploadProtocol
+  = lens _odUploadProtocol
+      (\ s a -> s{_odUploadProtocol = a})
+
+-- | OAuth access token.
+odAccessToken :: Lens' OperationsDelete (Maybe Text)
+odAccessToken
+  = lens _odAccessToken
+      (\ s a -> s{_odAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+odUploadType :: Lens' OperationsDelete (Maybe Text)
+odUploadType
+  = lens _odUploadType (\ s a -> s{_odUploadType = a})
+
+-- | The name of the operation resource to be deleted.
+odName :: Lens' OperationsDelete Text
+odName = lens _odName (\ s a -> s{_odName = a})
+
+-- | JSONP
+odCallback :: Lens' OperationsDelete (Maybe Text)
+odCallback
+  = lens _odCallback (\ s a -> s{_odCallback = a})
+
+instance GoogleRequest OperationsDelete where
+        type Rs OperationsDelete = GoogleProtobufEmpty
+        type Scopes OperationsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient OperationsDelete'{..}
+          = go _odName _odXgafv _odUploadProtocol
+              _odAccessToken
+              _odUploadType
+              _odCallback
+              (Just AltJSON)
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy OperationsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Operations/Get.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Operations/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Operations/Get.hs
@@ -0,0 +1,151 @@
+{-# 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.CloudPrivateCatalogProducer.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://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.operations.get@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Operations.Get
+    (
+    -- * REST Resource
+      OperationsGetResource
+
+    -- * Creating a Request
+    , operationsGet
+    , OperationsGet
+
+    -- * Request Lenses
+    , ogXgafv
+    , ogUploadProtocol
+    , ogAccessToken
+    , ogUploadType
+    , ogName
+    , ogCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.operations.get@ method which the
+-- 'OperationsGet' request conforms to.
+type OperationsGetResource =
+     "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] GoogleLongrunningOperation
+
+-- | 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:/ 'operationsGet' smart constructor.
+data OperationsGet =
+  OperationsGet'
+    { _ogXgafv          :: !(Maybe Xgafv)
+    , _ogUploadProtocol :: !(Maybe Text)
+    , _ogAccessToken    :: !(Maybe Text)
+    , _ogUploadType     :: !(Maybe Text)
+    , _ogName           :: !Text
+    , _ogCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'OperationsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ogXgafv'
+--
+-- * 'ogUploadProtocol'
+--
+-- * 'ogAccessToken'
+--
+-- * 'ogUploadType'
+--
+-- * 'ogName'
+--
+-- * 'ogCallback'
+operationsGet
+    :: Text -- ^ 'ogName'
+    -> OperationsGet
+operationsGet pOgName_ =
+  OperationsGet'
+    { _ogXgafv = Nothing
+    , _ogUploadProtocol = Nothing
+    , _ogAccessToken = Nothing
+    , _ogUploadType = Nothing
+    , _ogName = pOgName_
+    , _ogCallback = Nothing
+    }
+
+
+-- | V1 error format.
+ogXgafv :: Lens' OperationsGet (Maybe Xgafv)
+ogXgafv = lens _ogXgafv (\ s a -> s{_ogXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ogUploadProtocol :: Lens' OperationsGet (Maybe Text)
+ogUploadProtocol
+  = lens _ogUploadProtocol
+      (\ s a -> s{_ogUploadProtocol = a})
+
+-- | OAuth access token.
+ogAccessToken :: Lens' OperationsGet (Maybe Text)
+ogAccessToken
+  = lens _ogAccessToken
+      (\ s a -> s{_ogAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ogUploadType :: Lens' OperationsGet (Maybe Text)
+ogUploadType
+  = lens _ogUploadType (\ s a -> s{_ogUploadType = a})
+
+-- | The name of the operation resource.
+ogName :: Lens' OperationsGet Text
+ogName = lens _ogName (\ s a -> s{_ogName = a})
+
+-- | JSONP
+ogCallback :: Lens' OperationsGet (Maybe Text)
+ogCallback
+  = lens _ogCallback (\ s a -> s{_ogCallback = a})
+
+instance GoogleRequest OperationsGet where
+        type Rs OperationsGet = GoogleLongrunningOperation
+        type Scopes OperationsGet =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient OperationsGet'{..}
+          = go _ogName _ogXgafv _ogUploadProtocol
+              _ogAccessToken
+              _ogUploadType
+              _ogCallback
+              (Just AltJSON)
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient (Proxy :: Proxy OperationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Operations/List.hs b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Operations/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudPrivateCatalogProducer/Operations/List.hs
@@ -0,0 +1,202 @@
+{-# 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.CloudPrivateCatalogProducer.Operations.List
+-- 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)
+--
+-- Lists operations that match the specified filter in the request. If the
+-- server doesn\'t support this method, it returns \`UNIMPLEMENTED\`. NOTE:
+-- the \`name\` binding allows API services to override the binding to use
+-- different resource name schemes, such as \`users\/*\/operations\`. To
+-- override the binding, API services can add a binding such as
+-- \`\"\/v1\/{name=users\/*}\/operations\"\` to their service
+-- configuration. For backwards compatibility, the default name includes
+-- the operations collection id, however overriding users must ensure the
+-- name binding is the parent resource, without the operations collection
+-- id.
+--
+-- /See:/ <https://sites.google.com/corp/google.com/cloudprivatecatalog Cloud Private Catalog Producer API Reference> for @cloudprivatecatalogproducer.operations.list@.
+module Network.Google.Resource.CloudPrivateCatalogProducer.Operations.List
+    (
+    -- * REST Resource
+      OperationsListResource
+
+    -- * Creating a Request
+    , operationsList
+    , OperationsList
+
+    -- * Request Lenses
+    , olXgafv
+    , olUploadProtocol
+    , olAccessToken
+    , olUploadType
+    , olName
+    , olFilter
+    , olPageToken
+    , olPageSize
+    , olCallback
+    ) where
+
+import           Network.Google.CloudPrivateCatalogProducer.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudprivatecatalogproducer.operations.list@ method which the
+-- 'OperationsList' request conforms to.
+type OperationsListResource =
+     "v1beta1" :>
+       "operations" :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "name" Text :>
+                   QueryParam "filter" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "pageSize" (Textual Int32) :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] GoogleLongrunningListOperationsResponse
+
+-- | Lists operations that match the specified filter in the request. If the
+-- server doesn\'t support this method, it returns \`UNIMPLEMENTED\`. NOTE:
+-- the \`name\` binding allows API services to override the binding to use
+-- different resource name schemes, such as \`users\/*\/operations\`. To
+-- override the binding, API services can add a binding such as
+-- \`\"\/v1\/{name=users\/*}\/operations\"\` to their service
+-- configuration. For backwards compatibility, the default name includes
+-- the operations collection id, however overriding users must ensure the
+-- name binding is the parent resource, without the operations collection
+-- id.
+--
+-- /See:/ 'operationsList' smart constructor.
+data OperationsList =
+  OperationsList'
+    { _olXgafv          :: !(Maybe Xgafv)
+    , _olUploadProtocol :: !(Maybe Text)
+    , _olAccessToken    :: !(Maybe Text)
+    , _olUploadType     :: !(Maybe Text)
+    , _olName           :: !(Maybe Text)
+    , _olFilter         :: !(Maybe Text)
+    , _olPageToken      :: !(Maybe Text)
+    , _olPageSize       :: !(Maybe (Textual Int32))
+    , _olCallback       :: !(Maybe Text)
+    }
+  deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'OperationsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'olXgafv'
+--
+-- * 'olUploadProtocol'
+--
+-- * 'olAccessToken'
+--
+-- * 'olUploadType'
+--
+-- * 'olName'
+--
+-- * 'olFilter'
+--
+-- * 'olPageToken'
+--
+-- * 'olPageSize'
+--
+-- * 'olCallback'
+operationsList
+    :: OperationsList
+operationsList =
+  OperationsList'
+    { _olXgafv = Nothing
+    , _olUploadProtocol = Nothing
+    , _olAccessToken = Nothing
+    , _olUploadType = Nothing
+    , _olName = Nothing
+    , _olFilter = Nothing
+    , _olPageToken = Nothing
+    , _olPageSize = Nothing
+    , _olCallback = Nothing
+    }
+
+
+-- | V1 error format.
+olXgafv :: Lens' OperationsList (Maybe Xgafv)
+olXgafv = lens _olXgafv (\ s a -> s{_olXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+olUploadProtocol :: Lens' OperationsList (Maybe Text)
+olUploadProtocol
+  = lens _olUploadProtocol
+      (\ s a -> s{_olUploadProtocol = a})
+
+-- | OAuth access token.
+olAccessToken :: Lens' OperationsList (Maybe Text)
+olAccessToken
+  = lens _olAccessToken
+      (\ s a -> s{_olAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+olUploadType :: Lens' OperationsList (Maybe Text)
+olUploadType
+  = lens _olUploadType (\ s a -> s{_olUploadType = a})
+
+-- | The name of the operation\'s parent resource.
+olName :: Lens' OperationsList (Maybe Text)
+olName = lens _olName (\ s a -> s{_olName = a})
+
+-- | The standard list filter.
+olFilter :: Lens' OperationsList (Maybe Text)
+olFilter = lens _olFilter (\ s a -> s{_olFilter = a})
+
+-- | The standard list page token.
+olPageToken :: Lens' OperationsList (Maybe Text)
+olPageToken
+  = lens _olPageToken (\ s a -> s{_olPageToken = a})
+
+-- | The standard list page size.
+olPageSize :: Lens' OperationsList (Maybe Int32)
+olPageSize
+  = lens _olPageSize (\ s a -> s{_olPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+olCallback :: Lens' OperationsList (Maybe Text)
+olCallback
+  = lens _olCallback (\ s a -> s{_olCallback = a})
+
+instance GoogleRequest OperationsList where
+        type Rs OperationsList =
+             GoogleLongrunningListOperationsResponse
+        type Scopes OperationsList =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient OperationsList'{..}
+          = go _olXgafv _olUploadProtocol _olAccessToken
+              _olUploadType
+              _olName
+              _olFilter
+              _olPageToken
+              _olPageSize
+              _olCallback
+              (Just AltJSON)
+              cloudPrivateCatalogProducerService
+          where go
+                  = buildClient (Proxy :: Proxy OperationsListResource)
+                      mempty
diff --git a/gogol-cloudprivatecatalogproducer.cabal b/gogol-cloudprivatecatalogproducer.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-cloudprivatecatalogproducer.cabal
@@ -0,0 +1,75 @@
+name:                  gogol-cloudprivatecatalogproducer
+version:               0.5.0
+synopsis:              Google Cloud Private Catalog Producer 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:
+    Enables cloud users to manage and share enterprise catalogs intheir
+    organizations.
+    .
+    /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.CloudPrivateCatalogProducer
+        , Network.Google.CloudPrivateCatalogProducer.Types
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Associations.Create
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Associations.Delete
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Associations.Get
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Associations.List
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Create
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Delete
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Get
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.GetIAMPolicy
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.List
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Patch
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Copy
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Create
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Delete
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Get
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Icons.Upload
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.List
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Patch
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Create
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Delete
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Get
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.List
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Products.Versions.Patch
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.SetIAMPolicy
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.TestIAMPermissions
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Catalogs.Undelete
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Operations.Cancel
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Operations.Delete
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Operations.Get
+        , Network.Google.Resource.CloudPrivateCatalogProducer.Operations.List
+
+    other-modules:
+          Network.Google.CloudPrivateCatalogProducer.Types.Product
+        , Network.Google.CloudPrivateCatalogProducer.Types.Sum
+
+    build-depends:
+          gogol-core == 0.5.0.*
+        , base       >= 4.7 && < 5
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
