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-androiddeviceprovisioning
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.3.0`
+
+
+## Description
+
+A client library for the Google Android Device Provisioning Partner.
+
+
+## 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-androiddeviceprovisioning` 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/AndroidDeviceProvisioning.hs b/gen/Network/Google/AndroidDeviceProvisioning.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AndroidDeviceProvisioning.hs
@@ -0,0 +1,494 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.AndroidDeviceProvisioning
+-- 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)
+--
+-- Automates Android zero-touch enrollment for device resellers, customers,
+-- and EMMs.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference>
+module Network.Google.AndroidDeviceProvisioning
+    (
+    -- * Service Configuration
+      androidDeviceProvisioningService
+
+    -- * API Declaration
+    , AndroidDeviceProvisioningAPI
+
+    -- * Resources
+
+    -- ** androiddeviceprovisioning.customers.configurations.create
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.Create
+
+    -- ** androiddeviceprovisioning.customers.configurations.delete
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.Delete
+
+    -- ** androiddeviceprovisioning.customers.configurations.get
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.Get
+
+    -- ** androiddeviceprovisioning.customers.configurations.list
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.List
+
+    -- ** androiddeviceprovisioning.customers.configurations.patch
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.Patch
+
+    -- ** androiddeviceprovisioning.customers.devices.applyConfiguration
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.ApplyConfiguration
+
+    -- ** androiddeviceprovisioning.customers.devices.get
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.Get
+
+    -- ** androiddeviceprovisioning.customers.devices.list
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.List
+
+    -- ** androiddeviceprovisioning.customers.devices.removeConfiguration
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.RemoveConfiguration
+
+    -- ** androiddeviceprovisioning.customers.devices.unclaim
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.Unclaim
+
+    -- ** androiddeviceprovisioning.customers.dpcs.list
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Dpcs.List
+
+    -- ** androiddeviceprovisioning.customers.list
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Customers.List
+
+    -- ** androiddeviceprovisioning.operations.get
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Operations.Get
+
+    -- ** androiddeviceprovisioning.partners.customers.create
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Customers.Create
+
+    -- ** androiddeviceprovisioning.partners.customers.list
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Customers.List
+
+    -- ** androiddeviceprovisioning.partners.devices.claim
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.Claim
+
+    -- ** androiddeviceprovisioning.partners.devices.claimAsync
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.ClaimAsync
+
+    -- ** androiddeviceprovisioning.partners.devices.findByIdentifier
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.FindByIdentifier
+
+    -- ** androiddeviceprovisioning.partners.devices.findByOwner
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.FindByOwner
+
+    -- ** androiddeviceprovisioning.partners.devices.get
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.Get
+
+    -- ** androiddeviceprovisioning.partners.devices.metadata
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.Metadata
+
+    -- ** androiddeviceprovisioning.partners.devices.unclaim
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.Unclaim
+
+    -- ** androiddeviceprovisioning.partners.devices.unclaimAsync
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.UnclaimAsync
+
+    -- ** androiddeviceprovisioning.partners.devices.updateMetadataAsync
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.UpdateMetadataAsync
+
+    -- ** androiddeviceprovisioning.partners.vendors.customers.list
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Vendors.Customers.List
+
+    -- ** androiddeviceprovisioning.partners.vendors.list
+    , module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Vendors.List
+
+    -- * Types
+
+    -- ** UpdateMetadataArguments
+    , UpdateMetadataArguments
+    , updateMetadataArguments
+    , umaDeviceIdentifier
+    , umaDeviceId
+    , umaDeviceMetadata
+
+    -- ** Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- ** PartnerClaim
+    , PartnerClaim
+    , partnerClaim
+    , pcDeviceIdentifier
+    , pcSectionType
+    , pcCustomerId
+    , pcDeviceMetadata
+
+    -- ** CustomerUnclaimDeviceRequest
+    , CustomerUnclaimDeviceRequest
+    , customerUnclaimDeviceRequest
+    , cudrDevice
+
+    -- ** PerDeviceStatusInBatchStatus
+    , PerDeviceStatusInBatchStatus (..)
+
+    -- ** FindDevicesByOwnerRequestSectionType
+    , FindDevicesByOwnerRequestSectionType (..)
+
+    -- ** FindDevicesByDeviceIdentifierRequest
+    , FindDevicesByDeviceIdentifierRequest
+    , findDevicesByDeviceIdentifierRequest
+    , fdbdirDeviceIdentifier
+    , fdbdirLimit
+    , fdbdirPageToken
+
+    -- ** FindDevicesByOwnerResponse
+    , FindDevicesByOwnerResponse
+    , findDevicesByOwnerResponse
+    , fdborNextPageToken
+    , fdborTotalSize
+    , fdborDevices
+
+    -- ** DeviceMetadataEntries
+    , DeviceMetadataEntries
+    , deviceMetadataEntries
+    , dmeAddtional
+
+    -- ** PartnerUnclaim
+    , PartnerUnclaim
+    , partnerUnclaim
+    , puDeviceIdentifier
+    , puSectionType
+    , puDeviceId
+
+    -- ** Dpc
+    , Dpc
+    , dpc
+    , dPackageName
+    , dName
+    , dDpcName
+
+    -- ** ListVendorCustomersResponse
+    , ListVendorCustomersResponse
+    , listVendorCustomersResponse
+    , lvcrCustomers
+    , lvcrNextPageToken
+    , lvcrTotalSize
+
+    -- ** OperationPerDevice
+    , OperationPerDevice
+    , operationPerDevice
+    , opdUpdateMetadata
+    , opdResult
+    , opdClaim
+    , opdUnclaim
+
+    -- ** Operation
+    , Operation
+    , operation
+    , oDone
+    , oError
+    , oResponse
+    , oName
+    , oMetadata
+
+    -- ** Empty
+    , Empty
+    , empty
+
+    -- ** PartnerClaimSectionType
+    , PartnerClaimSectionType (..)
+
+    -- ** PerDeviceStatusInBatch
+    , PerDeviceStatusInBatch
+    , perDeviceStatusInBatch
+    , pdsibStatus
+    , pdsibErrorIdentifier
+    , pdsibDeviceId
+    , pdsibErrorMessage
+
+    -- ** ClaimDevicesRequest
+    , ClaimDevicesRequest
+    , claimDevicesRequest
+    , cdrClaims
+
+    -- ** Device
+    , Device
+    , device
+    , devDeviceIdentifier
+    , devClaims
+    , devName
+    , devDeviceId
+    , devDeviceMetadata
+    , devConfiguration
+
+    -- ** ClaimDeviceRequest
+    , ClaimDeviceRequest
+    , claimDeviceRequest
+    , cdrDeviceIdentifier
+    , cdrSectionType
+    , cdrCustomerId
+    , cdrDeviceMetadata
+
+    -- ** DeviceReference
+    , DeviceReference
+    , deviceReference
+    , drDeviceIdentifier
+    , drDeviceId
+
+    -- ** CustomerRemoveConfigurationRequest
+    , CustomerRemoveConfigurationRequest
+    , customerRemoveConfigurationRequest
+    , crcrDevice
+
+    -- ** DeviceIdentifier
+    , DeviceIdentifier
+    , deviceIdentifier
+    , diManufacturer
+    , diModel
+    , diMeid
+    , diImei
+    , diSerialNumber
+
+    -- ** UnclaimDevicesRequest
+    , UnclaimDevicesRequest
+    , unclaimDevicesRequest
+    , udrUnclaims
+
+    -- ** StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- ** ListVendorsResponse
+    , ListVendorsResponse
+    , listVendorsResponse
+    , lvrNextPageToken
+    , lvrTotalSize
+    , lvrVendors
+
+    -- ** CustomerListConfigurationsResponse
+    , CustomerListConfigurationsResponse
+    , customerListConfigurationsResponse
+    , clcrConfigurations
+
+    -- ** PartnerUnclaimSectionType
+    , PartnerUnclaimSectionType (..)
+
+    -- ** CustomerApplyConfigurationRequest
+    , CustomerApplyConfigurationRequest
+    , customerApplyConfigurationRequest
+    , cacrDevice
+    , cacrConfiguration
+
+    -- ** Company
+    , Company
+    , company
+    , cCompanyId
+    , cCompanyName
+    , cOwnerEmails
+    , cTermsStatus
+    , cName
+    , cAdminEmails
+
+    -- ** Xgafv
+    , Xgafv (..)
+
+    -- ** ClaimDeviceRequestSectionType
+    , ClaimDeviceRequestSectionType (..)
+
+    -- ** CustomerListCustomersResponse
+    , CustomerListCustomersResponse
+    , customerListCustomersResponse
+    , clcrCustomers
+    , clcrNextPageToken
+
+    -- ** DeviceClaim
+    , DeviceClaim
+    , deviceClaim
+    , dcSectionType
+    , dcOwnerCompanyId
+    , dcResellerId
+
+    -- ** UpdateDeviceMetadataRequest
+    , UpdateDeviceMetadataRequest
+    , updateDeviceMetadataRequest
+    , udmrDeviceMetadata
+
+    -- ** DeviceMetadata
+    , DeviceMetadata
+    , deviceMetadata
+    , dmEntries
+
+    -- ** FindDevicesByOwnerRequest
+    , FindDevicesByOwnerRequest
+    , findDevicesByOwnerRequest
+    , fdborSectionType
+    , fdborCustomerId
+    , fdborLimit
+    , fdborPageToken
+
+    -- ** FindDevicesByDeviceIdentifierResponse
+    , FindDevicesByDeviceIdentifierResponse
+    , findDevicesByDeviceIdentifierResponse
+    , fdbdirNextPageToken
+    , fdbdirTotalSize
+    , fdbdirDevices
+
+    -- ** UnclaimDeviceRequest
+    , UnclaimDeviceRequest
+    , unclaimDeviceRequest
+    , udrDeviceIdentifier
+    , udrSectionType
+    , udrDeviceId
+
+    -- ** DevicesLongRunningOperationResponse
+    , DevicesLongRunningOperationResponse
+    , devicesLongRunningOperationResponse
+    , dlrorSuccessCount
+    , dlrorPerDeviceStatus
+
+    -- ** Configuration
+    , Configuration
+    , configuration
+    , conContactPhone
+    , conContactEmail
+    , conConfigurationName
+    , conConfigurationId
+    , conCustomMessage
+    , conCompanyName
+    , conDpcExtras
+    , conName
+    , conDpcResourcePath
+    , conIsDefault
+
+    -- ** OperationMetadata
+    , OperationMetadata
+    , operationMetadata
+    , omAddtional
+
+    -- ** DeviceClaimSectionType
+    , DeviceClaimSectionType (..)
+
+    -- ** ListCustomersResponse
+    , ListCustomersResponse
+    , listCustomersResponse
+    , lcrCustomers
+    , lcrNextPageToken
+    , lcrTotalSize
+
+    -- ** DevicesLongRunningOperationMetadata
+    , DevicesLongRunningOperationMetadata
+    , devicesLongRunningOperationMetadata
+    , dlromProgress
+    , dlromDevicesCount
+    , dlromProcessingStatus
+
+    -- ** OperationResponse
+    , OperationResponse
+    , operationResponse
+    , orAddtional
+
+    -- ** CompanyTermsStatus
+    , CompanyTermsStatus (..)
+
+    -- ** CustomerListDevicesResponse
+    , CustomerListDevicesResponse
+    , customerListDevicesResponse
+    , cldrNextPageToken
+    , cldrDevices
+
+    -- ** UpdateDeviceMetadataInBatchRequest
+    , UpdateDeviceMetadataInBatchRequest
+    , updateDeviceMetadataInBatchRequest
+    , udmibrUpdates
+
+    -- ** UnclaimDeviceRequestSectionType
+    , UnclaimDeviceRequestSectionType (..)
+
+    -- ** CustomerListDpcsResponse
+    , CustomerListDpcsResponse
+    , customerListDpcsResponse
+    , cldrDpcs
+
+    -- ** ClaimDeviceResponse
+    , ClaimDeviceResponse
+    , claimDeviceResponse
+    , cdrDeviceName
+    , cdrDeviceId
+
+    -- ** CreateCustomerRequest
+    , CreateCustomerRequest
+    , createCustomerRequest
+    , ccrCustomer
+
+    -- ** DevicesLongRunningOperationMetadataProcessingStatus
+    , DevicesLongRunningOperationMetadataProcessingStatus (..)
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.Create
+import           Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.Delete
+import           Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.Get
+import           Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.List
+import           Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.Patch
+import           Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.ApplyConfiguration
+import           Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.Get
+import           Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.List
+import           Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.RemoveConfiguration
+import           Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.Unclaim
+import           Network.Google.Resource.AndroidDeviceProvisioning.Customers.Dpcs.List
+import           Network.Google.Resource.AndroidDeviceProvisioning.Customers.List
+import           Network.Google.Resource.AndroidDeviceProvisioning.Operations.Get
+import           Network.Google.Resource.AndroidDeviceProvisioning.Partners.Customers.Create
+import           Network.Google.Resource.AndroidDeviceProvisioning.Partners.Customers.List
+import           Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.Claim
+import           Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.ClaimAsync
+import           Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.FindByIdentifier
+import           Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.FindByOwner
+import           Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.Get
+import           Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.Metadata
+import           Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.Unclaim
+import           Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.UnclaimAsync
+import           Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.UpdateMetadataAsync
+import           Network.Google.Resource.AndroidDeviceProvisioning.Partners.Vendors.Customers.List
+import           Network.Google.Resource.AndroidDeviceProvisioning.Partners.Vendors.List
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Android Device Provisioning Partner API service.
+type AndroidDeviceProvisioningAPI =
+     CustomersDpcsListResource :<|>
+       CustomersConfigurationsListResource
+       :<|> CustomersConfigurationsPatchResource
+       :<|> CustomersConfigurationsGetResource
+       :<|> CustomersConfigurationsCreateResource
+       :<|> CustomersConfigurationsDeleteResource
+       :<|> CustomersDevicesApplyConfigurationResource
+       :<|> CustomersDevicesListResource
+       :<|> CustomersDevicesGetResource
+       :<|> CustomersDevicesRemoveConfigurationResource
+       :<|> CustomersDevicesUnclaimResource
+       :<|> CustomersListResource
+       :<|> PartnersCustomersListResource
+       :<|> PartnersCustomersCreateResource
+       :<|> PartnersVendorsCustomersListResource
+       :<|> PartnersVendorsListResource
+       :<|> PartnersDevicesClaimAsyncResource
+       :<|> PartnersDevicesGetResource
+       :<|> PartnersDevicesUnclaimAsyncResource
+       :<|> PartnersDevicesFindByOwnerResource
+       :<|> PartnersDevicesClaimResource
+       :<|> PartnersDevicesUpdateMetadataAsyncResource
+       :<|> PartnersDevicesMetadataResource
+       :<|> PartnersDevicesFindByIdentifierResource
+       :<|> PartnersDevicesUnclaimResource
+       :<|> OperationsGetResource
diff --git a/gen/Network/Google/AndroidDeviceProvisioning/Types.hs b/gen/Network/Google/AndroidDeviceProvisioning/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AndroidDeviceProvisioning/Types.hs
@@ -0,0 +1,355 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.AndroidDeviceProvisioning.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.AndroidDeviceProvisioning.Types
+    (
+    -- * Service Configuration
+      androidDeviceProvisioningService
+
+    -- * UpdateMetadataArguments
+    , UpdateMetadataArguments
+    , updateMetadataArguments
+    , umaDeviceIdentifier
+    , umaDeviceId
+    , umaDeviceMetadata
+
+    -- * Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- * PartnerClaim
+    , PartnerClaim
+    , partnerClaim
+    , pcDeviceIdentifier
+    , pcSectionType
+    , pcCustomerId
+    , pcDeviceMetadata
+
+    -- * CustomerUnclaimDeviceRequest
+    , CustomerUnclaimDeviceRequest
+    , customerUnclaimDeviceRequest
+    , cudrDevice
+
+    -- * PerDeviceStatusInBatchStatus
+    , PerDeviceStatusInBatchStatus (..)
+
+    -- * FindDevicesByOwnerRequestSectionType
+    , FindDevicesByOwnerRequestSectionType (..)
+
+    -- * FindDevicesByDeviceIdentifierRequest
+    , FindDevicesByDeviceIdentifierRequest
+    , findDevicesByDeviceIdentifierRequest
+    , fdbdirDeviceIdentifier
+    , fdbdirLimit
+    , fdbdirPageToken
+
+    -- * FindDevicesByOwnerResponse
+    , FindDevicesByOwnerResponse
+    , findDevicesByOwnerResponse
+    , fdborNextPageToken
+    , fdborTotalSize
+    , fdborDevices
+
+    -- * DeviceMetadataEntries
+    , DeviceMetadataEntries
+    , deviceMetadataEntries
+    , dmeAddtional
+
+    -- * PartnerUnclaim
+    , PartnerUnclaim
+    , partnerUnclaim
+    , puDeviceIdentifier
+    , puSectionType
+    , puDeviceId
+
+    -- * Dpc
+    , Dpc
+    , dpc
+    , dPackageName
+    , dName
+    , dDpcName
+
+    -- * ListVendorCustomersResponse
+    , ListVendorCustomersResponse
+    , listVendorCustomersResponse
+    , lvcrCustomers
+    , lvcrNextPageToken
+    , lvcrTotalSize
+
+    -- * OperationPerDevice
+    , OperationPerDevice
+    , operationPerDevice
+    , opdUpdateMetadata
+    , opdResult
+    , opdClaim
+    , opdUnclaim
+
+    -- * Operation
+    , Operation
+    , operation
+    , oDone
+    , oError
+    , oResponse
+    , oName
+    , oMetadata
+
+    -- * Empty
+    , Empty
+    , empty
+
+    -- * PartnerClaimSectionType
+    , PartnerClaimSectionType (..)
+
+    -- * PerDeviceStatusInBatch
+    , PerDeviceStatusInBatch
+    , perDeviceStatusInBatch
+    , pdsibStatus
+    , pdsibErrorIdentifier
+    , pdsibDeviceId
+    , pdsibErrorMessage
+
+    -- * ClaimDevicesRequest
+    , ClaimDevicesRequest
+    , claimDevicesRequest
+    , cdrClaims
+
+    -- * Device
+    , Device
+    , device
+    , devDeviceIdentifier
+    , devClaims
+    , devName
+    , devDeviceId
+    , devDeviceMetadata
+    , devConfiguration
+
+    -- * ClaimDeviceRequest
+    , ClaimDeviceRequest
+    , claimDeviceRequest
+    , cdrDeviceIdentifier
+    , cdrSectionType
+    , cdrCustomerId
+    , cdrDeviceMetadata
+
+    -- * DeviceReference
+    , DeviceReference
+    , deviceReference
+    , drDeviceIdentifier
+    , drDeviceId
+
+    -- * CustomerRemoveConfigurationRequest
+    , CustomerRemoveConfigurationRequest
+    , customerRemoveConfigurationRequest
+    , crcrDevice
+
+    -- * DeviceIdentifier
+    , DeviceIdentifier
+    , deviceIdentifier
+    , diManufacturer
+    , diModel
+    , diMeid
+    , diImei
+    , diSerialNumber
+
+    -- * UnclaimDevicesRequest
+    , UnclaimDevicesRequest
+    , unclaimDevicesRequest
+    , udrUnclaims
+
+    -- * StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- * ListVendorsResponse
+    , ListVendorsResponse
+    , listVendorsResponse
+    , lvrNextPageToken
+    , lvrTotalSize
+    , lvrVendors
+
+    -- * CustomerListConfigurationsResponse
+    , CustomerListConfigurationsResponse
+    , customerListConfigurationsResponse
+    , clcrConfigurations
+
+    -- * PartnerUnclaimSectionType
+    , PartnerUnclaimSectionType (..)
+
+    -- * CustomerApplyConfigurationRequest
+    , CustomerApplyConfigurationRequest
+    , customerApplyConfigurationRequest
+    , cacrDevice
+    , cacrConfiguration
+
+    -- * Company
+    , Company
+    , company
+    , cCompanyId
+    , cCompanyName
+    , cOwnerEmails
+    , cTermsStatus
+    , cName
+    , cAdminEmails
+
+    -- * Xgafv
+    , Xgafv (..)
+
+    -- * ClaimDeviceRequestSectionType
+    , ClaimDeviceRequestSectionType (..)
+
+    -- * CustomerListCustomersResponse
+    , CustomerListCustomersResponse
+    , customerListCustomersResponse
+    , clcrCustomers
+    , clcrNextPageToken
+
+    -- * DeviceClaim
+    , DeviceClaim
+    , deviceClaim
+    , dcSectionType
+    , dcOwnerCompanyId
+    , dcResellerId
+
+    -- * UpdateDeviceMetadataRequest
+    , UpdateDeviceMetadataRequest
+    , updateDeviceMetadataRequest
+    , udmrDeviceMetadata
+
+    -- * DeviceMetadata
+    , DeviceMetadata
+    , deviceMetadata
+    , dmEntries
+
+    -- * FindDevicesByOwnerRequest
+    , FindDevicesByOwnerRequest
+    , findDevicesByOwnerRequest
+    , fdborSectionType
+    , fdborCustomerId
+    , fdborLimit
+    , fdborPageToken
+
+    -- * FindDevicesByDeviceIdentifierResponse
+    , FindDevicesByDeviceIdentifierResponse
+    , findDevicesByDeviceIdentifierResponse
+    , fdbdirNextPageToken
+    , fdbdirTotalSize
+    , fdbdirDevices
+
+    -- * UnclaimDeviceRequest
+    , UnclaimDeviceRequest
+    , unclaimDeviceRequest
+    , udrDeviceIdentifier
+    , udrSectionType
+    , udrDeviceId
+
+    -- * DevicesLongRunningOperationResponse
+    , DevicesLongRunningOperationResponse
+    , devicesLongRunningOperationResponse
+    , dlrorSuccessCount
+    , dlrorPerDeviceStatus
+
+    -- * Configuration
+    , Configuration
+    , configuration
+    , conContactPhone
+    , conContactEmail
+    , conConfigurationName
+    , conConfigurationId
+    , conCustomMessage
+    , conCompanyName
+    , conDpcExtras
+    , conName
+    , conDpcResourcePath
+    , conIsDefault
+
+    -- * OperationMetadata
+    , OperationMetadata
+    , operationMetadata
+    , omAddtional
+
+    -- * DeviceClaimSectionType
+    , DeviceClaimSectionType (..)
+
+    -- * ListCustomersResponse
+    , ListCustomersResponse
+    , listCustomersResponse
+    , lcrCustomers
+    , lcrNextPageToken
+    , lcrTotalSize
+
+    -- * DevicesLongRunningOperationMetadata
+    , DevicesLongRunningOperationMetadata
+    , devicesLongRunningOperationMetadata
+    , dlromProgress
+    , dlromDevicesCount
+    , dlromProcessingStatus
+
+    -- * OperationResponse
+    , OperationResponse
+    , operationResponse
+    , orAddtional
+
+    -- * CompanyTermsStatus
+    , CompanyTermsStatus (..)
+
+    -- * CustomerListDevicesResponse
+    , CustomerListDevicesResponse
+    , customerListDevicesResponse
+    , cldrNextPageToken
+    , cldrDevices
+
+    -- * UpdateDeviceMetadataInBatchRequest
+    , UpdateDeviceMetadataInBatchRequest
+    , updateDeviceMetadataInBatchRequest
+    , udmibrUpdates
+
+    -- * UnclaimDeviceRequestSectionType
+    , UnclaimDeviceRequestSectionType (..)
+
+    -- * CustomerListDpcsResponse
+    , CustomerListDpcsResponse
+    , customerListDpcsResponse
+    , cldrDpcs
+
+    -- * ClaimDeviceResponse
+    , ClaimDeviceResponse
+    , claimDeviceResponse
+    , cdrDeviceName
+    , cdrDeviceId
+
+    -- * CreateCustomerRequest
+    , CreateCustomerRequest
+    , createCustomerRequest
+    , ccrCustomer
+
+    -- * DevicesLongRunningOperationMetadataProcessingStatus
+    , DevicesLongRunningOperationMetadataProcessingStatus (..)
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types.Product
+import           Network.Google.AndroidDeviceProvisioning.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1' of the Android Device Provisioning Partner API. This contains the host and root path used as a starting point for constructing service requests.
+androidDeviceProvisioningService :: ServiceConfig
+androidDeviceProvisioningService
+  = defaultService
+      (ServiceId "androiddeviceprovisioning:v1")
+      "androiddeviceprovisioning.googleapis.com"
diff --git a/gen/Network/Google/AndroidDeviceProvisioning/Types/Product.hs b/gen/Network/Google/AndroidDeviceProvisioning/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AndroidDeviceProvisioning/Types/Product.hs
@@ -0,0 +1,2676 @@
+{-# 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.AndroidDeviceProvisioning.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.AndroidDeviceProvisioning.Types.Product where
+
+import           Network.Google.AndroidDeviceProvisioning.Types.Sum
+import           Network.Google.Prelude
+
+-- | Identifies metdata updates to one device.
+--
+-- /See:/ 'updateMetadataArguments' smart constructor.
+data UpdateMetadataArguments = UpdateMetadataArguments'
+    { _umaDeviceIdentifier :: !(Maybe DeviceIdentifier)
+    , _umaDeviceId         :: !(Maybe (Textual Int64))
+    , _umaDeviceMetadata   :: !(Maybe DeviceMetadata)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateMetadataArguments' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umaDeviceIdentifier'
+--
+-- * 'umaDeviceId'
+--
+-- * 'umaDeviceMetadata'
+updateMetadataArguments
+    :: UpdateMetadataArguments
+updateMetadataArguments =
+    UpdateMetadataArguments'
+    { _umaDeviceIdentifier = Nothing
+    , _umaDeviceId = Nothing
+    , _umaDeviceMetadata = Nothing
+    }
+
+-- | Device identifier.
+umaDeviceIdentifier :: Lens' UpdateMetadataArguments (Maybe DeviceIdentifier)
+umaDeviceIdentifier
+  = lens _umaDeviceIdentifier
+      (\ s a -> s{_umaDeviceIdentifier = a})
+
+-- | Device ID of the device.
+umaDeviceId :: Lens' UpdateMetadataArguments (Maybe Int64)
+umaDeviceId
+  = lens _umaDeviceId (\ s a -> s{_umaDeviceId = a}) .
+      mapping _Coerce
+
+-- | Required. The metadata to update.
+umaDeviceMetadata :: Lens' UpdateMetadataArguments (Maybe DeviceMetadata)
+umaDeviceMetadata
+  = lens _umaDeviceMetadata
+      (\ s a -> s{_umaDeviceMetadata = a})
+
+instance FromJSON UpdateMetadataArguments where
+        parseJSON
+          = withObject "UpdateMetadataArguments"
+              (\ o ->
+                 UpdateMetadataArguments' <$>
+                   (o .:? "deviceIdentifier") <*> (o .:? "deviceId") <*>
+                     (o .:? "deviceMetadata"))
+
+instance ToJSON UpdateMetadataArguments where
+        toJSON UpdateMetadataArguments'{..}
+          = object
+              (catMaybes
+                 [("deviceIdentifier" .=) <$> _umaDeviceIdentifier,
+                  ("deviceId" .=) <$> _umaDeviceId,
+                  ("deviceMetadata" .=) <$> _umaDeviceMetadata])
+
+-- | The \`Status\` type defines a logical error model that is suitable for
+-- different programming environments, including REST APIs and RPC APIs. It
+-- is used by [gRPC](https:\/\/github.com\/grpc). The error model is
+-- designed to be: - Simple to use and understand for most users - Flexible
+-- enough to meet unexpected needs # Overview The \`Status\` message
+-- contains three pieces of data: error code, error message, and error
+-- details. The error code should be an enum value of google.rpc.Code, but
+-- it may accept additional error codes if needed. The error message should
+-- be a developer-facing English message that helps developers *understand*
+-- and *resolve* the error. If a localized user-facing error message is
+-- needed, put the localized message in the error details or localize it in
+-- the client. The optional error details may contain arbitrary information
+-- about the error. There is a predefined set of error detail types in the
+-- package \`google.rpc\` that can be used for common error conditions. #
+-- Language mapping The \`Status\` message is the logical representation of
+-- the error model, but it is not necessarily the actual wire format. When
+-- the \`Status\` message is exposed in different client libraries and
+-- different wire protocols, it can be mapped differently. For example, it
+-- will likely be mapped to some exceptions in Java, but more likely mapped
+-- to some error codes in C. # Other uses The error model and the
+-- \`Status\` message can be used in a variety of environments, either with
+-- or without APIs, to provide a consistent developer experience across
+-- different environments. Example uses of this error model include: -
+-- Partial errors. If a service needs to return partial errors to the
+-- client, it may embed the \`Status\` in the normal response to indicate
+-- the partial errors. - Workflow errors. A typical workflow has multiple
+-- steps. Each step may have a \`Status\` message for error reporting. -
+-- Batch operations. If a client uses batch request and batch response, the
+-- \`Status\` message should be used directly inside batch response, one
+-- for each error sub-response. - Asynchronous operations. If an API call
+-- embeds asynchronous operation results in its response, the status of
+-- those operations should be represented directly using the \`Status\`
+-- message. - Logging. If some API errors are stored in logs, the message
+-- \`Status\` could be used directly after any stripping needed for
+-- security\/privacy reasons.
+--
+-- /See:/ 'status' smart constructor.
+data Status = Status'
+    { _sDetails :: !(Maybe [StatusDetailsItem])
+    , _sCode    :: !(Maybe (Textual Int32))
+    , _sMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Status' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sDetails'
+--
+-- * 'sCode'
+--
+-- * 'sMessage'
+status
+    :: Status
+status =
+    Status'
+    { _sDetails = Nothing
+    , _sCode = Nothing
+    , _sMessage = Nothing
+    }
+
+-- | A list of messages that carry the error details. There is a common set
+-- of message types for APIs to use.
+sDetails :: Lens' Status [StatusDetailsItem]
+sDetails
+  = lens _sDetails (\ s a -> s{_sDetails = a}) .
+      _Default
+      . _Coerce
+
+-- | The status code, which should be an enum value of google.rpc.Code.
+sCode :: Lens' Status (Maybe Int32)
+sCode
+  = lens _sCode (\ s a -> s{_sCode = a}) .
+      mapping _Coerce
+
+-- | A developer-facing error message, which should be in English. Any
+-- user-facing error message should be localized and sent in the
+-- google.rpc.Status.details field, or localized by the client.
+sMessage :: Lens' Status (Maybe Text)
+sMessage = lens _sMessage (\ s a -> s{_sMessage = a})
+
+instance FromJSON Status where
+        parseJSON
+          = withObject "Status"
+              (\ o ->
+                 Status' <$>
+                   (o .:? "details" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON Status where
+        toJSON Status'{..}
+          = object
+              (catMaybes
+                 [("details" .=) <$> _sDetails,
+                  ("code" .=) <$> _sCode,
+                  ("message" .=) <$> _sMessage])
+
+-- | Identifies one claim request.
+--
+-- /See:/ 'partnerClaim' smart constructor.
+data PartnerClaim = PartnerClaim'
+    { _pcDeviceIdentifier :: !(Maybe DeviceIdentifier)
+    , _pcSectionType      :: !(Maybe PartnerClaimSectionType)
+    , _pcCustomerId       :: !(Maybe (Textual Int64))
+    , _pcDeviceMetadata   :: !(Maybe DeviceMetadata)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PartnerClaim' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pcDeviceIdentifier'
+--
+-- * 'pcSectionType'
+--
+-- * 'pcCustomerId'
+--
+-- * 'pcDeviceMetadata'
+partnerClaim
+    :: PartnerClaim
+partnerClaim =
+    PartnerClaim'
+    { _pcDeviceIdentifier = Nothing
+    , _pcSectionType = Nothing
+    , _pcCustomerId = Nothing
+    , _pcDeviceMetadata = Nothing
+    }
+
+-- | Required. Device identifier of the device.
+pcDeviceIdentifier :: Lens' PartnerClaim (Maybe DeviceIdentifier)
+pcDeviceIdentifier
+  = lens _pcDeviceIdentifier
+      (\ s a -> s{_pcDeviceIdentifier = a})
+
+-- | Required. The section type of the device\'s provisioning record.
+pcSectionType :: Lens' PartnerClaim (Maybe PartnerClaimSectionType)
+pcSectionType
+  = lens _pcSectionType
+      (\ s a -> s{_pcSectionType = a})
+
+-- | Required. The ID of the customer for whom the device is being claimed.
+pcCustomerId :: Lens' PartnerClaim (Maybe Int64)
+pcCustomerId
+  = lens _pcCustomerId (\ s a -> s{_pcCustomerId = a})
+      . mapping _Coerce
+
+-- | Required. The metadata to attach to the device at claim.
+pcDeviceMetadata :: Lens' PartnerClaim (Maybe DeviceMetadata)
+pcDeviceMetadata
+  = lens _pcDeviceMetadata
+      (\ s a -> s{_pcDeviceMetadata = a})
+
+instance FromJSON PartnerClaim where
+        parseJSON
+          = withObject "PartnerClaim"
+              (\ o ->
+                 PartnerClaim' <$>
+                   (o .:? "deviceIdentifier") <*> (o .:? "sectionType")
+                     <*> (o .:? "customerId")
+                     <*> (o .:? "deviceMetadata"))
+
+instance ToJSON PartnerClaim where
+        toJSON PartnerClaim'{..}
+          = object
+              (catMaybes
+                 [("deviceIdentifier" .=) <$> _pcDeviceIdentifier,
+                  ("sectionType" .=) <$> _pcSectionType,
+                  ("customerId" .=) <$> _pcCustomerId,
+                  ("deviceMetadata" .=) <$> _pcDeviceMetadata])
+
+-- | Request message for customer to unclaim a device.
+--
+-- /See:/ 'customerUnclaimDeviceRequest' smart constructor.
+newtype CustomerUnclaimDeviceRequest = CustomerUnclaimDeviceRequest'
+    { _cudrDevice :: Maybe DeviceReference
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomerUnclaimDeviceRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cudrDevice'
+customerUnclaimDeviceRequest
+    :: CustomerUnclaimDeviceRequest
+customerUnclaimDeviceRequest =
+    CustomerUnclaimDeviceRequest'
+    { _cudrDevice = Nothing
+    }
+
+-- | Required. The device to unclaim.
+cudrDevice :: Lens' CustomerUnclaimDeviceRequest (Maybe DeviceReference)
+cudrDevice
+  = lens _cudrDevice (\ s a -> s{_cudrDevice = a})
+
+instance FromJSON CustomerUnclaimDeviceRequest where
+        parseJSON
+          = withObject "CustomerUnclaimDeviceRequest"
+              (\ o ->
+                 CustomerUnclaimDeviceRequest' <$> (o .:? "device"))
+
+instance ToJSON CustomerUnclaimDeviceRequest where
+        toJSON CustomerUnclaimDeviceRequest'{..}
+          = object (catMaybes [("device" .=) <$> _cudrDevice])
+
+-- | Request to find devices.
+--
+-- /See:/ 'findDevicesByDeviceIdentifierRequest' smart constructor.
+data FindDevicesByDeviceIdentifierRequest = FindDevicesByDeviceIdentifierRequest'
+    { _fdbdirDeviceIdentifier :: !(Maybe DeviceIdentifier)
+    , _fdbdirLimit            :: !(Maybe (Textual Int64))
+    , _fdbdirPageToken        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FindDevicesByDeviceIdentifierRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fdbdirDeviceIdentifier'
+--
+-- * 'fdbdirLimit'
+--
+-- * 'fdbdirPageToken'
+findDevicesByDeviceIdentifierRequest
+    :: FindDevicesByDeviceIdentifierRequest
+findDevicesByDeviceIdentifierRequest =
+    FindDevicesByDeviceIdentifierRequest'
+    { _fdbdirDeviceIdentifier = Nothing
+    , _fdbdirLimit = Nothing
+    , _fdbdirPageToken = Nothing
+    }
+
+-- | Required. The device identifier to search for.
+fdbdirDeviceIdentifier :: Lens' FindDevicesByDeviceIdentifierRequest (Maybe DeviceIdentifier)
+fdbdirDeviceIdentifier
+  = lens _fdbdirDeviceIdentifier
+      (\ s a -> s{_fdbdirDeviceIdentifier = a})
+
+-- | Required. The maximum number of devices to show in a page of results.
+-- Must be between 1 and 100 inclusive.
+fdbdirLimit :: Lens' FindDevicesByDeviceIdentifierRequest (Maybe Int64)
+fdbdirLimit
+  = lens _fdbdirLimit (\ s a -> s{_fdbdirLimit = a}) .
+      mapping _Coerce
+
+-- | A token specifying which result page to return.
+fdbdirPageToken :: Lens' FindDevicesByDeviceIdentifierRequest (Maybe Text)
+fdbdirPageToken
+  = lens _fdbdirPageToken
+      (\ s a -> s{_fdbdirPageToken = a})
+
+instance FromJSON
+         FindDevicesByDeviceIdentifierRequest where
+        parseJSON
+          = withObject "FindDevicesByDeviceIdentifierRequest"
+              (\ o ->
+                 FindDevicesByDeviceIdentifierRequest' <$>
+                   (o .:? "deviceIdentifier") <*> (o .:? "limit") <*>
+                     (o .:? "pageToken"))
+
+instance ToJSON FindDevicesByDeviceIdentifierRequest
+         where
+        toJSON FindDevicesByDeviceIdentifierRequest'{..}
+          = object
+              (catMaybes
+                 [("deviceIdentifier" .=) <$> _fdbdirDeviceIdentifier,
+                  ("limit" .=) <$> _fdbdirLimit,
+                  ("pageToken" .=) <$> _fdbdirPageToken])
+
+-- | Response containing found devices.
+--
+-- /See:/ 'findDevicesByOwnerResponse' smart constructor.
+data FindDevicesByOwnerResponse = FindDevicesByOwnerResponse'
+    { _fdborNextPageToken :: !(Maybe Text)
+    , _fdborTotalSize     :: !(Maybe (Textual Int32))
+    , _fdborDevices       :: !(Maybe [Device])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FindDevicesByOwnerResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fdborNextPageToken'
+--
+-- * 'fdborTotalSize'
+--
+-- * 'fdborDevices'
+findDevicesByOwnerResponse
+    :: FindDevicesByOwnerResponse
+findDevicesByOwnerResponse =
+    FindDevicesByOwnerResponse'
+    { _fdborNextPageToken = Nothing
+    , _fdborTotalSize = Nothing
+    , _fdborDevices = Nothing
+    }
+
+-- | A token used to access the next page of results. Omitted if no further
+-- results are available.
+fdborNextPageToken :: Lens' FindDevicesByOwnerResponse (Maybe Text)
+fdborNextPageToken
+  = lens _fdborNextPageToken
+      (\ s a -> s{_fdborNextPageToken = a})
+
+-- | The total count of items in the list irrespective of pagination.
+fdborTotalSize :: Lens' FindDevicesByOwnerResponse (Maybe Int32)
+fdborTotalSize
+  = lens _fdborTotalSize
+      (\ s a -> s{_fdborTotalSize = a})
+      . mapping _Coerce
+
+-- | The customer\'s devices.
+fdborDevices :: Lens' FindDevicesByOwnerResponse [Device]
+fdborDevices
+  = lens _fdborDevices (\ s a -> s{_fdborDevices = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON FindDevicesByOwnerResponse where
+        parseJSON
+          = withObject "FindDevicesByOwnerResponse"
+              (\ o ->
+                 FindDevicesByOwnerResponse' <$>
+                   (o .:? "nextPageToken") <*> (o .:? "totalSize") <*>
+                     (o .:? "devices" .!= mempty))
+
+instance ToJSON FindDevicesByOwnerResponse where
+        toJSON FindDevicesByOwnerResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _fdborNextPageToken,
+                  ("totalSize" .=) <$> _fdborTotalSize,
+                  ("devices" .=) <$> _fdborDevices])
+
+-- | Metadata entries recorded as key-value pairs.
+--
+-- /See:/ 'deviceMetadataEntries' smart constructor.
+newtype DeviceMetadataEntries = DeviceMetadataEntries'
+    { _dmeAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeviceMetadataEntries' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dmeAddtional'
+deviceMetadataEntries
+    :: HashMap Text Text -- ^ 'dmeAddtional'
+    -> DeviceMetadataEntries
+deviceMetadataEntries pDmeAddtional_ =
+    DeviceMetadataEntries'
+    { _dmeAddtional = _Coerce # pDmeAddtional_
+    }
+
+dmeAddtional :: Lens' DeviceMetadataEntries (HashMap Text Text)
+dmeAddtional
+  = lens _dmeAddtional (\ s a -> s{_dmeAddtional = a})
+      . _Coerce
+
+instance FromJSON DeviceMetadataEntries where
+        parseJSON
+          = withObject "DeviceMetadataEntries"
+              (\ o ->
+                 DeviceMetadataEntries' <$> (parseJSONObject o))
+
+instance ToJSON DeviceMetadataEntries where
+        toJSON = toJSON . _dmeAddtional
+
+-- | Identifies one unclaim request.
+--
+-- /See:/ 'partnerUnclaim' smart constructor.
+data PartnerUnclaim = PartnerUnclaim'
+    { _puDeviceIdentifier :: !(Maybe DeviceIdentifier)
+    , _puSectionType      :: !(Maybe PartnerUnclaimSectionType)
+    , _puDeviceId         :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PartnerUnclaim' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'puDeviceIdentifier'
+--
+-- * 'puSectionType'
+--
+-- * 'puDeviceId'
+partnerUnclaim
+    :: PartnerUnclaim
+partnerUnclaim =
+    PartnerUnclaim'
+    { _puDeviceIdentifier = Nothing
+    , _puSectionType = Nothing
+    , _puDeviceId = Nothing
+    }
+
+-- | Device identifier of the device.
+puDeviceIdentifier :: Lens' PartnerUnclaim (Maybe DeviceIdentifier)
+puDeviceIdentifier
+  = lens _puDeviceIdentifier
+      (\ s a -> s{_puDeviceIdentifier = a})
+
+-- | Required. The section type of the device\'s provisioning record.
+puSectionType :: Lens' PartnerUnclaim (Maybe PartnerUnclaimSectionType)
+puSectionType
+  = lens _puSectionType
+      (\ s a -> s{_puSectionType = a})
+
+-- | Device ID of the device.
+puDeviceId :: Lens' PartnerUnclaim (Maybe Int64)
+puDeviceId
+  = lens _puDeviceId (\ s a -> s{_puDeviceId = a}) .
+      mapping _Coerce
+
+instance FromJSON PartnerUnclaim where
+        parseJSON
+          = withObject "PartnerUnclaim"
+              (\ o ->
+                 PartnerUnclaim' <$>
+                   (o .:? "deviceIdentifier") <*> (o .:? "sectionType")
+                     <*> (o .:? "deviceId"))
+
+instance ToJSON PartnerUnclaim where
+        toJSON PartnerUnclaim'{..}
+          = object
+              (catMaybes
+                 [("deviceIdentifier" .=) <$> _puDeviceIdentifier,
+                  ("sectionType" .=) <$> _puSectionType,
+                  ("deviceId" .=) <$> _puDeviceId])
+
+-- | An EMM\'s DPC ([device policy
+-- controller](http:\/\/developer.android.com\/work\/dpc\/build-dpc.html)).
+-- Zero-touch enrollment installs a DPC (listed in the \`Configuration\`)
+-- on a device to maintain the customer\'s mobile policies. All the DPCs
+-- listed by the API support zero-touch enrollment and are available in
+-- Google Play.
+--
+-- /See:/ 'dpc' smart constructor.
+data Dpc = Dpc'
+    { _dPackageName :: !(Maybe Text)
+    , _dName        :: !(Maybe Text)
+    , _dDpcName     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Dpc' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dPackageName'
+--
+-- * 'dName'
+--
+-- * 'dDpcName'
+dpc
+    :: Dpc
+dpc =
+    Dpc'
+    { _dPackageName = Nothing
+    , _dName = Nothing
+    , _dDpcName = Nothing
+    }
+
+-- | Output only. The DPC\'s Android application ID that looks like a Java
+-- package name. Zero-touch enrollment installs the DPC app onto a device
+-- using this identifier.
+dPackageName :: Lens' Dpc (Maybe Text)
+dPackageName
+  = lens _dPackageName (\ s a -> s{_dPackageName = a})
+
+-- | Output only. The API resource name in the format
+-- \`customers\/[CUSTOMER_ID]\/dpcs\/[DPC_ID]\`. Assigned by the server. To
+-- maintain a reference to a DPC across customer accounts, persist and
+-- match the last path component (\`DPC_ID\`).
+dName :: Lens' Dpc (Maybe Text)
+dName = lens _dName (\ s a -> s{_dName = a})
+
+-- | Output only. The title of the DPC app in Google Play. For example,
+-- _Google Apps Device Policy_. Useful in an application\'s user interface.
+dDpcName :: Lens' Dpc (Maybe Text)
+dDpcName = lens _dDpcName (\ s a -> s{_dDpcName = a})
+
+instance FromJSON Dpc where
+        parseJSON
+          = withObject "Dpc"
+              (\ o ->
+                 Dpc' <$>
+                   (o .:? "packageName") <*> (o .:? "name") <*>
+                     (o .:? "dpcName"))
+
+instance ToJSON Dpc where
+        toJSON Dpc'{..}
+          = object
+              (catMaybes
+                 [("packageName" .=) <$> _dPackageName,
+                  ("name" .=) <$> _dName,
+                  ("dpcName" .=) <$> _dDpcName])
+
+-- | Response message to list customers of the vendor.
+--
+-- /See:/ 'listVendorCustomersResponse' smart constructor.
+data ListVendorCustomersResponse = ListVendorCustomersResponse'
+    { _lvcrCustomers     :: !(Maybe [Company])
+    , _lvcrNextPageToken :: !(Maybe Text)
+    , _lvcrTotalSize     :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListVendorCustomersResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lvcrCustomers'
+--
+-- * 'lvcrNextPageToken'
+--
+-- * 'lvcrTotalSize'
+listVendorCustomersResponse
+    :: ListVendorCustomersResponse
+listVendorCustomersResponse =
+    ListVendorCustomersResponse'
+    { _lvcrCustomers = Nothing
+    , _lvcrNextPageToken = Nothing
+    , _lvcrTotalSize = Nothing
+    }
+
+-- | List of customers of the vendor.
+lvcrCustomers :: Lens' ListVendorCustomersResponse [Company]
+lvcrCustomers
+  = lens _lvcrCustomers
+      (\ s a -> s{_lvcrCustomers = a})
+      . _Default
+      . _Coerce
+
+-- | A token to retrieve the next page of results. Omitted if no further
+-- results are available.
+lvcrNextPageToken :: Lens' ListVendorCustomersResponse (Maybe Text)
+lvcrNextPageToken
+  = lens _lvcrNextPageToken
+      (\ s a -> s{_lvcrNextPageToken = a})
+
+-- | The total count of items in the list irrespective of pagination.
+lvcrTotalSize :: Lens' ListVendorCustomersResponse (Maybe Int32)
+lvcrTotalSize
+  = lens _lvcrTotalSize
+      (\ s a -> s{_lvcrTotalSize = a})
+      . mapping _Coerce
+
+instance FromJSON ListVendorCustomersResponse where
+        parseJSON
+          = withObject "ListVendorCustomersResponse"
+              (\ o ->
+                 ListVendorCustomersResponse' <$>
+                   (o .:? "customers" .!= mempty) <*>
+                     (o .:? "nextPageToken")
+                     <*> (o .:? "totalSize"))
+
+instance ToJSON ListVendorCustomersResponse where
+        toJSON ListVendorCustomersResponse'{..}
+          = object
+              (catMaybes
+                 [("customers" .=) <$> _lvcrCustomers,
+                  ("nextPageToken" .=) <$> _lvcrNextPageToken,
+                  ("totalSize" .=) <$> _lvcrTotalSize])
+
+-- | A task for each device in the operation. Corresponds to each device
+-- change in the request.
+--
+-- /See:/ 'operationPerDevice' smart constructor.
+data OperationPerDevice = OperationPerDevice'
+    { _opdUpdateMetadata :: !(Maybe UpdateMetadataArguments)
+    , _opdResult         :: !(Maybe PerDeviceStatusInBatch)
+    , _opdClaim          :: !(Maybe PartnerClaim)
+    , _opdUnclaim        :: !(Maybe PartnerUnclaim)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationPerDevice' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'opdUpdateMetadata'
+--
+-- * 'opdResult'
+--
+-- * 'opdClaim'
+--
+-- * 'opdUnclaim'
+operationPerDevice
+    :: OperationPerDevice
+operationPerDevice =
+    OperationPerDevice'
+    { _opdUpdateMetadata = Nothing
+    , _opdResult = Nothing
+    , _opdClaim = Nothing
+    , _opdUnclaim = Nothing
+    }
+
+-- | A copy of the original metadata-update request received by the server.
+opdUpdateMetadata :: Lens' OperationPerDevice (Maybe UpdateMetadataArguments)
+opdUpdateMetadata
+  = lens _opdUpdateMetadata
+      (\ s a -> s{_opdUpdateMetadata = a})
+
+-- | The processing result for each device.
+opdResult :: Lens' OperationPerDevice (Maybe PerDeviceStatusInBatch)
+opdResult
+  = lens _opdResult (\ s a -> s{_opdResult = a})
+
+-- | A copy of the original device-claim request received by the server.
+opdClaim :: Lens' OperationPerDevice (Maybe PartnerClaim)
+opdClaim = lens _opdClaim (\ s a -> s{_opdClaim = a})
+
+-- | A copy of the original device-unclaim request received by the server.
+opdUnclaim :: Lens' OperationPerDevice (Maybe PartnerUnclaim)
+opdUnclaim
+  = lens _opdUnclaim (\ s a -> s{_opdUnclaim = a})
+
+instance FromJSON OperationPerDevice where
+        parseJSON
+          = withObject "OperationPerDevice"
+              (\ o ->
+                 OperationPerDevice' <$>
+                   (o .:? "updateMetadata") <*> (o .:? "result") <*>
+                     (o .:? "claim")
+                     <*> (o .:? "unclaim"))
+
+instance ToJSON OperationPerDevice where
+        toJSON OperationPerDevice'{..}
+          = object
+              (catMaybes
+                 [("updateMetadata" .=) <$> _opdUpdateMetadata,
+                  ("result" .=) <$> _opdResult,
+                  ("claim" .=) <$> _opdClaim,
+                  ("unclaim" .=) <$> _opdUnclaim])
+
+-- | This resource represents a long-running operation that is the result of
+-- a network API call.
+--
+-- /See:/ 'operation' smart constructor.
+data Operation = Operation'
+    { _oDone     :: !(Maybe Bool)
+    , _oError    :: !(Maybe Status)
+    , _oResponse :: !(Maybe OperationResponse)
+    , _oName     :: !(Maybe Text)
+    , _oMetadata :: !(Maybe OperationMetadata)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Operation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oDone'
+--
+-- * 'oError'
+--
+-- * 'oResponse'
+--
+-- * 'oName'
+--
+-- * 'oMetadata'
+operation
+    :: Operation
+operation =
+    Operation'
+    { _oDone = Nothing
+    , _oError = Nothing
+    , _oResponse = Nothing
+    , _oName = Nothing
+    , _oMetadata = Nothing
+    }
+
+-- | If the value is \`false\`, it means the operation is still in progress.
+-- If \`true\`, the operation is completed, and either \`error\` or
+-- \`response\` is available.
+oDone :: Lens' Operation (Maybe Bool)
+oDone = lens _oDone (\ s a -> s{_oDone = a})
+
+-- | This field will always be not set if the operation is created by
+-- \`claimAsync\`, \`unclaimAsync\`, or \`updateMetadataAsync\`. In this
+-- case, error information for each device is set in
+-- \`response.perDeviceStatus.result.status\`.
+oError :: Lens' Operation (Maybe Status)
+oError = lens _oError (\ s a -> s{_oError = a})
+
+-- | This field will contain a \`DevicesLongRunningOperationResponse\` object
+-- if the operation is created by \`claimAsync\`, \`unclaimAsync\`, or
+-- \`updateMetadataAsync\`.
+oResponse :: Lens' Operation (Maybe OperationResponse)
+oResponse
+  = lens _oResponse (\ s a -> s{_oResponse = a})
+
+-- | The server-assigned name, which is only unique within the same service
+-- that originally returns it. If you use the default HTTP mapping, the
+-- \`name\` should have the format of \`operations\/some\/unique\/name\`.
+oName :: Lens' Operation (Maybe Text)
+oName = lens _oName (\ s a -> s{_oName = a})
+
+-- | This field will contain a \`DevicesLongRunningOperationMetadata\` object
+-- if the operation is created by \`claimAsync\`, \`unclaimAsync\`, or
+-- \`updateMetadataAsync\`.
+oMetadata :: Lens' Operation (Maybe OperationMetadata)
+oMetadata
+  = lens _oMetadata (\ s a -> s{_oMetadata = a})
+
+instance FromJSON Operation where
+        parseJSON
+          = withObject "Operation"
+              (\ o ->
+                 Operation' <$>
+                   (o .:? "done") <*> (o .:? "error") <*>
+                     (o .:? "response")
+                     <*> (o .:? "name")
+                     <*> (o .:? "metadata"))
+
+instance ToJSON Operation where
+        toJSON Operation'{..}
+          = object
+              (catMaybes
+                 [("done" .=) <$> _oDone, ("error" .=) <$> _oError,
+                  ("response" .=) <$> _oResponse,
+                  ("name" .=) <$> _oName,
+                  ("metadata" .=) <$> _oMetadata])
+
+-- | 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:/ 'empty' smart constructor.
+data Empty =
+    Empty'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Empty' with the minimum fields required to make a request.
+--
+empty
+    :: Empty
+empty = Empty'
+
+instance FromJSON Empty where
+        parseJSON = withObject "Empty" (\ o -> pure Empty')
+
+instance ToJSON Empty where
+        toJSON = const emptyObject
+
+-- | Captures the processing status for each device in the operation.
+--
+-- /See:/ 'perDeviceStatusInBatch' smart constructor.
+data PerDeviceStatusInBatch = PerDeviceStatusInBatch'
+    { _pdsibStatus          :: !(Maybe PerDeviceStatusInBatchStatus)
+    , _pdsibErrorIdentifier :: !(Maybe Text)
+    , _pdsibDeviceId        :: !(Maybe (Textual Int64))
+    , _pdsibErrorMessage    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PerDeviceStatusInBatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdsibStatus'
+--
+-- * 'pdsibErrorIdentifier'
+--
+-- * 'pdsibDeviceId'
+--
+-- * 'pdsibErrorMessage'
+perDeviceStatusInBatch
+    :: PerDeviceStatusInBatch
+perDeviceStatusInBatch =
+    PerDeviceStatusInBatch'
+    { _pdsibStatus = Nothing
+    , _pdsibErrorIdentifier = Nothing
+    , _pdsibDeviceId = Nothing
+    , _pdsibErrorMessage = Nothing
+    }
+
+-- | The result status of the device after processing.
+pdsibStatus :: Lens' PerDeviceStatusInBatch (Maybe PerDeviceStatusInBatchStatus)
+pdsibStatus
+  = lens _pdsibStatus (\ s a -> s{_pdsibStatus = a})
+
+-- | If processing fails, the error type.
+pdsibErrorIdentifier :: Lens' PerDeviceStatusInBatch (Maybe Text)
+pdsibErrorIdentifier
+  = lens _pdsibErrorIdentifier
+      (\ s a -> s{_pdsibErrorIdentifier = a})
+
+-- | If processing succeeds, the device ID of the device.
+pdsibDeviceId :: Lens' PerDeviceStatusInBatch (Maybe Int64)
+pdsibDeviceId
+  = lens _pdsibDeviceId
+      (\ s a -> s{_pdsibDeviceId = a})
+      . mapping _Coerce
+
+-- | If processing fails, a developer message explaining what went wrong.
+pdsibErrorMessage :: Lens' PerDeviceStatusInBatch (Maybe Text)
+pdsibErrorMessage
+  = lens _pdsibErrorMessage
+      (\ s a -> s{_pdsibErrorMessage = a})
+
+instance FromJSON PerDeviceStatusInBatch where
+        parseJSON
+          = withObject "PerDeviceStatusInBatch"
+              (\ o ->
+                 PerDeviceStatusInBatch' <$>
+                   (o .:? "status") <*> (o .:? "errorIdentifier") <*>
+                     (o .:? "deviceId")
+                     <*> (o .:? "errorMessage"))
+
+instance ToJSON PerDeviceStatusInBatch where
+        toJSON PerDeviceStatusInBatch'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _pdsibStatus,
+                  ("errorIdentifier" .=) <$> _pdsibErrorIdentifier,
+                  ("deviceId" .=) <$> _pdsibDeviceId,
+                  ("errorMessage" .=) <$> _pdsibErrorMessage])
+
+-- | Request to claim devices asynchronously in batch. Claiming a device adds
+-- the device to zero-touch enrollment and shows the device in the
+-- customer\'s view of the portal.
+--
+-- /See:/ 'claimDevicesRequest' smart constructor.
+newtype ClaimDevicesRequest = ClaimDevicesRequest'
+    { _cdrClaims :: Maybe [PartnerClaim]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ClaimDevicesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdrClaims'
+claimDevicesRequest
+    :: ClaimDevicesRequest
+claimDevicesRequest =
+    ClaimDevicesRequest'
+    { _cdrClaims = Nothing
+    }
+
+-- | Required. A list of device claims.
+cdrClaims :: Lens' ClaimDevicesRequest [PartnerClaim]
+cdrClaims
+  = lens _cdrClaims (\ s a -> s{_cdrClaims = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ClaimDevicesRequest where
+        parseJSON
+          = withObject "ClaimDevicesRequest"
+              (\ o ->
+                 ClaimDevicesRequest' <$> (o .:? "claims" .!= mempty))
+
+instance ToJSON ClaimDevicesRequest where
+        toJSON ClaimDevicesRequest'{..}
+          = object (catMaybes [("claims" .=) <$> _cdrClaims])
+
+-- | An Android device registered for zero-touch enrollment.
+--
+-- /See:/ 'device' smart constructor.
+data Device = Device'
+    { _devDeviceIdentifier :: !(Maybe DeviceIdentifier)
+    , _devClaims           :: !(Maybe [DeviceClaim])
+    , _devName             :: !(Maybe Text)
+    , _devDeviceId         :: !(Maybe (Textual Int64))
+    , _devDeviceMetadata   :: !(Maybe DeviceMetadata)
+    , _devConfiguration    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Device' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'devDeviceIdentifier'
+--
+-- * 'devClaims'
+--
+-- * 'devName'
+--
+-- * 'devDeviceId'
+--
+-- * 'devDeviceMetadata'
+--
+-- * 'devConfiguration'
+device
+    :: Device
+device =
+    Device'
+    { _devDeviceIdentifier = Nothing
+    , _devClaims = Nothing
+    , _devName = Nothing
+    , _devDeviceId = Nothing
+    , _devDeviceMetadata = Nothing
+    , _devConfiguration = Nothing
+    }
+
+-- | The hardware IDs that identify a manufactured device. To learn more,
+-- read [Identifiers](\/zero-touch\/guides\/identifiers).
+devDeviceIdentifier :: Lens' Device (Maybe DeviceIdentifier)
+devDeviceIdentifier
+  = lens _devDeviceIdentifier
+      (\ s a -> s{_devDeviceIdentifier = a})
+
+-- | Output only. The provisioning claims for a device. Devices claimed for
+-- zero-touch enrollment have a claim with the type
+-- \`SECTION_TYPE_ZERO_TOUCH\`. Call \`partners.devices.unclaim\` or
+-- \`partners.devices.unclaimAsync\` to remove the device from zero-touch
+-- enrollment.
+devClaims :: Lens' Device [DeviceClaim]
+devClaims
+  = lens _devClaims (\ s a -> s{_devClaims = a}) .
+      _Default
+      . _Coerce
+
+-- | Output only. The API resource name in the format
+-- \`partners\/[PARTNER_ID]\/devices\/[DEVICE_ID]\`. Assigned by the
+-- server.
+devName :: Lens' Device (Maybe Text)
+devName = lens _devName (\ s a -> s{_devName = a})
+
+-- | Output only. The ID of the device. Assigned by the server.
+devDeviceId :: Lens' Device (Maybe Int64)
+devDeviceId
+  = lens _devDeviceId (\ s a -> s{_devDeviceId = a}) .
+      mapping _Coerce
+
+-- | The metadata attached to the device. Structured as key-value pairs. To
+-- learn more, read [Device metadata](\/zero-touch\/guides\/metadata).
+devDeviceMetadata :: Lens' Device (Maybe DeviceMetadata)
+devDeviceMetadata
+  = lens _devDeviceMetadata
+      (\ s a -> s{_devDeviceMetadata = a})
+
+-- | Not available to resellers.
+devConfiguration :: Lens' Device (Maybe Text)
+devConfiguration
+  = lens _devConfiguration
+      (\ s a -> s{_devConfiguration = a})
+
+instance FromJSON Device where
+        parseJSON
+          = withObject "Device"
+              (\ o ->
+                 Device' <$>
+                   (o .:? "deviceIdentifier") <*>
+                     (o .:? "claims" .!= mempty)
+                     <*> (o .:? "name")
+                     <*> (o .:? "deviceId")
+                     <*> (o .:? "deviceMetadata")
+                     <*> (o .:? "configuration"))
+
+instance ToJSON Device where
+        toJSON Device'{..}
+          = object
+              (catMaybes
+                 [("deviceIdentifier" .=) <$> _devDeviceIdentifier,
+                  ("claims" .=) <$> _devClaims,
+                  ("name" .=) <$> _devName,
+                  ("deviceId" .=) <$> _devDeviceId,
+                  ("deviceMetadata" .=) <$> _devDeviceMetadata,
+                  ("configuration" .=) <$> _devConfiguration])
+
+-- | Request message to claim a device on behalf of a customer.
+--
+-- /See:/ 'claimDeviceRequest' smart constructor.
+data ClaimDeviceRequest = ClaimDeviceRequest'
+    { _cdrDeviceIdentifier :: !(Maybe DeviceIdentifier)
+    , _cdrSectionType      :: !(Maybe ClaimDeviceRequestSectionType)
+    , _cdrCustomerId       :: !(Maybe (Textual Int64))
+    , _cdrDeviceMetadata   :: !(Maybe DeviceMetadata)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ClaimDeviceRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdrDeviceIdentifier'
+--
+-- * 'cdrSectionType'
+--
+-- * 'cdrCustomerId'
+--
+-- * 'cdrDeviceMetadata'
+claimDeviceRequest
+    :: ClaimDeviceRequest
+claimDeviceRequest =
+    ClaimDeviceRequest'
+    { _cdrDeviceIdentifier = Nothing
+    , _cdrSectionType = Nothing
+    , _cdrCustomerId = Nothing
+    , _cdrDeviceMetadata = Nothing
+    }
+
+-- | Required. The device identifier of the device to claim.
+cdrDeviceIdentifier :: Lens' ClaimDeviceRequest (Maybe DeviceIdentifier)
+cdrDeviceIdentifier
+  = lens _cdrDeviceIdentifier
+      (\ s a -> s{_cdrDeviceIdentifier = a})
+
+-- | Required. The section type of the device\'s provisioning record.
+cdrSectionType :: Lens' ClaimDeviceRequest (Maybe ClaimDeviceRequestSectionType)
+cdrSectionType
+  = lens _cdrSectionType
+      (\ s a -> s{_cdrSectionType = a})
+
+-- | Required. The ID of the customer for whom the device is being claimed.
+cdrCustomerId :: Lens' ClaimDeviceRequest (Maybe Int64)
+cdrCustomerId
+  = lens _cdrCustomerId
+      (\ s a -> s{_cdrCustomerId = a})
+      . mapping _Coerce
+
+-- | Optional. The metadata to attach to the device.
+cdrDeviceMetadata :: Lens' ClaimDeviceRequest (Maybe DeviceMetadata)
+cdrDeviceMetadata
+  = lens _cdrDeviceMetadata
+      (\ s a -> s{_cdrDeviceMetadata = a})
+
+instance FromJSON ClaimDeviceRequest where
+        parseJSON
+          = withObject "ClaimDeviceRequest"
+              (\ o ->
+                 ClaimDeviceRequest' <$>
+                   (o .:? "deviceIdentifier") <*> (o .:? "sectionType")
+                     <*> (o .:? "customerId")
+                     <*> (o .:? "deviceMetadata"))
+
+instance ToJSON ClaimDeviceRequest where
+        toJSON ClaimDeviceRequest'{..}
+          = object
+              (catMaybes
+                 [("deviceIdentifier" .=) <$> _cdrDeviceIdentifier,
+                  ("sectionType" .=) <$> _cdrSectionType,
+                  ("customerId" .=) <$> _cdrCustomerId,
+                  ("deviceMetadata" .=) <$> _cdrDeviceMetadata])
+
+-- | A \`DeviceReference\` is an API abstraction that lets you supply a
+-- _device_ argument to a method using one of the following identifier
+-- types: * A numeric API resource ID. * Real-world hardware IDs, such as
+-- IMEI number, belonging to the manufactured device. Methods that operate
+-- on devices take a \`DeviceReference\` as a parameter type because it\'s
+-- more flexible for the caller. To learn more about device identifiers,
+-- read [Identifiers](\/zero-touch\/guides\/identifiers).
+--
+-- /See:/ 'deviceReference' smart constructor.
+data DeviceReference = DeviceReference'
+    { _drDeviceIdentifier :: !(Maybe DeviceIdentifier)
+    , _drDeviceId         :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeviceReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drDeviceIdentifier'
+--
+-- * 'drDeviceId'
+deviceReference
+    :: DeviceReference
+deviceReference =
+    DeviceReference'
+    { _drDeviceIdentifier = Nothing
+    , _drDeviceId = Nothing
+    }
+
+-- | The hardware IDs of the device.
+drDeviceIdentifier :: Lens' DeviceReference (Maybe DeviceIdentifier)
+drDeviceIdentifier
+  = lens _drDeviceIdentifier
+      (\ s a -> s{_drDeviceIdentifier = a})
+
+-- | The ID of the device.
+drDeviceId :: Lens' DeviceReference (Maybe Int64)
+drDeviceId
+  = lens _drDeviceId (\ s a -> s{_drDeviceId = a}) .
+      mapping _Coerce
+
+instance FromJSON DeviceReference where
+        parseJSON
+          = withObject "DeviceReference"
+              (\ o ->
+                 DeviceReference' <$>
+                   (o .:? "deviceIdentifier") <*> (o .:? "deviceId"))
+
+instance ToJSON DeviceReference where
+        toJSON DeviceReference'{..}
+          = object
+              (catMaybes
+                 [("deviceIdentifier" .=) <$> _drDeviceIdentifier,
+                  ("deviceId" .=) <$> _drDeviceId])
+
+-- | Request message for customer to remove the configuration from device.
+--
+-- /See:/ 'customerRemoveConfigurationRequest' smart constructor.
+newtype CustomerRemoveConfigurationRequest = CustomerRemoveConfigurationRequest'
+    { _crcrDevice :: Maybe DeviceReference
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomerRemoveConfigurationRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crcrDevice'
+customerRemoveConfigurationRequest
+    :: CustomerRemoveConfigurationRequest
+customerRemoveConfigurationRequest =
+    CustomerRemoveConfigurationRequest'
+    { _crcrDevice = Nothing
+    }
+
+-- | Required. The device to remove the configuration from.
+crcrDevice :: Lens' CustomerRemoveConfigurationRequest (Maybe DeviceReference)
+crcrDevice
+  = lens _crcrDevice (\ s a -> s{_crcrDevice = a})
+
+instance FromJSON CustomerRemoveConfigurationRequest
+         where
+        parseJSON
+          = withObject "CustomerRemoveConfigurationRequest"
+              (\ o ->
+                 CustomerRemoveConfigurationRequest' <$>
+                   (o .:? "device"))
+
+instance ToJSON CustomerRemoveConfigurationRequest
+         where
+        toJSON CustomerRemoveConfigurationRequest'{..}
+          = object (catMaybes [("device" .=) <$> _crcrDevice])
+
+-- | Encapsulates hardware and product IDs to identify a manufactured device.
+-- To understand requirements on identifier sets, read
+-- [Identifiers](\/zero-touch\/guides\/identifiers).
+--
+-- /See:/ 'deviceIdentifier' smart constructor.
+data DeviceIdentifier = DeviceIdentifier'
+    { _diManufacturer :: !(Maybe Text)
+    , _diModel        :: !(Maybe Text)
+    , _diMeid         :: !(Maybe Text)
+    , _diImei         :: !(Maybe Text)
+    , _diSerialNumber :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeviceIdentifier' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'diManufacturer'
+--
+-- * 'diModel'
+--
+-- * 'diMeid'
+--
+-- * 'diImei'
+--
+-- * 'diSerialNumber'
+deviceIdentifier
+    :: DeviceIdentifier
+deviceIdentifier =
+    DeviceIdentifier'
+    { _diManufacturer = Nothing
+    , _diModel = Nothing
+    , _diMeid = Nothing
+    , _diImei = Nothing
+    , _diSerialNumber = Nothing
+    }
+
+-- | The device manufacturer’s name. Matches the device\'s built-in value
+-- returned from \`android.os.Build.MANUFACTURER\`. Allowed values are
+-- listed in
+-- [manufacturers](\/zero-touch\/resources\/manufacturer-names#manufacturers-names).
+diManufacturer :: Lens' DeviceIdentifier (Maybe Text)
+diManufacturer
+  = lens _diManufacturer
+      (\ s a -> s{_diManufacturer = a})
+
+-- | The device model\'s name. Matches the device\'s built-in value returned
+-- from \`android.os.Build.MODEL\`. Allowed values are listed in
+-- [models](\/zero-touch\/resources\/manufacturer-names#model-names).
+diModel :: Lens' DeviceIdentifier (Maybe Text)
+diModel = lens _diModel (\ s a -> s{_diModel = a})
+
+-- | The device’s MEID number.
+diMeid :: Lens' DeviceIdentifier (Maybe Text)
+diMeid = lens _diMeid (\ s a -> s{_diMeid = a})
+
+-- | The device’s IMEI number. Validated on input.
+diImei :: Lens' DeviceIdentifier (Maybe Text)
+diImei = lens _diImei (\ s a -> s{_diImei = a})
+
+-- | The manufacturer\'s serial number for the device. This value might not
+-- be unique across different device models.
+diSerialNumber :: Lens' DeviceIdentifier (Maybe Text)
+diSerialNumber
+  = lens _diSerialNumber
+      (\ s a -> s{_diSerialNumber = a})
+
+instance FromJSON DeviceIdentifier where
+        parseJSON
+          = withObject "DeviceIdentifier"
+              (\ o ->
+                 DeviceIdentifier' <$>
+                   (o .:? "manufacturer") <*> (o .:? "model") <*>
+                     (o .:? "meid")
+                     <*> (o .:? "imei")
+                     <*> (o .:? "serialNumber"))
+
+instance ToJSON DeviceIdentifier where
+        toJSON DeviceIdentifier'{..}
+          = object
+              (catMaybes
+                 [("manufacturer" .=) <$> _diManufacturer,
+                  ("model" .=) <$> _diModel, ("meid" .=) <$> _diMeid,
+                  ("imei" .=) <$> _diImei,
+                  ("serialNumber" .=) <$> _diSerialNumber])
+
+-- | Request to unclaim devices asynchronously in batch.
+--
+-- /See:/ 'unclaimDevicesRequest' smart constructor.
+newtype UnclaimDevicesRequest = UnclaimDevicesRequest'
+    { _udrUnclaims :: Maybe [PartnerUnclaim]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UnclaimDevicesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udrUnclaims'
+unclaimDevicesRequest
+    :: UnclaimDevicesRequest
+unclaimDevicesRequest =
+    UnclaimDevicesRequest'
+    { _udrUnclaims = Nothing
+    }
+
+-- | Required. The list of devices to unclaim.
+udrUnclaims :: Lens' UnclaimDevicesRequest [PartnerUnclaim]
+udrUnclaims
+  = lens _udrUnclaims (\ s a -> s{_udrUnclaims = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON UnclaimDevicesRequest where
+        parseJSON
+          = withObject "UnclaimDevicesRequest"
+              (\ o ->
+                 UnclaimDevicesRequest' <$>
+                   (o .:? "unclaims" .!= mempty))
+
+instance ToJSON UnclaimDevicesRequest where
+        toJSON UnclaimDevicesRequest'{..}
+          = object
+              (catMaybes [("unclaims" .=) <$> _udrUnclaims])
+
+--
+-- /See:/ 'statusDetailsItem' smart constructor.
+newtype StatusDetailsItem = StatusDetailsItem'
+    { _sdiAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StatusDetailsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdiAddtional'
+statusDetailsItem
+    :: HashMap Text JSONValue -- ^ 'sdiAddtional'
+    -> StatusDetailsItem
+statusDetailsItem pSdiAddtional_ =
+    StatusDetailsItem'
+    { _sdiAddtional = _Coerce # pSdiAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+sdiAddtional :: Lens' StatusDetailsItem (HashMap Text JSONValue)
+sdiAddtional
+  = lens _sdiAddtional (\ s a -> s{_sdiAddtional = a})
+      . _Coerce
+
+instance FromJSON StatusDetailsItem where
+        parseJSON
+          = withObject "StatusDetailsItem"
+              (\ o -> StatusDetailsItem' <$> (parseJSONObject o))
+
+instance ToJSON StatusDetailsItem where
+        toJSON = toJSON . _sdiAddtional
+
+-- | Response message to list vendors of the partner.
+--
+-- /See:/ 'listVendorsResponse' smart constructor.
+data ListVendorsResponse = ListVendorsResponse'
+    { _lvrNextPageToken :: !(Maybe Text)
+    , _lvrTotalSize     :: !(Maybe (Textual Int32))
+    , _lvrVendors       :: !(Maybe [Company])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListVendorsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lvrNextPageToken'
+--
+-- * 'lvrTotalSize'
+--
+-- * 'lvrVendors'
+listVendorsResponse
+    :: ListVendorsResponse
+listVendorsResponse =
+    ListVendorsResponse'
+    { _lvrNextPageToken = Nothing
+    , _lvrTotalSize = Nothing
+    , _lvrVendors = Nothing
+    }
+
+-- | A token to retrieve the next page of results. Omitted if no further
+-- results are available.
+lvrNextPageToken :: Lens' ListVendorsResponse (Maybe Text)
+lvrNextPageToken
+  = lens _lvrNextPageToken
+      (\ s a -> s{_lvrNextPageToken = a})
+
+-- | The total count of items in the list irrespective of pagination.
+lvrTotalSize :: Lens' ListVendorsResponse (Maybe Int32)
+lvrTotalSize
+  = lens _lvrTotalSize (\ s a -> s{_lvrTotalSize = a})
+      . mapping _Coerce
+
+-- | List of vendors of the reseller partner. Fields \`name\`, \`companyId\`
+-- and \`companyName\` are populated to the Company object.
+lvrVendors :: Lens' ListVendorsResponse [Company]
+lvrVendors
+  = lens _lvrVendors (\ s a -> s{_lvrVendors = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListVendorsResponse where
+        parseJSON
+          = withObject "ListVendorsResponse"
+              (\ o ->
+                 ListVendorsResponse' <$>
+                   (o .:? "nextPageToken") <*> (o .:? "totalSize") <*>
+                     (o .:? "vendors" .!= mempty))
+
+instance ToJSON ListVendorsResponse where
+        toJSON ListVendorsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lvrNextPageToken,
+                  ("totalSize" .=) <$> _lvrTotalSize,
+                  ("vendors" .=) <$> _lvrVendors])
+
+-- | Response message of customer\'s listing configuration.
+--
+-- /See:/ 'customerListConfigurationsResponse' smart constructor.
+newtype CustomerListConfigurationsResponse = CustomerListConfigurationsResponse'
+    { _clcrConfigurations :: Maybe [Configuration]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomerListConfigurationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clcrConfigurations'
+customerListConfigurationsResponse
+    :: CustomerListConfigurationsResponse
+customerListConfigurationsResponse =
+    CustomerListConfigurationsResponse'
+    { _clcrConfigurations = Nothing
+    }
+
+-- | The configurations.
+clcrConfigurations :: Lens' CustomerListConfigurationsResponse [Configuration]
+clcrConfigurations
+  = lens _clcrConfigurations
+      (\ s a -> s{_clcrConfigurations = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON CustomerListConfigurationsResponse
+         where
+        parseJSON
+          = withObject "CustomerListConfigurationsResponse"
+              (\ o ->
+                 CustomerListConfigurationsResponse' <$>
+                   (o .:? "configurations" .!= mempty))
+
+instance ToJSON CustomerListConfigurationsResponse
+         where
+        toJSON CustomerListConfigurationsResponse'{..}
+          = object
+              (catMaybes
+                 [("configurations" .=) <$> _clcrConfigurations])
+
+-- | Request message for customer to assign a configuration to device.
+--
+-- /See:/ 'customerApplyConfigurationRequest' smart constructor.
+data CustomerApplyConfigurationRequest = CustomerApplyConfigurationRequest'
+    { _cacrDevice        :: !(Maybe DeviceReference)
+    , _cacrConfiguration :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomerApplyConfigurationRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cacrDevice'
+--
+-- * 'cacrConfiguration'
+customerApplyConfigurationRequest
+    :: CustomerApplyConfigurationRequest
+customerApplyConfigurationRequest =
+    CustomerApplyConfigurationRequest'
+    { _cacrDevice = Nothing
+    , _cacrConfiguration = Nothing
+    }
+
+-- | Required. The device the configuration is applied to.
+cacrDevice :: Lens' CustomerApplyConfigurationRequest (Maybe DeviceReference)
+cacrDevice
+  = lens _cacrDevice (\ s a -> s{_cacrDevice = a})
+
+-- | Required. The configuration applied to the device in the format
+-- \`customers\/[CUSTOMER_ID]\/configurations\/[CONFIGURATION_ID]\`.
+cacrConfiguration :: Lens' CustomerApplyConfigurationRequest (Maybe Text)
+cacrConfiguration
+  = lens _cacrConfiguration
+      (\ s a -> s{_cacrConfiguration = a})
+
+instance FromJSON CustomerApplyConfigurationRequest
+         where
+        parseJSON
+          = withObject "CustomerApplyConfigurationRequest"
+              (\ o ->
+                 CustomerApplyConfigurationRequest' <$>
+                   (o .:? "device") <*> (o .:? "configuration"))
+
+instance ToJSON CustomerApplyConfigurationRequest
+         where
+        toJSON CustomerApplyConfigurationRequest'{..}
+          = object
+              (catMaybes
+                 [("device" .=) <$> _cacrDevice,
+                  ("configuration" .=) <$> _cacrConfiguration])
+
+-- | A reseller, vendor, or customer in the zero-touch reseller and customer
+-- APIs.
+--
+-- /See:/ 'company' smart constructor.
+data Company = Company'
+    { _cCompanyId   :: !(Maybe (Textual Int64))
+    , _cCompanyName :: !(Maybe Text)
+    , _cOwnerEmails :: !(Maybe [Text])
+    , _cTermsStatus :: !(Maybe CompanyTermsStatus)
+    , _cName        :: !(Maybe Text)
+    , _cAdminEmails :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Company' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cCompanyId'
+--
+-- * 'cCompanyName'
+--
+-- * 'cOwnerEmails'
+--
+-- * 'cTermsStatus'
+--
+-- * 'cName'
+--
+-- * 'cAdminEmails'
+company
+    :: Company
+company =
+    Company'
+    { _cCompanyId = Nothing
+    , _cCompanyName = Nothing
+    , _cOwnerEmails = Nothing
+    , _cTermsStatus = Nothing
+    , _cName = Nothing
+    , _cAdminEmails = Nothing
+    }
+
+-- | Output only. The ID of the company. Assigned by the server.
+cCompanyId :: Lens' Company (Maybe Int64)
+cCompanyId
+  = lens _cCompanyId (\ s a -> s{_cCompanyId = a}) .
+      mapping _Coerce
+
+-- | Required. The name of the company. For example _XYZ Corp_. Displayed to
+-- the company\'s employees in the zero-touch enrollment portal.
+cCompanyName :: Lens' Company (Maybe Text)
+cCompanyName
+  = lens _cCompanyName (\ s a -> s{_cCompanyName = a})
+
+-- | Input only. Email address of customer\'s users in the owner role. At
+-- least one \`owner_email\` is required. Each email address must be
+-- associated with a Google Account. Owners share the same access as admins
+-- but can also add, delete, and edit your organization\'s portal users.
+cOwnerEmails :: Lens' Company [Text]
+cOwnerEmails
+  = lens _cOwnerEmails (\ s a -> s{_cOwnerEmails = a})
+      . _Default
+      . _Coerce
+
+-- | Output only. Whether any user from the company has accepted the latest
+-- Terms of Service (ToS). See TermsStatus.
+cTermsStatus :: Lens' Company (Maybe CompanyTermsStatus)
+cTermsStatus
+  = lens _cTermsStatus (\ s a -> s{_cTermsStatus = a})
+
+-- | Output only. The API resource name of the company. The resource name is
+-- one of the following formats: *
+-- \`partners\/[PARTNER_ID]\/customers\/[CUSTOMER_ID]\` *
+-- \`partners\/[PARTNER_ID]\/vendors\/[VENDOR_ID]\` *
+-- \`partners\/[PARTNER_ID]\/vendors\/[VENDOR_ID]\/customers\/[CUSTOMER_ID]\`
+-- Assigned by the server.
+cName :: Lens' Company (Maybe Text)
+cName = lens _cName (\ s a -> s{_cName = a})
+
+-- | Input only. Optional. Email address of customer\'s users in the admin
+-- role. Each email address must be associated with a Google Account.
+cAdminEmails :: Lens' Company [Text]
+cAdminEmails
+  = lens _cAdminEmails (\ s a -> s{_cAdminEmails = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON Company where
+        parseJSON
+          = withObject "Company"
+              (\ o ->
+                 Company' <$>
+                   (o .:? "companyId") <*> (o .:? "companyName") <*>
+                     (o .:? "ownerEmails" .!= mempty)
+                     <*> (o .:? "termsStatus")
+                     <*> (o .:? "name")
+                     <*> (o .:? "adminEmails" .!= mempty))
+
+instance ToJSON Company where
+        toJSON Company'{..}
+          = object
+              (catMaybes
+                 [("companyId" .=) <$> _cCompanyId,
+                  ("companyName" .=) <$> _cCompanyName,
+                  ("ownerEmails" .=) <$> _cOwnerEmails,
+                  ("termsStatus" .=) <$> _cTermsStatus,
+                  ("name" .=) <$> _cName,
+                  ("adminEmails" .=) <$> _cAdminEmails])
+
+-- | Response message for listing my customers.
+--
+-- /See:/ 'customerListCustomersResponse' smart constructor.
+data CustomerListCustomersResponse = CustomerListCustomersResponse'
+    { _clcrCustomers     :: !(Maybe [Company])
+    , _clcrNextPageToken :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomerListCustomersResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clcrCustomers'
+--
+-- * 'clcrNextPageToken'
+customerListCustomersResponse
+    :: CustomerListCustomersResponse
+customerListCustomersResponse =
+    CustomerListCustomersResponse'
+    { _clcrCustomers = Nothing
+    , _clcrNextPageToken = Nothing
+    }
+
+-- | The customer accounts the calling user is a member of.
+clcrCustomers :: Lens' CustomerListCustomersResponse [Company]
+clcrCustomers
+  = lens _clcrCustomers
+      (\ s a -> s{_clcrCustomers = a})
+      . _Default
+      . _Coerce
+
+-- | A token used to access the next page of results. Omitted if no further
+-- results are available.
+clcrNextPageToken :: Lens' CustomerListCustomersResponse (Maybe Text)
+clcrNextPageToken
+  = lens _clcrNextPageToken
+      (\ s a -> s{_clcrNextPageToken = a})
+
+instance FromJSON CustomerListCustomersResponse where
+        parseJSON
+          = withObject "CustomerListCustomersResponse"
+              (\ o ->
+                 CustomerListCustomersResponse' <$>
+                   (o .:? "customers" .!= mempty) <*>
+                     (o .:? "nextPageToken"))
+
+instance ToJSON CustomerListCustomersResponse where
+        toJSON CustomerListCustomersResponse'{..}
+          = object
+              (catMaybes
+                 [("customers" .=) <$> _clcrCustomers,
+                  ("nextPageToken" .=) <$> _clcrNextPageToken])
+
+-- | A record of a device claimed by a reseller for a customer. Devices
+-- claimed for zero-touch enrollment have a claim with the type
+-- \`SECTION_TYPE_ZERO_TOUCH\`. To learn more, read [Claim devices for
+-- customers](\/zero-touch\/guides\/how-it-works#claim).
+--
+-- /See:/ 'deviceClaim' smart constructor.
+data DeviceClaim = DeviceClaim'
+    { _dcSectionType    :: !(Maybe DeviceClaimSectionType)
+    , _dcOwnerCompanyId :: !(Maybe (Textual Int64))
+    , _dcResellerId     :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeviceClaim' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcSectionType'
+--
+-- * 'dcOwnerCompanyId'
+--
+-- * 'dcResellerId'
+deviceClaim
+    :: DeviceClaim
+deviceClaim =
+    DeviceClaim'
+    { _dcSectionType = Nothing
+    , _dcOwnerCompanyId = Nothing
+    , _dcResellerId = Nothing
+    }
+
+-- | Output only. The type of claim made on the device.
+dcSectionType :: Lens' DeviceClaim (Maybe DeviceClaimSectionType)
+dcSectionType
+  = lens _dcSectionType
+      (\ s a -> s{_dcSectionType = a})
+
+-- | The ID of the Customer that purchased the device.
+dcOwnerCompanyId :: Lens' DeviceClaim (Maybe Int64)
+dcOwnerCompanyId
+  = lens _dcOwnerCompanyId
+      (\ s a -> s{_dcOwnerCompanyId = a})
+      . mapping _Coerce
+
+-- | The ID of the reseller that claimed the device.
+dcResellerId :: Lens' DeviceClaim (Maybe Int64)
+dcResellerId
+  = lens _dcResellerId (\ s a -> s{_dcResellerId = a})
+      . mapping _Coerce
+
+instance FromJSON DeviceClaim where
+        parseJSON
+          = withObject "DeviceClaim"
+              (\ o ->
+                 DeviceClaim' <$>
+                   (o .:? "sectionType") <*> (o .:? "ownerCompanyId")
+                     <*> (o .:? "resellerId"))
+
+instance ToJSON DeviceClaim where
+        toJSON DeviceClaim'{..}
+          = object
+              (catMaybes
+                 [("sectionType" .=) <$> _dcSectionType,
+                  ("ownerCompanyId" .=) <$> _dcOwnerCompanyId,
+                  ("resellerId" .=) <$> _dcResellerId])
+
+-- | Request to set metadata for a device.
+--
+-- /See:/ 'updateDeviceMetadataRequest' smart constructor.
+newtype UpdateDeviceMetadataRequest = UpdateDeviceMetadataRequest'
+    { _udmrDeviceMetadata :: Maybe DeviceMetadata
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateDeviceMetadataRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udmrDeviceMetadata'
+updateDeviceMetadataRequest
+    :: UpdateDeviceMetadataRequest
+updateDeviceMetadataRequest =
+    UpdateDeviceMetadataRequest'
+    { _udmrDeviceMetadata = Nothing
+    }
+
+-- | Required. The metdata to attach to the device.
+udmrDeviceMetadata :: Lens' UpdateDeviceMetadataRequest (Maybe DeviceMetadata)
+udmrDeviceMetadata
+  = lens _udmrDeviceMetadata
+      (\ s a -> s{_udmrDeviceMetadata = a})
+
+instance FromJSON UpdateDeviceMetadataRequest where
+        parseJSON
+          = withObject "UpdateDeviceMetadataRequest"
+              (\ o ->
+                 UpdateDeviceMetadataRequest' <$>
+                   (o .:? "deviceMetadata"))
+
+instance ToJSON UpdateDeviceMetadataRequest where
+        toJSON UpdateDeviceMetadataRequest'{..}
+          = object
+              (catMaybes
+                 [("deviceMetadata" .=) <$> _udmrDeviceMetadata])
+
+-- | Metadata entries that can be attached to a \`Device\`. To learn more,
+-- read [Device metadata](\/zero-touch\/guides\/metadata).
+--
+-- /See:/ 'deviceMetadata' smart constructor.
+newtype DeviceMetadata = DeviceMetadata'
+    { _dmEntries :: Maybe DeviceMetadataEntries
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeviceMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dmEntries'
+deviceMetadata
+    :: DeviceMetadata
+deviceMetadata =
+    DeviceMetadata'
+    { _dmEntries = Nothing
+    }
+
+-- | Metadata entries recorded as key-value pairs.
+dmEntries :: Lens' DeviceMetadata (Maybe DeviceMetadataEntries)
+dmEntries
+  = lens _dmEntries (\ s a -> s{_dmEntries = a})
+
+instance FromJSON DeviceMetadata where
+        parseJSON
+          = withObject "DeviceMetadata"
+              (\ o -> DeviceMetadata' <$> (o .:? "entries"))
+
+instance ToJSON DeviceMetadata where
+        toJSON DeviceMetadata'{..}
+          = object (catMaybes [("entries" .=) <$> _dmEntries])
+
+-- | Request to find devices by customers.
+--
+-- /See:/ 'findDevicesByOwnerRequest' smart constructor.
+data FindDevicesByOwnerRequest = FindDevicesByOwnerRequest'
+    { _fdborSectionType :: !(Maybe FindDevicesByOwnerRequestSectionType)
+    , _fdborCustomerId  :: !(Maybe [Textual Int64])
+    , _fdborLimit       :: !(Maybe (Textual Int64))
+    , _fdborPageToken   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FindDevicesByOwnerRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fdborSectionType'
+--
+-- * 'fdborCustomerId'
+--
+-- * 'fdborLimit'
+--
+-- * 'fdborPageToken'
+findDevicesByOwnerRequest
+    :: FindDevicesByOwnerRequest
+findDevicesByOwnerRequest =
+    FindDevicesByOwnerRequest'
+    { _fdborSectionType = Nothing
+    , _fdborCustomerId = Nothing
+    , _fdborLimit = Nothing
+    , _fdborPageToken = Nothing
+    }
+
+-- | Required. The section type of the device\'s provisioning record.
+fdborSectionType :: Lens' FindDevicesByOwnerRequest (Maybe FindDevicesByOwnerRequestSectionType)
+fdborSectionType
+  = lens _fdborSectionType
+      (\ s a -> s{_fdborSectionType = a})
+
+-- | Required. The list of customer IDs to search for.
+fdborCustomerId :: Lens' FindDevicesByOwnerRequest [Int64]
+fdborCustomerId
+  = lens _fdborCustomerId
+      (\ s a -> s{_fdborCustomerId = a})
+      . _Default
+      . _Coerce
+
+-- | Required. The maximum number of devices to show in a page of results.
+-- Must be between 1 and 100 inclusive.
+fdborLimit :: Lens' FindDevicesByOwnerRequest (Maybe Int64)
+fdborLimit
+  = lens _fdborLimit (\ s a -> s{_fdborLimit = a}) .
+      mapping _Coerce
+
+-- | A token specifying which result page to return.
+fdborPageToken :: Lens' FindDevicesByOwnerRequest (Maybe Text)
+fdborPageToken
+  = lens _fdborPageToken
+      (\ s a -> s{_fdborPageToken = a})
+
+instance FromJSON FindDevicesByOwnerRequest where
+        parseJSON
+          = withObject "FindDevicesByOwnerRequest"
+              (\ o ->
+                 FindDevicesByOwnerRequest' <$>
+                   (o .:? "sectionType") <*>
+                     (o .:? "customerId" .!= mempty)
+                     <*> (o .:? "limit")
+                     <*> (o .:? "pageToken"))
+
+instance ToJSON FindDevicesByOwnerRequest where
+        toJSON FindDevicesByOwnerRequest'{..}
+          = object
+              (catMaybes
+                 [("sectionType" .=) <$> _fdborSectionType,
+                  ("customerId" .=) <$> _fdborCustomerId,
+                  ("limit" .=) <$> _fdborLimit,
+                  ("pageToken" .=) <$> _fdborPageToken])
+
+-- | Response containing found devices.
+--
+-- /See:/ 'findDevicesByDeviceIdentifierResponse' smart constructor.
+data FindDevicesByDeviceIdentifierResponse = FindDevicesByDeviceIdentifierResponse'
+    { _fdbdirNextPageToken :: !(Maybe Text)
+    , _fdbdirTotalSize     :: !(Maybe (Textual Int32))
+    , _fdbdirDevices       :: !(Maybe [Device])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FindDevicesByDeviceIdentifierResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fdbdirNextPageToken'
+--
+-- * 'fdbdirTotalSize'
+--
+-- * 'fdbdirDevices'
+findDevicesByDeviceIdentifierResponse
+    :: FindDevicesByDeviceIdentifierResponse
+findDevicesByDeviceIdentifierResponse =
+    FindDevicesByDeviceIdentifierResponse'
+    { _fdbdirNextPageToken = Nothing
+    , _fdbdirTotalSize = Nothing
+    , _fdbdirDevices = Nothing
+    }
+
+-- | A token used to access the next page of results. Omitted if no further
+-- results are available.
+fdbdirNextPageToken :: Lens' FindDevicesByDeviceIdentifierResponse (Maybe Text)
+fdbdirNextPageToken
+  = lens _fdbdirNextPageToken
+      (\ s a -> s{_fdbdirNextPageToken = a})
+
+-- | The total count of items in the list irrespective of pagination.
+fdbdirTotalSize :: Lens' FindDevicesByDeviceIdentifierResponse (Maybe Int32)
+fdbdirTotalSize
+  = lens _fdbdirTotalSize
+      (\ s a -> s{_fdbdirTotalSize = a})
+      . mapping _Coerce
+
+-- | Found devices.
+fdbdirDevices :: Lens' FindDevicesByDeviceIdentifierResponse [Device]
+fdbdirDevices
+  = lens _fdbdirDevices
+      (\ s a -> s{_fdbdirDevices = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         FindDevicesByDeviceIdentifierResponse where
+        parseJSON
+          = withObject "FindDevicesByDeviceIdentifierResponse"
+              (\ o ->
+                 FindDevicesByDeviceIdentifierResponse' <$>
+                   (o .:? "nextPageToken") <*> (o .:? "totalSize") <*>
+                     (o .:? "devices" .!= mempty))
+
+instance ToJSON FindDevicesByDeviceIdentifierResponse
+         where
+        toJSON FindDevicesByDeviceIdentifierResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _fdbdirNextPageToken,
+                  ("totalSize" .=) <$> _fdbdirTotalSize,
+                  ("devices" .=) <$> _fdbdirDevices])
+
+-- | Request message to unclaim a device.
+--
+-- /See:/ 'unclaimDeviceRequest' smart constructor.
+data UnclaimDeviceRequest = UnclaimDeviceRequest'
+    { _udrDeviceIdentifier :: !(Maybe DeviceIdentifier)
+    , _udrSectionType      :: !(Maybe UnclaimDeviceRequestSectionType)
+    , _udrDeviceId         :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UnclaimDeviceRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udrDeviceIdentifier'
+--
+-- * 'udrSectionType'
+--
+-- * 'udrDeviceId'
+unclaimDeviceRequest
+    :: UnclaimDeviceRequest
+unclaimDeviceRequest =
+    UnclaimDeviceRequest'
+    { _udrDeviceIdentifier = Nothing
+    , _udrSectionType = Nothing
+    , _udrDeviceId = Nothing
+    }
+
+-- | The device identifier you used when you claimed this device.
+udrDeviceIdentifier :: Lens' UnclaimDeviceRequest (Maybe DeviceIdentifier)
+udrDeviceIdentifier
+  = lens _udrDeviceIdentifier
+      (\ s a -> s{_udrDeviceIdentifier = a})
+
+-- | Required. The section type of the device\'s provisioning record.
+udrSectionType :: Lens' UnclaimDeviceRequest (Maybe UnclaimDeviceRequestSectionType)
+udrSectionType
+  = lens _udrSectionType
+      (\ s a -> s{_udrSectionType = a})
+
+-- | The device ID returned by \`ClaimDevice\`.
+udrDeviceId :: Lens' UnclaimDeviceRequest (Maybe Int64)
+udrDeviceId
+  = lens _udrDeviceId (\ s a -> s{_udrDeviceId = a}) .
+      mapping _Coerce
+
+instance FromJSON UnclaimDeviceRequest where
+        parseJSON
+          = withObject "UnclaimDeviceRequest"
+              (\ o ->
+                 UnclaimDeviceRequest' <$>
+                   (o .:? "deviceIdentifier") <*> (o .:? "sectionType")
+                     <*> (o .:? "deviceId"))
+
+instance ToJSON UnclaimDeviceRequest where
+        toJSON UnclaimDeviceRequest'{..}
+          = object
+              (catMaybes
+                 [("deviceIdentifier" .=) <$> _udrDeviceIdentifier,
+                  ("sectionType" .=) <$> _udrSectionType,
+                  ("deviceId" .=) <$> _udrDeviceId])
+
+-- | Tracks the status of a long-running operation to claim, unclaim, or
+-- attach metadata to devices. To learn more, read [Long‑running batch
+-- operations](\/zero-touch\/guides\/how-it-works#operations).
+--
+-- /See:/ 'devicesLongRunningOperationResponse' smart constructor.
+data DevicesLongRunningOperationResponse = DevicesLongRunningOperationResponse'
+    { _dlrorSuccessCount    :: !(Maybe (Textual Int32))
+    , _dlrorPerDeviceStatus :: !(Maybe [OperationPerDevice])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DevicesLongRunningOperationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dlrorSuccessCount'
+--
+-- * 'dlrorPerDeviceStatus'
+devicesLongRunningOperationResponse
+    :: DevicesLongRunningOperationResponse
+devicesLongRunningOperationResponse =
+    DevicesLongRunningOperationResponse'
+    { _dlrorSuccessCount = Nothing
+    , _dlrorPerDeviceStatus = Nothing
+    }
+
+-- | A summary of how many items in the operation the server processed
+-- successfully. Updated as the operation progresses.
+dlrorSuccessCount :: Lens' DevicesLongRunningOperationResponse (Maybe Int32)
+dlrorSuccessCount
+  = lens _dlrorSuccessCount
+      (\ s a -> s{_dlrorSuccessCount = a})
+      . mapping _Coerce
+
+-- | The processing status for each device in the operation. One
+-- \`PerDeviceStatus\` per device. The list order matches the items in the
+-- original request.
+dlrorPerDeviceStatus :: Lens' DevicesLongRunningOperationResponse [OperationPerDevice]
+dlrorPerDeviceStatus
+  = lens _dlrorPerDeviceStatus
+      (\ s a -> s{_dlrorPerDeviceStatus = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON DevicesLongRunningOperationResponse
+         where
+        parseJSON
+          = withObject "DevicesLongRunningOperationResponse"
+              (\ o ->
+                 DevicesLongRunningOperationResponse' <$>
+                   (o .:? "successCount") <*>
+                     (o .:? "perDeviceStatus" .!= mempty))
+
+instance ToJSON DevicesLongRunningOperationResponse
+         where
+        toJSON DevicesLongRunningOperationResponse'{..}
+          = object
+              (catMaybes
+                 [("successCount" .=) <$> _dlrorSuccessCount,
+                  ("perDeviceStatus" .=) <$> _dlrorPerDeviceStatus])
+
+-- | A configuration collects the provisioning options for Android devices.
+-- Each configuration combines the following: * The EMM device policy
+-- controller (DPC) installed on the devices. * EMM policies enforced on
+-- the devices. * Metadata displayed on the device to help users during
+-- setup. Customers can add as many configurations as they need. However,
+-- zero-touch enrollment works best when a customer sets a default
+-- configuration that\'s applied to any new devices the organization
+-- purchases.
+--
+-- /See:/ 'configuration' smart constructor.
+data Configuration = Configuration'
+    { _conContactPhone      :: !(Maybe Text)
+    , _conContactEmail      :: !(Maybe Text)
+    , _conConfigurationName :: !(Maybe Text)
+    , _conConfigurationId   :: !(Maybe (Textual Int64))
+    , _conCustomMessage     :: !(Maybe Text)
+    , _conCompanyName       :: !(Maybe Text)
+    , _conDpcExtras         :: !(Maybe Text)
+    , _conName              :: !(Maybe Text)
+    , _conDpcResourcePath   :: !(Maybe Text)
+    , _conIsDefault         :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Configuration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'conContactPhone'
+--
+-- * 'conContactEmail'
+--
+-- * 'conConfigurationName'
+--
+-- * 'conConfigurationId'
+--
+-- * 'conCustomMessage'
+--
+-- * 'conCompanyName'
+--
+-- * 'conDpcExtras'
+--
+-- * 'conName'
+--
+-- * 'conDpcResourcePath'
+--
+-- * 'conIsDefault'
+configuration
+    :: Configuration
+configuration =
+    Configuration'
+    { _conContactPhone = Nothing
+    , _conContactEmail = Nothing
+    , _conConfigurationName = Nothing
+    , _conConfigurationId = Nothing
+    , _conCustomMessage = Nothing
+    , _conCompanyName = Nothing
+    , _conDpcExtras = Nothing
+    , _conName = Nothing
+    , _conDpcResourcePath = Nothing
+    , _conIsDefault = Nothing
+    }
+
+-- | Required. The telephone number that device users can call, using another
+-- device, to get help. Zero-touch enrollment shows this number to device
+-- users before device provisioning. Accepts numerals, spaces, the plus
+-- sign, hyphens, and parentheses.
+conContactPhone :: Lens' Configuration (Maybe Text)
+conContactPhone
+  = lens _conContactPhone
+      (\ s a -> s{_conContactPhone = a})
+
+-- | Required. The email address that device users can contact to get help.
+-- Zero-touch enrollment shows this email address to device users before
+-- device provisioning. The value is validated on input.
+conContactEmail :: Lens' Configuration (Maybe Text)
+conContactEmail
+  = lens _conContactEmail
+      (\ s a -> s{_conContactEmail = a})
+
+-- | Required. A short name that describes the configuration\'s purpose. For
+-- example, _Sales team_ or _Temporary employees_. The zero-touch
+-- enrollment portal displays this name to IT admins.
+conConfigurationName :: Lens' Configuration (Maybe Text)
+conConfigurationName
+  = lens _conConfigurationName
+      (\ s a -> s{_conConfigurationName = a})
+
+-- | Output only. The ID of the configuration. Assigned by the server.
+conConfigurationId :: Lens' Configuration (Maybe Int64)
+conConfigurationId
+  = lens _conConfigurationId
+      (\ s a -> s{_conConfigurationId = a})
+      . mapping _Coerce
+
+-- | A message, containing one or two sentences, to help device users get
+-- help or give them more details about what’s happening to their device.
+-- Zero-touch enrollment shows this message before the device is
+-- provisioned.
+conCustomMessage :: Lens' Configuration (Maybe Text)
+conCustomMessage
+  = lens _conCustomMessage
+      (\ s a -> s{_conCustomMessage = a})
+
+-- | Required. The name of the organization. Zero-touch enrollment shows this
+-- organization name to device users during device provisioning.
+conCompanyName :: Lens' Configuration (Maybe Text)
+conCompanyName
+  = lens _conCompanyName
+      (\ s a -> s{_conCompanyName = a})
+
+-- | The JSON-formatted EMM provisioning extras that are passed to the DPC.
+conDpcExtras :: Lens' Configuration (Maybe Text)
+conDpcExtras
+  = lens _conDpcExtras (\ s a -> s{_conDpcExtras = a})
+
+-- | Output only. The API resource name in the format
+-- \`customers\/[CUSTOMER_ID]\/configurations\/[CONFIGURATION_ID]\`.
+-- Assigned by the server.
+conName :: Lens' Configuration (Maybe Text)
+conName = lens _conName (\ s a -> s{_conName = a})
+
+-- | Required. The resource name of the selected DPC (device policy
+-- controller) in the format \`customers\/[CUSTOMER_ID]\/dpcs\/*\`. To list
+-- the supported DPCs, call \`customers.dpcs.list\`.
+conDpcResourcePath :: Lens' Configuration (Maybe Text)
+conDpcResourcePath
+  = lens _conDpcResourcePath
+      (\ s a -> s{_conDpcResourcePath = a})
+
+-- | Required. Whether this is the default configuration that zero-touch
+-- enrollment applies to any new devices the organization purchases in the
+-- future. Only one customer configuration can be the default. Setting this
+-- value to \`true\`, changes the previous default configuration\'s
+-- \`isDefault\` value to \`false\`.
+conIsDefault :: Lens' Configuration (Maybe Bool)
+conIsDefault
+  = lens _conIsDefault (\ s a -> s{_conIsDefault = a})
+
+instance FromJSON Configuration where
+        parseJSON
+          = withObject "Configuration"
+              (\ o ->
+                 Configuration' <$>
+                   (o .:? "contactPhone") <*> (o .:? "contactEmail") <*>
+                     (o .:? "configurationName")
+                     <*> (o .:? "configurationId")
+                     <*> (o .:? "customMessage")
+                     <*> (o .:? "companyName")
+                     <*> (o .:? "dpcExtras")
+                     <*> (o .:? "name")
+                     <*> (o .:? "dpcResourcePath")
+                     <*> (o .:? "isDefault"))
+
+instance ToJSON Configuration where
+        toJSON Configuration'{..}
+          = object
+              (catMaybes
+                 [("contactPhone" .=) <$> _conContactPhone,
+                  ("contactEmail" .=) <$> _conContactEmail,
+                  ("configurationName" .=) <$> _conConfigurationName,
+                  ("configurationId" .=) <$> _conConfigurationId,
+                  ("customMessage" .=) <$> _conCustomMessage,
+                  ("companyName" .=) <$> _conCompanyName,
+                  ("dpcExtras" .=) <$> _conDpcExtras,
+                  ("name" .=) <$> _conName,
+                  ("dpcResourcePath" .=) <$> _conDpcResourcePath,
+                  ("isDefault" .=) <$> _conIsDefault])
+
+-- | This field will contain a \`DevicesLongRunningOperationMetadata\` object
+-- if the operation is created by \`claimAsync\`, \`unclaimAsync\`, or
+-- \`updateMetadataAsync\`.
+--
+-- /See:/ 'operationMetadata' smart constructor.
+newtype OperationMetadata = OperationMetadata'
+    { _omAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'omAddtional'
+operationMetadata
+    :: HashMap Text JSONValue -- ^ 'omAddtional'
+    -> OperationMetadata
+operationMetadata pOmAddtional_ =
+    OperationMetadata'
+    { _omAddtional = _Coerce # pOmAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+omAddtional :: Lens' OperationMetadata (HashMap Text JSONValue)
+omAddtional
+  = lens _omAddtional (\ s a -> s{_omAddtional = a}) .
+      _Coerce
+
+instance FromJSON OperationMetadata where
+        parseJSON
+          = withObject "OperationMetadata"
+              (\ o -> OperationMetadata' <$> (parseJSONObject o))
+
+instance ToJSON OperationMetadata where
+        toJSON = toJSON . _omAddtional
+
+-- | Response message of all customers related to this partner.
+--
+-- /See:/ 'listCustomersResponse' smart constructor.
+data ListCustomersResponse = ListCustomersResponse'
+    { _lcrCustomers     :: !(Maybe [Company])
+    , _lcrNextPageToken :: !(Maybe Text)
+    , _lcrTotalSize     :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListCustomersResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcrCustomers'
+--
+-- * 'lcrNextPageToken'
+--
+-- * 'lcrTotalSize'
+listCustomersResponse
+    :: ListCustomersResponse
+listCustomersResponse =
+    ListCustomersResponse'
+    { _lcrCustomers = Nothing
+    , _lcrNextPageToken = Nothing
+    , _lcrTotalSize = Nothing
+    }
+
+-- | List of customers related to this reseller partner.
+lcrCustomers :: Lens' ListCustomersResponse [Company]
+lcrCustomers
+  = lens _lcrCustomers (\ s a -> s{_lcrCustomers = a})
+      . _Default
+      . _Coerce
+
+-- | A token to retrieve the next page of results. Omitted if no further
+-- results are available.
+lcrNextPageToken :: Lens' ListCustomersResponse (Maybe Text)
+lcrNextPageToken
+  = lens _lcrNextPageToken
+      (\ s a -> s{_lcrNextPageToken = a})
+
+-- | The total count of items in the list irrespective of pagination.
+lcrTotalSize :: Lens' ListCustomersResponse (Maybe Int32)
+lcrTotalSize
+  = lens _lcrTotalSize (\ s a -> s{_lcrTotalSize = a})
+      . mapping _Coerce
+
+instance FromJSON ListCustomersResponse where
+        parseJSON
+          = withObject "ListCustomersResponse"
+              (\ o ->
+                 ListCustomersResponse' <$>
+                   (o .:? "customers" .!= mempty) <*>
+                     (o .:? "nextPageToken")
+                     <*> (o .:? "totalSize"))
+
+instance ToJSON ListCustomersResponse where
+        toJSON ListCustomersResponse'{..}
+          = object
+              (catMaybes
+                 [("customers" .=) <$> _lcrCustomers,
+                  ("nextPageToken" .=) <$> _lcrNextPageToken,
+                  ("totalSize" .=) <$> _lcrTotalSize])
+
+-- | Tracks the status of a long-running operation to asynchronously update a
+-- batch of reseller metadata attached to devices. To learn more, read
+-- [Long‑running batch
+-- operations](\/zero-touch\/guides\/how-it-works#operations).
+--
+-- /See:/ 'devicesLongRunningOperationMetadata' smart constructor.
+data DevicesLongRunningOperationMetadata = DevicesLongRunningOperationMetadata'
+    { _dlromProgress         :: !(Maybe (Textual Int32))
+    , _dlromDevicesCount     :: !(Maybe (Textual Int32))
+    , _dlromProcessingStatus :: !(Maybe DevicesLongRunningOperationMetadataProcessingStatus)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DevicesLongRunningOperationMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dlromProgress'
+--
+-- * 'dlromDevicesCount'
+--
+-- * 'dlromProcessingStatus'
+devicesLongRunningOperationMetadata
+    :: DevicesLongRunningOperationMetadata
+devicesLongRunningOperationMetadata =
+    DevicesLongRunningOperationMetadata'
+    { _dlromProgress = Nothing
+    , _dlromDevicesCount = Nothing
+    , _dlromProcessingStatus = Nothing
+    }
+
+-- | The processing progress of the operation. Measured as a number from 0 to
+-- 100. A value of 10O doesnt always mean the operation completed—check for
+-- the inclusion of a \`done\` field.
+dlromProgress :: Lens' DevicesLongRunningOperationMetadata (Maybe Int32)
+dlromProgress
+  = lens _dlromProgress
+      (\ s a -> s{_dlromProgress = a})
+      . mapping _Coerce
+
+-- | The number of metadata updates in the operation. This might be different
+-- from the number of updates in the request if the API can\'t parse some
+-- of the updates.
+dlromDevicesCount :: Lens' DevicesLongRunningOperationMetadata (Maybe Int32)
+dlromDevicesCount
+  = lens _dlromDevicesCount
+      (\ s a -> s{_dlromDevicesCount = a})
+      . mapping _Coerce
+
+-- | The processing status of the operation.
+dlromProcessingStatus :: Lens' DevicesLongRunningOperationMetadata (Maybe DevicesLongRunningOperationMetadataProcessingStatus)
+dlromProcessingStatus
+  = lens _dlromProcessingStatus
+      (\ s a -> s{_dlromProcessingStatus = a})
+
+instance FromJSON DevicesLongRunningOperationMetadata
+         where
+        parseJSON
+          = withObject "DevicesLongRunningOperationMetadata"
+              (\ o ->
+                 DevicesLongRunningOperationMetadata' <$>
+                   (o .:? "progress") <*> (o .:? "devicesCount") <*>
+                     (o .:? "processingStatus"))
+
+instance ToJSON DevicesLongRunningOperationMetadata
+         where
+        toJSON DevicesLongRunningOperationMetadata'{..}
+          = object
+              (catMaybes
+                 [("progress" .=) <$> _dlromProgress,
+                  ("devicesCount" .=) <$> _dlromDevicesCount,
+                  ("processingStatus" .=) <$> _dlromProcessingStatus])
+
+-- | This field will contain a \`DevicesLongRunningOperationResponse\` object
+-- if the operation is created by \`claimAsync\`, \`unclaimAsync\`, or
+-- \`updateMetadataAsync\`.
+--
+-- /See:/ 'operationResponse' smart constructor.
+newtype OperationResponse = OperationResponse'
+    { _orAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'orAddtional'
+operationResponse
+    :: HashMap Text JSONValue -- ^ 'orAddtional'
+    -> OperationResponse
+operationResponse pOrAddtional_ =
+    OperationResponse'
+    { _orAddtional = _Coerce # pOrAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+orAddtional :: Lens' OperationResponse (HashMap Text JSONValue)
+orAddtional
+  = lens _orAddtional (\ s a -> s{_orAddtional = a}) .
+      _Coerce
+
+instance FromJSON OperationResponse where
+        parseJSON
+          = withObject "OperationResponse"
+              (\ o -> OperationResponse' <$> (parseJSONObject o))
+
+instance ToJSON OperationResponse where
+        toJSON = toJSON . _orAddtional
+
+-- | Response message of customer\'s liting devices.
+--
+-- /See:/ 'customerListDevicesResponse' smart constructor.
+data CustomerListDevicesResponse = CustomerListDevicesResponse'
+    { _cldrNextPageToken :: !(Maybe Text)
+    , _cldrDevices       :: !(Maybe [Device])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomerListDevicesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cldrNextPageToken'
+--
+-- * 'cldrDevices'
+customerListDevicesResponse
+    :: CustomerListDevicesResponse
+customerListDevicesResponse =
+    CustomerListDevicesResponse'
+    { _cldrNextPageToken = Nothing
+    , _cldrDevices = Nothing
+    }
+
+-- | A token used to access the next page of results. Omitted if no further
+-- results are available.
+cldrNextPageToken :: Lens' CustomerListDevicesResponse (Maybe Text)
+cldrNextPageToken
+  = lens _cldrNextPageToken
+      (\ s a -> s{_cldrNextPageToken = a})
+
+-- | The customer\'s devices.
+cldrDevices :: Lens' CustomerListDevicesResponse [Device]
+cldrDevices
+  = lens _cldrDevices (\ s a -> s{_cldrDevices = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON CustomerListDevicesResponse where
+        parseJSON
+          = withObject "CustomerListDevicesResponse"
+              (\ o ->
+                 CustomerListDevicesResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "devices" .!= mempty))
+
+instance ToJSON CustomerListDevicesResponse where
+        toJSON CustomerListDevicesResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _cldrNextPageToken,
+                  ("devices" .=) <$> _cldrDevices])
+
+-- | Request to update device metadata in batch.
+--
+-- /See:/ 'updateDeviceMetadataInBatchRequest' smart constructor.
+newtype UpdateDeviceMetadataInBatchRequest = UpdateDeviceMetadataInBatchRequest'
+    { _udmibrUpdates :: Maybe [UpdateMetadataArguments]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateDeviceMetadataInBatchRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udmibrUpdates'
+updateDeviceMetadataInBatchRequest
+    :: UpdateDeviceMetadataInBatchRequest
+updateDeviceMetadataInBatchRequest =
+    UpdateDeviceMetadataInBatchRequest'
+    { _udmibrUpdates = Nothing
+    }
+
+-- | Required. The list of metadata updates.
+udmibrUpdates :: Lens' UpdateDeviceMetadataInBatchRequest [UpdateMetadataArguments]
+udmibrUpdates
+  = lens _udmibrUpdates
+      (\ s a -> s{_udmibrUpdates = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON UpdateDeviceMetadataInBatchRequest
+         where
+        parseJSON
+          = withObject "UpdateDeviceMetadataInBatchRequest"
+              (\ o ->
+                 UpdateDeviceMetadataInBatchRequest' <$>
+                   (o .:? "updates" .!= mempty))
+
+instance ToJSON UpdateDeviceMetadataInBatchRequest
+         where
+        toJSON UpdateDeviceMetadataInBatchRequest'{..}
+          = object
+              (catMaybes [("updates" .=) <$> _udmibrUpdates])
+
+-- | Response message of customer\'s listing DPCs.
+--
+-- /See:/ 'customerListDpcsResponse' smart constructor.
+newtype CustomerListDpcsResponse = CustomerListDpcsResponse'
+    { _cldrDpcs :: Maybe [Dpc]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomerListDpcsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cldrDpcs'
+customerListDpcsResponse
+    :: CustomerListDpcsResponse
+customerListDpcsResponse =
+    CustomerListDpcsResponse'
+    { _cldrDpcs = Nothing
+    }
+
+-- | The list of DPCs available to the customer that support zero-touch
+-- enrollment.
+cldrDpcs :: Lens' CustomerListDpcsResponse [Dpc]
+cldrDpcs
+  = lens _cldrDpcs (\ s a -> s{_cldrDpcs = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON CustomerListDpcsResponse where
+        parseJSON
+          = withObject "CustomerListDpcsResponse"
+              (\ o ->
+                 CustomerListDpcsResponse' <$>
+                   (o .:? "dpcs" .!= mempty))
+
+instance ToJSON CustomerListDpcsResponse where
+        toJSON CustomerListDpcsResponse'{..}
+          = object (catMaybes [("dpcs" .=) <$> _cldrDpcs])
+
+-- | Response message containing device id of the claim.
+--
+-- /See:/ 'claimDeviceResponse' smart constructor.
+data ClaimDeviceResponse = ClaimDeviceResponse'
+    { _cdrDeviceName :: !(Maybe Text)
+    , _cdrDeviceId   :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ClaimDeviceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdrDeviceName'
+--
+-- * 'cdrDeviceId'
+claimDeviceResponse
+    :: ClaimDeviceResponse
+claimDeviceResponse =
+    ClaimDeviceResponse'
+    { _cdrDeviceName = Nothing
+    , _cdrDeviceId = Nothing
+    }
+
+-- | The resource name of the device in the format
+-- \`partners\/[PARTNER_ID]\/devices\/[DEVICE_ID]\`.
+cdrDeviceName :: Lens' ClaimDeviceResponse (Maybe Text)
+cdrDeviceName
+  = lens _cdrDeviceName
+      (\ s a -> s{_cdrDeviceName = a})
+
+-- | The device ID of the claimed device.
+cdrDeviceId :: Lens' ClaimDeviceResponse (Maybe Int64)
+cdrDeviceId
+  = lens _cdrDeviceId (\ s a -> s{_cdrDeviceId = a}) .
+      mapping _Coerce
+
+instance FromJSON ClaimDeviceResponse where
+        parseJSON
+          = withObject "ClaimDeviceResponse"
+              (\ o ->
+                 ClaimDeviceResponse' <$>
+                   (o .:? "deviceName") <*> (o .:? "deviceId"))
+
+instance ToJSON ClaimDeviceResponse where
+        toJSON ClaimDeviceResponse'{..}
+          = object
+              (catMaybes
+                 [("deviceName" .=) <$> _cdrDeviceName,
+                  ("deviceId" .=) <$> _cdrDeviceId])
+
+-- | Request message to create a customer.
+--
+-- /See:/ 'createCustomerRequest' smart constructor.
+newtype CreateCustomerRequest = CreateCustomerRequest'
+    { _ccrCustomer :: Maybe Company
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateCustomerRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccrCustomer'
+createCustomerRequest
+    :: CreateCustomerRequest
+createCustomerRequest =
+    CreateCustomerRequest'
+    { _ccrCustomer = Nothing
+    }
+
+-- | Required. The company data to populate the new customer. Must contain a
+-- value for \`companyName\` and at least one \`owner_email\` that\'s
+-- associated with a Google Account. The values for \`companyId\` and
+-- \`name\` must be empty.
+ccrCustomer :: Lens' CreateCustomerRequest (Maybe Company)
+ccrCustomer
+  = lens _ccrCustomer (\ s a -> s{_ccrCustomer = a})
+
+instance FromJSON CreateCustomerRequest where
+        parseJSON
+          = withObject "CreateCustomerRequest"
+              (\ o ->
+                 CreateCustomerRequest' <$> (o .:? "customer"))
+
+instance ToJSON CreateCustomerRequest where
+        toJSON CreateCustomerRequest'{..}
+          = object
+              (catMaybes [("customer" .=) <$> _ccrCustomer])
diff --git a/gen/Network/Google/AndroidDeviceProvisioning/Types/Sum.hs b/gen/Network/Google/AndroidDeviceProvisioning/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AndroidDeviceProvisioning/Types/Sum.hs
@@ -0,0 +1,393 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.AndroidDeviceProvisioning.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.AndroidDeviceProvisioning.Types.Sum where
+
+import           Network.Google.Prelude hiding (Bytes)
+
+-- | The result status of the device after processing.
+data PerDeviceStatusInBatchStatus
+    = SingleDeviceStatusUnspecified
+      -- ^ @SINGLE_DEVICE_STATUS_UNSPECIFIED@
+      -- Invalid code. Shouldn\'t be used.
+    | SingleDeviceStatusUnknownError
+      -- ^ @SINGLE_DEVICE_STATUS_UNKNOWN_ERROR@
+      -- Unknown error. We don\'t expect this error to occur here.
+    | SingleDeviceStatusOtherError
+      -- ^ @SINGLE_DEVICE_STATUS_OTHER_ERROR@
+      -- Other error. We know\/expect this error, but there\'s no defined error
+      -- code for the error.
+    | SingleDeviceStatusSuccess
+      -- ^ @SINGLE_DEVICE_STATUS_SUCCESS@
+      -- Success.
+    | SingleDeviceStatusPermissionDenied
+      -- ^ @SINGLE_DEVICE_STATUS_PERMISSION_DENIED@
+      -- Permission denied.
+    | SingleDeviceStatusInvalidDeviceIdentifier
+      -- ^ @SINGLE_DEVICE_STATUS_INVALID_DEVICE_IDENTIFIER@
+      -- Invalid device identifier.
+    | SingleDeviceStatusInvalidSectionType
+      -- ^ @SINGLE_DEVICE_STATUS_INVALID_SECTION_TYPE@
+      -- Invalid section type.
+    | SingleDeviceStatusSectionNotYours
+      -- ^ @SINGLE_DEVICE_STATUS_SECTION_NOT_YOURS@
+      -- This section is claimed by another company.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PerDeviceStatusInBatchStatus
+
+instance FromHttpApiData PerDeviceStatusInBatchStatus where
+    parseQueryParam = \case
+        "SINGLE_DEVICE_STATUS_UNSPECIFIED" -> Right SingleDeviceStatusUnspecified
+        "SINGLE_DEVICE_STATUS_UNKNOWN_ERROR" -> Right SingleDeviceStatusUnknownError
+        "SINGLE_DEVICE_STATUS_OTHER_ERROR" -> Right SingleDeviceStatusOtherError
+        "SINGLE_DEVICE_STATUS_SUCCESS" -> Right SingleDeviceStatusSuccess
+        "SINGLE_DEVICE_STATUS_PERMISSION_DENIED" -> Right SingleDeviceStatusPermissionDenied
+        "SINGLE_DEVICE_STATUS_INVALID_DEVICE_IDENTIFIER" -> Right SingleDeviceStatusInvalidDeviceIdentifier
+        "SINGLE_DEVICE_STATUS_INVALID_SECTION_TYPE" -> Right SingleDeviceStatusInvalidSectionType
+        "SINGLE_DEVICE_STATUS_SECTION_NOT_YOURS" -> Right SingleDeviceStatusSectionNotYours
+        x -> Left ("Unable to parse PerDeviceStatusInBatchStatus from: " <> x)
+
+instance ToHttpApiData PerDeviceStatusInBatchStatus where
+    toQueryParam = \case
+        SingleDeviceStatusUnspecified -> "SINGLE_DEVICE_STATUS_UNSPECIFIED"
+        SingleDeviceStatusUnknownError -> "SINGLE_DEVICE_STATUS_UNKNOWN_ERROR"
+        SingleDeviceStatusOtherError -> "SINGLE_DEVICE_STATUS_OTHER_ERROR"
+        SingleDeviceStatusSuccess -> "SINGLE_DEVICE_STATUS_SUCCESS"
+        SingleDeviceStatusPermissionDenied -> "SINGLE_DEVICE_STATUS_PERMISSION_DENIED"
+        SingleDeviceStatusInvalidDeviceIdentifier -> "SINGLE_DEVICE_STATUS_INVALID_DEVICE_IDENTIFIER"
+        SingleDeviceStatusInvalidSectionType -> "SINGLE_DEVICE_STATUS_INVALID_SECTION_TYPE"
+        SingleDeviceStatusSectionNotYours -> "SINGLE_DEVICE_STATUS_SECTION_NOT_YOURS"
+
+instance FromJSON PerDeviceStatusInBatchStatus where
+    parseJSON = parseJSONText "PerDeviceStatusInBatchStatus"
+
+instance ToJSON PerDeviceStatusInBatchStatus where
+    toJSON = toJSONText
+
+-- | Required. The section type of the device\'s provisioning record.
+data FindDevicesByOwnerRequestSectionType
+    = SectionTypeUnspecified
+      -- ^ @SECTION_TYPE_UNSPECIFIED@
+      -- Unspecified section type.
+    | SectionTypeSimLock
+      -- ^ @SECTION_TYPE_SIM_LOCK@
+      -- SIM-lock section type.
+    | SectionTypeZeroTouch
+      -- ^ @SECTION_TYPE_ZERO_TOUCH@
+      -- Zero-touch enrollment section type.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable FindDevicesByOwnerRequestSectionType
+
+instance FromHttpApiData FindDevicesByOwnerRequestSectionType where
+    parseQueryParam = \case
+        "SECTION_TYPE_UNSPECIFIED" -> Right SectionTypeUnspecified
+        "SECTION_TYPE_SIM_LOCK" -> Right SectionTypeSimLock
+        "SECTION_TYPE_ZERO_TOUCH" -> Right SectionTypeZeroTouch
+        x -> Left ("Unable to parse FindDevicesByOwnerRequestSectionType from: " <> x)
+
+instance ToHttpApiData FindDevicesByOwnerRequestSectionType where
+    toQueryParam = \case
+        SectionTypeUnspecified -> "SECTION_TYPE_UNSPECIFIED"
+        SectionTypeSimLock -> "SECTION_TYPE_SIM_LOCK"
+        SectionTypeZeroTouch -> "SECTION_TYPE_ZERO_TOUCH"
+
+instance FromJSON FindDevicesByOwnerRequestSectionType where
+    parseJSON = parseJSONText "FindDevicesByOwnerRequestSectionType"
+
+instance ToJSON FindDevicesByOwnerRequestSectionType where
+    toJSON = toJSONText
+
+-- | Required. The section type of the device\'s provisioning record.
+data PartnerClaimSectionType
+    = PCSTSectionTypeUnspecified
+      -- ^ @SECTION_TYPE_UNSPECIFIED@
+      -- Unspecified section type.
+    | PCSTSectionTypeSimLock
+      -- ^ @SECTION_TYPE_SIM_LOCK@
+      -- SIM-lock section type.
+    | PCSTSectionTypeZeroTouch
+      -- ^ @SECTION_TYPE_ZERO_TOUCH@
+      -- Zero-touch enrollment section type.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PartnerClaimSectionType
+
+instance FromHttpApiData PartnerClaimSectionType where
+    parseQueryParam = \case
+        "SECTION_TYPE_UNSPECIFIED" -> Right PCSTSectionTypeUnspecified
+        "SECTION_TYPE_SIM_LOCK" -> Right PCSTSectionTypeSimLock
+        "SECTION_TYPE_ZERO_TOUCH" -> Right PCSTSectionTypeZeroTouch
+        x -> Left ("Unable to parse PartnerClaimSectionType from: " <> x)
+
+instance ToHttpApiData PartnerClaimSectionType where
+    toQueryParam = \case
+        PCSTSectionTypeUnspecified -> "SECTION_TYPE_UNSPECIFIED"
+        PCSTSectionTypeSimLock -> "SECTION_TYPE_SIM_LOCK"
+        PCSTSectionTypeZeroTouch -> "SECTION_TYPE_ZERO_TOUCH"
+
+instance FromJSON PartnerClaimSectionType where
+    parseJSON = parseJSONText "PartnerClaimSectionType"
+
+instance ToJSON PartnerClaimSectionType where
+    toJSON = toJSONText
+
+-- | Required. The section type of the device\'s provisioning record.
+data PartnerUnclaimSectionType
+    = PUSTSectionTypeUnspecified
+      -- ^ @SECTION_TYPE_UNSPECIFIED@
+      -- Unspecified section type.
+    | PUSTSectionTypeSimLock
+      -- ^ @SECTION_TYPE_SIM_LOCK@
+      -- SIM-lock section type.
+    | PUSTSectionTypeZeroTouch
+      -- ^ @SECTION_TYPE_ZERO_TOUCH@
+      -- Zero-touch enrollment section type.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PartnerUnclaimSectionType
+
+instance FromHttpApiData PartnerUnclaimSectionType where
+    parseQueryParam = \case
+        "SECTION_TYPE_UNSPECIFIED" -> Right PUSTSectionTypeUnspecified
+        "SECTION_TYPE_SIM_LOCK" -> Right PUSTSectionTypeSimLock
+        "SECTION_TYPE_ZERO_TOUCH" -> Right PUSTSectionTypeZeroTouch
+        x -> Left ("Unable to parse PartnerUnclaimSectionType from: " <> x)
+
+instance ToHttpApiData PartnerUnclaimSectionType where
+    toQueryParam = \case
+        PUSTSectionTypeUnspecified -> "SECTION_TYPE_UNSPECIFIED"
+        PUSTSectionTypeSimLock -> "SECTION_TYPE_SIM_LOCK"
+        PUSTSectionTypeZeroTouch -> "SECTION_TYPE_ZERO_TOUCH"
+
+instance FromJSON PartnerUnclaimSectionType where
+    parseJSON = parseJSONText "PartnerUnclaimSectionType"
+
+instance ToJSON PartnerUnclaimSectionType 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
+
+-- | Required. The section type of the device\'s provisioning record.
+data ClaimDeviceRequestSectionType
+    = CDRSTSectionTypeUnspecified
+      -- ^ @SECTION_TYPE_UNSPECIFIED@
+      -- Unspecified section type.
+    | CDRSTSectionTypeSimLock
+      -- ^ @SECTION_TYPE_SIM_LOCK@
+      -- SIM-lock section type.
+    | CDRSTSectionTypeZeroTouch
+      -- ^ @SECTION_TYPE_ZERO_TOUCH@
+      -- Zero-touch enrollment section type.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ClaimDeviceRequestSectionType
+
+instance FromHttpApiData ClaimDeviceRequestSectionType where
+    parseQueryParam = \case
+        "SECTION_TYPE_UNSPECIFIED" -> Right CDRSTSectionTypeUnspecified
+        "SECTION_TYPE_SIM_LOCK" -> Right CDRSTSectionTypeSimLock
+        "SECTION_TYPE_ZERO_TOUCH" -> Right CDRSTSectionTypeZeroTouch
+        x -> Left ("Unable to parse ClaimDeviceRequestSectionType from: " <> x)
+
+instance ToHttpApiData ClaimDeviceRequestSectionType where
+    toQueryParam = \case
+        CDRSTSectionTypeUnspecified -> "SECTION_TYPE_UNSPECIFIED"
+        CDRSTSectionTypeSimLock -> "SECTION_TYPE_SIM_LOCK"
+        CDRSTSectionTypeZeroTouch -> "SECTION_TYPE_ZERO_TOUCH"
+
+instance FromJSON ClaimDeviceRequestSectionType where
+    parseJSON = parseJSONText "ClaimDeviceRequestSectionType"
+
+instance ToJSON ClaimDeviceRequestSectionType where
+    toJSON = toJSONText
+
+-- | Output only. The type of claim made on the device.
+data DeviceClaimSectionType
+    = DCSTSectionTypeUnspecified
+      -- ^ @SECTION_TYPE_UNSPECIFIED@
+      -- Unspecified section type.
+    | DCSTSectionTypeSimLock
+      -- ^ @SECTION_TYPE_SIM_LOCK@
+      -- SIM-lock section type.
+    | DCSTSectionTypeZeroTouch
+      -- ^ @SECTION_TYPE_ZERO_TOUCH@
+      -- Zero-touch enrollment section type.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DeviceClaimSectionType
+
+instance FromHttpApiData DeviceClaimSectionType where
+    parseQueryParam = \case
+        "SECTION_TYPE_UNSPECIFIED" -> Right DCSTSectionTypeUnspecified
+        "SECTION_TYPE_SIM_LOCK" -> Right DCSTSectionTypeSimLock
+        "SECTION_TYPE_ZERO_TOUCH" -> Right DCSTSectionTypeZeroTouch
+        x -> Left ("Unable to parse DeviceClaimSectionType from: " <> x)
+
+instance ToHttpApiData DeviceClaimSectionType where
+    toQueryParam = \case
+        DCSTSectionTypeUnspecified -> "SECTION_TYPE_UNSPECIFIED"
+        DCSTSectionTypeSimLock -> "SECTION_TYPE_SIM_LOCK"
+        DCSTSectionTypeZeroTouch -> "SECTION_TYPE_ZERO_TOUCH"
+
+instance FromJSON DeviceClaimSectionType where
+    parseJSON = parseJSONText "DeviceClaimSectionType"
+
+instance ToJSON DeviceClaimSectionType where
+    toJSON = toJSONText
+
+-- | Output only. Whether any user from the company has accepted the latest
+-- Terms of Service (ToS). See TermsStatus.
+data CompanyTermsStatus
+    = TermsStatusUnspecified
+      -- ^ @TERMS_STATUS_UNSPECIFIED@
+      -- Default value. This value should never be set if the enum is present.
+    | TermsStatusNotAccepted
+      -- ^ @TERMS_STATUS_NOT_ACCEPTED@
+      -- None of the company\'s users have accepted the ToS.
+    | TermsStatusAccepted
+      -- ^ @TERMS_STATUS_ACCEPTED@
+      -- One (or more) of the company\'s users has accepted the ToS.
+    | TermsStatusStale
+      -- ^ @TERMS_STATUS_STALE@
+      -- None of the company\'s users has accepted the current ToS but at least
+      -- one user accepted a previous ToS.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CompanyTermsStatus
+
+instance FromHttpApiData CompanyTermsStatus where
+    parseQueryParam = \case
+        "TERMS_STATUS_UNSPECIFIED" -> Right TermsStatusUnspecified
+        "TERMS_STATUS_NOT_ACCEPTED" -> Right TermsStatusNotAccepted
+        "TERMS_STATUS_ACCEPTED" -> Right TermsStatusAccepted
+        "TERMS_STATUS_STALE" -> Right TermsStatusStale
+        x -> Left ("Unable to parse CompanyTermsStatus from: " <> x)
+
+instance ToHttpApiData CompanyTermsStatus where
+    toQueryParam = \case
+        TermsStatusUnspecified -> "TERMS_STATUS_UNSPECIFIED"
+        TermsStatusNotAccepted -> "TERMS_STATUS_NOT_ACCEPTED"
+        TermsStatusAccepted -> "TERMS_STATUS_ACCEPTED"
+        TermsStatusStale -> "TERMS_STATUS_STALE"
+
+instance FromJSON CompanyTermsStatus where
+    parseJSON = parseJSONText "CompanyTermsStatus"
+
+instance ToJSON CompanyTermsStatus where
+    toJSON = toJSONText
+
+-- | Required. The section type of the device\'s provisioning record.
+data UnclaimDeviceRequestSectionType
+    = UDRSTSectionTypeUnspecified
+      -- ^ @SECTION_TYPE_UNSPECIFIED@
+      -- Unspecified section type.
+    | UDRSTSectionTypeSimLock
+      -- ^ @SECTION_TYPE_SIM_LOCK@
+      -- SIM-lock section type.
+    | UDRSTSectionTypeZeroTouch
+      -- ^ @SECTION_TYPE_ZERO_TOUCH@
+      -- Zero-touch enrollment section type.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable UnclaimDeviceRequestSectionType
+
+instance FromHttpApiData UnclaimDeviceRequestSectionType where
+    parseQueryParam = \case
+        "SECTION_TYPE_UNSPECIFIED" -> Right UDRSTSectionTypeUnspecified
+        "SECTION_TYPE_SIM_LOCK" -> Right UDRSTSectionTypeSimLock
+        "SECTION_TYPE_ZERO_TOUCH" -> Right UDRSTSectionTypeZeroTouch
+        x -> Left ("Unable to parse UnclaimDeviceRequestSectionType from: " <> x)
+
+instance ToHttpApiData UnclaimDeviceRequestSectionType where
+    toQueryParam = \case
+        UDRSTSectionTypeUnspecified -> "SECTION_TYPE_UNSPECIFIED"
+        UDRSTSectionTypeSimLock -> "SECTION_TYPE_SIM_LOCK"
+        UDRSTSectionTypeZeroTouch -> "SECTION_TYPE_ZERO_TOUCH"
+
+instance FromJSON UnclaimDeviceRequestSectionType where
+    parseJSON = parseJSONText "UnclaimDeviceRequestSectionType"
+
+instance ToJSON UnclaimDeviceRequestSectionType where
+    toJSON = toJSONText
+
+-- | The processing status of the operation.
+data DevicesLongRunningOperationMetadataProcessingStatus
+    = BatchProcessStatusUnspecified
+      -- ^ @BATCH_PROCESS_STATUS_UNSPECIFIED@
+      -- Invalid code. Shouldn\'t be used.
+    | BatchProcessPending
+      -- ^ @BATCH_PROCESS_PENDING@
+      -- Pending.
+    | BatchProcessInProgress
+      -- ^ @BATCH_PROCESS_IN_PROGRESS@
+      -- In progress.
+    | BatchProcessProcessed
+      -- ^ @BATCH_PROCESS_PROCESSED@
+      -- Processed. This doesn\'t mean all items were processed successfully, you
+      -- should check the \`response\` field for the result of every item.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DevicesLongRunningOperationMetadataProcessingStatus
+
+instance FromHttpApiData DevicesLongRunningOperationMetadataProcessingStatus where
+    parseQueryParam = \case
+        "BATCH_PROCESS_STATUS_UNSPECIFIED" -> Right BatchProcessStatusUnspecified
+        "BATCH_PROCESS_PENDING" -> Right BatchProcessPending
+        "BATCH_PROCESS_IN_PROGRESS" -> Right BatchProcessInProgress
+        "BATCH_PROCESS_PROCESSED" -> Right BatchProcessProcessed
+        x -> Left ("Unable to parse DevicesLongRunningOperationMetadataProcessingStatus from: " <> x)
+
+instance ToHttpApiData DevicesLongRunningOperationMetadataProcessingStatus where
+    toQueryParam = \case
+        BatchProcessStatusUnspecified -> "BATCH_PROCESS_STATUS_UNSPECIFIED"
+        BatchProcessPending -> "BATCH_PROCESS_PENDING"
+        BatchProcessInProgress -> "BATCH_PROCESS_IN_PROGRESS"
+        BatchProcessProcessed -> "BATCH_PROCESS_PROCESSED"
+
+instance FromJSON DevicesLongRunningOperationMetadataProcessingStatus where
+    parseJSON = parseJSONText "DevicesLongRunningOperationMetadataProcessingStatus"
+
+instance ToJSON DevicesLongRunningOperationMetadataProcessingStatus where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Configurations/Create.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Configurations/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Configurations/Create.hs
@@ -0,0 +1,164 @@
+{-# 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.AndroidDeviceProvisioning.Customers.Configurations.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 configuration. Once created, a customer can apply the
+-- configuration to devices.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.customers.configurations.create@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.Create
+    (
+    -- * REST Resource
+      CustomersConfigurationsCreateResource
+
+    -- * Creating a Request
+    , customersConfigurationsCreate
+    , CustomersConfigurationsCreate
+
+    -- * Request Lenses
+    , cccParent
+    , cccXgafv
+    , cccUploadProtocol
+    , cccAccessToken
+    , cccUploadType
+    , cccPayload
+    , cccCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.customers.configurations.create@ method which the
+-- 'CustomersConfigurationsCreate' request conforms to.
+type CustomersConfigurationsCreateResource =
+     "v1" :>
+       Capture "parent" Text :>
+         "configurations" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Configuration :>
+                         Post '[JSON] Configuration
+
+-- | Creates a new configuration. Once created, a customer can apply the
+-- configuration to devices.
+--
+-- /See:/ 'customersConfigurationsCreate' smart constructor.
+data CustomersConfigurationsCreate = CustomersConfigurationsCreate'
+    { _cccParent         :: !Text
+    , _cccXgafv          :: !(Maybe Xgafv)
+    , _cccUploadProtocol :: !(Maybe Text)
+    , _cccAccessToken    :: !(Maybe Text)
+    , _cccUploadType     :: !(Maybe Text)
+    , _cccPayload        :: !Configuration
+    , _cccCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomersConfigurationsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cccParent'
+--
+-- * 'cccXgafv'
+--
+-- * 'cccUploadProtocol'
+--
+-- * 'cccAccessToken'
+--
+-- * 'cccUploadType'
+--
+-- * 'cccPayload'
+--
+-- * 'cccCallback'
+customersConfigurationsCreate
+    :: Text -- ^ 'cccParent'
+    -> Configuration -- ^ 'cccPayload'
+    -> CustomersConfigurationsCreate
+customersConfigurationsCreate pCccParent_ pCccPayload_ =
+    CustomersConfigurationsCreate'
+    { _cccParent = pCccParent_
+    , _cccXgafv = Nothing
+    , _cccUploadProtocol = Nothing
+    , _cccAccessToken = Nothing
+    , _cccUploadType = Nothing
+    , _cccPayload = pCccPayload_
+    , _cccCallback = Nothing
+    }
+
+-- | Required. The customer that manages the configuration. An API resource
+-- name in the format \`customers\/[CUSTOMER_ID]\`.
+cccParent :: Lens' CustomersConfigurationsCreate Text
+cccParent
+  = lens _cccParent (\ s a -> s{_cccParent = a})
+
+-- | V1 error format.
+cccXgafv :: Lens' CustomersConfigurationsCreate (Maybe Xgafv)
+cccXgafv = lens _cccXgafv (\ s a -> s{_cccXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cccUploadProtocol :: Lens' CustomersConfigurationsCreate (Maybe Text)
+cccUploadProtocol
+  = lens _cccUploadProtocol
+      (\ s a -> s{_cccUploadProtocol = a})
+
+-- | OAuth access token.
+cccAccessToken :: Lens' CustomersConfigurationsCreate (Maybe Text)
+cccAccessToken
+  = lens _cccAccessToken
+      (\ s a -> s{_cccAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cccUploadType :: Lens' CustomersConfigurationsCreate (Maybe Text)
+cccUploadType
+  = lens _cccUploadType
+      (\ s a -> s{_cccUploadType = a})
+
+-- | Multipart request metadata.
+cccPayload :: Lens' CustomersConfigurationsCreate Configuration
+cccPayload
+  = lens _cccPayload (\ s a -> s{_cccPayload = a})
+
+-- | JSONP
+cccCallback :: Lens' CustomersConfigurationsCreate (Maybe Text)
+cccCallback
+  = lens _cccCallback (\ s a -> s{_cccCallback = a})
+
+instance GoogleRequest CustomersConfigurationsCreate
+         where
+        type Rs CustomersConfigurationsCreate = Configuration
+        type Scopes CustomersConfigurationsCreate = '[]
+        requestClient CustomersConfigurationsCreate'{..}
+          = go _cccParent _cccXgafv _cccUploadProtocol
+              _cccAccessToken
+              _cccUploadType
+              _cccCallback
+              (Just AltJSON)
+              _cccPayload
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy CustomersConfigurationsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Configurations/Delete.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Configurations/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Configurations/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.AndroidDeviceProvisioning.Customers.Configurations.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 an unused configuration. The API call fails if the customer has
+-- devices with the configuration applied.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.customers.configurations.delete@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.Delete
+    (
+    -- * REST Resource
+      CustomersConfigurationsDeleteResource
+
+    -- * Creating a Request
+    , customersConfigurationsDelete
+    , CustomersConfigurationsDelete
+
+    -- * Request Lenses
+    , ccdXgafv
+    , ccdUploadProtocol
+    , ccdAccessToken
+    , ccdUploadType
+    , ccdName
+    , ccdCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.customers.configurations.delete@ method which the
+-- 'CustomersConfigurationsDelete' request conforms to.
+type CustomersConfigurationsDeleteResource =
+     "v1" :>
+       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] Empty
+
+-- | Deletes an unused configuration. The API call fails if the customer has
+-- devices with the configuration applied.
+--
+-- /See:/ 'customersConfigurationsDelete' smart constructor.
+data CustomersConfigurationsDelete = CustomersConfigurationsDelete'
+    { _ccdXgafv          :: !(Maybe Xgafv)
+    , _ccdUploadProtocol :: !(Maybe Text)
+    , _ccdAccessToken    :: !(Maybe Text)
+    , _ccdUploadType     :: !(Maybe Text)
+    , _ccdName           :: !Text
+    , _ccdCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomersConfigurationsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccdXgafv'
+--
+-- * 'ccdUploadProtocol'
+--
+-- * 'ccdAccessToken'
+--
+-- * 'ccdUploadType'
+--
+-- * 'ccdName'
+--
+-- * 'ccdCallback'
+customersConfigurationsDelete
+    :: Text -- ^ 'ccdName'
+    -> CustomersConfigurationsDelete
+customersConfigurationsDelete pCcdName_ =
+    CustomersConfigurationsDelete'
+    { _ccdXgafv = Nothing
+    , _ccdUploadProtocol = Nothing
+    , _ccdAccessToken = Nothing
+    , _ccdUploadType = Nothing
+    , _ccdName = pCcdName_
+    , _ccdCallback = Nothing
+    }
+
+-- | V1 error format.
+ccdXgafv :: Lens' CustomersConfigurationsDelete (Maybe Xgafv)
+ccdXgafv = lens _ccdXgafv (\ s a -> s{_ccdXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ccdUploadProtocol :: Lens' CustomersConfigurationsDelete (Maybe Text)
+ccdUploadProtocol
+  = lens _ccdUploadProtocol
+      (\ s a -> s{_ccdUploadProtocol = a})
+
+-- | OAuth access token.
+ccdAccessToken :: Lens' CustomersConfigurationsDelete (Maybe Text)
+ccdAccessToken
+  = lens _ccdAccessToken
+      (\ s a -> s{_ccdAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ccdUploadType :: Lens' CustomersConfigurationsDelete (Maybe Text)
+ccdUploadType
+  = lens _ccdUploadType
+      (\ s a -> s{_ccdUploadType = a})
+
+-- | Required. The configuration to delete. An API resource name in the
+-- format \`customers\/[CUSTOMER_ID]\/configurations\/[CONFIGURATION_ID]\`.
+-- If the configuration is applied to any devices, the API call fails.
+ccdName :: Lens' CustomersConfigurationsDelete Text
+ccdName = lens _ccdName (\ s a -> s{_ccdName = a})
+
+-- | JSONP
+ccdCallback :: Lens' CustomersConfigurationsDelete (Maybe Text)
+ccdCallback
+  = lens _ccdCallback (\ s a -> s{_ccdCallback = a})
+
+instance GoogleRequest CustomersConfigurationsDelete
+         where
+        type Rs CustomersConfigurationsDelete = Empty
+        type Scopes CustomersConfigurationsDelete = '[]
+        requestClient CustomersConfigurationsDelete'{..}
+          = go _ccdName _ccdXgafv _ccdUploadProtocol
+              _ccdAccessToken
+              _ccdUploadType
+              _ccdCallback
+              (Just AltJSON)
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy CustomersConfigurationsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Configurations/Get.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Configurations/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Configurations/Get.hs
@@ -0,0 +1,145 @@
+{-# 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.AndroidDeviceProvisioning.Customers.Configurations.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 details of a configuration.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.customers.configurations.get@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.Get
+    (
+    -- * REST Resource
+      CustomersConfigurationsGetResource
+
+    -- * Creating a Request
+    , customersConfigurationsGet
+    , CustomersConfigurationsGet
+
+    -- * Request Lenses
+    , ccgXgafv
+    , ccgUploadProtocol
+    , ccgAccessToken
+    , ccgUploadType
+    , ccgName
+    , ccgCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.customers.configurations.get@ method which the
+-- 'CustomersConfigurationsGet' request conforms to.
+type CustomersConfigurationsGetResource =
+     "v1" :>
+       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] Configuration
+
+-- | Gets the details of a configuration.
+--
+-- /See:/ 'customersConfigurationsGet' smart constructor.
+data CustomersConfigurationsGet = CustomersConfigurationsGet'
+    { _ccgXgafv          :: !(Maybe Xgafv)
+    , _ccgUploadProtocol :: !(Maybe Text)
+    , _ccgAccessToken    :: !(Maybe Text)
+    , _ccgUploadType     :: !(Maybe Text)
+    , _ccgName           :: !Text
+    , _ccgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomersConfigurationsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccgXgafv'
+--
+-- * 'ccgUploadProtocol'
+--
+-- * 'ccgAccessToken'
+--
+-- * 'ccgUploadType'
+--
+-- * 'ccgName'
+--
+-- * 'ccgCallback'
+customersConfigurationsGet
+    :: Text -- ^ 'ccgName'
+    -> CustomersConfigurationsGet
+customersConfigurationsGet pCcgName_ =
+    CustomersConfigurationsGet'
+    { _ccgXgafv = Nothing
+    , _ccgUploadProtocol = Nothing
+    , _ccgAccessToken = Nothing
+    , _ccgUploadType = Nothing
+    , _ccgName = pCcgName_
+    , _ccgCallback = Nothing
+    }
+
+-- | V1 error format.
+ccgXgafv :: Lens' CustomersConfigurationsGet (Maybe Xgafv)
+ccgXgafv = lens _ccgXgafv (\ s a -> s{_ccgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ccgUploadProtocol :: Lens' CustomersConfigurationsGet (Maybe Text)
+ccgUploadProtocol
+  = lens _ccgUploadProtocol
+      (\ s a -> s{_ccgUploadProtocol = a})
+
+-- | OAuth access token.
+ccgAccessToken :: Lens' CustomersConfigurationsGet (Maybe Text)
+ccgAccessToken
+  = lens _ccgAccessToken
+      (\ s a -> s{_ccgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ccgUploadType :: Lens' CustomersConfigurationsGet (Maybe Text)
+ccgUploadType
+  = lens _ccgUploadType
+      (\ s a -> s{_ccgUploadType = a})
+
+-- | Required. The configuration to get. An API resource name in the format
+-- \`customers\/[CUSTOMER_ID]\/configurations\/[CONFIGURATION_ID]\`.
+ccgName :: Lens' CustomersConfigurationsGet Text
+ccgName = lens _ccgName (\ s a -> s{_ccgName = a})
+
+-- | JSONP
+ccgCallback :: Lens' CustomersConfigurationsGet (Maybe Text)
+ccgCallback
+  = lens _ccgCallback (\ s a -> s{_ccgCallback = a})
+
+instance GoogleRequest CustomersConfigurationsGet
+         where
+        type Rs CustomersConfigurationsGet = Configuration
+        type Scopes CustomersConfigurationsGet = '[]
+        requestClient CustomersConfigurationsGet'{..}
+          = go _ccgName _ccgXgafv _ccgUploadProtocol
+              _ccgAccessToken
+              _ccgUploadType
+              _ccgCallback
+              (Just AltJSON)
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CustomersConfigurationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Configurations/List.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Configurations/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Configurations/List.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.AndroidDeviceProvisioning.Customers.Configurations.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 a customer\'s configurations.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.customers.configurations.list@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.List
+    (
+    -- * REST Resource
+      CustomersConfigurationsListResource
+
+    -- * Creating a Request
+    , customersConfigurationsList
+    , CustomersConfigurationsList
+
+    -- * Request Lenses
+    , cclParent
+    , cclXgafv
+    , cclUploadProtocol
+    , cclAccessToken
+    , cclUploadType
+    , cclCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.customers.configurations.list@ method which the
+-- 'CustomersConfigurationsList' request conforms to.
+type CustomersConfigurationsListResource =
+     "v1" :>
+       Capture "parent" Text :>
+         "configurations" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       Get '[JSON] CustomerListConfigurationsResponse
+
+-- | Lists a customer\'s configurations.
+--
+-- /See:/ 'customersConfigurationsList' smart constructor.
+data CustomersConfigurationsList = CustomersConfigurationsList'
+    { _cclParent         :: !Text
+    , _cclXgafv          :: !(Maybe Xgafv)
+    , _cclUploadProtocol :: !(Maybe Text)
+    , _cclAccessToken    :: !(Maybe Text)
+    , _cclUploadType     :: !(Maybe Text)
+    , _cclCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomersConfigurationsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cclParent'
+--
+-- * 'cclXgafv'
+--
+-- * 'cclUploadProtocol'
+--
+-- * 'cclAccessToken'
+--
+-- * 'cclUploadType'
+--
+-- * 'cclCallback'
+customersConfigurationsList
+    :: Text -- ^ 'cclParent'
+    -> CustomersConfigurationsList
+customersConfigurationsList pCclParent_ =
+    CustomersConfigurationsList'
+    { _cclParent = pCclParent_
+    , _cclXgafv = Nothing
+    , _cclUploadProtocol = Nothing
+    , _cclAccessToken = Nothing
+    , _cclUploadType = Nothing
+    , _cclCallback = Nothing
+    }
+
+-- | Required. The customer that manages the listed configurations. An API
+-- resource name in the format \`customers\/[CUSTOMER_ID]\`.
+cclParent :: Lens' CustomersConfigurationsList Text
+cclParent
+  = lens _cclParent (\ s a -> s{_cclParent = a})
+
+-- | V1 error format.
+cclXgafv :: Lens' CustomersConfigurationsList (Maybe Xgafv)
+cclXgafv = lens _cclXgafv (\ s a -> s{_cclXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cclUploadProtocol :: Lens' CustomersConfigurationsList (Maybe Text)
+cclUploadProtocol
+  = lens _cclUploadProtocol
+      (\ s a -> s{_cclUploadProtocol = a})
+
+-- | OAuth access token.
+cclAccessToken :: Lens' CustomersConfigurationsList (Maybe Text)
+cclAccessToken
+  = lens _cclAccessToken
+      (\ s a -> s{_cclAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cclUploadType :: Lens' CustomersConfigurationsList (Maybe Text)
+cclUploadType
+  = lens _cclUploadType
+      (\ s a -> s{_cclUploadType = a})
+
+-- | JSONP
+cclCallback :: Lens' CustomersConfigurationsList (Maybe Text)
+cclCallback
+  = lens _cclCallback (\ s a -> s{_cclCallback = a})
+
+instance GoogleRequest CustomersConfigurationsList
+         where
+        type Rs CustomersConfigurationsList =
+             CustomerListConfigurationsResponse
+        type Scopes CustomersConfigurationsList = '[]
+        requestClient CustomersConfigurationsList'{..}
+          = go _cclParent _cclXgafv _cclUploadProtocol
+              _cclAccessToken
+              _cclUploadType
+              _cclCallback
+              (Just AltJSON)
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CustomersConfigurationsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Configurations/Patch.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Configurations/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Configurations/Patch.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.AndroidDeviceProvisioning.Customers.Configurations.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 configuration\'s field values.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.customers.configurations.patch@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.Patch
+    (
+    -- * REST Resource
+      CustomersConfigurationsPatchResource
+
+    -- * Creating a Request
+    , customersConfigurationsPatch
+    , CustomersConfigurationsPatch
+
+    -- * Request Lenses
+    , ccpXgafv
+    , ccpUploadProtocol
+    , ccpUpdateMask
+    , ccpAccessToken
+    , ccpUploadType
+    , ccpPayload
+    , ccpName
+    , ccpCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.customers.configurations.patch@ method which the
+-- 'CustomersConfigurationsPatch' request conforms to.
+type CustomersConfigurationsPatchResource =
+     "v1" :>
+       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] Configuration :>
+                         Patch '[JSON] Configuration
+
+-- | Updates a configuration\'s field values.
+--
+-- /See:/ 'customersConfigurationsPatch' smart constructor.
+data CustomersConfigurationsPatch = CustomersConfigurationsPatch'
+    { _ccpXgafv          :: !(Maybe Xgafv)
+    , _ccpUploadProtocol :: !(Maybe Text)
+    , _ccpUpdateMask     :: !(Maybe GFieldMask)
+    , _ccpAccessToken    :: !(Maybe Text)
+    , _ccpUploadType     :: !(Maybe Text)
+    , _ccpPayload        :: !Configuration
+    , _ccpName           :: !Text
+    , _ccpCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomersConfigurationsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccpXgafv'
+--
+-- * 'ccpUploadProtocol'
+--
+-- * 'ccpUpdateMask'
+--
+-- * 'ccpAccessToken'
+--
+-- * 'ccpUploadType'
+--
+-- * 'ccpPayload'
+--
+-- * 'ccpName'
+--
+-- * 'ccpCallback'
+customersConfigurationsPatch
+    :: Configuration -- ^ 'ccpPayload'
+    -> Text -- ^ 'ccpName'
+    -> CustomersConfigurationsPatch
+customersConfigurationsPatch pCcpPayload_ pCcpName_ =
+    CustomersConfigurationsPatch'
+    { _ccpXgafv = Nothing
+    , _ccpUploadProtocol = Nothing
+    , _ccpUpdateMask = Nothing
+    , _ccpAccessToken = Nothing
+    , _ccpUploadType = Nothing
+    , _ccpPayload = pCcpPayload_
+    , _ccpName = pCcpName_
+    , _ccpCallback = Nothing
+    }
+
+-- | V1 error format.
+ccpXgafv :: Lens' CustomersConfigurationsPatch (Maybe Xgafv)
+ccpXgafv = lens _ccpXgafv (\ s a -> s{_ccpXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ccpUploadProtocol :: Lens' CustomersConfigurationsPatch (Maybe Text)
+ccpUploadProtocol
+  = lens _ccpUploadProtocol
+      (\ s a -> s{_ccpUploadProtocol = a})
+
+-- | Required. The field mask applied to the target \`Configuration\` before
+-- updating the fields. To learn more about using field masks, read
+-- [FieldMask](\/protocol-buffers\/docs\/reference\/google.protobuf#fieldmask)
+-- in the Protocol Buffers documentation.
+ccpUpdateMask :: Lens' CustomersConfigurationsPatch (Maybe GFieldMask)
+ccpUpdateMask
+  = lens _ccpUpdateMask
+      (\ s a -> s{_ccpUpdateMask = a})
+
+-- | OAuth access token.
+ccpAccessToken :: Lens' CustomersConfigurationsPatch (Maybe Text)
+ccpAccessToken
+  = lens _ccpAccessToken
+      (\ s a -> s{_ccpAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ccpUploadType :: Lens' CustomersConfigurationsPatch (Maybe Text)
+ccpUploadType
+  = lens _ccpUploadType
+      (\ s a -> s{_ccpUploadType = a})
+
+-- | Multipart request metadata.
+ccpPayload :: Lens' CustomersConfigurationsPatch Configuration
+ccpPayload
+  = lens _ccpPayload (\ s a -> s{_ccpPayload = a})
+
+-- | Output only. The API resource name in the format
+-- \`customers\/[CUSTOMER_ID]\/configurations\/[CONFIGURATION_ID]\`.
+-- Assigned by the server.
+ccpName :: Lens' CustomersConfigurationsPatch Text
+ccpName = lens _ccpName (\ s a -> s{_ccpName = a})
+
+-- | JSONP
+ccpCallback :: Lens' CustomersConfigurationsPatch (Maybe Text)
+ccpCallback
+  = lens _ccpCallback (\ s a -> s{_ccpCallback = a})
+
+instance GoogleRequest CustomersConfigurationsPatch
+         where
+        type Rs CustomersConfigurationsPatch = Configuration
+        type Scopes CustomersConfigurationsPatch = '[]
+        requestClient CustomersConfigurationsPatch'{..}
+          = go _ccpName _ccpXgafv _ccpUploadProtocol
+              _ccpUpdateMask
+              _ccpAccessToken
+              _ccpUploadType
+              _ccpCallback
+              (Just AltJSON)
+              _ccpPayload
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CustomersConfigurationsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Devices/ApplyConfiguration.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Devices/ApplyConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Devices/ApplyConfiguration.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.AndroidDeviceProvisioning.Customers.Devices.ApplyConfiguration
+-- 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)
+--
+-- Applies a Configuration to the device to register the device for
+-- zero-touch enrollment. After applying a configuration to a device, the
+-- device automatically provisions itself on first boot, or next factory
+-- reset.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.customers.devices.applyConfiguration@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.ApplyConfiguration
+    (
+    -- * REST Resource
+      CustomersDevicesApplyConfigurationResource
+
+    -- * Creating a Request
+    , customersDevicesApplyConfiguration
+    , CustomersDevicesApplyConfiguration
+
+    -- * Request Lenses
+    , cdacParent
+    , cdacXgafv
+    , cdacUploadProtocol
+    , cdacAccessToken
+    , cdacUploadType
+    , cdacPayload
+    , cdacCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.customers.devices.applyConfiguration@ method which the
+-- 'CustomersDevicesApplyConfiguration' request conforms to.
+type CustomersDevicesApplyConfigurationResource =
+     "v1" :>
+       Capture "parent" Text :>
+         "devices:applyConfiguration" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] CustomerApplyConfigurationRequest :>
+                         Post '[JSON] Empty
+
+-- | Applies a Configuration to the device to register the device for
+-- zero-touch enrollment. After applying a configuration to a device, the
+-- device automatically provisions itself on first boot, or next factory
+-- reset.
+--
+-- /See:/ 'customersDevicesApplyConfiguration' smart constructor.
+data CustomersDevicesApplyConfiguration = CustomersDevicesApplyConfiguration'
+    { _cdacParent         :: !Text
+    , _cdacXgafv          :: !(Maybe Xgafv)
+    , _cdacUploadProtocol :: !(Maybe Text)
+    , _cdacAccessToken    :: !(Maybe Text)
+    , _cdacUploadType     :: !(Maybe Text)
+    , _cdacPayload        :: !CustomerApplyConfigurationRequest
+    , _cdacCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomersDevicesApplyConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdacParent'
+--
+-- * 'cdacXgafv'
+--
+-- * 'cdacUploadProtocol'
+--
+-- * 'cdacAccessToken'
+--
+-- * 'cdacUploadType'
+--
+-- * 'cdacPayload'
+--
+-- * 'cdacCallback'
+customersDevicesApplyConfiguration
+    :: Text -- ^ 'cdacParent'
+    -> CustomerApplyConfigurationRequest -- ^ 'cdacPayload'
+    -> CustomersDevicesApplyConfiguration
+customersDevicesApplyConfiguration pCdacParent_ pCdacPayload_ =
+    CustomersDevicesApplyConfiguration'
+    { _cdacParent = pCdacParent_
+    , _cdacXgafv = Nothing
+    , _cdacUploadProtocol = Nothing
+    , _cdacAccessToken = Nothing
+    , _cdacUploadType = Nothing
+    , _cdacPayload = pCdacPayload_
+    , _cdacCallback = Nothing
+    }
+
+-- | Required. The customer managing the device. An API resource name in the
+-- format \`customers\/[CUSTOMER_ID]\`.
+cdacParent :: Lens' CustomersDevicesApplyConfiguration Text
+cdacParent
+  = lens _cdacParent (\ s a -> s{_cdacParent = a})
+
+-- | V1 error format.
+cdacXgafv :: Lens' CustomersDevicesApplyConfiguration (Maybe Xgafv)
+cdacXgafv
+  = lens _cdacXgafv (\ s a -> s{_cdacXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cdacUploadProtocol :: Lens' CustomersDevicesApplyConfiguration (Maybe Text)
+cdacUploadProtocol
+  = lens _cdacUploadProtocol
+      (\ s a -> s{_cdacUploadProtocol = a})
+
+-- | OAuth access token.
+cdacAccessToken :: Lens' CustomersDevicesApplyConfiguration (Maybe Text)
+cdacAccessToken
+  = lens _cdacAccessToken
+      (\ s a -> s{_cdacAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cdacUploadType :: Lens' CustomersDevicesApplyConfiguration (Maybe Text)
+cdacUploadType
+  = lens _cdacUploadType
+      (\ s a -> s{_cdacUploadType = a})
+
+-- | Multipart request metadata.
+cdacPayload :: Lens' CustomersDevicesApplyConfiguration CustomerApplyConfigurationRequest
+cdacPayload
+  = lens _cdacPayload (\ s a -> s{_cdacPayload = a})
+
+-- | JSONP
+cdacCallback :: Lens' CustomersDevicesApplyConfiguration (Maybe Text)
+cdacCallback
+  = lens _cdacCallback (\ s a -> s{_cdacCallback = a})
+
+instance GoogleRequest
+         CustomersDevicesApplyConfiguration where
+        type Rs CustomersDevicesApplyConfiguration = Empty
+        type Scopes CustomersDevicesApplyConfiguration = '[]
+        requestClient CustomersDevicesApplyConfiguration'{..}
+          = go _cdacParent _cdacXgafv _cdacUploadProtocol
+              _cdacAccessToken
+              _cdacUploadType
+              _cdacCallback
+              (Just AltJSON)
+              _cdacPayload
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy CustomersDevicesApplyConfigurationResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Devices/Get.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Devices/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Devices/Get.hs
@@ -0,0 +1,144 @@
+{-# 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.AndroidDeviceProvisioning.Customers.Devices.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 details of a device.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.customers.devices.get@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.Get
+    (
+    -- * REST Resource
+      CustomersDevicesGetResource
+
+    -- * Creating a Request
+    , customersDevicesGet
+    , CustomersDevicesGet
+
+    -- * Request Lenses
+    , cdgXgafv
+    , cdgUploadProtocol
+    , cdgAccessToken
+    , cdgUploadType
+    , cdgName
+    , cdgCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.customers.devices.get@ method which the
+-- 'CustomersDevicesGet' request conforms to.
+type CustomersDevicesGetResource =
+     "v1" :>
+       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] Device
+
+-- | Gets the details of a device.
+--
+-- /See:/ 'customersDevicesGet' smart constructor.
+data CustomersDevicesGet = CustomersDevicesGet'
+    { _cdgXgafv          :: !(Maybe Xgafv)
+    , _cdgUploadProtocol :: !(Maybe Text)
+    , _cdgAccessToken    :: !(Maybe Text)
+    , _cdgUploadType     :: !(Maybe Text)
+    , _cdgName           :: !Text
+    , _cdgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomersDevicesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdgXgafv'
+--
+-- * 'cdgUploadProtocol'
+--
+-- * 'cdgAccessToken'
+--
+-- * 'cdgUploadType'
+--
+-- * 'cdgName'
+--
+-- * 'cdgCallback'
+customersDevicesGet
+    :: Text -- ^ 'cdgName'
+    -> CustomersDevicesGet
+customersDevicesGet pCdgName_ =
+    CustomersDevicesGet'
+    { _cdgXgafv = Nothing
+    , _cdgUploadProtocol = Nothing
+    , _cdgAccessToken = Nothing
+    , _cdgUploadType = Nothing
+    , _cdgName = pCdgName_
+    , _cdgCallback = Nothing
+    }
+
+-- | V1 error format.
+cdgXgafv :: Lens' CustomersDevicesGet (Maybe Xgafv)
+cdgXgafv = lens _cdgXgafv (\ s a -> s{_cdgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cdgUploadProtocol :: Lens' CustomersDevicesGet (Maybe Text)
+cdgUploadProtocol
+  = lens _cdgUploadProtocol
+      (\ s a -> s{_cdgUploadProtocol = a})
+
+-- | OAuth access token.
+cdgAccessToken :: Lens' CustomersDevicesGet (Maybe Text)
+cdgAccessToken
+  = lens _cdgAccessToken
+      (\ s a -> s{_cdgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cdgUploadType :: Lens' CustomersDevicesGet (Maybe Text)
+cdgUploadType
+  = lens _cdgUploadType
+      (\ s a -> s{_cdgUploadType = a})
+
+-- | Required. The device to get. An API resource name in the format
+-- \`customers\/[CUSTOMER_ID]\/devices\/[DEVICE_ID]\`.
+cdgName :: Lens' CustomersDevicesGet Text
+cdgName = lens _cdgName (\ s a -> s{_cdgName = a})
+
+-- | JSONP
+cdgCallback :: Lens' CustomersDevicesGet (Maybe Text)
+cdgCallback
+  = lens _cdgCallback (\ s a -> s{_cdgCallback = a})
+
+instance GoogleRequest CustomersDevicesGet where
+        type Rs CustomersDevicesGet = Device
+        type Scopes CustomersDevicesGet = '[]
+        requestClient CustomersDevicesGet'{..}
+          = go _cdgName _cdgXgafv _cdgUploadProtocol
+              _cdgAccessToken
+              _cdgUploadType
+              _cdgCallback
+              (Just AltJSON)
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CustomersDevicesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Devices/List.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Devices/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Devices/List.hs
@@ -0,0 +1,170 @@
+{-# 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.AndroidDeviceProvisioning.Customers.Devices.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 a customer\'s devices.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.customers.devices.list@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.List
+    (
+    -- * REST Resource
+      CustomersDevicesListResource
+
+    -- * Creating a Request
+    , customersDevicesList
+    , CustomersDevicesList
+
+    -- * Request Lenses
+    , cParent
+    , cXgafv
+    , cUploadProtocol
+    , cAccessToken
+    , cUploadType
+    , cPageToken
+    , cPageSize
+    , cCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.customers.devices.list@ method which the
+-- 'CustomersDevicesList' request conforms to.
+type CustomersDevicesListResource =
+     "v1" :>
+       Capture "parent" Text :>
+         "devices" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "pageSize" (Textual Int64) :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON] CustomerListDevicesResponse
+
+-- | Lists a customer\'s devices.
+--
+-- /See:/ 'customersDevicesList' smart constructor.
+data CustomersDevicesList = CustomersDevicesList'
+    { _cParent         :: !Text
+    , _cXgafv          :: !(Maybe Xgafv)
+    , _cUploadProtocol :: !(Maybe Text)
+    , _cAccessToken    :: !(Maybe Text)
+    , _cUploadType     :: !(Maybe Text)
+    , _cPageToken      :: !(Maybe Text)
+    , _cPageSize       :: !(Maybe (Textual Int64))
+    , _cCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomersDevicesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cParent'
+--
+-- * 'cXgafv'
+--
+-- * 'cUploadProtocol'
+--
+-- * 'cAccessToken'
+--
+-- * 'cUploadType'
+--
+-- * 'cPageToken'
+--
+-- * 'cPageSize'
+--
+-- * 'cCallback'
+customersDevicesList
+    :: Text -- ^ 'cParent'
+    -> CustomersDevicesList
+customersDevicesList pCParent_ =
+    CustomersDevicesList'
+    { _cParent = pCParent_
+    , _cXgafv = Nothing
+    , _cUploadProtocol = Nothing
+    , _cAccessToken = Nothing
+    , _cUploadType = Nothing
+    , _cPageToken = Nothing
+    , _cPageSize = Nothing
+    , _cCallback = Nothing
+    }
+
+-- | Required. The customer managing the devices. An API resource name in the
+-- format \`customers\/[CUSTOMER_ID]\`.
+cParent :: Lens' CustomersDevicesList Text
+cParent = lens _cParent (\ s a -> s{_cParent = a})
+
+-- | V1 error format.
+cXgafv :: Lens' CustomersDevicesList (Maybe Xgafv)
+cXgafv = lens _cXgafv (\ s a -> s{_cXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cUploadProtocol :: Lens' CustomersDevicesList (Maybe Text)
+cUploadProtocol
+  = lens _cUploadProtocol
+      (\ s a -> s{_cUploadProtocol = a})
+
+-- | OAuth access token.
+cAccessToken :: Lens' CustomersDevicesList (Maybe Text)
+cAccessToken
+  = lens _cAccessToken (\ s a -> s{_cAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cUploadType :: Lens' CustomersDevicesList (Maybe Text)
+cUploadType
+  = lens _cUploadType (\ s a -> s{_cUploadType = a})
+
+-- | A token specifying which result page to return.
+cPageToken :: Lens' CustomersDevicesList (Maybe Text)
+cPageToken
+  = lens _cPageToken (\ s a -> s{_cPageToken = a})
+
+-- | The maximum number of devices to show in a page of results. Must be
+-- between 1 and 100 inclusive.
+cPageSize :: Lens' CustomersDevicesList (Maybe Int64)
+cPageSize
+  = lens _cPageSize (\ s a -> s{_cPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+cCallback :: Lens' CustomersDevicesList (Maybe Text)
+cCallback
+  = lens _cCallback (\ s a -> s{_cCallback = a})
+
+instance GoogleRequest CustomersDevicesList where
+        type Rs CustomersDevicesList =
+             CustomerListDevicesResponse
+        type Scopes CustomersDevicesList = '[]
+        requestClient CustomersDevicesList'{..}
+          = go _cParent _cXgafv _cUploadProtocol _cAccessToken
+              _cUploadType
+              _cPageToken
+              _cPageSize
+              _cCallback
+              (Just AltJSON)
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CustomersDevicesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Devices/RemoveConfiguration.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Devices/RemoveConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Devices/RemoveConfiguration.hs
@@ -0,0 +1,164 @@
+{-# 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.AndroidDeviceProvisioning.Customers.Devices.RemoveConfiguration
+-- 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)
+--
+-- Removes a configuration from device.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.customers.devices.removeConfiguration@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.RemoveConfiguration
+    (
+    -- * REST Resource
+      CustomersDevicesRemoveConfigurationResource
+
+    -- * Creating a Request
+    , customersDevicesRemoveConfiguration
+    , CustomersDevicesRemoveConfiguration
+
+    -- * Request Lenses
+    , cdrcParent
+    , cdrcXgafv
+    , cdrcUploadProtocol
+    , cdrcAccessToken
+    , cdrcUploadType
+    , cdrcPayload
+    , cdrcCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.customers.devices.removeConfiguration@ method which the
+-- 'CustomersDevicesRemoveConfiguration' request conforms to.
+type CustomersDevicesRemoveConfigurationResource =
+     "v1" :>
+       Capture "parent" Text :>
+         "devices:removeConfiguration" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] CustomerRemoveConfigurationRequest :>
+                         Post '[JSON] Empty
+
+-- | Removes a configuration from device.
+--
+-- /See:/ 'customersDevicesRemoveConfiguration' smart constructor.
+data CustomersDevicesRemoveConfiguration = CustomersDevicesRemoveConfiguration'
+    { _cdrcParent         :: !Text
+    , _cdrcXgafv          :: !(Maybe Xgafv)
+    , _cdrcUploadProtocol :: !(Maybe Text)
+    , _cdrcAccessToken    :: !(Maybe Text)
+    , _cdrcUploadType     :: !(Maybe Text)
+    , _cdrcPayload        :: !CustomerRemoveConfigurationRequest
+    , _cdrcCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomersDevicesRemoveConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdrcParent'
+--
+-- * 'cdrcXgafv'
+--
+-- * 'cdrcUploadProtocol'
+--
+-- * 'cdrcAccessToken'
+--
+-- * 'cdrcUploadType'
+--
+-- * 'cdrcPayload'
+--
+-- * 'cdrcCallback'
+customersDevicesRemoveConfiguration
+    :: Text -- ^ 'cdrcParent'
+    -> CustomerRemoveConfigurationRequest -- ^ 'cdrcPayload'
+    -> CustomersDevicesRemoveConfiguration
+customersDevicesRemoveConfiguration pCdrcParent_ pCdrcPayload_ =
+    CustomersDevicesRemoveConfiguration'
+    { _cdrcParent = pCdrcParent_
+    , _cdrcXgafv = Nothing
+    , _cdrcUploadProtocol = Nothing
+    , _cdrcAccessToken = Nothing
+    , _cdrcUploadType = Nothing
+    , _cdrcPayload = pCdrcPayload_
+    , _cdrcCallback = Nothing
+    }
+
+-- | Required. The customer managing the device in the format
+-- \`customers\/[CUSTOMER_ID]\`.
+cdrcParent :: Lens' CustomersDevicesRemoveConfiguration Text
+cdrcParent
+  = lens _cdrcParent (\ s a -> s{_cdrcParent = a})
+
+-- | V1 error format.
+cdrcXgafv :: Lens' CustomersDevicesRemoveConfiguration (Maybe Xgafv)
+cdrcXgafv
+  = lens _cdrcXgafv (\ s a -> s{_cdrcXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cdrcUploadProtocol :: Lens' CustomersDevicesRemoveConfiguration (Maybe Text)
+cdrcUploadProtocol
+  = lens _cdrcUploadProtocol
+      (\ s a -> s{_cdrcUploadProtocol = a})
+
+-- | OAuth access token.
+cdrcAccessToken :: Lens' CustomersDevicesRemoveConfiguration (Maybe Text)
+cdrcAccessToken
+  = lens _cdrcAccessToken
+      (\ s a -> s{_cdrcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cdrcUploadType :: Lens' CustomersDevicesRemoveConfiguration (Maybe Text)
+cdrcUploadType
+  = lens _cdrcUploadType
+      (\ s a -> s{_cdrcUploadType = a})
+
+-- | Multipart request metadata.
+cdrcPayload :: Lens' CustomersDevicesRemoveConfiguration CustomerRemoveConfigurationRequest
+cdrcPayload
+  = lens _cdrcPayload (\ s a -> s{_cdrcPayload = a})
+
+-- | JSONP
+cdrcCallback :: Lens' CustomersDevicesRemoveConfiguration (Maybe Text)
+cdrcCallback
+  = lens _cdrcCallback (\ s a -> s{_cdrcCallback = a})
+
+instance GoogleRequest
+         CustomersDevicesRemoveConfiguration where
+        type Rs CustomersDevicesRemoveConfiguration = Empty
+        type Scopes CustomersDevicesRemoveConfiguration = '[]
+        requestClient
+          CustomersDevicesRemoveConfiguration'{..}
+          = go _cdrcParent _cdrcXgafv _cdrcUploadProtocol
+              _cdrcAccessToken
+              _cdrcUploadType
+              _cdrcCallback
+              (Just AltJSON)
+              _cdrcPayload
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy CustomersDevicesRemoveConfigurationResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Devices/Unclaim.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Devices/Unclaim.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Devices/Unclaim.hs
@@ -0,0 +1,164 @@
+{-# 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.AndroidDeviceProvisioning.Customers.Devices.Unclaim
+-- 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)
+--
+-- Unclaims a device from a customer and removes it from zero-touch
+-- enrollment. After removing a device, a customer must contact their
+-- reseller to register the device into zero-touch enrollment again.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.customers.devices.unclaim@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.Unclaim
+    (
+    -- * REST Resource
+      CustomersDevicesUnclaimResource
+
+    -- * Creating a Request
+    , customersDevicesUnclaim
+    , CustomersDevicesUnclaim
+
+    -- * Request Lenses
+    , cduParent
+    , cduXgafv
+    , cduUploadProtocol
+    , cduAccessToken
+    , cduUploadType
+    , cduPayload
+    , cduCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.customers.devices.unclaim@ method which the
+-- 'CustomersDevicesUnclaim' request conforms to.
+type CustomersDevicesUnclaimResource =
+     "v1" :>
+       Capture "parent" Text :>
+         "devices:unclaim" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] CustomerUnclaimDeviceRequest :>
+                         Post '[JSON] Empty
+
+-- | Unclaims a device from a customer and removes it from zero-touch
+-- enrollment. After removing a device, a customer must contact their
+-- reseller to register the device into zero-touch enrollment again.
+--
+-- /See:/ 'customersDevicesUnclaim' smart constructor.
+data CustomersDevicesUnclaim = CustomersDevicesUnclaim'
+    { _cduParent         :: !Text
+    , _cduXgafv          :: !(Maybe Xgafv)
+    , _cduUploadProtocol :: !(Maybe Text)
+    , _cduAccessToken    :: !(Maybe Text)
+    , _cduUploadType     :: !(Maybe Text)
+    , _cduPayload        :: !CustomerUnclaimDeviceRequest
+    , _cduCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomersDevicesUnclaim' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cduParent'
+--
+-- * 'cduXgafv'
+--
+-- * 'cduUploadProtocol'
+--
+-- * 'cduAccessToken'
+--
+-- * 'cduUploadType'
+--
+-- * 'cduPayload'
+--
+-- * 'cduCallback'
+customersDevicesUnclaim
+    :: Text -- ^ 'cduParent'
+    -> CustomerUnclaimDeviceRequest -- ^ 'cduPayload'
+    -> CustomersDevicesUnclaim
+customersDevicesUnclaim pCduParent_ pCduPayload_ =
+    CustomersDevicesUnclaim'
+    { _cduParent = pCduParent_
+    , _cduXgafv = Nothing
+    , _cduUploadProtocol = Nothing
+    , _cduAccessToken = Nothing
+    , _cduUploadType = Nothing
+    , _cduPayload = pCduPayload_
+    , _cduCallback = Nothing
+    }
+
+-- | Required. The customer managing the device. An API resource name in the
+-- format \`customers\/[CUSTOMER_ID]\`.
+cduParent :: Lens' CustomersDevicesUnclaim Text
+cduParent
+  = lens _cduParent (\ s a -> s{_cduParent = a})
+
+-- | V1 error format.
+cduXgafv :: Lens' CustomersDevicesUnclaim (Maybe Xgafv)
+cduXgafv = lens _cduXgafv (\ s a -> s{_cduXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cduUploadProtocol :: Lens' CustomersDevicesUnclaim (Maybe Text)
+cduUploadProtocol
+  = lens _cduUploadProtocol
+      (\ s a -> s{_cduUploadProtocol = a})
+
+-- | OAuth access token.
+cduAccessToken :: Lens' CustomersDevicesUnclaim (Maybe Text)
+cduAccessToken
+  = lens _cduAccessToken
+      (\ s a -> s{_cduAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cduUploadType :: Lens' CustomersDevicesUnclaim (Maybe Text)
+cduUploadType
+  = lens _cduUploadType
+      (\ s a -> s{_cduUploadType = a})
+
+-- | Multipart request metadata.
+cduPayload :: Lens' CustomersDevicesUnclaim CustomerUnclaimDeviceRequest
+cduPayload
+  = lens _cduPayload (\ s a -> s{_cduPayload = a})
+
+-- | JSONP
+cduCallback :: Lens' CustomersDevicesUnclaim (Maybe Text)
+cduCallback
+  = lens _cduCallback (\ s a -> s{_cduCallback = a})
+
+instance GoogleRequest CustomersDevicesUnclaim where
+        type Rs CustomersDevicesUnclaim = Empty
+        type Scopes CustomersDevicesUnclaim = '[]
+        requestClient CustomersDevicesUnclaim'{..}
+          = go _cduParent _cduXgafv _cduUploadProtocol
+              _cduAccessToken
+              _cduUploadType
+              _cduCallback
+              (Just AltJSON)
+              _cduPayload
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CustomersDevicesUnclaimResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Dpcs/List.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Dpcs/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/Dpcs/List.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.AndroidDeviceProvisioning.Customers.Dpcs.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 the DPCs (device policy controllers) that support zero-touch
+-- enrollment.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.customers.dpcs.list@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Customers.Dpcs.List
+    (
+    -- * REST Resource
+      CustomersDpcsListResource
+
+    -- * Creating a Request
+    , customersDpcsList
+    , CustomersDpcsList
+
+    -- * Request Lenses
+    , cdlParent
+    , cdlXgafv
+    , cdlUploadProtocol
+    , cdlAccessToken
+    , cdlUploadType
+    , cdlCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.customers.dpcs.list@ method which the
+-- 'CustomersDpcsList' request conforms to.
+type CustomersDpcsListResource =
+     "v1" :>
+       Capture "parent" Text :>
+         "dpcs" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       Get '[JSON] CustomerListDpcsResponse
+
+-- | Lists the DPCs (device policy controllers) that support zero-touch
+-- enrollment.
+--
+-- /See:/ 'customersDpcsList' smart constructor.
+data CustomersDpcsList = CustomersDpcsList'
+    { _cdlParent         :: !Text
+    , _cdlXgafv          :: !(Maybe Xgafv)
+    , _cdlUploadProtocol :: !(Maybe Text)
+    , _cdlAccessToken    :: !(Maybe Text)
+    , _cdlUploadType     :: !(Maybe Text)
+    , _cdlCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomersDpcsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdlParent'
+--
+-- * 'cdlXgafv'
+--
+-- * 'cdlUploadProtocol'
+--
+-- * 'cdlAccessToken'
+--
+-- * 'cdlUploadType'
+--
+-- * 'cdlCallback'
+customersDpcsList
+    :: Text -- ^ 'cdlParent'
+    -> CustomersDpcsList
+customersDpcsList pCdlParent_ =
+    CustomersDpcsList'
+    { _cdlParent = pCdlParent_
+    , _cdlXgafv = Nothing
+    , _cdlUploadProtocol = Nothing
+    , _cdlAccessToken = Nothing
+    , _cdlUploadType = Nothing
+    , _cdlCallback = Nothing
+    }
+
+-- | Required. The customer that can use the DPCs in configurations. An API
+-- resource name in the format \`customers\/[CUSTOMER_ID]\`.
+cdlParent :: Lens' CustomersDpcsList Text
+cdlParent
+  = lens _cdlParent (\ s a -> s{_cdlParent = a})
+
+-- | V1 error format.
+cdlXgafv :: Lens' CustomersDpcsList (Maybe Xgafv)
+cdlXgafv = lens _cdlXgafv (\ s a -> s{_cdlXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cdlUploadProtocol :: Lens' CustomersDpcsList (Maybe Text)
+cdlUploadProtocol
+  = lens _cdlUploadProtocol
+      (\ s a -> s{_cdlUploadProtocol = a})
+
+-- | OAuth access token.
+cdlAccessToken :: Lens' CustomersDpcsList (Maybe Text)
+cdlAccessToken
+  = lens _cdlAccessToken
+      (\ s a -> s{_cdlAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cdlUploadType :: Lens' CustomersDpcsList (Maybe Text)
+cdlUploadType
+  = lens _cdlUploadType
+      (\ s a -> s{_cdlUploadType = a})
+
+-- | JSONP
+cdlCallback :: Lens' CustomersDpcsList (Maybe Text)
+cdlCallback
+  = lens _cdlCallback (\ s a -> s{_cdlCallback = a})
+
+instance GoogleRequest CustomersDpcsList where
+        type Rs CustomersDpcsList = CustomerListDpcsResponse
+        type Scopes CustomersDpcsList = '[]
+        requestClient CustomersDpcsList'{..}
+          = go _cdlParent _cdlXgafv _cdlUploadProtocol
+              _cdlAccessToken
+              _cdlUploadType
+              _cdlCallback
+              (Just AltJSON)
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CustomersDpcsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/List.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Customers/List.hs
@@ -0,0 +1,157 @@
+{-# 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.AndroidDeviceProvisioning.Customers.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 the user\'s customer accounts.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.customers.list@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Customers.List
+    (
+    -- * REST Resource
+      CustomersListResource
+
+    -- * Creating a Request
+    , customersList
+    , CustomersList
+
+    -- * Request Lenses
+    , clXgafv
+    , clUploadProtocol
+    , clAccessToken
+    , clUploadType
+    , clPageToken
+    , clPageSize
+    , clCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.customers.list@ method which the
+-- 'CustomersList' request conforms to.
+type CustomersListResource =
+     "v1" :>
+       "customers" :>
+         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] CustomerListCustomersResponse
+
+-- | Lists the user\'s customer accounts.
+--
+-- /See:/ 'customersList' smart constructor.
+data CustomersList = CustomersList'
+    { _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 'CustomersList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clXgafv'
+--
+-- * 'clUploadProtocol'
+--
+-- * 'clAccessToken'
+--
+-- * 'clUploadType'
+--
+-- * 'clPageToken'
+--
+-- * 'clPageSize'
+--
+-- * 'clCallback'
+customersList
+    :: CustomersList
+customersList =
+    CustomersList'
+    { _clXgafv = Nothing
+    , _clUploadProtocol = Nothing
+    , _clAccessToken = Nothing
+    , _clUploadType = Nothing
+    , _clPageToken = Nothing
+    , _clPageSize = Nothing
+    , _clCallback = Nothing
+    }
+
+-- | V1 error format.
+clXgafv :: Lens' CustomersList (Maybe Xgafv)
+clXgafv = lens _clXgafv (\ s a -> s{_clXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+clUploadProtocol :: Lens' CustomersList (Maybe Text)
+clUploadProtocol
+  = lens _clUploadProtocol
+      (\ s a -> s{_clUploadProtocol = a})
+
+-- | OAuth access token.
+clAccessToken :: Lens' CustomersList (Maybe Text)
+clAccessToken
+  = lens _clAccessToken
+      (\ s a -> s{_clAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+clUploadType :: Lens' CustomersList (Maybe Text)
+clUploadType
+  = lens _clUploadType (\ s a -> s{_clUploadType = a})
+
+-- | A token specifying which result page to return.
+clPageToken :: Lens' CustomersList (Maybe Text)
+clPageToken
+  = lens _clPageToken (\ s a -> s{_clPageToken = a})
+
+-- | The maximum number of customers to show in a page of results. A number
+-- between 1 and 100 (inclusive).
+clPageSize :: Lens' CustomersList (Maybe Int32)
+clPageSize
+  = lens _clPageSize (\ s a -> s{_clPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+clCallback :: Lens' CustomersList (Maybe Text)
+clCallback
+  = lens _clCallback (\ s a -> s{_clCallback = a})
+
+instance GoogleRequest CustomersList where
+        type Rs CustomersList = CustomerListCustomersResponse
+        type Scopes CustomersList = '[]
+        requestClient CustomersList'{..}
+          = go _clXgafv _clUploadProtocol _clAccessToken
+              _clUploadType
+              _clPageToken
+              _clPageSize
+              _clCallback
+              (Just AltJSON)
+              androidDeviceProvisioningService
+          where go
+                  = buildClient (Proxy :: Proxy CustomersListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Operations/Get.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Operations/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Operations/Get.hs
@@ -0,0 +1,145 @@
+{-# 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.AndroidDeviceProvisioning.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://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.operations.get@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Operations.Get
+    (
+    -- * REST Resource
+      OperationsGetResource
+
+    -- * Creating a Request
+    , operationsGet
+    , OperationsGet
+
+    -- * Request Lenses
+    , ogXgafv
+    , ogUploadProtocol
+    , ogAccessToken
+    , ogUploadType
+    , ogName
+    , ogCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.operations.get@ method which the
+-- 'OperationsGet' request conforms to.
+type OperationsGetResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Operation
+
+-- | Gets the latest state of a long-running operation. Clients can use this
+-- method to poll the operation result at intervals as recommended by the
+-- API service.
+--
+-- /See:/ '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 = Operation
+        type Scopes OperationsGet = '[]
+        requestClient OperationsGet'{..}
+          = go _ogName _ogXgafv _ogUploadProtocol
+              _ogAccessToken
+              _ogUploadType
+              _ogCallback
+              (Just AltJSON)
+              androidDeviceProvisioningService
+          where go
+                  = buildClient (Proxy :: Proxy OperationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Customers/Create.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Customers/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Customers/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.AndroidDeviceProvisioning.Partners.Customers.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 customer for zero-touch enrollment. After the method returns
+-- successfully, admin and owner roles can manage devices and EMM configs
+-- by calling API methods or using their zero-touch enrollment portal. The
+-- customer receives an email that welcomes them to zero-touch enrollment
+-- and explains how to sign into the portal.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.partners.customers.create@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Customers.Create
+    (
+    -- * REST Resource
+      PartnersCustomersCreateResource
+
+    -- * Creating a Request
+    , partnersCustomersCreate
+    , PartnersCustomersCreate
+
+    -- * Request Lenses
+    , pccParent
+    , pccXgafv
+    , pccUploadProtocol
+    , pccAccessToken
+    , pccUploadType
+    , pccPayload
+    , pccCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.partners.customers.create@ method which the
+-- 'PartnersCustomersCreate' request conforms to.
+type PartnersCustomersCreateResource =
+     "v1" :>
+       Capture "parent" Text :>
+         "customers" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] CreateCustomerRequest :>
+                         Post '[JSON] Company
+
+-- | Creates a customer for zero-touch enrollment. After the method returns
+-- successfully, admin and owner roles can manage devices and EMM configs
+-- by calling API methods or using their zero-touch enrollment portal. The
+-- customer receives an email that welcomes them to zero-touch enrollment
+-- and explains how to sign into the portal.
+--
+-- /See:/ 'partnersCustomersCreate' smart constructor.
+data PartnersCustomersCreate = PartnersCustomersCreate'
+    { _pccParent         :: !Text
+    , _pccXgafv          :: !(Maybe Xgafv)
+    , _pccUploadProtocol :: !(Maybe Text)
+    , _pccAccessToken    :: !(Maybe Text)
+    , _pccUploadType     :: !(Maybe Text)
+    , _pccPayload        :: !CreateCustomerRequest
+    , _pccCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PartnersCustomersCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pccParent'
+--
+-- * 'pccXgafv'
+--
+-- * 'pccUploadProtocol'
+--
+-- * 'pccAccessToken'
+--
+-- * 'pccUploadType'
+--
+-- * 'pccPayload'
+--
+-- * 'pccCallback'
+partnersCustomersCreate
+    :: Text -- ^ 'pccParent'
+    -> CreateCustomerRequest -- ^ 'pccPayload'
+    -> PartnersCustomersCreate
+partnersCustomersCreate pPccParent_ pPccPayload_ =
+    PartnersCustomersCreate'
+    { _pccParent = pPccParent_
+    , _pccXgafv = Nothing
+    , _pccUploadProtocol = Nothing
+    , _pccAccessToken = Nothing
+    , _pccUploadType = Nothing
+    , _pccPayload = pPccPayload_
+    , _pccCallback = Nothing
+    }
+
+-- | Required. The parent resource ID in the format
+-- \`partners\/[PARTNER_ID]\` that identifies the reseller.
+pccParent :: Lens' PartnersCustomersCreate Text
+pccParent
+  = lens _pccParent (\ s a -> s{_pccParent = a})
+
+-- | V1 error format.
+pccXgafv :: Lens' PartnersCustomersCreate (Maybe Xgafv)
+pccXgafv = lens _pccXgafv (\ s a -> s{_pccXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pccUploadProtocol :: Lens' PartnersCustomersCreate (Maybe Text)
+pccUploadProtocol
+  = lens _pccUploadProtocol
+      (\ s a -> s{_pccUploadProtocol = a})
+
+-- | OAuth access token.
+pccAccessToken :: Lens' PartnersCustomersCreate (Maybe Text)
+pccAccessToken
+  = lens _pccAccessToken
+      (\ s a -> s{_pccAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pccUploadType :: Lens' PartnersCustomersCreate (Maybe Text)
+pccUploadType
+  = lens _pccUploadType
+      (\ s a -> s{_pccUploadType = a})
+
+-- | Multipart request metadata.
+pccPayload :: Lens' PartnersCustomersCreate CreateCustomerRequest
+pccPayload
+  = lens _pccPayload (\ s a -> s{_pccPayload = a})
+
+-- | JSONP
+pccCallback :: Lens' PartnersCustomersCreate (Maybe Text)
+pccCallback
+  = lens _pccCallback (\ s a -> s{_pccCallback = a})
+
+instance GoogleRequest PartnersCustomersCreate where
+        type Rs PartnersCustomersCreate = Company
+        type Scopes PartnersCustomersCreate = '[]
+        requestClient PartnersCustomersCreate'{..}
+          = go _pccParent _pccXgafv _pccUploadProtocol
+              _pccAccessToken
+              _pccUploadType
+              _pccCallback
+              (Just AltJSON)
+              _pccPayload
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PartnersCustomersCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Customers/List.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Customers/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Customers/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.AndroidDeviceProvisioning.Partners.Customers.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 the customers that are enrolled to the reseller identified by the
+-- \`partnerId\` argument. This list includes customers that the reseller
+-- created and customers that enrolled themselves using the portal.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.partners.customers.list@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Customers.List
+    (
+    -- * REST Resource
+      PartnersCustomersListResource
+
+    -- * Creating a Request
+    , partnersCustomersList
+    , PartnersCustomersList
+
+    -- * Request Lenses
+    , pclXgafv
+    , pclUploadProtocol
+    , pclAccessToken
+    , pclPartnerId
+    , pclUploadType
+    , pclPageToken
+    , pclPageSize
+    , pclCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.partners.customers.list@ method which the
+-- 'PartnersCustomersList' request conforms to.
+type PartnersCustomersListResource =
+     "v1" :>
+       "partners" :>
+         Capture "partnerId" (Textual Int64) :>
+           "customers" :>
+             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] ListCustomersResponse
+
+-- | Lists the customers that are enrolled to the reseller identified by the
+-- \`partnerId\` argument. This list includes customers that the reseller
+-- created and customers that enrolled themselves using the portal.
+--
+-- /See:/ 'partnersCustomersList' smart constructor.
+data PartnersCustomersList = PartnersCustomersList'
+    { _pclXgafv          :: !(Maybe Xgafv)
+    , _pclUploadProtocol :: !(Maybe Text)
+    , _pclAccessToken    :: !(Maybe Text)
+    , _pclPartnerId      :: !(Textual Int64)
+    , _pclUploadType     :: !(Maybe Text)
+    , _pclPageToken      :: !(Maybe Text)
+    , _pclPageSize       :: !(Maybe (Textual Int32))
+    , _pclCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PartnersCustomersList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pclXgafv'
+--
+-- * 'pclUploadProtocol'
+--
+-- * 'pclAccessToken'
+--
+-- * 'pclPartnerId'
+--
+-- * 'pclUploadType'
+--
+-- * 'pclPageToken'
+--
+-- * 'pclPageSize'
+--
+-- * 'pclCallback'
+partnersCustomersList
+    :: Int64 -- ^ 'pclPartnerId'
+    -> PartnersCustomersList
+partnersCustomersList pPclPartnerId_ =
+    PartnersCustomersList'
+    { _pclXgafv = Nothing
+    , _pclUploadProtocol = Nothing
+    , _pclAccessToken = Nothing
+    , _pclPartnerId = _Coerce # pPclPartnerId_
+    , _pclUploadType = Nothing
+    , _pclPageToken = Nothing
+    , _pclPageSize = Nothing
+    , _pclCallback = Nothing
+    }
+
+-- | V1 error format.
+pclXgafv :: Lens' PartnersCustomersList (Maybe Xgafv)
+pclXgafv = lens _pclXgafv (\ s a -> s{_pclXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pclUploadProtocol :: Lens' PartnersCustomersList (Maybe Text)
+pclUploadProtocol
+  = lens _pclUploadProtocol
+      (\ s a -> s{_pclUploadProtocol = a})
+
+-- | OAuth access token.
+pclAccessToken :: Lens' PartnersCustomersList (Maybe Text)
+pclAccessToken
+  = lens _pclAccessToken
+      (\ s a -> s{_pclAccessToken = a})
+
+-- | Required. The ID of the reseller partner.
+pclPartnerId :: Lens' PartnersCustomersList Int64
+pclPartnerId
+  = lens _pclPartnerId (\ s a -> s{_pclPartnerId = a})
+      . _Coerce
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pclUploadType :: Lens' PartnersCustomersList (Maybe Text)
+pclUploadType
+  = lens _pclUploadType
+      (\ s a -> s{_pclUploadType = a})
+
+-- | A token identifying a page of results returned by the server.
+pclPageToken :: Lens' PartnersCustomersList (Maybe Text)
+pclPageToken
+  = lens _pclPageToken (\ s a -> s{_pclPageToken = a})
+
+-- | The maximum number of results to be returned. If not specified or 0, all
+-- the records are returned.
+pclPageSize :: Lens' PartnersCustomersList (Maybe Int32)
+pclPageSize
+  = lens _pclPageSize (\ s a -> s{_pclPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+pclCallback :: Lens' PartnersCustomersList (Maybe Text)
+pclCallback
+  = lens _pclCallback (\ s a -> s{_pclCallback = a})
+
+instance GoogleRequest PartnersCustomersList where
+        type Rs PartnersCustomersList = ListCustomersResponse
+        type Scopes PartnersCustomersList = '[]
+        requestClient PartnersCustomersList'{..}
+          = go _pclPartnerId _pclXgafv _pclUploadProtocol
+              _pclAccessToken
+              _pclUploadType
+              _pclPageToken
+              _pclPageSize
+              _pclCallback
+              (Just AltJSON)
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PartnersCustomersListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/Claim.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/Claim.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/Claim.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.AndroidDeviceProvisioning.Partners.Devices.Claim
+-- 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)
+--
+-- Claims a device for a customer and adds it to zero-touch enrollment. If
+-- the device is already claimed by another customer, the call returns an
+-- error.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.partners.devices.claim@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.Claim
+    (
+    -- * REST Resource
+      PartnersDevicesClaimResource
+
+    -- * Creating a Request
+    , partnersDevicesClaim
+    , PartnersDevicesClaim
+
+    -- * Request Lenses
+    , pdcXgafv
+    , pdcUploadProtocol
+    , pdcAccessToken
+    , pdcPartnerId
+    , pdcUploadType
+    , pdcPayload
+    , pdcCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.partners.devices.claim@ method which the
+-- 'PartnersDevicesClaim' request conforms to.
+type PartnersDevicesClaimResource =
+     "v1" :>
+       "partners" :>
+         Capture "partnerId" (Textual Int64) :>
+           "devices:claim" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] ClaimDeviceRequest :>
+                           Post '[JSON] ClaimDeviceResponse
+
+-- | Claims a device for a customer and adds it to zero-touch enrollment. If
+-- the device is already claimed by another customer, the call returns an
+-- error.
+--
+-- /See:/ 'partnersDevicesClaim' smart constructor.
+data PartnersDevicesClaim = PartnersDevicesClaim'
+    { _pdcXgafv          :: !(Maybe Xgafv)
+    , _pdcUploadProtocol :: !(Maybe Text)
+    , _pdcAccessToken    :: !(Maybe Text)
+    , _pdcPartnerId      :: !(Textual Int64)
+    , _pdcUploadType     :: !(Maybe Text)
+    , _pdcPayload        :: !ClaimDeviceRequest
+    , _pdcCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PartnersDevicesClaim' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdcXgafv'
+--
+-- * 'pdcUploadProtocol'
+--
+-- * 'pdcAccessToken'
+--
+-- * 'pdcPartnerId'
+--
+-- * 'pdcUploadType'
+--
+-- * 'pdcPayload'
+--
+-- * 'pdcCallback'
+partnersDevicesClaim
+    :: Int64 -- ^ 'pdcPartnerId'
+    -> ClaimDeviceRequest -- ^ 'pdcPayload'
+    -> PartnersDevicesClaim
+partnersDevicesClaim pPdcPartnerId_ pPdcPayload_ =
+    PartnersDevicesClaim'
+    { _pdcXgafv = Nothing
+    , _pdcUploadProtocol = Nothing
+    , _pdcAccessToken = Nothing
+    , _pdcPartnerId = _Coerce # pPdcPartnerId_
+    , _pdcUploadType = Nothing
+    , _pdcPayload = pPdcPayload_
+    , _pdcCallback = Nothing
+    }
+
+-- | V1 error format.
+pdcXgafv :: Lens' PartnersDevicesClaim (Maybe Xgafv)
+pdcXgafv = lens _pdcXgafv (\ s a -> s{_pdcXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdcUploadProtocol :: Lens' PartnersDevicesClaim (Maybe Text)
+pdcUploadProtocol
+  = lens _pdcUploadProtocol
+      (\ s a -> s{_pdcUploadProtocol = a})
+
+-- | OAuth access token.
+pdcAccessToken :: Lens' PartnersDevicesClaim (Maybe Text)
+pdcAccessToken
+  = lens _pdcAccessToken
+      (\ s a -> s{_pdcAccessToken = a})
+
+-- | Required. The ID of the reseller partner.
+pdcPartnerId :: Lens' PartnersDevicesClaim Int64
+pdcPartnerId
+  = lens _pdcPartnerId (\ s a -> s{_pdcPartnerId = a})
+      . _Coerce
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdcUploadType :: Lens' PartnersDevicesClaim (Maybe Text)
+pdcUploadType
+  = lens _pdcUploadType
+      (\ s a -> s{_pdcUploadType = a})
+
+-- | Multipart request metadata.
+pdcPayload :: Lens' PartnersDevicesClaim ClaimDeviceRequest
+pdcPayload
+  = lens _pdcPayload (\ s a -> s{_pdcPayload = a})
+
+-- | JSONP
+pdcCallback :: Lens' PartnersDevicesClaim (Maybe Text)
+pdcCallback
+  = lens _pdcCallback (\ s a -> s{_pdcCallback = a})
+
+instance GoogleRequest PartnersDevicesClaim where
+        type Rs PartnersDevicesClaim = ClaimDeviceResponse
+        type Scopes PartnersDevicesClaim = '[]
+        requestClient PartnersDevicesClaim'{..}
+          = go _pdcPartnerId _pdcXgafv _pdcUploadProtocol
+              _pdcAccessToken
+              _pdcUploadType
+              _pdcCallback
+              (Just AltJSON)
+              _pdcPayload
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PartnersDevicesClaimResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/ClaimAsync.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/ClaimAsync.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/ClaimAsync.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.AndroidDeviceProvisioning.Partners.Devices.ClaimAsync
+-- 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)
+--
+-- Claims a batch of devices for a customer asynchronously. Adds the
+-- devices to zero-touch enrollment. To learn more, read [Long‑running
+-- batch operations](\/zero-touch\/guides\/how-it-works#operations).
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.partners.devices.claimAsync@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.ClaimAsync
+    (
+    -- * REST Resource
+      PartnersDevicesClaimAsyncResource
+
+    -- * Creating a Request
+    , partnersDevicesClaimAsync
+    , PartnersDevicesClaimAsync
+
+    -- * Request Lenses
+    , pdcaXgafv
+    , pdcaUploadProtocol
+    , pdcaAccessToken
+    , pdcaPartnerId
+    , pdcaUploadType
+    , pdcaPayload
+    , pdcaCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.partners.devices.claimAsync@ method which the
+-- 'PartnersDevicesClaimAsync' request conforms to.
+type PartnersDevicesClaimAsyncResource =
+     "v1" :>
+       "partners" :>
+         Capture "partnerId" (Textual Int64) :>
+           "devices:claimAsync" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] ClaimDevicesRequest :>
+                           Post '[JSON] Operation
+
+-- | Claims a batch of devices for a customer asynchronously. Adds the
+-- devices to zero-touch enrollment. To learn more, read [Long‑running
+-- batch operations](\/zero-touch\/guides\/how-it-works#operations).
+--
+-- /See:/ 'partnersDevicesClaimAsync' smart constructor.
+data PartnersDevicesClaimAsync = PartnersDevicesClaimAsync'
+    { _pdcaXgafv          :: !(Maybe Xgafv)
+    , _pdcaUploadProtocol :: !(Maybe Text)
+    , _pdcaAccessToken    :: !(Maybe Text)
+    , _pdcaPartnerId      :: !(Textual Int64)
+    , _pdcaUploadType     :: !(Maybe Text)
+    , _pdcaPayload        :: !ClaimDevicesRequest
+    , _pdcaCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PartnersDevicesClaimAsync' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdcaXgafv'
+--
+-- * 'pdcaUploadProtocol'
+--
+-- * 'pdcaAccessToken'
+--
+-- * 'pdcaPartnerId'
+--
+-- * 'pdcaUploadType'
+--
+-- * 'pdcaPayload'
+--
+-- * 'pdcaCallback'
+partnersDevicesClaimAsync
+    :: Int64 -- ^ 'pdcaPartnerId'
+    -> ClaimDevicesRequest -- ^ 'pdcaPayload'
+    -> PartnersDevicesClaimAsync
+partnersDevicesClaimAsync pPdcaPartnerId_ pPdcaPayload_ =
+    PartnersDevicesClaimAsync'
+    { _pdcaXgafv = Nothing
+    , _pdcaUploadProtocol = Nothing
+    , _pdcaAccessToken = Nothing
+    , _pdcaPartnerId = _Coerce # pPdcaPartnerId_
+    , _pdcaUploadType = Nothing
+    , _pdcaPayload = pPdcaPayload_
+    , _pdcaCallback = Nothing
+    }
+
+-- | V1 error format.
+pdcaXgafv :: Lens' PartnersDevicesClaimAsync (Maybe Xgafv)
+pdcaXgafv
+  = lens _pdcaXgafv (\ s a -> s{_pdcaXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdcaUploadProtocol :: Lens' PartnersDevicesClaimAsync (Maybe Text)
+pdcaUploadProtocol
+  = lens _pdcaUploadProtocol
+      (\ s a -> s{_pdcaUploadProtocol = a})
+
+-- | OAuth access token.
+pdcaAccessToken :: Lens' PartnersDevicesClaimAsync (Maybe Text)
+pdcaAccessToken
+  = lens _pdcaAccessToken
+      (\ s a -> s{_pdcaAccessToken = a})
+
+-- | Required. The ID of the reseller partner.
+pdcaPartnerId :: Lens' PartnersDevicesClaimAsync Int64
+pdcaPartnerId
+  = lens _pdcaPartnerId
+      (\ s a -> s{_pdcaPartnerId = a})
+      . _Coerce
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdcaUploadType :: Lens' PartnersDevicesClaimAsync (Maybe Text)
+pdcaUploadType
+  = lens _pdcaUploadType
+      (\ s a -> s{_pdcaUploadType = a})
+
+-- | Multipart request metadata.
+pdcaPayload :: Lens' PartnersDevicesClaimAsync ClaimDevicesRequest
+pdcaPayload
+  = lens _pdcaPayload (\ s a -> s{_pdcaPayload = a})
+
+-- | JSONP
+pdcaCallback :: Lens' PartnersDevicesClaimAsync (Maybe Text)
+pdcaCallback
+  = lens _pdcaCallback (\ s a -> s{_pdcaCallback = a})
+
+instance GoogleRequest PartnersDevicesClaimAsync
+         where
+        type Rs PartnersDevicesClaimAsync = Operation
+        type Scopes PartnersDevicesClaimAsync = '[]
+        requestClient PartnersDevicesClaimAsync'{..}
+          = go _pdcaPartnerId _pdcaXgafv _pdcaUploadProtocol
+              _pdcaAccessToken
+              _pdcaUploadType
+              _pdcaCallback
+              (Just AltJSON)
+              _pdcaPayload
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PartnersDevicesClaimAsyncResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/FindByIdentifier.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/FindByIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/FindByIdentifier.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.AndroidDeviceProvisioning.Partners.Devices.FindByIdentifier
+-- 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)
+--
+-- Finds devices by hardware identifiers, such as IMEI.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.partners.devices.findByIdentifier@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.FindByIdentifier
+    (
+    -- * REST Resource
+      PartnersDevicesFindByIdentifierResource
+
+    -- * Creating a Request
+    , partnersDevicesFindByIdentifier
+    , PartnersDevicesFindByIdentifier
+
+    -- * Request Lenses
+    , pdfbiXgafv
+    , pdfbiUploadProtocol
+    , pdfbiAccessToken
+    , pdfbiPartnerId
+    , pdfbiUploadType
+    , pdfbiPayload
+    , pdfbiCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.partners.devices.findByIdentifier@ method which the
+-- 'PartnersDevicesFindByIdentifier' request conforms to.
+type PartnersDevicesFindByIdentifierResource =
+     "v1" :>
+       "partners" :>
+         Capture "partnerId" (Textual Int64) :>
+           "devices:findByIdentifier" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] FindDevicesByDeviceIdentifierRequest
+                           :> Post '[JSON] FindDevicesByDeviceIdentifierResponse
+
+-- | Finds devices by hardware identifiers, such as IMEI.
+--
+-- /See:/ 'partnersDevicesFindByIdentifier' smart constructor.
+data PartnersDevicesFindByIdentifier = PartnersDevicesFindByIdentifier'
+    { _pdfbiXgafv          :: !(Maybe Xgafv)
+    , _pdfbiUploadProtocol :: !(Maybe Text)
+    , _pdfbiAccessToken    :: !(Maybe Text)
+    , _pdfbiPartnerId      :: !(Textual Int64)
+    , _pdfbiUploadType     :: !(Maybe Text)
+    , _pdfbiPayload        :: !FindDevicesByDeviceIdentifierRequest
+    , _pdfbiCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PartnersDevicesFindByIdentifier' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdfbiXgafv'
+--
+-- * 'pdfbiUploadProtocol'
+--
+-- * 'pdfbiAccessToken'
+--
+-- * 'pdfbiPartnerId'
+--
+-- * 'pdfbiUploadType'
+--
+-- * 'pdfbiPayload'
+--
+-- * 'pdfbiCallback'
+partnersDevicesFindByIdentifier
+    :: Int64 -- ^ 'pdfbiPartnerId'
+    -> FindDevicesByDeviceIdentifierRequest -- ^ 'pdfbiPayload'
+    -> PartnersDevicesFindByIdentifier
+partnersDevicesFindByIdentifier pPdfbiPartnerId_ pPdfbiPayload_ =
+    PartnersDevicesFindByIdentifier'
+    { _pdfbiXgafv = Nothing
+    , _pdfbiUploadProtocol = Nothing
+    , _pdfbiAccessToken = Nothing
+    , _pdfbiPartnerId = _Coerce # pPdfbiPartnerId_
+    , _pdfbiUploadType = Nothing
+    , _pdfbiPayload = pPdfbiPayload_
+    , _pdfbiCallback = Nothing
+    }
+
+-- | V1 error format.
+pdfbiXgafv :: Lens' PartnersDevicesFindByIdentifier (Maybe Xgafv)
+pdfbiXgafv
+  = lens _pdfbiXgafv (\ s a -> s{_pdfbiXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdfbiUploadProtocol :: Lens' PartnersDevicesFindByIdentifier (Maybe Text)
+pdfbiUploadProtocol
+  = lens _pdfbiUploadProtocol
+      (\ s a -> s{_pdfbiUploadProtocol = a})
+
+-- | OAuth access token.
+pdfbiAccessToken :: Lens' PartnersDevicesFindByIdentifier (Maybe Text)
+pdfbiAccessToken
+  = lens _pdfbiAccessToken
+      (\ s a -> s{_pdfbiAccessToken = a})
+
+-- | Required. The ID of the reseller partner.
+pdfbiPartnerId :: Lens' PartnersDevicesFindByIdentifier Int64
+pdfbiPartnerId
+  = lens _pdfbiPartnerId
+      (\ s a -> s{_pdfbiPartnerId = a})
+      . _Coerce
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdfbiUploadType :: Lens' PartnersDevicesFindByIdentifier (Maybe Text)
+pdfbiUploadType
+  = lens _pdfbiUploadType
+      (\ s a -> s{_pdfbiUploadType = a})
+
+-- | Multipart request metadata.
+pdfbiPayload :: Lens' PartnersDevicesFindByIdentifier FindDevicesByDeviceIdentifierRequest
+pdfbiPayload
+  = lens _pdfbiPayload (\ s a -> s{_pdfbiPayload = a})
+
+-- | JSONP
+pdfbiCallback :: Lens' PartnersDevicesFindByIdentifier (Maybe Text)
+pdfbiCallback
+  = lens _pdfbiCallback
+      (\ s a -> s{_pdfbiCallback = a})
+
+instance GoogleRequest
+         PartnersDevicesFindByIdentifier where
+        type Rs PartnersDevicesFindByIdentifier =
+             FindDevicesByDeviceIdentifierResponse
+        type Scopes PartnersDevicesFindByIdentifier = '[]
+        requestClient PartnersDevicesFindByIdentifier'{..}
+          = go _pdfbiPartnerId _pdfbiXgafv _pdfbiUploadProtocol
+              _pdfbiAccessToken
+              _pdfbiUploadType
+              _pdfbiCallback
+              (Just AltJSON)
+              _pdfbiPayload
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy PartnersDevicesFindByIdentifierResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/FindByOwner.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/FindByOwner.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/FindByOwner.hs
@@ -0,0 +1,172 @@
+{-# 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.AndroidDeviceProvisioning.Partners.Devices.FindByOwner
+-- 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)
+--
+-- Finds devices claimed for customers. The results only contain devices
+-- registered to the reseller that\'s identified by the \`partnerId\`
+-- argument. The customer\'s devices purchased from other resellers don\'t
+-- appear in the results.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.partners.devices.findByOwner@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.FindByOwner
+    (
+    -- * REST Resource
+      PartnersDevicesFindByOwnerResource
+
+    -- * Creating a Request
+    , partnersDevicesFindByOwner
+    , PartnersDevicesFindByOwner
+
+    -- * Request Lenses
+    , pdfboXgafv
+    , pdfboUploadProtocol
+    , pdfboAccessToken
+    , pdfboPartnerId
+    , pdfboUploadType
+    , pdfboPayload
+    , pdfboCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.partners.devices.findByOwner@ method which the
+-- 'PartnersDevicesFindByOwner' request conforms to.
+type PartnersDevicesFindByOwnerResource =
+     "v1" :>
+       "partners" :>
+         Capture "partnerId" (Textual Int64) :>
+           "devices:findByOwner" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] FindDevicesByOwnerRequest :>
+                           Post '[JSON] FindDevicesByOwnerResponse
+
+-- | Finds devices claimed for customers. The results only contain devices
+-- registered to the reseller that\'s identified by the \`partnerId\`
+-- argument. The customer\'s devices purchased from other resellers don\'t
+-- appear in the results.
+--
+-- /See:/ 'partnersDevicesFindByOwner' smart constructor.
+data PartnersDevicesFindByOwner = PartnersDevicesFindByOwner'
+    { _pdfboXgafv          :: !(Maybe Xgafv)
+    , _pdfboUploadProtocol :: !(Maybe Text)
+    , _pdfboAccessToken    :: !(Maybe Text)
+    , _pdfboPartnerId      :: !(Textual Int64)
+    , _pdfboUploadType     :: !(Maybe Text)
+    , _pdfboPayload        :: !FindDevicesByOwnerRequest
+    , _pdfboCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PartnersDevicesFindByOwner' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdfboXgafv'
+--
+-- * 'pdfboUploadProtocol'
+--
+-- * 'pdfboAccessToken'
+--
+-- * 'pdfboPartnerId'
+--
+-- * 'pdfboUploadType'
+--
+-- * 'pdfboPayload'
+--
+-- * 'pdfboCallback'
+partnersDevicesFindByOwner
+    :: Int64 -- ^ 'pdfboPartnerId'
+    -> FindDevicesByOwnerRequest -- ^ 'pdfboPayload'
+    -> PartnersDevicesFindByOwner
+partnersDevicesFindByOwner pPdfboPartnerId_ pPdfboPayload_ =
+    PartnersDevicesFindByOwner'
+    { _pdfboXgafv = Nothing
+    , _pdfboUploadProtocol = Nothing
+    , _pdfboAccessToken = Nothing
+    , _pdfboPartnerId = _Coerce # pPdfboPartnerId_
+    , _pdfboUploadType = Nothing
+    , _pdfboPayload = pPdfboPayload_
+    , _pdfboCallback = Nothing
+    }
+
+-- | V1 error format.
+pdfboXgafv :: Lens' PartnersDevicesFindByOwner (Maybe Xgafv)
+pdfboXgafv
+  = lens _pdfboXgafv (\ s a -> s{_pdfboXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdfboUploadProtocol :: Lens' PartnersDevicesFindByOwner (Maybe Text)
+pdfboUploadProtocol
+  = lens _pdfboUploadProtocol
+      (\ s a -> s{_pdfboUploadProtocol = a})
+
+-- | OAuth access token.
+pdfboAccessToken :: Lens' PartnersDevicesFindByOwner (Maybe Text)
+pdfboAccessToken
+  = lens _pdfboAccessToken
+      (\ s a -> s{_pdfboAccessToken = a})
+
+-- | Required. The ID of the reseller partner.
+pdfboPartnerId :: Lens' PartnersDevicesFindByOwner Int64
+pdfboPartnerId
+  = lens _pdfboPartnerId
+      (\ s a -> s{_pdfboPartnerId = a})
+      . _Coerce
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdfboUploadType :: Lens' PartnersDevicesFindByOwner (Maybe Text)
+pdfboUploadType
+  = lens _pdfboUploadType
+      (\ s a -> s{_pdfboUploadType = a})
+
+-- | Multipart request metadata.
+pdfboPayload :: Lens' PartnersDevicesFindByOwner FindDevicesByOwnerRequest
+pdfboPayload
+  = lens _pdfboPayload (\ s a -> s{_pdfboPayload = a})
+
+-- | JSONP
+pdfboCallback :: Lens' PartnersDevicesFindByOwner (Maybe Text)
+pdfboCallback
+  = lens _pdfboCallback
+      (\ s a -> s{_pdfboCallback = a})
+
+instance GoogleRequest PartnersDevicesFindByOwner
+         where
+        type Rs PartnersDevicesFindByOwner =
+             FindDevicesByOwnerResponse
+        type Scopes PartnersDevicesFindByOwner = '[]
+        requestClient PartnersDevicesFindByOwner'{..}
+          = go _pdfboPartnerId _pdfboXgafv _pdfboUploadProtocol
+              _pdfboAccessToken
+              _pdfboUploadType
+              _pdfboCallback
+              (Just AltJSON)
+              _pdfboPayload
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PartnersDevicesFindByOwnerResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/Get.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/Get.hs
@@ -0,0 +1,144 @@
+{-# 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.AndroidDeviceProvisioning.Partners.Devices.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 a device.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.partners.devices.get@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.Get
+    (
+    -- * REST Resource
+      PartnersDevicesGetResource
+
+    -- * Creating a Request
+    , partnersDevicesGet
+    , PartnersDevicesGet
+
+    -- * Request Lenses
+    , pdgXgafv
+    , pdgUploadProtocol
+    , pdgAccessToken
+    , pdgUploadType
+    , pdgName
+    , pdgCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.partners.devices.get@ method which the
+-- 'PartnersDevicesGet' request conforms to.
+type PartnersDevicesGetResource =
+     "v1" :>
+       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] Device
+
+-- | Gets a device.
+--
+-- /See:/ 'partnersDevicesGet' smart constructor.
+data PartnersDevicesGet = PartnersDevicesGet'
+    { _pdgXgafv          :: !(Maybe Xgafv)
+    , _pdgUploadProtocol :: !(Maybe Text)
+    , _pdgAccessToken    :: !(Maybe Text)
+    , _pdgUploadType     :: !(Maybe Text)
+    , _pdgName           :: !Text
+    , _pdgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PartnersDevicesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdgXgafv'
+--
+-- * 'pdgUploadProtocol'
+--
+-- * 'pdgAccessToken'
+--
+-- * 'pdgUploadType'
+--
+-- * 'pdgName'
+--
+-- * 'pdgCallback'
+partnersDevicesGet
+    :: Text -- ^ 'pdgName'
+    -> PartnersDevicesGet
+partnersDevicesGet pPdgName_ =
+    PartnersDevicesGet'
+    { _pdgXgafv = Nothing
+    , _pdgUploadProtocol = Nothing
+    , _pdgAccessToken = Nothing
+    , _pdgUploadType = Nothing
+    , _pdgName = pPdgName_
+    , _pdgCallback = Nothing
+    }
+
+-- | V1 error format.
+pdgXgafv :: Lens' PartnersDevicesGet (Maybe Xgafv)
+pdgXgafv = lens _pdgXgafv (\ s a -> s{_pdgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdgUploadProtocol :: Lens' PartnersDevicesGet (Maybe Text)
+pdgUploadProtocol
+  = lens _pdgUploadProtocol
+      (\ s a -> s{_pdgUploadProtocol = a})
+
+-- | OAuth access token.
+pdgAccessToken :: Lens' PartnersDevicesGet (Maybe Text)
+pdgAccessToken
+  = lens _pdgAccessToken
+      (\ s a -> s{_pdgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdgUploadType :: Lens' PartnersDevicesGet (Maybe Text)
+pdgUploadType
+  = lens _pdgUploadType
+      (\ s a -> s{_pdgUploadType = a})
+
+-- | Required. The device API resource name in the format
+-- \`partners\/[PARTNER_ID]\/devices\/[DEVICE_ID]\`.
+pdgName :: Lens' PartnersDevicesGet Text
+pdgName = lens _pdgName (\ s a -> s{_pdgName = a})
+
+-- | JSONP
+pdgCallback :: Lens' PartnersDevicesGet (Maybe Text)
+pdgCallback
+  = lens _pdgCallback (\ s a -> s{_pdgCallback = a})
+
+instance GoogleRequest PartnersDevicesGet where
+        type Rs PartnersDevicesGet = Device
+        type Scopes PartnersDevicesGet = '[]
+        requestClient PartnersDevicesGet'{..}
+          = go _pdgName _pdgXgafv _pdgUploadProtocol
+              _pdgAccessToken
+              _pdgUploadType
+              _pdgCallback
+              (Just AltJSON)
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PartnersDevicesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/Metadata.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/Metadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/Metadata.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.AndroidDeviceProvisioning.Partners.Devices.Metadata
+-- 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 reseller metadata associated with the device.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.partners.devices.metadata@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.Metadata
+    (
+    -- * REST Resource
+      PartnersDevicesMetadataResource
+
+    -- * Creating a Request
+    , partnersDevicesMetadata
+    , PartnersDevicesMetadata
+
+    -- * Request Lenses
+    , pdmXgafv
+    , pdmUploadProtocol
+    , pdmAccessToken
+    , pdmUploadType
+    , pdmPayload
+    , pdmDeviceId
+    , pdmCallback
+    , pdmMetadataOwnerId
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.partners.devices.metadata@ method which the
+-- 'PartnersDevicesMetadata' request conforms to.
+type PartnersDevicesMetadataResource =
+     "v1" :>
+       "partners" :>
+         Capture "metadataOwnerId" (Textual Int64) :>
+           "devices" :>
+             Capture "deviceId" (Textual Int64) :>
+               "metadata" :>
+                 QueryParam "$.xgafv" Xgafv :>
+                   QueryParam "upload_protocol" Text :>
+                     QueryParam "access_token" Text :>
+                       QueryParam "uploadType" Text :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             ReqBody '[JSON] UpdateDeviceMetadataRequest :>
+                               Post '[JSON] DeviceMetadata
+
+-- | Updates reseller metadata associated with the device.
+--
+-- /See:/ 'partnersDevicesMetadata' smart constructor.
+data PartnersDevicesMetadata = PartnersDevicesMetadata'
+    { _pdmXgafv           :: !(Maybe Xgafv)
+    , _pdmUploadProtocol  :: !(Maybe Text)
+    , _pdmAccessToken     :: !(Maybe Text)
+    , _pdmUploadType      :: !(Maybe Text)
+    , _pdmPayload         :: !UpdateDeviceMetadataRequest
+    , _pdmDeviceId        :: !(Textual Int64)
+    , _pdmCallback        :: !(Maybe Text)
+    , _pdmMetadataOwnerId :: !(Textual Int64)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PartnersDevicesMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdmXgafv'
+--
+-- * 'pdmUploadProtocol'
+--
+-- * 'pdmAccessToken'
+--
+-- * 'pdmUploadType'
+--
+-- * 'pdmPayload'
+--
+-- * 'pdmDeviceId'
+--
+-- * 'pdmCallback'
+--
+-- * 'pdmMetadataOwnerId'
+partnersDevicesMetadata
+    :: UpdateDeviceMetadataRequest -- ^ 'pdmPayload'
+    -> Int64 -- ^ 'pdmDeviceId'
+    -> Int64 -- ^ 'pdmMetadataOwnerId'
+    -> PartnersDevicesMetadata
+partnersDevicesMetadata pPdmPayload_ pPdmDeviceId_ pPdmMetadataOwnerId_ =
+    PartnersDevicesMetadata'
+    { _pdmXgafv = Nothing
+    , _pdmUploadProtocol = Nothing
+    , _pdmAccessToken = Nothing
+    , _pdmUploadType = Nothing
+    , _pdmPayload = pPdmPayload_
+    , _pdmDeviceId = _Coerce # pPdmDeviceId_
+    , _pdmCallback = Nothing
+    , _pdmMetadataOwnerId = _Coerce # pPdmMetadataOwnerId_
+    }
+
+-- | V1 error format.
+pdmXgafv :: Lens' PartnersDevicesMetadata (Maybe Xgafv)
+pdmXgafv = lens _pdmXgafv (\ s a -> s{_pdmXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdmUploadProtocol :: Lens' PartnersDevicesMetadata (Maybe Text)
+pdmUploadProtocol
+  = lens _pdmUploadProtocol
+      (\ s a -> s{_pdmUploadProtocol = a})
+
+-- | OAuth access token.
+pdmAccessToken :: Lens' PartnersDevicesMetadata (Maybe Text)
+pdmAccessToken
+  = lens _pdmAccessToken
+      (\ s a -> s{_pdmAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdmUploadType :: Lens' PartnersDevicesMetadata (Maybe Text)
+pdmUploadType
+  = lens _pdmUploadType
+      (\ s a -> s{_pdmUploadType = a})
+
+-- | Multipart request metadata.
+pdmPayload :: Lens' PartnersDevicesMetadata UpdateDeviceMetadataRequest
+pdmPayload
+  = lens _pdmPayload (\ s a -> s{_pdmPayload = a})
+
+-- | Required. The ID of the device.
+pdmDeviceId :: Lens' PartnersDevicesMetadata Int64
+pdmDeviceId
+  = lens _pdmDeviceId (\ s a -> s{_pdmDeviceId = a}) .
+      _Coerce
+
+-- | JSONP
+pdmCallback :: Lens' PartnersDevicesMetadata (Maybe Text)
+pdmCallback
+  = lens _pdmCallback (\ s a -> s{_pdmCallback = a})
+
+-- | Required. The owner of the newly set metadata. Set this to the partner
+-- ID.
+pdmMetadataOwnerId :: Lens' PartnersDevicesMetadata Int64
+pdmMetadataOwnerId
+  = lens _pdmMetadataOwnerId
+      (\ s a -> s{_pdmMetadataOwnerId = a})
+      . _Coerce
+
+instance GoogleRequest PartnersDevicesMetadata where
+        type Rs PartnersDevicesMetadata = DeviceMetadata
+        type Scopes PartnersDevicesMetadata = '[]
+        requestClient PartnersDevicesMetadata'{..}
+          = go _pdmMetadataOwnerId _pdmDeviceId _pdmXgafv
+              _pdmUploadProtocol
+              _pdmAccessToken
+              _pdmUploadType
+              _pdmCallback
+              (Just AltJSON)
+              _pdmPayload
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PartnersDevicesMetadataResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/Unclaim.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/Unclaim.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/Unclaim.hs
@@ -0,0 +1,163 @@
+{-# 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.AndroidDeviceProvisioning.Partners.Devices.Unclaim
+-- 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)
+--
+-- Unclaims a device from a customer and removes it from zero-touch
+-- enrollment.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.partners.devices.unclaim@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.Unclaim
+    (
+    -- * REST Resource
+      PartnersDevicesUnclaimResource
+
+    -- * Creating a Request
+    , partnersDevicesUnclaim
+    , PartnersDevicesUnclaim
+
+    -- * Request Lenses
+    , pduXgafv
+    , pduUploadProtocol
+    , pduAccessToken
+    , pduPartnerId
+    , pduUploadType
+    , pduPayload
+    , pduCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.partners.devices.unclaim@ method which the
+-- 'PartnersDevicesUnclaim' request conforms to.
+type PartnersDevicesUnclaimResource =
+     "v1" :>
+       "partners" :>
+         Capture "partnerId" (Textual Int64) :>
+           "devices:unclaim" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] UnclaimDeviceRequest :>
+                           Post '[JSON] Empty
+
+-- | Unclaims a device from a customer and removes it from zero-touch
+-- enrollment.
+--
+-- /See:/ 'partnersDevicesUnclaim' smart constructor.
+data PartnersDevicesUnclaim = PartnersDevicesUnclaim'
+    { _pduXgafv          :: !(Maybe Xgafv)
+    , _pduUploadProtocol :: !(Maybe Text)
+    , _pduAccessToken    :: !(Maybe Text)
+    , _pduPartnerId      :: !(Textual Int64)
+    , _pduUploadType     :: !(Maybe Text)
+    , _pduPayload        :: !UnclaimDeviceRequest
+    , _pduCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PartnersDevicesUnclaim' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pduXgafv'
+--
+-- * 'pduUploadProtocol'
+--
+-- * 'pduAccessToken'
+--
+-- * 'pduPartnerId'
+--
+-- * 'pduUploadType'
+--
+-- * 'pduPayload'
+--
+-- * 'pduCallback'
+partnersDevicesUnclaim
+    :: Int64 -- ^ 'pduPartnerId'
+    -> UnclaimDeviceRequest -- ^ 'pduPayload'
+    -> PartnersDevicesUnclaim
+partnersDevicesUnclaim pPduPartnerId_ pPduPayload_ =
+    PartnersDevicesUnclaim'
+    { _pduXgafv = Nothing
+    , _pduUploadProtocol = Nothing
+    , _pduAccessToken = Nothing
+    , _pduPartnerId = _Coerce # pPduPartnerId_
+    , _pduUploadType = Nothing
+    , _pduPayload = pPduPayload_
+    , _pduCallback = Nothing
+    }
+
+-- | V1 error format.
+pduXgafv :: Lens' PartnersDevicesUnclaim (Maybe Xgafv)
+pduXgafv = lens _pduXgafv (\ s a -> s{_pduXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pduUploadProtocol :: Lens' PartnersDevicesUnclaim (Maybe Text)
+pduUploadProtocol
+  = lens _pduUploadProtocol
+      (\ s a -> s{_pduUploadProtocol = a})
+
+-- | OAuth access token.
+pduAccessToken :: Lens' PartnersDevicesUnclaim (Maybe Text)
+pduAccessToken
+  = lens _pduAccessToken
+      (\ s a -> s{_pduAccessToken = a})
+
+-- | Required. The ID of the reseller partner.
+pduPartnerId :: Lens' PartnersDevicesUnclaim Int64
+pduPartnerId
+  = lens _pduPartnerId (\ s a -> s{_pduPartnerId = a})
+      . _Coerce
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pduUploadType :: Lens' PartnersDevicesUnclaim (Maybe Text)
+pduUploadType
+  = lens _pduUploadType
+      (\ s a -> s{_pduUploadType = a})
+
+-- | Multipart request metadata.
+pduPayload :: Lens' PartnersDevicesUnclaim UnclaimDeviceRequest
+pduPayload
+  = lens _pduPayload (\ s a -> s{_pduPayload = a})
+
+-- | JSONP
+pduCallback :: Lens' PartnersDevicesUnclaim (Maybe Text)
+pduCallback
+  = lens _pduCallback (\ s a -> s{_pduCallback = a})
+
+instance GoogleRequest PartnersDevicesUnclaim where
+        type Rs PartnersDevicesUnclaim = Empty
+        type Scopes PartnersDevicesUnclaim = '[]
+        requestClient PartnersDevicesUnclaim'{..}
+          = go _pduPartnerId _pduXgafv _pduUploadProtocol
+              _pduAccessToken
+              _pduUploadType
+              _pduCallback
+              (Just AltJSON)
+              _pduPayload
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PartnersDevicesUnclaimResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/UnclaimAsync.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/UnclaimAsync.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/UnclaimAsync.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.AndroidDeviceProvisioning.Partners.Devices.UnclaimAsync
+-- 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)
+--
+-- Unclaims a batch of devices for a customer asynchronously. Removes the
+-- devices from zero-touch enrollment. To learn more, read [Long‑running
+-- batch operations](\/zero-touch\/guides\/how-it-works#operations).
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.partners.devices.unclaimAsync@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.UnclaimAsync
+    (
+    -- * REST Resource
+      PartnersDevicesUnclaimAsyncResource
+
+    -- * Creating a Request
+    , partnersDevicesUnclaimAsync
+    , PartnersDevicesUnclaimAsync
+
+    -- * Request Lenses
+    , pduaXgafv
+    , pduaUploadProtocol
+    , pduaAccessToken
+    , pduaPartnerId
+    , pduaUploadType
+    , pduaPayload
+    , pduaCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.partners.devices.unclaimAsync@ method which the
+-- 'PartnersDevicesUnclaimAsync' request conforms to.
+type PartnersDevicesUnclaimAsyncResource =
+     "v1" :>
+       "partners" :>
+         Capture "partnerId" (Textual Int64) :>
+           "devices:unclaimAsync" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] UnclaimDevicesRequest :>
+                           Post '[JSON] Operation
+
+-- | Unclaims a batch of devices for a customer asynchronously. Removes the
+-- devices from zero-touch enrollment. To learn more, read [Long‑running
+-- batch operations](\/zero-touch\/guides\/how-it-works#operations).
+--
+-- /See:/ 'partnersDevicesUnclaimAsync' smart constructor.
+data PartnersDevicesUnclaimAsync = PartnersDevicesUnclaimAsync'
+    { _pduaXgafv          :: !(Maybe Xgafv)
+    , _pduaUploadProtocol :: !(Maybe Text)
+    , _pduaAccessToken    :: !(Maybe Text)
+    , _pduaPartnerId      :: !(Textual Int64)
+    , _pduaUploadType     :: !(Maybe Text)
+    , _pduaPayload        :: !UnclaimDevicesRequest
+    , _pduaCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PartnersDevicesUnclaimAsync' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pduaXgafv'
+--
+-- * 'pduaUploadProtocol'
+--
+-- * 'pduaAccessToken'
+--
+-- * 'pduaPartnerId'
+--
+-- * 'pduaUploadType'
+--
+-- * 'pduaPayload'
+--
+-- * 'pduaCallback'
+partnersDevicesUnclaimAsync
+    :: Int64 -- ^ 'pduaPartnerId'
+    -> UnclaimDevicesRequest -- ^ 'pduaPayload'
+    -> PartnersDevicesUnclaimAsync
+partnersDevicesUnclaimAsync pPduaPartnerId_ pPduaPayload_ =
+    PartnersDevicesUnclaimAsync'
+    { _pduaXgafv = Nothing
+    , _pduaUploadProtocol = Nothing
+    , _pduaAccessToken = Nothing
+    , _pduaPartnerId = _Coerce # pPduaPartnerId_
+    , _pduaUploadType = Nothing
+    , _pduaPayload = pPduaPayload_
+    , _pduaCallback = Nothing
+    }
+
+-- | V1 error format.
+pduaXgafv :: Lens' PartnersDevicesUnclaimAsync (Maybe Xgafv)
+pduaXgafv
+  = lens _pduaXgafv (\ s a -> s{_pduaXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pduaUploadProtocol :: Lens' PartnersDevicesUnclaimAsync (Maybe Text)
+pduaUploadProtocol
+  = lens _pduaUploadProtocol
+      (\ s a -> s{_pduaUploadProtocol = a})
+
+-- | OAuth access token.
+pduaAccessToken :: Lens' PartnersDevicesUnclaimAsync (Maybe Text)
+pduaAccessToken
+  = lens _pduaAccessToken
+      (\ s a -> s{_pduaAccessToken = a})
+
+-- | Required. The reseller partner ID.
+pduaPartnerId :: Lens' PartnersDevicesUnclaimAsync Int64
+pduaPartnerId
+  = lens _pduaPartnerId
+      (\ s a -> s{_pduaPartnerId = a})
+      . _Coerce
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pduaUploadType :: Lens' PartnersDevicesUnclaimAsync (Maybe Text)
+pduaUploadType
+  = lens _pduaUploadType
+      (\ s a -> s{_pduaUploadType = a})
+
+-- | Multipart request metadata.
+pduaPayload :: Lens' PartnersDevicesUnclaimAsync UnclaimDevicesRequest
+pduaPayload
+  = lens _pduaPayload (\ s a -> s{_pduaPayload = a})
+
+-- | JSONP
+pduaCallback :: Lens' PartnersDevicesUnclaimAsync (Maybe Text)
+pduaCallback
+  = lens _pduaCallback (\ s a -> s{_pduaCallback = a})
+
+instance GoogleRequest PartnersDevicesUnclaimAsync
+         where
+        type Rs PartnersDevicesUnclaimAsync = Operation
+        type Scopes PartnersDevicesUnclaimAsync = '[]
+        requestClient PartnersDevicesUnclaimAsync'{..}
+          = go _pduaPartnerId _pduaXgafv _pduaUploadProtocol
+              _pduaAccessToken
+              _pduaUploadType
+              _pduaCallback
+              (Just AltJSON)
+              _pduaPayload
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PartnersDevicesUnclaimAsyncResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/UpdateMetadataAsync.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/UpdateMetadataAsync.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Devices/UpdateMetadataAsync.hs
@@ -0,0 +1,173 @@
+{-# 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.AndroidDeviceProvisioning.Partners.Devices.UpdateMetadataAsync
+-- 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 the reseller metadata attached to a batch of devices. This
+-- method updates devices asynchronously and returns an \`Operation\` that
+-- can be used to track progress. Read [Long‑running batch
+-- operations](\/zero-touch\/guides\/how-it-works#operations).
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.partners.devices.updateMetadataAsync@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.UpdateMetadataAsync
+    (
+    -- * REST Resource
+      PartnersDevicesUpdateMetadataAsyncResource
+
+    -- * Creating a Request
+    , partnersDevicesUpdateMetadataAsync
+    , PartnersDevicesUpdateMetadataAsync
+
+    -- * Request Lenses
+    , pdumaXgafv
+    , pdumaUploadProtocol
+    , pdumaAccessToken
+    , pdumaPartnerId
+    , pdumaUploadType
+    , pdumaPayload
+    , pdumaCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.partners.devices.updateMetadataAsync@ method which the
+-- 'PartnersDevicesUpdateMetadataAsync' request conforms to.
+type PartnersDevicesUpdateMetadataAsyncResource =
+     "v1" :>
+       "partners" :>
+         Capture "partnerId" (Textual Int64) :>
+           "devices:updateMetadataAsync" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] UpdateDeviceMetadataInBatchRequest :>
+                           Post '[JSON] Operation
+
+-- | Updates the reseller metadata attached to a batch of devices. This
+-- method updates devices asynchronously and returns an \`Operation\` that
+-- can be used to track progress. Read [Long‑running batch
+-- operations](\/zero-touch\/guides\/how-it-works#operations).
+--
+-- /See:/ 'partnersDevicesUpdateMetadataAsync' smart constructor.
+data PartnersDevicesUpdateMetadataAsync = PartnersDevicesUpdateMetadataAsync'
+    { _pdumaXgafv          :: !(Maybe Xgafv)
+    , _pdumaUploadProtocol :: !(Maybe Text)
+    , _pdumaAccessToken    :: !(Maybe Text)
+    , _pdumaPartnerId      :: !(Textual Int64)
+    , _pdumaUploadType     :: !(Maybe Text)
+    , _pdumaPayload        :: !UpdateDeviceMetadataInBatchRequest
+    , _pdumaCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PartnersDevicesUpdateMetadataAsync' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdumaXgafv'
+--
+-- * 'pdumaUploadProtocol'
+--
+-- * 'pdumaAccessToken'
+--
+-- * 'pdumaPartnerId'
+--
+-- * 'pdumaUploadType'
+--
+-- * 'pdumaPayload'
+--
+-- * 'pdumaCallback'
+partnersDevicesUpdateMetadataAsync
+    :: Int64 -- ^ 'pdumaPartnerId'
+    -> UpdateDeviceMetadataInBatchRequest -- ^ 'pdumaPayload'
+    -> PartnersDevicesUpdateMetadataAsync
+partnersDevicesUpdateMetadataAsync pPdumaPartnerId_ pPdumaPayload_ =
+    PartnersDevicesUpdateMetadataAsync'
+    { _pdumaXgafv = Nothing
+    , _pdumaUploadProtocol = Nothing
+    , _pdumaAccessToken = Nothing
+    , _pdumaPartnerId = _Coerce # pPdumaPartnerId_
+    , _pdumaUploadType = Nothing
+    , _pdumaPayload = pPdumaPayload_
+    , _pdumaCallback = Nothing
+    }
+
+-- | V1 error format.
+pdumaXgafv :: Lens' PartnersDevicesUpdateMetadataAsync (Maybe Xgafv)
+pdumaXgafv
+  = lens _pdumaXgafv (\ s a -> s{_pdumaXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdumaUploadProtocol :: Lens' PartnersDevicesUpdateMetadataAsync (Maybe Text)
+pdumaUploadProtocol
+  = lens _pdumaUploadProtocol
+      (\ s a -> s{_pdumaUploadProtocol = a})
+
+-- | OAuth access token.
+pdumaAccessToken :: Lens' PartnersDevicesUpdateMetadataAsync (Maybe Text)
+pdumaAccessToken
+  = lens _pdumaAccessToken
+      (\ s a -> s{_pdumaAccessToken = a})
+
+-- | Required. The reseller partner ID.
+pdumaPartnerId :: Lens' PartnersDevicesUpdateMetadataAsync Int64
+pdumaPartnerId
+  = lens _pdumaPartnerId
+      (\ s a -> s{_pdumaPartnerId = a})
+      . _Coerce
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdumaUploadType :: Lens' PartnersDevicesUpdateMetadataAsync (Maybe Text)
+pdumaUploadType
+  = lens _pdumaUploadType
+      (\ s a -> s{_pdumaUploadType = a})
+
+-- | Multipart request metadata.
+pdumaPayload :: Lens' PartnersDevicesUpdateMetadataAsync UpdateDeviceMetadataInBatchRequest
+pdumaPayload
+  = lens _pdumaPayload (\ s a -> s{_pdumaPayload = a})
+
+-- | JSONP
+pdumaCallback :: Lens' PartnersDevicesUpdateMetadataAsync (Maybe Text)
+pdumaCallback
+  = lens _pdumaCallback
+      (\ s a -> s{_pdumaCallback = a})
+
+instance GoogleRequest
+         PartnersDevicesUpdateMetadataAsync where
+        type Rs PartnersDevicesUpdateMetadataAsync =
+             Operation
+        type Scopes PartnersDevicesUpdateMetadataAsync = '[]
+        requestClient PartnersDevicesUpdateMetadataAsync'{..}
+          = go _pdumaPartnerId _pdumaXgafv _pdumaUploadProtocol
+              _pdumaAccessToken
+              _pdumaUploadType
+              _pdumaCallback
+              (Just AltJSON)
+              _pdumaPayload
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy PartnersDevicesUpdateMetadataAsyncResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Vendors/Customers/List.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Vendors/Customers/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Vendors/Customers/List.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.AndroidDeviceProvisioning.Partners.Vendors.Customers.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 the customers of the vendor.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.partners.vendors.customers.list@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Vendors.Customers.List
+    (
+    -- * REST Resource
+      PartnersVendorsCustomersListResource
+
+    -- * Creating a Request
+    , partnersVendorsCustomersList
+    , PartnersVendorsCustomersList
+
+    -- * Request Lenses
+    , pvclParent
+    , pvclXgafv
+    , pvclUploadProtocol
+    , pvclAccessToken
+    , pvclUploadType
+    , pvclPageToken
+    , pvclPageSize
+    , pvclCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.partners.vendors.customers.list@ method which the
+-- 'PartnersVendorsCustomersList' request conforms to.
+type PartnersVendorsCustomersListResource =
+     "v1" :>
+       Capture "parent" Text :>
+         "customers" :>
+           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] ListVendorCustomersResponse
+
+-- | Lists the customers of the vendor.
+--
+-- /See:/ 'partnersVendorsCustomersList' smart constructor.
+data PartnersVendorsCustomersList = PartnersVendorsCustomersList'
+    { _pvclParent         :: !Text
+    , _pvclXgafv          :: !(Maybe Xgafv)
+    , _pvclUploadProtocol :: !(Maybe Text)
+    , _pvclAccessToken    :: !(Maybe Text)
+    , _pvclUploadType     :: !(Maybe Text)
+    , _pvclPageToken      :: !(Maybe Text)
+    , _pvclPageSize       :: !(Maybe (Textual Int32))
+    , _pvclCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PartnersVendorsCustomersList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pvclParent'
+--
+-- * 'pvclXgafv'
+--
+-- * 'pvclUploadProtocol'
+--
+-- * 'pvclAccessToken'
+--
+-- * 'pvclUploadType'
+--
+-- * 'pvclPageToken'
+--
+-- * 'pvclPageSize'
+--
+-- * 'pvclCallback'
+partnersVendorsCustomersList
+    :: Text -- ^ 'pvclParent'
+    -> PartnersVendorsCustomersList
+partnersVendorsCustomersList pPvclParent_ =
+    PartnersVendorsCustomersList'
+    { _pvclParent = pPvclParent_
+    , _pvclXgafv = Nothing
+    , _pvclUploadProtocol = Nothing
+    , _pvclAccessToken = Nothing
+    , _pvclUploadType = Nothing
+    , _pvclPageToken = Nothing
+    , _pvclPageSize = Nothing
+    , _pvclCallback = Nothing
+    }
+
+-- | Required. The resource name in the format
+-- \`partners\/[PARTNER_ID]\/vendors\/[VENDOR_ID]\`.
+pvclParent :: Lens' PartnersVendorsCustomersList Text
+pvclParent
+  = lens _pvclParent (\ s a -> s{_pvclParent = a})
+
+-- | V1 error format.
+pvclXgafv :: Lens' PartnersVendorsCustomersList (Maybe Xgafv)
+pvclXgafv
+  = lens _pvclXgafv (\ s a -> s{_pvclXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pvclUploadProtocol :: Lens' PartnersVendorsCustomersList (Maybe Text)
+pvclUploadProtocol
+  = lens _pvclUploadProtocol
+      (\ s a -> s{_pvclUploadProtocol = a})
+
+-- | OAuth access token.
+pvclAccessToken :: Lens' PartnersVendorsCustomersList (Maybe Text)
+pvclAccessToken
+  = lens _pvclAccessToken
+      (\ s a -> s{_pvclAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pvclUploadType :: Lens' PartnersVendorsCustomersList (Maybe Text)
+pvclUploadType
+  = lens _pvclUploadType
+      (\ s a -> s{_pvclUploadType = a})
+
+-- | A token identifying a page of results returned by the server.
+pvclPageToken :: Lens' PartnersVendorsCustomersList (Maybe Text)
+pvclPageToken
+  = lens _pvclPageToken
+      (\ s a -> s{_pvclPageToken = a})
+
+-- | The maximum number of results to be returned.
+pvclPageSize :: Lens' PartnersVendorsCustomersList (Maybe Int32)
+pvclPageSize
+  = lens _pvclPageSize (\ s a -> s{_pvclPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+pvclCallback :: Lens' PartnersVendorsCustomersList (Maybe Text)
+pvclCallback
+  = lens _pvclCallback (\ s a -> s{_pvclCallback = a})
+
+instance GoogleRequest PartnersVendorsCustomersList
+         where
+        type Rs PartnersVendorsCustomersList =
+             ListVendorCustomersResponse
+        type Scopes PartnersVendorsCustomersList = '[]
+        requestClient PartnersVendorsCustomersList'{..}
+          = go _pvclParent _pvclXgafv _pvclUploadProtocol
+              _pvclAccessToken
+              _pvclUploadType
+              _pvclPageToken
+              _pvclPageSize
+              _pvclCallback
+              (Just AltJSON)
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PartnersVendorsCustomersListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Vendors/List.hs b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Vendors/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidDeviceProvisioning/Partners/Vendors/List.hs
@@ -0,0 +1,171 @@
+{-# 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.AndroidDeviceProvisioning.Partners.Vendors.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 the vendors of the partner.
+--
+-- /See:/ <https://developers.google.com/zero-touch/ Android Device Provisioning Partner API Reference> for @androiddeviceprovisioning.partners.vendors.list@.
+module Network.Google.Resource.AndroidDeviceProvisioning.Partners.Vendors.List
+    (
+    -- * REST Resource
+      PartnersVendorsListResource
+
+    -- * Creating a Request
+    , partnersVendorsList
+    , PartnersVendorsList
+
+    -- * Request Lenses
+    , pvlParent
+    , pvlXgafv
+    , pvlUploadProtocol
+    , pvlAccessToken
+    , pvlUploadType
+    , pvlPageToken
+    , pvlPageSize
+    , pvlCallback
+    ) where
+
+import           Network.Google.AndroidDeviceProvisioning.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androiddeviceprovisioning.partners.vendors.list@ method which the
+-- 'PartnersVendorsList' request conforms to.
+type PartnersVendorsListResource =
+     "v1" :>
+       Capture "parent" Text :>
+         "vendors" :>
+           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] ListVendorsResponse
+
+-- | Lists the vendors of the partner.
+--
+-- /See:/ 'partnersVendorsList' smart constructor.
+data PartnersVendorsList = PartnersVendorsList'
+    { _pvlParent         :: !Text
+    , _pvlXgafv          :: !(Maybe Xgafv)
+    , _pvlUploadProtocol :: !(Maybe Text)
+    , _pvlAccessToken    :: !(Maybe Text)
+    , _pvlUploadType     :: !(Maybe Text)
+    , _pvlPageToken      :: !(Maybe Text)
+    , _pvlPageSize       :: !(Maybe (Textual Int32))
+    , _pvlCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PartnersVendorsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pvlParent'
+--
+-- * 'pvlXgafv'
+--
+-- * 'pvlUploadProtocol'
+--
+-- * 'pvlAccessToken'
+--
+-- * 'pvlUploadType'
+--
+-- * 'pvlPageToken'
+--
+-- * 'pvlPageSize'
+--
+-- * 'pvlCallback'
+partnersVendorsList
+    :: Text -- ^ 'pvlParent'
+    -> PartnersVendorsList
+partnersVendorsList pPvlParent_ =
+    PartnersVendorsList'
+    { _pvlParent = pPvlParent_
+    , _pvlXgafv = Nothing
+    , _pvlUploadProtocol = Nothing
+    , _pvlAccessToken = Nothing
+    , _pvlUploadType = Nothing
+    , _pvlPageToken = Nothing
+    , _pvlPageSize = Nothing
+    , _pvlCallback = Nothing
+    }
+
+-- | Required. The resource name in the format \`partners\/[PARTNER_ID]\`.
+pvlParent :: Lens' PartnersVendorsList Text
+pvlParent
+  = lens _pvlParent (\ s a -> s{_pvlParent = a})
+
+-- | V1 error format.
+pvlXgafv :: Lens' PartnersVendorsList (Maybe Xgafv)
+pvlXgafv = lens _pvlXgafv (\ s a -> s{_pvlXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pvlUploadProtocol :: Lens' PartnersVendorsList (Maybe Text)
+pvlUploadProtocol
+  = lens _pvlUploadProtocol
+      (\ s a -> s{_pvlUploadProtocol = a})
+
+-- | OAuth access token.
+pvlAccessToken :: Lens' PartnersVendorsList (Maybe Text)
+pvlAccessToken
+  = lens _pvlAccessToken
+      (\ s a -> s{_pvlAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pvlUploadType :: Lens' PartnersVendorsList (Maybe Text)
+pvlUploadType
+  = lens _pvlUploadType
+      (\ s a -> s{_pvlUploadType = a})
+
+-- | A token identifying a page of results returned by the server.
+pvlPageToken :: Lens' PartnersVendorsList (Maybe Text)
+pvlPageToken
+  = lens _pvlPageToken (\ s a -> s{_pvlPageToken = a})
+
+-- | The maximum number of results to be returned.
+pvlPageSize :: Lens' PartnersVendorsList (Maybe Int32)
+pvlPageSize
+  = lens _pvlPageSize (\ s a -> s{_pvlPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+pvlCallback :: Lens' PartnersVendorsList (Maybe Text)
+pvlCallback
+  = lens _pvlCallback (\ s a -> s{_pvlCallback = a})
+
+instance GoogleRequest PartnersVendorsList where
+        type Rs PartnersVendorsList = ListVendorsResponse
+        type Scopes PartnersVendorsList = '[]
+        requestClient PartnersVendorsList'{..}
+          = go _pvlParent _pvlXgafv _pvlUploadProtocol
+              _pvlAccessToken
+              _pvlUploadType
+              _pvlPageToken
+              _pvlPageSize
+              _pvlCallback
+              (Just AltJSON)
+              androidDeviceProvisioningService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PartnersVendorsListResource)
+                      mempty
diff --git a/gogol-androiddeviceprovisioning.cabal b/gogol-androiddeviceprovisioning.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-androiddeviceprovisioning.cabal
@@ -0,0 +1,72 @@
+name:                  gogol-androiddeviceprovisioning
+version:               0.4.0
+synopsis:              Google Android Device Provisioning Partner 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:
+    Automates Android zero-touch enrollment for device resellers, customers,
+    and EMMs.
+    .
+    /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 @v1@
+    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.AndroidDeviceProvisioning
+        , Network.Google.AndroidDeviceProvisioning.Types
+        , Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.Create
+        , Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.Delete
+        , Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.Get
+        , Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.List
+        , Network.Google.Resource.AndroidDeviceProvisioning.Customers.Configurations.Patch
+        , Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.ApplyConfiguration
+        , Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.Get
+        , Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.List
+        , Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.RemoveConfiguration
+        , Network.Google.Resource.AndroidDeviceProvisioning.Customers.Devices.Unclaim
+        , Network.Google.Resource.AndroidDeviceProvisioning.Customers.Dpcs.List
+        , Network.Google.Resource.AndroidDeviceProvisioning.Customers.List
+        , Network.Google.Resource.AndroidDeviceProvisioning.Operations.Get
+        , Network.Google.Resource.AndroidDeviceProvisioning.Partners.Customers.Create
+        , Network.Google.Resource.AndroidDeviceProvisioning.Partners.Customers.List
+        , Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.Claim
+        , Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.ClaimAsync
+        , Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.FindByIdentifier
+        , Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.FindByOwner
+        , Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.Get
+        , Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.Metadata
+        , Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.Unclaim
+        , Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.UnclaimAsync
+        , Network.Google.Resource.AndroidDeviceProvisioning.Partners.Devices.UpdateMetadataAsync
+        , Network.Google.Resource.AndroidDeviceProvisioning.Partners.Vendors.Customers.List
+        , Network.Google.Resource.AndroidDeviceProvisioning.Partners.Vendors.List
+
+    other-modules:
+          Network.Google.AndroidDeviceProvisioning.Types.Product
+        , Network.Google.AndroidDeviceProvisioning.Types.Sum
+
+    build-depends:
+          gogol-core == 0.4.0.*
+        , base       >= 4.7 && < 5
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
