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-android-enterprise
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.0.1`
+
+
+## Description
+
+A client library for the Google Play EMM.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`gogol-android-enterprise` 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/AndroidEnterprise.hs b/gen/Network/Google/AndroidEnterprise.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AndroidEnterprise.hs
@@ -0,0 +1,510 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.AndroidEnterprise
+-- Copyright   : (c) 2015 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)
+--
+-- Allows MDMs\/EMMs and enterprises to manage the deployment of apps to
+-- Android for Work users.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference>
+module Network.Google.AndroidEnterprise
+    (
+    -- * Service Configuration
+      androidEnterpriseService
+
+    -- * API Declaration
+    , AndroidEnterpriseAPI
+
+    -- * Resources
+
+    -- ** androidenterprise.collections.delete
+    , module Network.Google.Resource.AndroidEnterprise.Collections.Delete
+
+    -- ** androidenterprise.collections.get
+    , module Network.Google.Resource.AndroidEnterprise.Collections.Get
+
+    -- ** androidenterprise.collections.insert
+    , module Network.Google.Resource.AndroidEnterprise.Collections.Insert
+
+    -- ** androidenterprise.collections.list
+    , module Network.Google.Resource.AndroidEnterprise.Collections.List
+
+    -- ** androidenterprise.collections.patch
+    , module Network.Google.Resource.AndroidEnterprise.Collections.Patch
+
+    -- ** androidenterprise.collections.update
+    , module Network.Google.Resource.AndroidEnterprise.Collections.Update
+
+    -- ** androidenterprise.collectionviewers.delete
+    , module Network.Google.Resource.AndroidEnterprise.Collectionviewers.Delete
+
+    -- ** androidenterprise.collectionviewers.get
+    , module Network.Google.Resource.AndroidEnterprise.Collectionviewers.Get
+
+    -- ** androidenterprise.collectionviewers.list
+    , module Network.Google.Resource.AndroidEnterprise.Collectionviewers.List
+
+    -- ** androidenterprise.collectionviewers.patch
+    , module Network.Google.Resource.AndroidEnterprise.Collectionviewers.Patch
+
+    -- ** androidenterprise.collectionviewers.update
+    , module Network.Google.Resource.AndroidEnterprise.Collectionviewers.Update
+
+    -- ** androidenterprise.devices.get
+    , module Network.Google.Resource.AndroidEnterprise.Devices.Get
+
+    -- ** androidenterprise.devices.getState
+    , module Network.Google.Resource.AndroidEnterprise.Devices.GetState
+
+    -- ** androidenterprise.devices.list
+    , module Network.Google.Resource.AndroidEnterprise.Devices.List
+
+    -- ** androidenterprise.devices.setState
+    , module Network.Google.Resource.AndroidEnterprise.Devices.SetState
+
+    -- ** androidenterprise.enterprises.delete
+    , module Network.Google.Resource.AndroidEnterprise.Enterprises.Delete
+
+    -- ** androidenterprise.enterprises.enroll
+    , module Network.Google.Resource.AndroidEnterprise.Enterprises.Enroll
+
+    -- ** androidenterprise.enterprises.get
+    , module Network.Google.Resource.AndroidEnterprise.Enterprises.Get
+
+    -- ** androidenterprise.enterprises.insert
+    , module Network.Google.Resource.AndroidEnterprise.Enterprises.Insert
+
+    -- ** androidenterprise.enterprises.list
+    , module Network.Google.Resource.AndroidEnterprise.Enterprises.List
+
+    -- ** androidenterprise.enterprises.sendTestPushNotification
+    , module Network.Google.Resource.AndroidEnterprise.Enterprises.SendTestPushNotification
+
+    -- ** androidenterprise.enterprises.setAccount
+    , module Network.Google.Resource.AndroidEnterprise.Enterprises.SetAccount
+
+    -- ** androidenterprise.enterprises.unenroll
+    , module Network.Google.Resource.AndroidEnterprise.Enterprises.Unenroll
+
+    -- ** androidenterprise.entitlements.delete
+    , module Network.Google.Resource.AndroidEnterprise.Entitlements.Delete
+
+    -- ** androidenterprise.entitlements.get
+    , module Network.Google.Resource.AndroidEnterprise.Entitlements.Get
+
+    -- ** androidenterprise.entitlements.list
+    , module Network.Google.Resource.AndroidEnterprise.Entitlements.List
+
+    -- ** androidenterprise.entitlements.patch
+    , module Network.Google.Resource.AndroidEnterprise.Entitlements.Patch
+
+    -- ** androidenterprise.entitlements.update
+    , module Network.Google.Resource.AndroidEnterprise.Entitlements.Update
+
+    -- ** androidenterprise.grouplicenses.get
+    , module Network.Google.Resource.AndroidEnterprise.Grouplicenses.Get
+
+    -- ** androidenterprise.grouplicenses.list
+    , module Network.Google.Resource.AndroidEnterprise.Grouplicenses.List
+
+    -- ** androidenterprise.grouplicenseusers.list
+    , module Network.Google.Resource.AndroidEnterprise.GrouplicenseUsers.List
+
+    -- ** androidenterprise.installs.delete
+    , module Network.Google.Resource.AndroidEnterprise.Installs.Delete
+
+    -- ** androidenterprise.installs.get
+    , module Network.Google.Resource.AndroidEnterprise.Installs.Get
+
+    -- ** androidenterprise.installs.list
+    , module Network.Google.Resource.AndroidEnterprise.Installs.List
+
+    -- ** androidenterprise.installs.patch
+    , module Network.Google.Resource.AndroidEnterprise.Installs.Patch
+
+    -- ** androidenterprise.installs.update
+    , module Network.Google.Resource.AndroidEnterprise.Installs.Update
+
+    -- ** androidenterprise.permissions.get
+    , module Network.Google.Resource.AndroidEnterprise.Permissions.Get
+
+    -- ** androidenterprise.products.approve
+    , module Network.Google.Resource.AndroidEnterprise.Products.Approve
+
+    -- ** androidenterprise.products.generateApprovalUrl
+    , module Network.Google.Resource.AndroidEnterprise.Products.GenerateApprovalURL
+
+    -- ** androidenterprise.products.get
+    , module Network.Google.Resource.AndroidEnterprise.Products.Get
+
+    -- ** androidenterprise.products.getAppRestrictionsSchema
+    , module Network.Google.Resource.AndroidEnterprise.Products.GetAppRestrictionsSchema
+
+    -- ** androidenterprise.products.getPermissions
+    , module Network.Google.Resource.AndroidEnterprise.Products.GetPermissions
+
+    -- ** androidenterprise.products.updatePermissions
+    , module Network.Google.Resource.AndroidEnterprise.Products.UpdatePermissions
+
+    -- ** androidenterprise.users.generateToken
+    , module Network.Google.Resource.AndroidEnterprise.Users.GenerateToken
+
+    -- ** androidenterprise.users.get
+    , module Network.Google.Resource.AndroidEnterprise.Users.Get
+
+    -- ** androidenterprise.users.getAvailableProductSet
+    , module Network.Google.Resource.AndroidEnterprise.Users.GetAvailableProductSet
+
+    -- ** androidenterprise.users.list
+    , module Network.Google.Resource.AndroidEnterprise.Users.List
+
+    -- ** androidenterprise.users.revokeToken
+    , module Network.Google.Resource.AndroidEnterprise.Users.RevokeToken
+
+    -- ** androidenterprise.users.setAvailableProductSet
+    , module Network.Google.Resource.AndroidEnterprise.Users.SetAvailableProductSet
+
+    -- * Types
+
+    -- ** GroupLicense
+    , GroupLicense
+    , groupLicense
+    , glKind
+    , glNumProvisioned
+    , glNumPurchased
+    , glApproval
+    , glProductId
+    , glAcquisitionKind
+
+    -- ** EnterpriseAccount
+    , EnterpriseAccount
+    , enterpriseAccount
+    , eaKind
+    , eaAccountEmail
+
+    -- ** CollectionsListResponse
+    , CollectionsListResponse
+    , collectionsListResponse
+    , clrKind
+    , clrCollection
+
+    -- ** AppRestrictionsSchemaRestrictionRestrictionValue
+    , AppRestrictionsSchemaRestrictionRestrictionValue
+    , appRestrictionsSchemaRestrictionRestrictionValue
+    , arsrrvValueMultiselect
+    , arsrrvValueBool
+    , arsrrvValueInteger
+    , arsrrvType
+    , arsrrvValueString
+
+    -- ** DeviceState
+    , DeviceState
+    , deviceState
+    , dsKind
+    , dsAccountState
+
+    -- ** GroupLicenseUsersListResponse
+    , GroupLicenseUsersListResponse
+    , groupLicenseUsersListResponse
+    , glulrKind
+    , glulrUser
+
+    -- ** ApprovalURLInfo
+    , ApprovalURLInfo
+    , approvalURLInfo
+    , auiApprovalURL
+    , auiKind
+
+    -- ** ProductPermission
+    , ProductPermission
+    , productPermission
+    , ppState
+    , ppPermissionId
+
+    -- ** Device
+    , Device
+    , device
+    , dKind
+    , dManagementType
+    , dAndroidId
+
+    -- ** InstallsListResponse
+    , InstallsListResponse
+    , installsListResponse
+    , ilrKind
+    , ilrInstall
+
+    -- ** AppRestrictionsSchemaRestriction
+    , AppRestrictionsSchemaRestriction
+    , appRestrictionsSchemaRestriction
+    , arsrRestrictionType
+    , arsrEntry
+    , arsrKey
+    , arsrEntryValue
+    , arsrDefaultValue
+    , arsrTitle
+    , arsrDescription
+
+    -- ** UsersListResponse
+    , UsersListResponse
+    , usersListResponse
+    , ulrKind
+    , ulrUser
+
+    -- ** AppVersion
+    , AppVersion
+    , appVersion
+    , avVersionCode
+    , avVersionString
+
+    -- ** GroupLicensesListResponse
+    , GroupLicensesListResponse
+    , groupLicensesListResponse
+    , gllrGroupLicense
+    , gllrKind
+
+    -- ** Collection
+    , Collection
+    , collection
+    , colKind
+    , colCollectionId
+    , colVisibility
+    , colName
+    , colProductId
+
+    -- ** ProductSet
+    , ProductSet
+    , productSet
+    , psKind
+    , psProductId
+
+    -- ** Install
+    , Install
+    , install
+    , iVersionCode
+    , iKind
+    , iInstallState
+    , iProductId
+
+    -- ** User
+    , User
+    , user
+    , uKind
+    , uId
+    , uPrimaryEmail
+
+    -- ** ProductsGenerateApprovalURLResponse
+    , ProductsGenerateApprovalURLResponse
+    , productsGenerateApprovalURLResponse
+    , pgaurURL
+
+    -- ** EnterprisesSendTestPushNotificationResponse
+    , EnterprisesSendTestPushNotificationResponse
+    , enterprisesSendTestPushNotificationResponse
+    , estpnrTopicName
+    , estpnrMessageId
+
+    -- ** EnterprisesListResponse
+    , EnterprisesListResponse
+    , enterprisesListResponse
+    , elrKind
+    , elrEnterprise
+
+    -- ** AppRestrictionsSchema
+    , AppRestrictionsSchema
+    , appRestrictionsSchema
+    , arsKind
+    , arsRestrictions
+
+    -- ** UserToken
+    , UserToken
+    , userToken
+    , utKind
+    , utToken
+    , utUserId
+
+    -- ** DevicesListResponse
+    , DevicesListResponse
+    , devicesListResponse
+    , dlrKind
+    , dlrDevice
+
+    -- ** Enterprise
+    , Enterprise
+    , enterprise
+    , eKind
+    , ePrimaryDomain
+    , eName
+    , eId
+
+    -- ** Product
+    , Product
+    , product
+    , pAuthorName
+    , pKind
+    , pWorkDetailsURL
+    , pRequiresContainerApp
+    , pAppVersion
+    , pDistributionChannel
+    , pIconURL
+    , pTitle
+    , pProductId
+    , pDetailsURL
+
+    -- ** EntitlementsListResponse
+    , EntitlementsListResponse
+    , entitlementsListResponse
+    , entKind
+    , entEntitlement
+
+    -- ** ProductPermissions
+    , ProductPermissions
+    , productPermissions
+    , ppKind
+    , ppPermission
+    , ppProductId
+
+    -- ** Permission
+    , Permission
+    , permission
+    , perKind
+    , perName
+    , perDescription
+    , perPermissionId
+
+    -- ** ProductsApproveRequest
+    , ProductsApproveRequest
+    , productsApproveRequest
+    , parApprovalURLInfo
+
+    -- ** CollectionViewersListResponse
+    , CollectionViewersListResponse
+    , collectionViewersListResponse
+    , cvlrKind
+    , cvlrUser
+
+    -- ** Entitlement
+    , Entitlement
+    , entitlement
+    , eeKind
+    , eeReason
+    , eeProductId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.AndroidEnterprise.Collections.Delete
+import           Network.Google.Resource.AndroidEnterprise.Collections.Get
+import           Network.Google.Resource.AndroidEnterprise.Collections.Insert
+import           Network.Google.Resource.AndroidEnterprise.Collections.List
+import           Network.Google.Resource.AndroidEnterprise.Collections.Patch
+import           Network.Google.Resource.AndroidEnterprise.Collections.Update
+import           Network.Google.Resource.AndroidEnterprise.Collectionviewers.Delete
+import           Network.Google.Resource.AndroidEnterprise.Collectionviewers.Get
+import           Network.Google.Resource.AndroidEnterprise.Collectionviewers.List
+import           Network.Google.Resource.AndroidEnterprise.Collectionviewers.Patch
+import           Network.Google.Resource.AndroidEnterprise.Collectionviewers.Update
+import           Network.Google.Resource.AndroidEnterprise.Devices.Get
+import           Network.Google.Resource.AndroidEnterprise.Devices.GetState
+import           Network.Google.Resource.AndroidEnterprise.Devices.List
+import           Network.Google.Resource.AndroidEnterprise.Devices.SetState
+import           Network.Google.Resource.AndroidEnterprise.Enterprises.Delete
+import           Network.Google.Resource.AndroidEnterprise.Enterprises.Enroll
+import           Network.Google.Resource.AndroidEnterprise.Enterprises.Get
+import           Network.Google.Resource.AndroidEnterprise.Enterprises.Insert
+import           Network.Google.Resource.AndroidEnterprise.Enterprises.List
+import           Network.Google.Resource.AndroidEnterprise.Enterprises.SendTestPushNotification
+import           Network.Google.Resource.AndroidEnterprise.Enterprises.SetAccount
+import           Network.Google.Resource.AndroidEnterprise.Enterprises.Unenroll
+import           Network.Google.Resource.AndroidEnterprise.Entitlements.Delete
+import           Network.Google.Resource.AndroidEnterprise.Entitlements.Get
+import           Network.Google.Resource.AndroidEnterprise.Entitlements.List
+import           Network.Google.Resource.AndroidEnterprise.Entitlements.Patch
+import           Network.Google.Resource.AndroidEnterprise.Entitlements.Update
+import           Network.Google.Resource.AndroidEnterprise.Grouplicenses.Get
+import           Network.Google.Resource.AndroidEnterprise.Grouplicenses.List
+import           Network.Google.Resource.AndroidEnterprise.GrouplicenseUsers.List
+import           Network.Google.Resource.AndroidEnterprise.Installs.Delete
+import           Network.Google.Resource.AndroidEnterprise.Installs.Get
+import           Network.Google.Resource.AndroidEnterprise.Installs.List
+import           Network.Google.Resource.AndroidEnterprise.Installs.Patch
+import           Network.Google.Resource.AndroidEnterprise.Installs.Update
+import           Network.Google.Resource.AndroidEnterprise.Permissions.Get
+import           Network.Google.Resource.AndroidEnterprise.Products.Approve
+import           Network.Google.Resource.AndroidEnterprise.Products.GenerateApprovalURL
+import           Network.Google.Resource.AndroidEnterprise.Products.Get
+import           Network.Google.Resource.AndroidEnterprise.Products.GetAppRestrictionsSchema
+import           Network.Google.Resource.AndroidEnterprise.Products.GetPermissions
+import           Network.Google.Resource.AndroidEnterprise.Products.UpdatePermissions
+import           Network.Google.Resource.AndroidEnterprise.Users.GenerateToken
+import           Network.Google.Resource.AndroidEnterprise.Users.Get
+import           Network.Google.Resource.AndroidEnterprise.Users.GetAvailableProductSet
+import           Network.Google.Resource.AndroidEnterprise.Users.List
+import           Network.Google.Resource.AndroidEnterprise.Users.RevokeToken
+import           Network.Google.Resource.AndroidEnterprise.Users.SetAvailableProductSet
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Google Play EMM API service.
+type AndroidEnterpriseAPI =
+     CollectionviewersListResource :<|>
+       CollectionviewersPatchResource
+       :<|> CollectionviewersGetResource
+       :<|> CollectionviewersDeleteResource
+       :<|> CollectionviewersUpdateResource
+       :<|> UsersListResource
+       :<|> UsersGenerateTokenResource
+       :<|> UsersGetResource
+       :<|> UsersSetAvailableProductSetResource
+       :<|> UsersRevokeTokenResource
+       :<|> UsersGetAvailableProductSetResource
+       :<|> InstallsListResource
+       :<|> InstallsPatchResource
+       :<|> InstallsGetResource
+       :<|> InstallsDeleteResource
+       :<|> InstallsUpdateResource
+       :<|> CollectionsInsertResource
+       :<|> CollectionsListResource
+       :<|> CollectionsPatchResource
+       :<|> CollectionsGetResource
+       :<|> CollectionsDeleteResource
+       :<|> CollectionsUpdateResource
+       :<|> EnterprisesInsertResource
+       :<|> EnterprisesListResource
+       :<|> EnterprisesUnenrollResource
+       :<|> EnterprisesSetAccountResource
+       :<|> EnterprisesEnrollResource
+       :<|> EnterprisesGetResource
+       :<|> EnterprisesSendTestPushNotificationResource
+       :<|> EnterprisesDeleteResource
+       :<|> GrouplicensesListResource
+       :<|> GrouplicensesGetResource
+       :<|> EntitlementsListResource
+       :<|> EntitlementsPatchResource
+       :<|> EntitlementsGetResource
+       :<|> EntitlementsDeleteResource
+       :<|> EntitlementsUpdateResource
+       :<|> PermissionsGetResource
+       :<|> ProductsGenerateApprovalURLResource
+       :<|> ProductsGetResource
+       :<|> ProductsGetAppRestrictionsSchemaResource
+       :<|> ProductsApproveResource
+       :<|> ProductsGetPermissionsResource
+       :<|> ProductsUpdatePermissionsResource
+       :<|> DevicesListResource
+       :<|> DevicesSetStateResource
+       :<|> DevicesGetResource
+       :<|> DevicesGetStateResource
+       :<|> GrouplicenseUsersListResource
diff --git a/gen/Network/Google/AndroidEnterprise/Types.hs b/gen/Network/Google/AndroidEnterprise/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AndroidEnterprise/Types.hs
@@ -0,0 +1,261 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.AndroidEnterprise.Types
+-- Copyright   : (c) 2015 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.AndroidEnterprise.Types
+    (
+    -- * Service Configuration
+      androidEnterpriseService
+
+    -- * OAuth Scopes
+    , androidenterpriseScope
+
+    -- * GroupLicense
+    , GroupLicense
+    , groupLicense
+    , glKind
+    , glNumProvisioned
+    , glNumPurchased
+    , glApproval
+    , glProductId
+    , glAcquisitionKind
+
+    -- * EnterpriseAccount
+    , EnterpriseAccount
+    , enterpriseAccount
+    , eaKind
+    , eaAccountEmail
+
+    -- * CollectionsListResponse
+    , CollectionsListResponse
+    , collectionsListResponse
+    , clrKind
+    , clrCollection
+
+    -- * AppRestrictionsSchemaRestrictionRestrictionValue
+    , AppRestrictionsSchemaRestrictionRestrictionValue
+    , appRestrictionsSchemaRestrictionRestrictionValue
+    , arsrrvValueMultiselect
+    , arsrrvValueBool
+    , arsrrvValueInteger
+    , arsrrvType
+    , arsrrvValueString
+
+    -- * DeviceState
+    , DeviceState
+    , deviceState
+    , dsKind
+    , dsAccountState
+
+    -- * GroupLicenseUsersListResponse
+    , GroupLicenseUsersListResponse
+    , groupLicenseUsersListResponse
+    , glulrKind
+    , glulrUser
+
+    -- * ApprovalURLInfo
+    , ApprovalURLInfo
+    , approvalURLInfo
+    , auiApprovalURL
+    , auiKind
+
+    -- * ProductPermission
+    , ProductPermission
+    , productPermission
+    , ppState
+    , ppPermissionId
+
+    -- * Device
+    , Device
+    , device
+    , dKind
+    , dManagementType
+    , dAndroidId
+
+    -- * InstallsListResponse
+    , InstallsListResponse
+    , installsListResponse
+    , ilrKind
+    , ilrInstall
+
+    -- * AppRestrictionsSchemaRestriction
+    , AppRestrictionsSchemaRestriction
+    , appRestrictionsSchemaRestriction
+    , arsrRestrictionType
+    , arsrEntry
+    , arsrKey
+    , arsrEntryValue
+    , arsrDefaultValue
+    , arsrTitle
+    , arsrDescription
+
+    -- * UsersListResponse
+    , UsersListResponse
+    , usersListResponse
+    , ulrKind
+    , ulrUser
+
+    -- * AppVersion
+    , AppVersion
+    , appVersion
+    , avVersionCode
+    , avVersionString
+
+    -- * GroupLicensesListResponse
+    , GroupLicensesListResponse
+    , groupLicensesListResponse
+    , gllrGroupLicense
+    , gllrKind
+
+    -- * Collection
+    , Collection
+    , collection
+    , colKind
+    , colCollectionId
+    , colVisibility
+    , colName
+    , colProductId
+
+    -- * ProductSet
+    , ProductSet
+    , productSet
+    , psKind
+    , psProductId
+
+    -- * Install
+    , Install
+    , install
+    , iVersionCode
+    , iKind
+    , iInstallState
+    , iProductId
+
+    -- * User
+    , User
+    , user
+    , uKind
+    , uId
+    , uPrimaryEmail
+
+    -- * ProductsGenerateApprovalURLResponse
+    , ProductsGenerateApprovalURLResponse
+    , productsGenerateApprovalURLResponse
+    , pgaurURL
+
+    -- * EnterprisesSendTestPushNotificationResponse
+    , EnterprisesSendTestPushNotificationResponse
+    , enterprisesSendTestPushNotificationResponse
+    , estpnrTopicName
+    , estpnrMessageId
+
+    -- * EnterprisesListResponse
+    , EnterprisesListResponse
+    , enterprisesListResponse
+    , elrKind
+    , elrEnterprise
+
+    -- * AppRestrictionsSchema
+    , AppRestrictionsSchema
+    , appRestrictionsSchema
+    , arsKind
+    , arsRestrictions
+
+    -- * UserToken
+    , UserToken
+    , userToken
+    , utKind
+    , utToken
+    , utUserId
+
+    -- * DevicesListResponse
+    , DevicesListResponse
+    , devicesListResponse
+    , dlrKind
+    , dlrDevice
+
+    -- * Enterprise
+    , Enterprise
+    , enterprise
+    , eKind
+    , ePrimaryDomain
+    , eName
+    , eId
+
+    -- * Product
+    , Product
+    , product
+    , pAuthorName
+    , pKind
+    , pWorkDetailsURL
+    , pRequiresContainerApp
+    , pAppVersion
+    , pDistributionChannel
+    , pIconURL
+    , pTitle
+    , pProductId
+    , pDetailsURL
+
+    -- * EntitlementsListResponse
+    , EntitlementsListResponse
+    , entitlementsListResponse
+    , entKind
+    , entEntitlement
+
+    -- * ProductPermissions
+    , ProductPermissions
+    , productPermissions
+    , ppKind
+    , ppPermission
+    , ppProductId
+
+    -- * Permission
+    , Permission
+    , permission
+    , perKind
+    , perName
+    , perDescription
+    , perPermissionId
+
+    -- * ProductsApproveRequest
+    , ProductsApproveRequest
+    , productsApproveRequest
+    , parApprovalURLInfo
+
+    -- * CollectionViewersListResponse
+    , CollectionViewersListResponse
+    , collectionViewersListResponse
+    , cvlrKind
+    , cvlrUser
+
+    -- * Entitlement
+    , Entitlement
+    , entitlement
+    , eeKind
+    , eeReason
+    , eeProductId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types.Product
+import           Network.Google.AndroidEnterprise.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1' of the Google Play EMM API. This contains the host and root path used as a starting point for constructing service requests.
+androidEnterpriseService :: Service
+androidEnterpriseService
+  = defaultService (ServiceId "androidenterprise:v1")
+      "www.googleapis.com"
+
+-- | Manage corporate Android devices
+androidenterpriseScope :: OAuthScope
+androidenterpriseScope = "https://www.googleapis.com/auth/androidenterprise";
diff --git a/gen/Network/Google/AndroidEnterprise/Types/Product.hs b/gen/Network/Google/AndroidEnterprise/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AndroidEnterprise/Types/Product.hs
@@ -0,0 +1,2184 @@
+{-# 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.AndroidEnterprise.Types.Product
+-- Copyright   : (c) 2015 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.AndroidEnterprise.Types.Product where
+
+import           Network.Google.AndroidEnterprise.Types.Sum
+import           Network.Google.Prelude
+
+-- | A group license object indicates a product that an enterprise admin has
+-- approved for use in the enterprise. The product may be free or paid. For
+-- free products, a group license object is created in these cases: if the
+-- enterprise admin approves a product in Google Play, if the product is
+-- added to a collection, or if an entitlement for the product is created
+-- for a user via the API. For paid products, a group license object is
+-- only created as part of the first bulk purchase of that product in
+-- Google Play by the enterprise admin. The API can be used to query group
+-- licenses; the available information includes the total number of
+-- licenses purchased (for paid products) and the total number of licenses
+-- that have been provisioned, that is, the total number of user
+-- entitlements in existence for the product. Group license objects are
+-- never deleted. If, for example, a free app is added to a collection and
+-- then removed, the group license will remain, allowing the enterprise
+-- admin to keep track of any remaining entitlements. An enterprise admin
+-- may indicate they are no longer interested in the group license by
+-- marking it as unapproved in Google Play.
+--
+-- /See:/ 'groupLicense' smart constructor.
+data GroupLicense = GroupLicense
+    { _glKind            :: !Text
+    , _glNumProvisioned  :: !(Maybe (Textual Int32))
+    , _glNumPurchased    :: !(Maybe (Textual Int32))
+    , _glApproval        :: !(Maybe Text)
+    , _glProductId       :: !(Maybe Text)
+    , _glAcquisitionKind :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GroupLicense' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'glKind'
+--
+-- * 'glNumProvisioned'
+--
+-- * 'glNumPurchased'
+--
+-- * 'glApproval'
+--
+-- * 'glProductId'
+--
+-- * 'glAcquisitionKind'
+groupLicense
+    :: GroupLicense
+groupLicense =
+    GroupLicense
+    { _glKind = "androidenterprise#groupLicense"
+    , _glNumProvisioned = Nothing
+    , _glNumPurchased = Nothing
+    , _glApproval = Nothing
+    , _glProductId = Nothing
+    , _glAcquisitionKind = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#groupLicense\".
+glKind :: Lens' GroupLicense Text
+glKind = lens _glKind (\ s a -> s{_glKind = a})
+
+-- | The total number of provisioned licenses for this product. Returned by
+-- read operations, but ignored in write operations.
+glNumProvisioned :: Lens' GroupLicense (Maybe Int32)
+glNumProvisioned
+  = lens _glNumProvisioned
+      (\ s a -> s{_glNumProvisioned = a})
+      . mapping _Coerce
+
+-- | The number of purchased licenses (possibly in multiple purchases). If
+-- this field is omitted then there is no limit on the number of licenses
+-- that can be provisioned (e.g. if the acquisition kind is \"free\").
+glNumPurchased :: Lens' GroupLicense (Maybe Int32)
+glNumPurchased
+  = lens _glNumPurchased
+      (\ s a -> s{_glNumPurchased = a})
+      . mapping _Coerce
+
+-- | Whether the product to which this group license relates is currently
+-- approved by the enterprise, as either \"approved\" or \"unapproved\".
+-- Products are approved when a group license is first created, but this
+-- approval may be revoked by an enterprise admin via Google Play.
+-- Unapproved products will not be visible to end users in collections and
+-- new entitlements to them should not normally be created.
+glApproval :: Lens' GroupLicense (Maybe Text)
+glApproval
+  = lens _glApproval (\ s a -> s{_glApproval = a})
+
+-- | The ID of the product that the license is for, e.g.
+-- \"app:com.google.android.gm\".
+glProductId :: Lens' GroupLicense (Maybe Text)
+glProductId
+  = lens _glProductId (\ s a -> s{_glProductId = a})
+
+-- | How this group license was acquired. \"bulkPurchase\" means that this
+-- group license object was created because the enterprise purchased
+-- licenses for this product; this is \"free\" otherwise (for free
+-- products).
+glAcquisitionKind :: Lens' GroupLicense (Maybe Text)
+glAcquisitionKind
+  = lens _glAcquisitionKind
+      (\ s a -> s{_glAcquisitionKind = a})
+
+instance FromJSON GroupLicense where
+        parseJSON
+          = withObject "GroupLicense"
+              (\ o ->
+                 GroupLicense <$>
+                   (o .:? "kind" .!= "androidenterprise#groupLicense")
+                     <*> (o .:? "numProvisioned")
+                     <*> (o .:? "numPurchased")
+                     <*> (o .:? "approval")
+                     <*> (o .:? "productId")
+                     <*> (o .:? "acquisitionKind"))
+
+instance ToJSON GroupLicense where
+        toJSON GroupLicense{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _glKind),
+                  ("numProvisioned" .=) <$> _glNumProvisioned,
+                  ("numPurchased" .=) <$> _glNumPurchased,
+                  ("approval" .=) <$> _glApproval,
+                  ("productId" .=) <$> _glProductId,
+                  ("acquisitionKind" .=) <$> _glAcquisitionKind])
+
+-- | A service account that can be used to authenticate as the enterprise to
+-- API calls that require such authentication.
+--
+-- /See:/ 'enterpriseAccount' smart constructor.
+data EnterpriseAccount = EnterpriseAccount
+    { _eaKind         :: !Text
+    , _eaAccountEmail :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterpriseAccount' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eaKind'
+--
+-- * 'eaAccountEmail'
+enterpriseAccount
+    :: EnterpriseAccount
+enterpriseAccount =
+    EnterpriseAccount
+    { _eaKind = "androidenterprise#enterpriseAccount"
+    , _eaAccountEmail = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#enterpriseAccount\".
+eaKind :: Lens' EnterpriseAccount Text
+eaKind = lens _eaKind (\ s a -> s{_eaKind = a})
+
+-- | The email address of the service account.
+eaAccountEmail :: Lens' EnterpriseAccount (Maybe Text)
+eaAccountEmail
+  = lens _eaAccountEmail
+      (\ s a -> s{_eaAccountEmail = a})
+
+instance FromJSON EnterpriseAccount where
+        parseJSON
+          = withObject "EnterpriseAccount"
+              (\ o ->
+                 EnterpriseAccount <$>
+                   (o .:? "kind" .!=
+                      "androidenterprise#enterpriseAccount")
+                     <*> (o .:? "accountEmail"))
+
+instance ToJSON EnterpriseAccount where
+        toJSON EnterpriseAccount{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _eaKind),
+                  ("accountEmail" .=) <$> _eaAccountEmail])
+
+-- | The collection resources for the enterprise.
+--
+-- /See:/ 'collectionsListResponse' smart constructor.
+data CollectionsListResponse = CollectionsListResponse
+    { _clrKind       :: !Text
+    , _clrCollection :: !(Maybe [Collection])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CollectionsListResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clrKind'
+--
+-- * 'clrCollection'
+collectionsListResponse
+    :: CollectionsListResponse
+collectionsListResponse =
+    CollectionsListResponse
+    { _clrKind = "androidenterprise#collectionsListResponse"
+    , _clrCollection = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#collectionsListResponse\".
+clrKind :: Lens' CollectionsListResponse Text
+clrKind = lens _clrKind (\ s a -> s{_clrKind = a})
+
+-- | An ordered collection of products which can be made visible on the
+-- Google Play Store to a selected group of users.
+clrCollection :: Lens' CollectionsListResponse [Collection]
+clrCollection
+  = lens _clrCollection
+      (\ s a -> s{_clrCollection = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON CollectionsListResponse where
+        parseJSON
+          = withObject "CollectionsListResponse"
+              (\ o ->
+                 CollectionsListResponse <$>
+                   (o .:? "kind" .!=
+                      "androidenterprise#collectionsListResponse")
+                     <*> (o .:? "collection" .!= mempty))
+
+instance ToJSON CollectionsListResponse where
+        toJSON CollectionsListResponse{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _clrKind),
+                  ("collection" .=) <$> _clrCollection])
+
+-- | A typed value for the restriction.
+--
+-- /See:/ 'appRestrictionsSchemaRestrictionRestrictionValue' smart constructor.
+data AppRestrictionsSchemaRestrictionRestrictionValue = AppRestrictionsSchemaRestrictionRestrictionValue
+    { _arsrrvValueMultiselect :: !(Maybe [Text])
+    , _arsrrvValueBool        :: !(Maybe Bool)
+    , _arsrrvValueInteger     :: !(Maybe (Textual Int32))
+    , _arsrrvType             :: !(Maybe Text)
+    , _arsrrvValueString      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppRestrictionsSchemaRestrictionRestrictionValue' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'arsrrvValueMultiselect'
+--
+-- * 'arsrrvValueBool'
+--
+-- * 'arsrrvValueInteger'
+--
+-- * 'arsrrvType'
+--
+-- * 'arsrrvValueString'
+appRestrictionsSchemaRestrictionRestrictionValue
+    :: AppRestrictionsSchemaRestrictionRestrictionValue
+appRestrictionsSchemaRestrictionRestrictionValue =
+    AppRestrictionsSchemaRestrictionRestrictionValue
+    { _arsrrvValueMultiselect = Nothing
+    , _arsrrvValueBool = Nothing
+    , _arsrrvValueInteger = Nothing
+    , _arsrrvType = Nothing
+    , _arsrrvValueString = Nothing
+    }
+
+-- | The list of string values - this will only be present if type is
+-- multiselect.
+arsrrvValueMultiselect :: Lens' AppRestrictionsSchemaRestrictionRestrictionValue [Text]
+arsrrvValueMultiselect
+  = lens _arsrrvValueMultiselect
+      (\ s a -> s{_arsrrvValueMultiselect = a})
+      . _Default
+      . _Coerce
+
+-- | The boolean value - this will only be present if type is bool.
+arsrrvValueBool :: Lens' AppRestrictionsSchemaRestrictionRestrictionValue (Maybe Bool)
+arsrrvValueBool
+  = lens _arsrrvValueBool
+      (\ s a -> s{_arsrrvValueBool = a})
+
+-- | The integer value - this will only be present if type is integer.
+arsrrvValueInteger :: Lens' AppRestrictionsSchemaRestrictionRestrictionValue (Maybe Int32)
+arsrrvValueInteger
+  = lens _arsrrvValueInteger
+      (\ s a -> s{_arsrrvValueInteger = a})
+      . mapping _Coerce
+
+-- | The type of the value being provided.
+arsrrvType :: Lens' AppRestrictionsSchemaRestrictionRestrictionValue (Maybe Text)
+arsrrvType
+  = lens _arsrrvType (\ s a -> s{_arsrrvType = a})
+
+-- | The string value - this will be present for types string, choice and
+-- hidden.
+arsrrvValueString :: Lens' AppRestrictionsSchemaRestrictionRestrictionValue (Maybe Text)
+arsrrvValueString
+  = lens _arsrrvValueString
+      (\ s a -> s{_arsrrvValueString = a})
+
+instance FromJSON
+         AppRestrictionsSchemaRestrictionRestrictionValue
+         where
+        parseJSON
+          = withObject
+              "AppRestrictionsSchemaRestrictionRestrictionValue"
+              (\ o ->
+                 AppRestrictionsSchemaRestrictionRestrictionValue <$>
+                   (o .:? "valueMultiselect" .!= mempty) <*>
+                     (o .:? "valueBool")
+                     <*> (o .:? "valueInteger")
+                     <*> (o .:? "type")
+                     <*> (o .:? "valueString"))
+
+instance ToJSON
+         AppRestrictionsSchemaRestrictionRestrictionValue
+         where
+        toJSON
+          AppRestrictionsSchemaRestrictionRestrictionValue{..}
+          = object
+              (catMaybes
+                 [("valueMultiselect" .=) <$> _arsrrvValueMultiselect,
+                  ("valueBool" .=) <$> _arsrrvValueBool,
+                  ("valueInteger" .=) <$> _arsrrvValueInteger,
+                  ("type" .=) <$> _arsrrvType,
+                  ("valueString" .=) <$> _arsrrvValueString])
+
+-- | The state of a user\'s device, as accessed by the getState and setState
+-- methods on device resources.
+--
+-- /See:/ 'deviceState' smart constructor.
+data DeviceState = DeviceState
+    { _dsKind         :: !Text
+    , _dsAccountState :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeviceState' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsKind'
+--
+-- * 'dsAccountState'
+deviceState
+    :: DeviceState
+deviceState =
+    DeviceState
+    { _dsKind = "androidenterprise#deviceState"
+    , _dsAccountState = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#deviceState\".
+dsKind :: Lens' DeviceState Text
+dsKind = lens _dsKind (\ s a -> s{_dsKind = a})
+
+-- | The state of the Google account on the device. \"enabled\" indicates
+-- that the Google account on the device can be used to access Google
+-- services (including Google Play), while \"disabled\" means that it
+-- cannot. A new device is initially in the \"disabled\" state.
+dsAccountState :: Lens' DeviceState (Maybe Text)
+dsAccountState
+  = lens _dsAccountState
+      (\ s a -> s{_dsAccountState = a})
+
+instance FromJSON DeviceState where
+        parseJSON
+          = withObject "DeviceState"
+              (\ o ->
+                 DeviceState <$>
+                   (o .:? "kind" .!= "androidenterprise#deviceState")
+                     <*> (o .:? "accountState"))
+
+instance ToJSON DeviceState where
+        toJSON DeviceState{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _dsKind),
+                  ("accountState" .=) <$> _dsAccountState])
+
+-- | The user resources for the group license.
+--
+-- /See:/ 'groupLicenseUsersListResponse' smart constructor.
+data GroupLicenseUsersListResponse = GroupLicenseUsersListResponse
+    { _glulrKind :: !Text
+    , _glulrUser :: !(Maybe [User])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GroupLicenseUsersListResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'glulrKind'
+--
+-- * 'glulrUser'
+groupLicenseUsersListResponse
+    :: GroupLicenseUsersListResponse
+groupLicenseUsersListResponse =
+    GroupLicenseUsersListResponse
+    { _glulrKind = "androidenterprise#groupLicenseUsersListResponse"
+    , _glulrUser = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#groupLicenseUsersListResponse\".
+glulrKind :: Lens' GroupLicenseUsersListResponse Text
+glulrKind
+  = lens _glulrKind (\ s a -> s{_glulrKind = a})
+
+-- | A user of an enterprise.
+glulrUser :: Lens' GroupLicenseUsersListResponse [User]
+glulrUser
+  = lens _glulrUser (\ s a -> s{_glulrUser = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON GroupLicenseUsersListResponse where
+        parseJSON
+          = withObject "GroupLicenseUsersListResponse"
+              (\ o ->
+                 GroupLicenseUsersListResponse <$>
+                   (o .:? "kind" .!=
+                      "androidenterprise#groupLicenseUsersListResponse")
+                     <*> (o .:? "user" .!= mempty))
+
+instance ToJSON GroupLicenseUsersListResponse where
+        toJSON GroupLicenseUsersListResponse{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _glulrKind),
+                  ("user" .=) <$> _glulrUser])
+
+-- | Information on an approval URL.
+--
+-- /See:/ 'approvalURLInfo' smart constructor.
+data ApprovalURLInfo = ApprovalURLInfo
+    { _auiApprovalURL :: !(Maybe Text)
+    , _auiKind        :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ApprovalURLInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'auiApprovalURL'
+--
+-- * 'auiKind'
+approvalURLInfo
+    :: ApprovalURLInfo
+approvalURLInfo =
+    ApprovalURLInfo
+    { _auiApprovalURL = Nothing
+    , _auiKind = "androidenterprise#approvalUrlInfo"
+    }
+
+-- | A URL that displays a product\'s permissions and that can also be used
+-- to approve the product with the Products.approve call.
+auiApprovalURL :: Lens' ApprovalURLInfo (Maybe Text)
+auiApprovalURL
+  = lens _auiApprovalURL
+      (\ s a -> s{_auiApprovalURL = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#approvalUrlInfo\".
+auiKind :: Lens' ApprovalURLInfo Text
+auiKind = lens _auiKind (\ s a -> s{_auiKind = a})
+
+instance FromJSON ApprovalURLInfo where
+        parseJSON
+          = withObject "ApprovalURLInfo"
+              (\ o ->
+                 ApprovalURLInfo <$>
+                   (o .:? "approvalUrl") <*>
+                     (o .:? "kind" .!=
+                        "androidenterprise#approvalUrlInfo"))
+
+instance ToJSON ApprovalURLInfo where
+        toJSON ApprovalURLInfo{..}
+          = object
+              (catMaybes
+                 [("approvalUrl" .=) <$> _auiApprovalURL,
+                  Just ("kind" .= _auiKind)])
+
+-- | A product permissions resource represents the set of permissions
+-- required by a specific app and whether or not they have been accepted by
+-- an enterprise admin. The API can be used to read the set of permissions,
+-- and also to update the set to indicate that permissions have been
+-- accepted.
+--
+-- /See:/ 'productPermission' smart constructor.
+data ProductPermission = ProductPermission
+    { _ppState        :: !(Maybe Text)
+    , _ppPermissionId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProductPermission' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ppState'
+--
+-- * 'ppPermissionId'
+productPermission
+    :: ProductPermission
+productPermission =
+    ProductPermission
+    { _ppState = Nothing
+    , _ppPermissionId = Nothing
+    }
+
+-- | Whether the permission has been accepted or not.
+ppState :: Lens' ProductPermission (Maybe Text)
+ppState = lens _ppState (\ s a -> s{_ppState = a})
+
+-- | An opaque string uniquely identifying the permission.
+ppPermissionId :: Lens' ProductPermission (Maybe Text)
+ppPermissionId
+  = lens _ppPermissionId
+      (\ s a -> s{_ppPermissionId = a})
+
+instance FromJSON ProductPermission where
+        parseJSON
+          = withObject "ProductPermission"
+              (\ o ->
+                 ProductPermission <$>
+                   (o .:? "state") <*> (o .:? "permissionId"))
+
+instance ToJSON ProductPermission where
+        toJSON ProductPermission{..}
+          = object
+              (catMaybes
+                 [("state" .=) <$> _ppState,
+                  ("permissionId" .=) <$> _ppPermissionId])
+
+-- | A device resource represents a mobile device managed by the MDM and
+-- belonging to a specific enterprise user. This collection cannot be
+-- modified via the API; it is automatically populated as devices are set
+-- up to be managed.
+--
+-- /See:/ 'device' smart constructor.
+data Device = Device
+    { _dKind           :: !Text
+    , _dManagementType :: !(Maybe Text)
+    , _dAndroidId      :: !(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:
+--
+-- * 'dKind'
+--
+-- * 'dManagementType'
+--
+-- * 'dAndroidId'
+device
+    :: Device
+device =
+    Device
+    { _dKind = "androidenterprise#device"
+    , _dManagementType = Nothing
+    , _dAndroidId = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#device\".
+dKind :: Lens' Device Text
+dKind = lens _dKind (\ s a -> s{_dKind = a})
+
+-- | The mechanism by which this device is managed by the MDM.
+-- \"managedDevice\" means that the MDM\'s app is a device owner.
+-- \"managedProfile\" means that the MDM\'s app is the profile owner (and
+-- there is a separate personal profile which is not managed).
+-- \"containerApp\" means that the MDM\'s app is managing the Android for
+-- Work container app on the device.
+dManagementType :: Lens' Device (Maybe Text)
+dManagementType
+  = lens _dManagementType
+      (\ s a -> s{_dManagementType = a})
+
+-- | The Google Play Services Android ID for the device encoded as a
+-- lowercase hex string, e.g. \"123456789abcdef0\".
+dAndroidId :: Lens' Device (Maybe Text)
+dAndroidId
+  = lens _dAndroidId (\ s a -> s{_dAndroidId = a})
+
+instance FromJSON Device where
+        parseJSON
+          = withObject "Device"
+              (\ o ->
+                 Device <$>
+                   (o .:? "kind" .!= "androidenterprise#device") <*>
+                     (o .:? "managementType")
+                     <*> (o .:? "androidId"))
+
+instance ToJSON Device where
+        toJSON Device{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _dKind),
+                  ("managementType" .=) <$> _dManagementType,
+                  ("androidId" .=) <$> _dAndroidId])
+
+-- | The install resources for the device.
+--
+-- /See:/ 'installsListResponse' smart constructor.
+data InstallsListResponse = InstallsListResponse
+    { _ilrKind    :: !Text
+    , _ilrInstall :: !(Maybe [Install])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstallsListResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ilrKind'
+--
+-- * 'ilrInstall'
+installsListResponse
+    :: InstallsListResponse
+installsListResponse =
+    InstallsListResponse
+    { _ilrKind = "androidenterprise#installsListResponse"
+    , _ilrInstall = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#installsListResponse\".
+ilrKind :: Lens' InstallsListResponse Text
+ilrKind = lens _ilrKind (\ s a -> s{_ilrKind = a})
+
+-- | An installation of an app for a user on a specific device. The existence
+-- of an install implies that the user must have an entitlement to the app.
+ilrInstall :: Lens' InstallsListResponse [Install]
+ilrInstall
+  = lens _ilrInstall (\ s a -> s{_ilrInstall = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON InstallsListResponse where
+        parseJSON
+          = withObject "InstallsListResponse"
+              (\ o ->
+                 InstallsListResponse <$>
+                   (o .:? "kind" .!=
+                      "androidenterprise#installsListResponse")
+                     <*> (o .:? "install" .!= mempty))
+
+instance ToJSON InstallsListResponse where
+        toJSON InstallsListResponse{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _ilrKind),
+                  ("install" .=) <$> _ilrInstall])
+
+-- | A restriction in the App Restriction Schema represents a piece of
+-- configuration that may be pre-applied.
+--
+-- /See:/ 'appRestrictionsSchemaRestriction' smart constructor.
+data AppRestrictionsSchemaRestriction = AppRestrictionsSchemaRestriction
+    { _arsrRestrictionType :: !(Maybe Text)
+    , _arsrEntry           :: !(Maybe [Text])
+    , _arsrKey             :: !(Maybe Text)
+    , _arsrEntryValue      :: !(Maybe [Text])
+    , _arsrDefaultValue    :: !(Maybe AppRestrictionsSchemaRestrictionRestrictionValue)
+    , _arsrTitle           :: !(Maybe Text)
+    , _arsrDescription     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppRestrictionsSchemaRestriction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'arsrRestrictionType'
+--
+-- * 'arsrEntry'
+--
+-- * 'arsrKey'
+--
+-- * 'arsrEntryValue'
+--
+-- * 'arsrDefaultValue'
+--
+-- * 'arsrTitle'
+--
+-- * 'arsrDescription'
+appRestrictionsSchemaRestriction
+    :: AppRestrictionsSchemaRestriction
+appRestrictionsSchemaRestriction =
+    AppRestrictionsSchemaRestriction
+    { _arsrRestrictionType = Nothing
+    , _arsrEntry = Nothing
+    , _arsrKey = Nothing
+    , _arsrEntryValue = Nothing
+    , _arsrDefaultValue = Nothing
+    , _arsrTitle = Nothing
+    , _arsrDescription = Nothing
+    }
+
+-- | The type of the restriction.
+arsrRestrictionType :: Lens' AppRestrictionsSchemaRestriction (Maybe Text)
+arsrRestrictionType
+  = lens _arsrRestrictionType
+      (\ s a -> s{_arsrRestrictionType = a})
+
+-- | For choice or multiselect restrictions, the list of possible entries\'
+-- human-readable names.
+arsrEntry :: Lens' AppRestrictionsSchemaRestriction [Text]
+arsrEntry
+  = lens _arsrEntry (\ s a -> s{_arsrEntry = a}) .
+      _Default
+      . _Coerce
+
+-- | The unique key that the product uses to identify the restriction, e.g.
+-- \"com.google.android.gm.fieldname\".
+arsrKey :: Lens' AppRestrictionsSchemaRestriction (Maybe Text)
+arsrKey = lens _arsrKey (\ s a -> s{_arsrKey = a})
+
+-- | For choice or multiselect restrictions, the list of possible entries\'
+-- machine-readable values.
+arsrEntryValue :: Lens' AppRestrictionsSchemaRestriction [Text]
+arsrEntryValue
+  = lens _arsrEntryValue
+      (\ s a -> s{_arsrEntryValue = a})
+      . _Default
+      . _Coerce
+
+-- | The default value of the restriction.
+arsrDefaultValue :: Lens' AppRestrictionsSchemaRestriction (Maybe AppRestrictionsSchemaRestrictionRestrictionValue)
+arsrDefaultValue
+  = lens _arsrDefaultValue
+      (\ s a -> s{_arsrDefaultValue = a})
+
+-- | The name of the restriction.
+arsrTitle :: Lens' AppRestrictionsSchemaRestriction (Maybe Text)
+arsrTitle
+  = lens _arsrTitle (\ s a -> s{_arsrTitle = a})
+
+-- | A longer description of the restriction, giving more detail of what it
+-- affects.
+arsrDescription :: Lens' AppRestrictionsSchemaRestriction (Maybe Text)
+arsrDescription
+  = lens _arsrDescription
+      (\ s a -> s{_arsrDescription = a})
+
+instance FromJSON AppRestrictionsSchemaRestriction
+         where
+        parseJSON
+          = withObject "AppRestrictionsSchemaRestriction"
+              (\ o ->
+                 AppRestrictionsSchemaRestriction <$>
+                   (o .:? "restrictionType") <*>
+                     (o .:? "entry" .!= mempty)
+                     <*> (o .:? "key")
+                     <*> (o .:? "entryValue" .!= mempty)
+                     <*> (o .:? "defaultValue")
+                     <*> (o .:? "title")
+                     <*> (o .:? "description"))
+
+instance ToJSON AppRestrictionsSchemaRestriction
+         where
+        toJSON AppRestrictionsSchemaRestriction{..}
+          = object
+              (catMaybes
+                 [("restrictionType" .=) <$> _arsrRestrictionType,
+                  ("entry" .=) <$> _arsrEntry, ("key" .=) <$> _arsrKey,
+                  ("entryValue" .=) <$> _arsrEntryValue,
+                  ("defaultValue" .=) <$> _arsrDefaultValue,
+                  ("title" .=) <$> _arsrTitle,
+                  ("description" .=) <$> _arsrDescription])
+
+-- | The matching user resources.
+--
+-- /See:/ 'usersListResponse' smart constructor.
+data UsersListResponse = UsersListResponse
+    { _ulrKind :: !Text
+    , _ulrUser :: !(Maybe [User])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersListResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ulrKind'
+--
+-- * 'ulrUser'
+usersListResponse
+    :: UsersListResponse
+usersListResponse =
+    UsersListResponse
+    { _ulrKind = "androidenterprise#usersListResponse"
+    , _ulrUser = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#usersListResponse\".
+ulrKind :: Lens' UsersListResponse Text
+ulrKind = lens _ulrKind (\ s a -> s{_ulrKind = a})
+
+-- | A user of an enterprise.
+ulrUser :: Lens' UsersListResponse [User]
+ulrUser
+  = lens _ulrUser (\ s a -> s{_ulrUser = a}) . _Default
+      . _Coerce
+
+instance FromJSON UsersListResponse where
+        parseJSON
+          = withObject "UsersListResponse"
+              (\ o ->
+                 UsersListResponse <$>
+                   (o .:? "kind" .!=
+                      "androidenterprise#usersListResponse")
+                     <*> (o .:? "user" .!= mempty))
+
+instance ToJSON UsersListResponse where
+        toJSON UsersListResponse{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _ulrKind),
+                  ("user" .=) <$> _ulrUser])
+
+-- | This represents a single version of the app.
+--
+-- /See:/ 'appVersion' smart constructor.
+data AppVersion = AppVersion
+    { _avVersionCode   :: !(Maybe (Textual Int32))
+    , _avVersionString :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppVersion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'avVersionCode'
+--
+-- * 'avVersionString'
+appVersion
+    :: AppVersion
+appVersion =
+    AppVersion
+    { _avVersionCode = Nothing
+    , _avVersionString = Nothing
+    }
+
+-- | Unique increasing identifier for the app version.
+avVersionCode :: Lens' AppVersion (Maybe Int32)
+avVersionCode
+  = lens _avVersionCode
+      (\ s a -> s{_avVersionCode = a})
+      . mapping _Coerce
+
+-- | The string used in the Play Store by the app developer to identify the
+-- version. The string is not necessarily unique or localized (for example,
+-- the string could be \"1.4\").
+avVersionString :: Lens' AppVersion (Maybe Text)
+avVersionString
+  = lens _avVersionString
+      (\ s a -> s{_avVersionString = a})
+
+instance FromJSON AppVersion where
+        parseJSON
+          = withObject "AppVersion"
+              (\ o ->
+                 AppVersion <$>
+                   (o .:? "versionCode") <*> (o .:? "versionString"))
+
+instance ToJSON AppVersion where
+        toJSON AppVersion{..}
+          = object
+              (catMaybes
+                 [("versionCode" .=) <$> _avVersionCode,
+                  ("versionString" .=) <$> _avVersionString])
+
+-- | The grouplicense resources for the enterprise.
+--
+-- /See:/ 'groupLicensesListResponse' smart constructor.
+data GroupLicensesListResponse = GroupLicensesListResponse
+    { _gllrGroupLicense :: !(Maybe [GroupLicense])
+    , _gllrKind         :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GroupLicensesListResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gllrGroupLicense'
+--
+-- * 'gllrKind'
+groupLicensesListResponse
+    :: GroupLicensesListResponse
+groupLicensesListResponse =
+    GroupLicensesListResponse
+    { _gllrGroupLicense = Nothing
+    , _gllrKind = "androidenterprise#groupLicensesListResponse"
+    }
+
+-- | A group license for a product approved for use in the enterprise.
+gllrGroupLicense :: Lens' GroupLicensesListResponse [GroupLicense]
+gllrGroupLicense
+  = lens _gllrGroupLicense
+      (\ s a -> s{_gllrGroupLicense = a})
+      . _Default
+      . _Coerce
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#groupLicensesListResponse\".
+gllrKind :: Lens' GroupLicensesListResponse Text
+gllrKind = lens _gllrKind (\ s a -> s{_gllrKind = a})
+
+instance FromJSON GroupLicensesListResponse where
+        parseJSON
+          = withObject "GroupLicensesListResponse"
+              (\ o ->
+                 GroupLicensesListResponse <$>
+                   (o .:? "groupLicense" .!= mempty) <*>
+                     (o .:? "kind" .!=
+                        "androidenterprise#groupLicensesListResponse"))
+
+instance ToJSON GroupLicensesListResponse where
+        toJSON GroupLicensesListResponse{..}
+          = object
+              (catMaybes
+                 [("groupLicense" .=) <$> _gllrGroupLicense,
+                  Just ("kind" .= _gllrKind)])
+
+-- | A collection resource defines a named set of apps that is visible to a
+-- set of users in the Google Play Store app running on those users\'
+-- managed devices. Those users can then install any of those apps if they
+-- wish (which will trigger creation of install and entitlement resources).
+-- A user cannot install an app on a managed device unless the app is
+-- listed in at least one collection that is visible to that user. Note
+-- that the API can be used to directly install an app regardless of
+-- whether it is in any collection - so an enterprise has a choice of
+-- either directly pushing apps to users, or allowing users to install apps
+-- if they want. Which is appropriate will depend on the enterprise\'s
+-- policies and the purpose of the apps concerned.
+--
+-- /See:/ 'collection' smart constructor.
+data Collection = Collection
+    { _colKind         :: !Text
+    , _colCollectionId :: !(Maybe Text)
+    , _colVisibility   :: !(Maybe Text)
+    , _colName         :: !(Maybe Text)
+    , _colProductId    :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Collection' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'colKind'
+--
+-- * 'colCollectionId'
+--
+-- * 'colVisibility'
+--
+-- * 'colName'
+--
+-- * 'colProductId'
+collection
+    :: Collection
+collection =
+    Collection
+    { _colKind = "androidenterprise#collection"
+    , _colCollectionId = Nothing
+    , _colVisibility = Nothing
+    , _colName = Nothing
+    , _colProductId = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#collection\".
+colKind :: Lens' Collection Text
+colKind = lens _colKind (\ s a -> s{_colKind = a})
+
+-- | Arbitrary unique ID, allocated by the API on creation.
+colCollectionId :: Lens' Collection (Maybe Text)
+colCollectionId
+  = lens _colCollectionId
+      (\ s a -> s{_colCollectionId = a})
+
+-- | Whether this collection is visible to all users, or only to the users
+-- that have been granted access through the \"Collectionviewers\" API.
+-- With the launch of the \"setAvailableProductSet\" API, this property
+-- should always be set to \"viewersOnly\", as the \"allUsers\" option will
+-- bypass the \"availableProductSet\" for all users within a domain. The
+-- \"allUsers\" setting is deprecated, and will be removed.
+colVisibility :: Lens' Collection (Maybe Text)
+colVisibility
+  = lens _colVisibility
+      (\ s a -> s{_colVisibility = a})
+
+-- | A user-friendly name for the collection (should be unique), e.g.
+-- \"Accounting apps\".
+colName :: Lens' Collection (Maybe Text)
+colName = lens _colName (\ s a -> s{_colName = a})
+
+-- | The IDs of the products in the collection, in the order in which they
+-- should be displayed.
+colProductId :: Lens' Collection [Text]
+colProductId
+  = lens _colProductId (\ s a -> s{_colProductId = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON Collection where
+        parseJSON
+          = withObject "Collection"
+              (\ o ->
+                 Collection <$>
+                   (o .:? "kind" .!= "androidenterprise#collection") <*>
+                     (o .:? "collectionId")
+                     <*> (o .:? "visibility")
+                     <*> (o .:? "name")
+                     <*> (o .:? "productId" .!= mempty))
+
+instance ToJSON Collection where
+        toJSON Collection{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _colKind),
+                  ("collectionId" .=) <$> _colCollectionId,
+                  ("visibility" .=) <$> _colVisibility,
+                  ("name" .=) <$> _colName,
+                  ("productId" .=) <$> _colProductId])
+
+-- | A set of products.
+--
+-- /See:/ 'productSet' smart constructor.
+data ProductSet = ProductSet
+    { _psKind      :: !Text
+    , _psProductId :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProductSet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'psKind'
+--
+-- * 'psProductId'
+productSet
+    :: ProductSet
+productSet =
+    ProductSet
+    { _psKind = "androidenterprise#productSet"
+    , _psProductId = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#productSet\".
+psKind :: Lens' ProductSet Text
+psKind = lens _psKind (\ s a -> s{_psKind = a})
+
+-- | The list of product IDs making up the set of products.
+psProductId :: Lens' ProductSet [Text]
+psProductId
+  = lens _psProductId (\ s a -> s{_psProductId = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ProductSet where
+        parseJSON
+          = withObject "ProductSet"
+              (\ o ->
+                 ProductSet <$>
+                   (o .:? "kind" .!= "androidenterprise#productSet") <*>
+                     (o .:? "productId" .!= mempty))
+
+instance ToJSON ProductSet where
+        toJSON ProductSet{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _psKind),
+                  ("productId" .=) <$> _psProductId])
+
+-- | The existence of an install resource indicates that an app is installed
+-- on a particular device (or that an install is pending). The API can be
+-- used to create an install resource using the update method. This
+-- triggers the actual install of the app on the device. If the user does
+-- not already have an entitlement for the app then an attempt is made to
+-- create one. If this fails (e.g. because the app is not free and there is
+-- no available license) then the creation of the install fails. The API
+-- can also be used to update an installed app. If the update method is
+-- used on an existing install then the app will be updated to the latest
+-- available version. Note that it is not possible to force the
+-- installation of a specific version of an app; the version code is
+-- read-only. If a user installs an app themselves (as permitted by the
+-- enterprise), then again an install resource and possibly an entitlement
+-- resource are automatically created. The API can also be used to delete
+-- an install resource, which triggers the removal of the app from the
+-- device. Note that deleting an install does not automatically remove the
+-- corresponding entitlement, even if there are no remaining installs. The
+-- install resource will also be deleted if the user uninstalls the app
+-- themselves.
+--
+-- /See:/ 'install' smart constructor.
+data Install = Install
+    { _iVersionCode  :: !(Maybe (Textual Int32))
+    , _iKind         :: !Text
+    , _iInstallState :: !(Maybe Text)
+    , _iProductId    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Install' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iVersionCode'
+--
+-- * 'iKind'
+--
+-- * 'iInstallState'
+--
+-- * 'iProductId'
+install
+    :: Install
+install =
+    Install
+    { _iVersionCode = Nothing
+    , _iKind = "androidenterprise#install"
+    , _iInstallState = Nothing
+    , _iProductId = Nothing
+    }
+
+-- | The version of the installed product. Guaranteed to be set only if the
+-- install state is \"installed\".
+iVersionCode :: Lens' Install (Maybe Int32)
+iVersionCode
+  = lens _iVersionCode (\ s a -> s{_iVersionCode = a})
+      . mapping _Coerce
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#install\".
+iKind :: Lens' Install Text
+iKind = lens _iKind (\ s a -> s{_iKind = a})
+
+-- | Install state. The state \"installPending\" means that an install
+-- request has recently been made and download to the device is in
+-- progress. The state \"installed\" means that the app has been installed.
+-- This field is read-only.
+iInstallState :: Lens' Install (Maybe Text)
+iInstallState
+  = lens _iInstallState
+      (\ s a -> s{_iInstallState = a})
+
+-- | The ID of the product that the install is for, e.g.
+-- \"app:com.google.android.gm\".
+iProductId :: Lens' Install (Maybe Text)
+iProductId
+  = lens _iProductId (\ s a -> s{_iProductId = a})
+
+instance FromJSON Install where
+        parseJSON
+          = withObject "Install"
+              (\ o ->
+                 Install <$>
+                   (o .:? "versionCode") <*>
+                     (o .:? "kind" .!= "androidenterprise#install")
+                     <*> (o .:? "installState")
+                     <*> (o .:? "productId"))
+
+instance ToJSON Install where
+        toJSON Install{..}
+          = object
+              (catMaybes
+                 [("versionCode" .=) <$> _iVersionCode,
+                  Just ("kind" .= _iKind),
+                  ("installState" .=) <$> _iInstallState,
+                  ("productId" .=) <$> _iProductId])
+
+-- | A user resource represents an individual user within the enterprise\'s
+-- domain. Note that each user is associated with a Google account based on
+-- the user\'s corporate email address (which must be in one of the
+-- enterprise\'s domains). As part of installing an MDM app to manage a
+-- device the Google account must be provisioned to the device, and so the
+-- user resource must be created before that. This can be done using the
+-- Google Admin SDK Directory API. The ID for a user is an opaque string.
+-- It can be retrieved using the list method queried by the user\'s primary
+-- email address.
+--
+-- /See:/ 'user' smart constructor.
+data User = User
+    { _uKind         :: !Text
+    , _uId           :: !(Maybe Text)
+    , _uPrimaryEmail :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'User' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uKind'
+--
+-- * 'uId'
+--
+-- * 'uPrimaryEmail'
+user
+    :: User
+user =
+    User
+    { _uKind = "androidenterprise#user"
+    , _uId = Nothing
+    , _uPrimaryEmail = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#user\".
+uKind :: Lens' User Text
+uKind = lens _uKind (\ s a -> s{_uKind = a})
+
+-- | The unique ID for the user.
+uId :: Lens' User (Maybe Text)
+uId = lens _uId (\ s a -> s{_uId = a})
+
+-- | The user\'s primary email, e.g. \"jsmith\'example.com\".
+uPrimaryEmail :: Lens' User (Maybe Text)
+uPrimaryEmail
+  = lens _uPrimaryEmail
+      (\ s a -> s{_uPrimaryEmail = a})
+
+instance FromJSON User where
+        parseJSON
+          = withObject "User"
+              (\ o ->
+                 User <$>
+                   (o .:? "kind" .!= "androidenterprise#user") <*>
+                     (o .:? "id")
+                     <*> (o .:? "primaryEmail"))
+
+instance ToJSON User where
+        toJSON User{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _uKind), ("id" .=) <$> _uId,
+                  ("primaryEmail" .=) <$> _uPrimaryEmail])
+
+--
+-- /See:/ 'productsGenerateApprovalURLResponse' smart constructor.
+newtype ProductsGenerateApprovalURLResponse = ProductsGenerateApprovalURLResponse
+    { _pgaurURL :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProductsGenerateApprovalURLResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pgaurURL'
+productsGenerateApprovalURLResponse
+    :: ProductsGenerateApprovalURLResponse
+productsGenerateApprovalURLResponse =
+    ProductsGenerateApprovalURLResponse
+    { _pgaurURL = Nothing
+    }
+
+-- | A URL that can be rendered in an iframe to display the permissions (if
+-- any) of a product. This URL can be used to approve the product only once
+-- and only within 24 hours of being generated, using the Products.approve
+-- call. If the product is currently unapproved and has no permissions,
+-- this URL will point to an empty page. If the product is currently
+-- approved, a URL will only be generated if that product has added
+-- permissions since it was last approved, and the URL will only display
+-- those new permissions that have not yet been accepted.
+pgaurURL :: Lens' ProductsGenerateApprovalURLResponse (Maybe Text)
+pgaurURL = lens _pgaurURL (\ s a -> s{_pgaurURL = a})
+
+instance FromJSON ProductsGenerateApprovalURLResponse
+         where
+        parseJSON
+          = withObject "ProductsGenerateApprovalURLResponse"
+              (\ o ->
+                 ProductsGenerateApprovalURLResponse <$>
+                   (o .:? "url"))
+
+instance ToJSON ProductsGenerateApprovalURLResponse
+         where
+        toJSON ProductsGenerateApprovalURLResponse{..}
+          = object (catMaybes [("url" .=) <$> _pgaurURL])
+
+--
+-- /See:/ 'enterprisesSendTestPushNotificationResponse' smart constructor.
+data EnterprisesSendTestPushNotificationResponse = EnterprisesSendTestPushNotificationResponse
+    { _estpnrTopicName :: !(Maybe Text)
+    , _estpnrMessageId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesSendTestPushNotificationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'estpnrTopicName'
+--
+-- * 'estpnrMessageId'
+enterprisesSendTestPushNotificationResponse
+    :: EnterprisesSendTestPushNotificationResponse
+enterprisesSendTestPushNotificationResponse =
+    EnterprisesSendTestPushNotificationResponse
+    { _estpnrTopicName = Nothing
+    , _estpnrMessageId = Nothing
+    }
+
+-- | The name of the Cloud Pub\/Sub topic to which notifications for this
+-- enterprise\'s enrolled account will be sent.
+estpnrTopicName :: Lens' EnterprisesSendTestPushNotificationResponse (Maybe Text)
+estpnrTopicName
+  = lens _estpnrTopicName
+      (\ s a -> s{_estpnrTopicName = a})
+
+-- | The message ID of the test push notification that was sent.
+estpnrMessageId :: Lens' EnterprisesSendTestPushNotificationResponse (Maybe Text)
+estpnrMessageId
+  = lens _estpnrMessageId
+      (\ s a -> s{_estpnrMessageId = a})
+
+instance FromJSON
+         EnterprisesSendTestPushNotificationResponse where
+        parseJSON
+          = withObject
+              "EnterprisesSendTestPushNotificationResponse"
+              (\ o ->
+                 EnterprisesSendTestPushNotificationResponse <$>
+                   (o .:? "topicName") <*> (o .:? "messageId"))
+
+instance ToJSON
+         EnterprisesSendTestPushNotificationResponse where
+        toJSON
+          EnterprisesSendTestPushNotificationResponse{..}
+          = object
+              (catMaybes
+                 [("topicName" .=) <$> _estpnrTopicName,
+                  ("messageId" .=) <$> _estpnrMessageId])
+
+-- | The matching enterprise resources.
+--
+-- /See:/ 'enterprisesListResponse' smart constructor.
+data EnterprisesListResponse = EnterprisesListResponse
+    { _elrKind       :: !Text
+    , _elrEnterprise :: !(Maybe [Enterprise])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesListResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'elrKind'
+--
+-- * 'elrEnterprise'
+enterprisesListResponse
+    :: EnterprisesListResponse
+enterprisesListResponse =
+    EnterprisesListResponse
+    { _elrKind = "androidenterprise#enterprisesListResponse"
+    , _elrEnterprise = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#enterprisesListResponse\".
+elrKind :: Lens' EnterprisesListResponse Text
+elrKind = lens _elrKind (\ s a -> s{_elrKind = a})
+
+-- | An enterprise.
+elrEnterprise :: Lens' EnterprisesListResponse [Enterprise]
+elrEnterprise
+  = lens _elrEnterprise
+      (\ s a -> s{_elrEnterprise = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON EnterprisesListResponse where
+        parseJSON
+          = withObject "EnterprisesListResponse"
+              (\ o ->
+                 EnterprisesListResponse <$>
+                   (o .:? "kind" .!=
+                      "androidenterprise#enterprisesListResponse")
+                     <*> (o .:? "enterprise" .!= mempty))
+
+instance ToJSON EnterprisesListResponse where
+        toJSON EnterprisesListResponse{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _elrKind),
+                  ("enterprise" .=) <$> _elrEnterprise])
+
+-- | Represents the list of app restrictions available to be pre-configured
+-- for the product.
+--
+-- /See:/ 'appRestrictionsSchema' smart constructor.
+data AppRestrictionsSchema = AppRestrictionsSchema
+    { _arsKind         :: !Text
+    , _arsRestrictions :: !(Maybe [AppRestrictionsSchemaRestriction])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppRestrictionsSchema' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'arsKind'
+--
+-- * 'arsRestrictions'
+appRestrictionsSchema
+    :: AppRestrictionsSchema
+appRestrictionsSchema =
+    AppRestrictionsSchema
+    { _arsKind = "androidenterprise#appRestrictionsSchema"
+    , _arsRestrictions = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#appRestrictionsSchema\".
+arsKind :: Lens' AppRestrictionsSchema Text
+arsKind = lens _arsKind (\ s a -> s{_arsKind = a})
+
+-- | The set of restrictions that make up this schema.
+arsRestrictions :: Lens' AppRestrictionsSchema [AppRestrictionsSchemaRestriction]
+arsRestrictions
+  = lens _arsRestrictions
+      (\ s a -> s{_arsRestrictions = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON AppRestrictionsSchema where
+        parseJSON
+          = withObject "AppRestrictionsSchema"
+              (\ o ->
+                 AppRestrictionsSchema <$>
+                   (o .:? "kind" .!=
+                      "androidenterprise#appRestrictionsSchema")
+                     <*> (o .:? "restrictions" .!= mempty))
+
+instance ToJSON AppRestrictionsSchema where
+        toJSON AppRestrictionsSchema{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _arsKind),
+                  ("restrictions" .=) <$> _arsRestrictions])
+
+-- | A UserToken is used by a user when setting up a managed device or
+-- profile with their work account on a device. When the user enters their
+-- email address and token (activation code) the appropriate MDM app can be
+-- automatically downloaded.
+--
+-- /See:/ 'userToken' smart constructor.
+data UserToken = UserToken
+    { _utKind   :: !Text
+    , _utToken  :: !(Maybe Text)
+    , _utUserId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserToken' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'utKind'
+--
+-- * 'utToken'
+--
+-- * 'utUserId'
+userToken
+    :: UserToken
+userToken =
+    UserToken
+    { _utKind = "androidenterprise#userToken"
+    , _utToken = Nothing
+    , _utUserId = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#userToken\".
+utKind :: Lens' UserToken Text
+utKind = lens _utKind (\ s a -> s{_utKind = a})
+
+-- | The token (activation code) to be entered by the user. This consists of
+-- a sequence of decimal digits. Note that the leading digit may be 0.
+utToken :: Lens' UserToken (Maybe Text)
+utToken = lens _utToken (\ s a -> s{_utToken = a})
+
+-- | The unique ID for the user.
+utUserId :: Lens' UserToken (Maybe Text)
+utUserId = lens _utUserId (\ s a -> s{_utUserId = a})
+
+instance FromJSON UserToken where
+        parseJSON
+          = withObject "UserToken"
+              (\ o ->
+                 UserToken <$>
+                   (o .:? "kind" .!= "androidenterprise#userToken") <*>
+                     (o .:? "token")
+                     <*> (o .:? "userId"))
+
+instance ToJSON UserToken where
+        toJSON UserToken{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _utKind), ("token" .=) <$> _utToken,
+                  ("userId" .=) <$> _utUserId])
+
+-- | The device resources for the user.
+--
+-- /See:/ 'devicesListResponse' smart constructor.
+data DevicesListResponse = DevicesListResponse
+    { _dlrKind   :: !Text
+    , _dlrDevice :: !(Maybe [Device])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DevicesListResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dlrKind'
+--
+-- * 'dlrDevice'
+devicesListResponse
+    :: DevicesListResponse
+devicesListResponse =
+    DevicesListResponse
+    { _dlrKind = "androidenterprise#devicesListResponse"
+    , _dlrDevice = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#devicesListResponse\".
+dlrKind :: Lens' DevicesListResponse Text
+dlrKind = lens _dlrKind (\ s a -> s{_dlrKind = a})
+
+-- | A managed device.
+dlrDevice :: Lens' DevicesListResponse [Device]
+dlrDevice
+  = lens _dlrDevice (\ s a -> s{_dlrDevice = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON DevicesListResponse where
+        parseJSON
+          = withObject "DevicesListResponse"
+              (\ o ->
+                 DevicesListResponse <$>
+                   (o .:? "kind" .!=
+                      "androidenterprise#devicesListResponse")
+                     <*> (o .:? "device" .!= mempty))
+
+instance ToJSON DevicesListResponse where
+        toJSON DevicesListResponse{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _dlrKind),
+                  ("device" .=) <$> _dlrDevice])
+
+-- | An enterprise resource represents a binding between an organisation and
+-- their MDM. To create an enterprise, an admin of the enterprise must
+-- first go through a Play for Work sign-up flow. At the end of this the
+-- admin will be presented with a token (a short opaque alphanumeric
+-- string). They must then present this to the MDM, who then supplies it to
+-- the enroll method. Until this is done the MDM will not have any access
+-- to the enterprise. After calling enroll the MDM should call setAccount
+-- to specify the service account that will be allowed to act on behalf of
+-- the enterprise, which will be required for access to the enterprise\'s
+-- data through this API. Only one call of setAccount is allowed for a
+-- given enterprise; the only way to change the account later is to
+-- unenroll the enterprise and enroll it again (obtaining a new token). The
+-- MDM can unenroll an enterprise in order to sever the binding between
+-- them. Re-enrolling an enterprise is possible, but requires a new token
+-- to be retrieved. Enterprises.unenroll requires the MDM\'s credentials
+-- (as enroll does), not the enterprise\'s. Enterprises.unenroll can only
+-- be used for enterprises that were previously enrolled with the enroll
+-- call. Any enterprises that were enrolled using the (deprecated)
+-- Enterprises.insert call must be unenrolled with Enterprises.delete and
+-- can then be re-enrolled using the Enterprises.enroll call. The ID for an
+-- enterprise is an opaque string. It is returned by insert and enroll and
+-- can also be retrieved if the enterprise\'s primary domain is known using
+-- the list method.
+--
+-- /See:/ 'enterprise' smart constructor.
+data Enterprise = Enterprise
+    { _eKind          :: !Text
+    , _ePrimaryDomain :: !(Maybe Text)
+    , _eName          :: !(Maybe Text)
+    , _eId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Enterprise' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eKind'
+--
+-- * 'ePrimaryDomain'
+--
+-- * 'eName'
+--
+-- * 'eId'
+enterprise
+    :: Enterprise
+enterprise =
+    Enterprise
+    { _eKind = "androidenterprise#enterprise"
+    , _ePrimaryDomain = Nothing
+    , _eName = Nothing
+    , _eId = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#enterprise\".
+eKind :: Lens' Enterprise Text
+eKind = lens _eKind (\ s a -> s{_eKind = a})
+
+-- | The enterprise\'s primary domain, e.g. \"example.com\".
+ePrimaryDomain :: Lens' Enterprise (Maybe Text)
+ePrimaryDomain
+  = lens _ePrimaryDomain
+      (\ s a -> s{_ePrimaryDomain = a})
+
+-- | The name of the enterprise, e.g. \"Example Inc\".
+eName :: Lens' Enterprise (Maybe Text)
+eName = lens _eName (\ s a -> s{_eName = a})
+
+-- | The unique ID for the enterprise.
+eId :: Lens' Enterprise (Maybe Text)
+eId = lens _eId (\ s a -> s{_eId = a})
+
+instance FromJSON Enterprise where
+        parseJSON
+          = withObject "Enterprise"
+              (\ o ->
+                 Enterprise <$>
+                   (o .:? "kind" .!= "androidenterprise#enterprise") <*>
+                     (o .:? "primaryDomain")
+                     <*> (o .:? "name")
+                     <*> (o .:? "id"))
+
+instance ToJSON Enterprise where
+        toJSON Enterprise{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _eKind),
+                  ("primaryDomain" .=) <$> _ePrimaryDomain,
+                  ("name" .=) <$> _eName, ("id" .=) <$> _eId])
+
+-- | A product represents an app in the Google Play Store that is available
+-- to at least some users in the enterprise. (Some apps are restricted to a
+-- single enterprise, and no information about them is made available
+-- outside that enterprise.) The information provided for each product
+-- (localized name, icon, link to the full Google Play details page) is
+-- intended to allow a basic representation of the product within an MDM
+-- user interface.
+--
+-- /See:/ 'product' smart constructor.
+data Product = Product
+    { _pAuthorName           :: !(Maybe Text)
+    , _pKind                 :: !Text
+    , _pWorkDetailsURL       :: !(Maybe Text)
+    , _pRequiresContainerApp :: !(Maybe Bool)
+    , _pAppVersion           :: !(Maybe [AppVersion])
+    , _pDistributionChannel  :: !(Maybe Text)
+    , _pIconURL              :: !(Maybe Text)
+    , _pTitle                :: !(Maybe Text)
+    , _pProductId            :: !(Maybe Text)
+    , _pDetailsURL           :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Product' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pAuthorName'
+--
+-- * 'pKind'
+--
+-- * 'pWorkDetailsURL'
+--
+-- * 'pRequiresContainerApp'
+--
+-- * 'pAppVersion'
+--
+-- * 'pDistributionChannel'
+--
+-- * 'pIconURL'
+--
+-- * 'pTitle'
+--
+-- * 'pProductId'
+--
+-- * 'pDetailsURL'
+product
+    :: Product
+product =
+    Product
+    { _pAuthorName = Nothing
+    , _pKind = "androidenterprise#product"
+    , _pWorkDetailsURL = Nothing
+    , _pRequiresContainerApp = Nothing
+    , _pAppVersion = Nothing
+    , _pDistributionChannel = Nothing
+    , _pIconURL = Nothing
+    , _pTitle = Nothing
+    , _pProductId = Nothing
+    , _pDetailsURL = Nothing
+    }
+
+-- | The name of the author of the product (e.g. the app developer).
+pAuthorName :: Lens' Product (Maybe Text)
+pAuthorName
+  = lens _pAuthorName (\ s a -> s{_pAuthorName = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#product\".
+pKind :: Lens' Product Text
+pKind = lens _pKind (\ s a -> s{_pKind = a})
+
+-- | A link to the Google Play for Work details page for the product, for use
+-- by an Enterprise administrator.
+pWorkDetailsURL :: Lens' Product (Maybe Text)
+pWorkDetailsURL
+  = lens _pWorkDetailsURL
+      (\ s a -> s{_pWorkDetailsURL = a})
+
+-- | Whether this app can only be installed on devices using the Android for
+-- Work container app.
+pRequiresContainerApp :: Lens' Product (Maybe Bool)
+pRequiresContainerApp
+  = lens _pRequiresContainerApp
+      (\ s a -> s{_pRequiresContainerApp = a})
+
+-- | App versions currently available for this product. The returned list
+-- contains only public versions. Alpha and beta versions are not included.
+pAppVersion :: Lens' Product [AppVersion]
+pAppVersion
+  = lens _pAppVersion (\ s a -> s{_pAppVersion = a}) .
+      _Default
+      . _Coerce
+
+-- | How and to whom the package is made available. The value
+-- publicGoogleHosted means that the package is available through the Play
+-- Store and not restricted to a specific enterprise. The value
+-- privateGoogleHosted means that the package is a private app (restricted
+-- to an enterprise) but hosted by Google. The value privateSelfHosted
+-- means that the package is a private app (restricted to an enterprise)
+-- and is privately hosted.
+pDistributionChannel :: Lens' Product (Maybe Text)
+pDistributionChannel
+  = lens _pDistributionChannel
+      (\ s a -> s{_pDistributionChannel = a})
+
+-- | A link to an image that can be used as an icon for the product.
+pIconURL :: Lens' Product (Maybe Text)
+pIconURL = lens _pIconURL (\ s a -> s{_pIconURL = a})
+
+-- | The name of the product.
+pTitle :: Lens' Product (Maybe Text)
+pTitle = lens _pTitle (\ s a -> s{_pTitle = a})
+
+-- | A string of the form app:. For example, app:com.google.android.gm
+-- represents the Gmail app.
+pProductId :: Lens' Product (Maybe Text)
+pProductId
+  = lens _pProductId (\ s a -> s{_pProductId = a})
+
+-- | A link to the (consumer) Google Play details page for the product.
+pDetailsURL :: Lens' Product (Maybe Text)
+pDetailsURL
+  = lens _pDetailsURL (\ s a -> s{_pDetailsURL = a})
+
+instance FromJSON Product where
+        parseJSON
+          = withObject "Product"
+              (\ o ->
+                 Product <$>
+                   (o .:? "authorName") <*>
+                     (o .:? "kind" .!= "androidenterprise#product")
+                     <*> (o .:? "workDetailsUrl")
+                     <*> (o .:? "requiresContainerApp")
+                     <*> (o .:? "appVersion" .!= mempty)
+                     <*> (o .:? "distributionChannel")
+                     <*> (o .:? "iconUrl")
+                     <*> (o .:? "title")
+                     <*> (o .:? "productId")
+                     <*> (o .:? "detailsUrl"))
+
+instance ToJSON Product where
+        toJSON Product{..}
+          = object
+              (catMaybes
+                 [("authorName" .=) <$> _pAuthorName,
+                  Just ("kind" .= _pKind),
+                  ("workDetailsUrl" .=) <$> _pWorkDetailsURL,
+                  ("requiresContainerApp" .=) <$>
+                    _pRequiresContainerApp,
+                  ("appVersion" .=) <$> _pAppVersion,
+                  ("distributionChannel" .=) <$> _pDistributionChannel,
+                  ("iconUrl" .=) <$> _pIconURL,
+                  ("title" .=) <$> _pTitle,
+                  ("productId" .=) <$> _pProductId,
+                  ("detailsUrl" .=) <$> _pDetailsURL])
+
+-- | The entitlement resources for the user.
+--
+-- /See:/ 'entitlementsListResponse' smart constructor.
+data EntitlementsListResponse = EntitlementsListResponse
+    { _entKind        :: !Text
+    , _entEntitlement :: !(Maybe [Entitlement])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EntitlementsListResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'entKind'
+--
+-- * 'entEntitlement'
+entitlementsListResponse
+    :: EntitlementsListResponse
+entitlementsListResponse =
+    EntitlementsListResponse
+    { _entKind = "androidenterprise#entitlementsListResponse"
+    , _entEntitlement = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#entitlementsListResponse\".
+entKind :: Lens' EntitlementsListResponse Text
+entKind = lens _entKind (\ s a -> s{_entKind = a})
+
+-- | An entitlement of a user to a product (e.g. an app). For example, a free
+-- app that they have installed, or a paid app that they have been
+-- allocated a license to.
+entEntitlement :: Lens' EntitlementsListResponse [Entitlement]
+entEntitlement
+  = lens _entEntitlement
+      (\ s a -> s{_entEntitlement = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON EntitlementsListResponse where
+        parseJSON
+          = withObject "EntitlementsListResponse"
+              (\ o ->
+                 EntitlementsListResponse <$>
+                   (o .:? "kind" .!=
+                      "androidenterprise#entitlementsListResponse")
+                     <*> (o .:? "entitlement" .!= mempty))
+
+instance ToJSON EntitlementsListResponse where
+        toJSON EntitlementsListResponse{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _entKind),
+                  ("entitlement" .=) <$> _entEntitlement])
+
+-- | Information about the permissions required by a specific app and whether
+-- they have been accepted by the enterprise.
+--
+-- /See:/ 'productPermissions' smart constructor.
+data ProductPermissions = ProductPermissions
+    { _ppKind       :: !Text
+    , _ppPermission :: !(Maybe [ProductPermission])
+    , _ppProductId  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProductPermissions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ppKind'
+--
+-- * 'ppPermission'
+--
+-- * 'ppProductId'
+productPermissions
+    :: ProductPermissions
+productPermissions =
+    ProductPermissions
+    { _ppKind = "androidenterprise#productPermissions"
+    , _ppPermission = Nothing
+    , _ppProductId = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#productPermissions\".
+ppKind :: Lens' ProductPermissions Text
+ppKind = lens _ppKind (\ s a -> s{_ppKind = a})
+
+-- | The permissions required by the app.
+ppPermission :: Lens' ProductPermissions [ProductPermission]
+ppPermission
+  = lens _ppPermission (\ s a -> s{_ppPermission = a})
+      . _Default
+      . _Coerce
+
+-- | The ID of the app that the permissions relate to, e.g.
+-- \"app:com.google.android.gm\".
+ppProductId :: Lens' ProductPermissions (Maybe Text)
+ppProductId
+  = lens _ppProductId (\ s a -> s{_ppProductId = a})
+
+instance FromJSON ProductPermissions where
+        parseJSON
+          = withObject "ProductPermissions"
+              (\ o ->
+                 ProductPermissions <$>
+                   (o .:? "kind" .!=
+                      "androidenterprise#productPermissions")
+                     <*> (o .:? "permission" .!= mempty)
+                     <*> (o .:? "productId"))
+
+instance ToJSON ProductPermissions where
+        toJSON ProductPermissions{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _ppKind),
+                  ("permission" .=) <$> _ppPermission,
+                  ("productId" .=) <$> _ppProductId])
+
+-- | A permission represents some extra capability, to be granted to an
+-- Android app, which requires explicit consent. An enterprise admin must
+-- consent to these permissions on behalf of their users before an
+-- entitlement for the app can be created. The permissions collection is
+-- read-only. The information provided for each permission (localized name
+-- and description) is intended to be used in the MDM user interface when
+-- obtaining consent from the enterprise.
+--
+-- /See:/ 'permission' smart constructor.
+data Permission = Permission
+    { _perKind         :: !Text
+    , _perName         :: !(Maybe Text)
+    , _perDescription  :: !(Maybe Text)
+    , _perPermissionId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Permission' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'perKind'
+--
+-- * 'perName'
+--
+-- * 'perDescription'
+--
+-- * 'perPermissionId'
+permission
+    :: Permission
+permission =
+    Permission
+    { _perKind = "androidenterprise#permission"
+    , _perName = Nothing
+    , _perDescription = Nothing
+    , _perPermissionId = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#permission\".
+perKind :: Lens' Permission Text
+perKind = lens _perKind (\ s a -> s{_perKind = a})
+
+-- | The name of the permission.
+perName :: Lens' Permission (Maybe Text)
+perName = lens _perName (\ s a -> s{_perName = a})
+
+-- | A longer description of the permissions giving more details of what it
+-- affects.
+perDescription :: Lens' Permission (Maybe Text)
+perDescription
+  = lens _perDescription
+      (\ s a -> s{_perDescription = a})
+
+-- | An opaque string uniquely identifying the permission.
+perPermissionId :: Lens' Permission (Maybe Text)
+perPermissionId
+  = lens _perPermissionId
+      (\ s a -> s{_perPermissionId = a})
+
+instance FromJSON Permission where
+        parseJSON
+          = withObject "Permission"
+              (\ o ->
+                 Permission <$>
+                   (o .:? "kind" .!= "androidenterprise#permission") <*>
+                     (o .:? "name")
+                     <*> (o .:? "description")
+                     <*> (o .:? "permissionId"))
+
+instance ToJSON Permission where
+        toJSON Permission{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _perKind), ("name" .=) <$> _perName,
+                  ("description" .=) <$> _perDescription,
+                  ("permissionId" .=) <$> _perPermissionId])
+
+--
+-- /See:/ 'productsApproveRequest' smart constructor.
+newtype ProductsApproveRequest = ProductsApproveRequest
+    { _parApprovalURLInfo :: Maybe ApprovalURLInfo
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProductsApproveRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'parApprovalURLInfo'
+productsApproveRequest
+    :: ProductsApproveRequest
+productsApproveRequest =
+    ProductsApproveRequest
+    { _parApprovalURLInfo = Nothing
+    }
+
+-- | The approval URL that was shown to the user. Only the permissions shown
+-- to the user with that URL will be accepted, which may not be the
+-- product\'s entire set of permissions. For example, the URL may only
+-- display new permissions from an update after the product was approved,
+-- or not include new permissions if the product was updated since the URL
+-- was generated.
+parApprovalURLInfo :: Lens' ProductsApproveRequest (Maybe ApprovalURLInfo)
+parApprovalURLInfo
+  = lens _parApprovalURLInfo
+      (\ s a -> s{_parApprovalURLInfo = a})
+
+instance FromJSON ProductsApproveRequest where
+        parseJSON
+          = withObject "ProductsApproveRequest"
+              (\ o ->
+                 ProductsApproveRequest <$> (o .:? "approvalUrlInfo"))
+
+instance ToJSON ProductsApproveRequest where
+        toJSON ProductsApproveRequest{..}
+          = object
+              (catMaybes
+                 [("approvalUrlInfo" .=) <$> _parApprovalURLInfo])
+
+-- | The user resources for the collection.
+--
+-- /See:/ 'collectionViewersListResponse' smart constructor.
+data CollectionViewersListResponse = CollectionViewersListResponse
+    { _cvlrKind :: !Text
+    , _cvlrUser :: !(Maybe [User])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CollectionViewersListResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cvlrKind'
+--
+-- * 'cvlrUser'
+collectionViewersListResponse
+    :: CollectionViewersListResponse
+collectionViewersListResponse =
+    CollectionViewersListResponse
+    { _cvlrKind = "androidenterprise#collectionViewersListResponse"
+    , _cvlrUser = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#collectionViewersListResponse\".
+cvlrKind :: Lens' CollectionViewersListResponse Text
+cvlrKind = lens _cvlrKind (\ s a -> s{_cvlrKind = a})
+
+-- | A user of an enterprise.
+cvlrUser :: Lens' CollectionViewersListResponse [User]
+cvlrUser
+  = lens _cvlrUser (\ s a -> s{_cvlrUser = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON CollectionViewersListResponse where
+        parseJSON
+          = withObject "CollectionViewersListResponse"
+              (\ o ->
+                 CollectionViewersListResponse <$>
+                   (o .:? "kind" .!=
+                      "androidenterprise#collectionViewersListResponse")
+                     <*> (o .:? "user" .!= mempty))
+
+instance ToJSON CollectionViewersListResponse where
+        toJSON CollectionViewersListResponse{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _cvlrKind),
+                  ("user" .=) <$> _cvlrUser])
+
+-- | The existence of an entitlement resource means that a user has the right
+-- to use a particular app on any of their devices. This might be because
+-- the app is free or because they have been allocated a license to the app
+-- from a group license purchased by the enterprise. It should always be
+-- true that a user has an app installed on one of their devices only if
+-- they have an entitlement to it. So if an entitlement is deleted, the app
+-- will be uninstalled from all devices. Similarly if the user installs an
+-- app (and is permitted to do so), or the MDM triggers an install of the
+-- app, an entitlement to that app is automatically created. If this is
+-- impossible - e.g. the enterprise has not purchased sufficient licenses -
+-- then installation fails. Note that entitlements are always user
+-- specific, not device specific; a user may have an entitlement even
+-- though they have not installed the app anywhere. Once they have an
+-- entitlement they can install the app on multiple devices. The API can be
+-- used to create an entitlement. If the app is a free app, a group license
+-- for that app is created. If it\'s a paid app, creating the entitlement
+-- consumes one license; it remains consumed until the entitlement is
+-- removed. Optionally an installation of the app on all the user\'s
+-- managed devices can be triggered at the time the entitlement is created.
+-- An entitlement cannot be created for an app if the app requires
+-- permissions that the enterprise has not yet accepted. Entitlements for
+-- paid apps that are due to purchases by the user on a non-managed profile
+-- will have \"userPurchase\" as entitlement reason; those entitlements
+-- cannot be removed via the API.
+--
+-- /See:/ 'entitlement' smart constructor.
+data Entitlement = Entitlement
+    { _eeKind      :: !Text
+    , _eeReason    :: !(Maybe Text)
+    , _eeProductId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Entitlement' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eeKind'
+--
+-- * 'eeReason'
+--
+-- * 'eeProductId'
+entitlement
+    :: Entitlement
+entitlement =
+    Entitlement
+    { _eeKind = "androidenterprise#entitlement"
+    , _eeReason = Nothing
+    , _eeProductId = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#entitlement\".
+eeKind :: Lens' Entitlement Text
+eeKind = lens _eeKind (\ s a -> s{_eeKind = a})
+
+-- | The reason for the entitlement, e.g. \"free\" for free apps. This is
+-- temporary, it will be replaced by the acquisition kind field of group
+-- licenses.
+eeReason :: Lens' Entitlement (Maybe Text)
+eeReason = lens _eeReason (\ s a -> s{_eeReason = a})
+
+-- | The ID of the product that the entitlement is for, e.g.
+-- \"app:com.google.android.gm\".
+eeProductId :: Lens' Entitlement (Maybe Text)
+eeProductId
+  = lens _eeProductId (\ s a -> s{_eeProductId = a})
+
+instance FromJSON Entitlement where
+        parseJSON
+          = withObject "Entitlement"
+              (\ o ->
+                 Entitlement <$>
+                   (o .:? "kind" .!= "androidenterprise#entitlement")
+                     <*> (o .:? "reason")
+                     <*> (o .:? "productId"))
+
+instance ToJSON Entitlement where
+        toJSON Entitlement{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _eeKind),
+                  ("reason" .=) <$> _eeReason,
+                  ("productId" .=) <$> _eeProductId])
diff --git a/gen/Network/Google/AndroidEnterprise/Types/Sum.hs b/gen/Network/Google/AndroidEnterprise/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AndroidEnterprise/Types/Sum.hs
@@ -0,0 +1,19 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.AndroidEnterprise.Types.Sum
+-- Copyright   : (c) 2015 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.AndroidEnterprise.Types.Sum where
+
+import           Network.Google.Prelude
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Collections/Delete.hs b/gen/Network/Google/Resource/AndroidEnterprise/Collections/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Collections/Delete.hs
@@ -0,0 +1,99 @@
+{-# 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.AndroidEnterprise.Collections.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a collection.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.collections.delete@.
+module Network.Google.Resource.AndroidEnterprise.Collections.Delete
+    (
+    -- * REST Resource
+      CollectionsDeleteResource
+
+    -- * Creating a Request
+    , collectionsDelete
+    , CollectionsDelete
+
+    -- * Request Lenses
+    , cddEnterpriseId
+    , cddCollectionId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.collections.delete@ method which the
+-- 'CollectionsDelete' request conforms to.
+type CollectionsDeleteResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "collections" :>
+               Capture "collectionId" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes a collection.
+--
+-- /See:/ 'collectionsDelete' smart constructor.
+data CollectionsDelete = CollectionsDelete
+    { _cddEnterpriseId :: !Text
+    , _cddCollectionId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CollectionsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cddEnterpriseId'
+--
+-- * 'cddCollectionId'
+collectionsDelete
+    :: Text -- ^ 'cddEnterpriseId'
+    -> Text -- ^ 'cddCollectionId'
+    -> CollectionsDelete
+collectionsDelete pCddEnterpriseId_ pCddCollectionId_ =
+    CollectionsDelete
+    { _cddEnterpriseId = pCddEnterpriseId_
+    , _cddCollectionId = pCddCollectionId_
+    }
+
+-- | The ID of the enterprise.
+cddEnterpriseId :: Lens' CollectionsDelete Text
+cddEnterpriseId
+  = lens _cddEnterpriseId
+      (\ s a -> s{_cddEnterpriseId = a})
+
+-- | The ID of the collection.
+cddCollectionId :: Lens' CollectionsDelete Text
+cddCollectionId
+  = lens _cddCollectionId
+      (\ s a -> s{_cddCollectionId = a})
+
+instance GoogleRequest CollectionsDelete where
+        type Rs CollectionsDelete = ()
+        requestClient CollectionsDelete{..}
+          = go _cddEnterpriseId _cddCollectionId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CollectionsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Collections/Get.hs b/gen/Network/Google/Resource/AndroidEnterprise/Collections/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Collections/Get.hs
@@ -0,0 +1,98 @@
+{-# 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.AndroidEnterprise.Collections.Get
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves the details of a collection.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.collections.get@.
+module Network.Google.Resource.AndroidEnterprise.Collections.Get
+    (
+    -- * REST Resource
+      CollectionsGetResource
+
+    -- * Creating a Request
+    , collectionsGet
+    , CollectionsGet
+
+    -- * Request Lenses
+    , cgEnterpriseId
+    , cgCollectionId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.collections.get@ method which the
+-- 'CollectionsGet' request conforms to.
+type CollectionsGetResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "collections" :>
+               Capture "collectionId" Text :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] Collection
+
+-- | Retrieves the details of a collection.
+--
+-- /See:/ 'collectionsGet' smart constructor.
+data CollectionsGet = CollectionsGet
+    { _cgEnterpriseId :: !Text
+    , _cgCollectionId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CollectionsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgEnterpriseId'
+--
+-- * 'cgCollectionId'
+collectionsGet
+    :: Text -- ^ 'cgEnterpriseId'
+    -> Text -- ^ 'cgCollectionId'
+    -> CollectionsGet
+collectionsGet pCgEnterpriseId_ pCgCollectionId_ =
+    CollectionsGet
+    { _cgEnterpriseId = pCgEnterpriseId_
+    , _cgCollectionId = pCgCollectionId_
+    }
+
+-- | The ID of the enterprise.
+cgEnterpriseId :: Lens' CollectionsGet Text
+cgEnterpriseId
+  = lens _cgEnterpriseId
+      (\ s a -> s{_cgEnterpriseId = a})
+
+-- | The ID of the collection.
+cgCollectionId :: Lens' CollectionsGet Text
+cgCollectionId
+  = lens _cgCollectionId
+      (\ s a -> s{_cgCollectionId = a})
+
+instance GoogleRequest CollectionsGet where
+        type Rs CollectionsGet = Collection
+        requestClient CollectionsGet{..}
+          = go _cgEnterpriseId _cgCollectionId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient (Proxy :: Proxy CollectionsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Collections/Insert.hs b/gen/Network/Google/Resource/AndroidEnterprise/Collections/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Collections/Insert.hs
@@ -0,0 +1,98 @@
+{-# 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.AndroidEnterprise.Collections.Insert
+-- Copyright   : (c) 2015 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 collection.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.collections.insert@.
+module Network.Google.Resource.AndroidEnterprise.Collections.Insert
+    (
+    -- * REST Resource
+      CollectionsInsertResource
+
+    -- * Creating a Request
+    , collectionsInsert
+    , CollectionsInsert
+
+    -- * Request Lenses
+    , ciEnterpriseId
+    , ciPayload
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.collections.insert@ method which the
+-- 'CollectionsInsert' request conforms to.
+type CollectionsInsertResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "collections" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] Collection :> Post '[JSON] Collection
+
+-- | Creates a new collection.
+--
+-- /See:/ 'collectionsInsert' smart constructor.
+data CollectionsInsert = CollectionsInsert
+    { _ciEnterpriseId :: !Text
+    , _ciPayload      :: !Collection
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CollectionsInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ciEnterpriseId'
+--
+-- * 'ciPayload'
+collectionsInsert
+    :: Text -- ^ 'ciEnterpriseId'
+    -> Collection -- ^ 'ciPayload'
+    -> CollectionsInsert
+collectionsInsert pCiEnterpriseId_ pCiPayload_ =
+    CollectionsInsert
+    { _ciEnterpriseId = pCiEnterpriseId_
+    , _ciPayload = pCiPayload_
+    }
+
+-- | The ID of the enterprise.
+ciEnterpriseId :: Lens' CollectionsInsert Text
+ciEnterpriseId
+  = lens _ciEnterpriseId
+      (\ s a -> s{_ciEnterpriseId = a})
+
+-- | Multipart request metadata.
+ciPayload :: Lens' CollectionsInsert Collection
+ciPayload
+  = lens _ciPayload (\ s a -> s{_ciPayload = a})
+
+instance GoogleRequest CollectionsInsert where
+        type Rs CollectionsInsert = Collection
+        requestClient CollectionsInsert{..}
+          = go _ciEnterpriseId (Just AltJSON) _ciPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CollectionsInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Collections/List.hs b/gen/Network/Google/Resource/AndroidEnterprise/Collections/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Collections/List.hs
@@ -0,0 +1,87 @@
+{-# 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.AndroidEnterprise.Collections.List
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves the IDs of all the collections for an enterprise.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.collections.list@.
+module Network.Google.Resource.AndroidEnterprise.Collections.List
+    (
+    -- * REST Resource
+      CollectionsListResource
+
+    -- * Creating a Request
+    , collectionsList
+    , CollectionsList
+
+    -- * Request Lenses
+    , clEnterpriseId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.collections.list@ method which the
+-- 'CollectionsList' request conforms to.
+type CollectionsListResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "collections" :>
+               QueryParam "alt" AltJSON :>
+                 Get '[JSON] CollectionsListResponse
+
+-- | Retrieves the IDs of all the collections for an enterprise.
+--
+-- /See:/ 'collectionsList' smart constructor.
+newtype CollectionsList = CollectionsList
+    { _clEnterpriseId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CollectionsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clEnterpriseId'
+collectionsList
+    :: Text -- ^ 'clEnterpriseId'
+    -> CollectionsList
+collectionsList pClEnterpriseId_ =
+    CollectionsList
+    { _clEnterpriseId = pClEnterpriseId_
+    }
+
+-- | The ID of the enterprise.
+clEnterpriseId :: Lens' CollectionsList Text
+clEnterpriseId
+  = lens _clEnterpriseId
+      (\ s a -> s{_clEnterpriseId = a})
+
+instance GoogleRequest CollectionsList where
+        type Rs CollectionsList = CollectionsListResponse
+        requestClient CollectionsList{..}
+          = go _clEnterpriseId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CollectionsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Collections/Patch.hs b/gen/Network/Google/Resource/AndroidEnterprise/Collections/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Collections/Patch.hs
@@ -0,0 +1,113 @@
+{-# 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.AndroidEnterprise.Collections.Patch
+-- Copyright   : (c) 2015 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 collection. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.collections.patch@.
+module Network.Google.Resource.AndroidEnterprise.Collections.Patch
+    (
+    -- * REST Resource
+      CollectionsPatchResource
+
+    -- * Creating a Request
+    , collectionsPatch
+    , CollectionsPatch
+
+    -- * Request Lenses
+    , cpEnterpriseId
+    , cpCollectionId
+    , cpPayload
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.collections.patch@ method which the
+-- 'CollectionsPatch' request conforms to.
+type CollectionsPatchResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "collections" :>
+               Capture "collectionId" Text :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Collection :>
+                     Patch '[JSON] Collection
+
+-- | Updates a collection. This method supports patch semantics.
+--
+-- /See:/ 'collectionsPatch' smart constructor.
+data CollectionsPatch = CollectionsPatch
+    { _cpEnterpriseId :: !Text
+    , _cpCollectionId :: !Text
+    , _cpPayload      :: !Collection
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CollectionsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpEnterpriseId'
+--
+-- * 'cpCollectionId'
+--
+-- * 'cpPayload'
+collectionsPatch
+    :: Text -- ^ 'cpEnterpriseId'
+    -> Text -- ^ 'cpCollectionId'
+    -> Collection -- ^ 'cpPayload'
+    -> CollectionsPatch
+collectionsPatch pCpEnterpriseId_ pCpCollectionId_ pCpPayload_ =
+    CollectionsPatch
+    { _cpEnterpriseId = pCpEnterpriseId_
+    , _cpCollectionId = pCpCollectionId_
+    , _cpPayload = pCpPayload_
+    }
+
+-- | The ID of the enterprise.
+cpEnterpriseId :: Lens' CollectionsPatch Text
+cpEnterpriseId
+  = lens _cpEnterpriseId
+      (\ s a -> s{_cpEnterpriseId = a})
+
+-- | The ID of the collection.
+cpCollectionId :: Lens' CollectionsPatch Text
+cpCollectionId
+  = lens _cpCollectionId
+      (\ s a -> s{_cpCollectionId = a})
+
+-- | Multipart request metadata.
+cpPayload :: Lens' CollectionsPatch Collection
+cpPayload
+  = lens _cpPayload (\ s a -> s{_cpPayload = a})
+
+instance GoogleRequest CollectionsPatch where
+        type Rs CollectionsPatch = Collection
+        requestClient CollectionsPatch{..}
+          = go _cpEnterpriseId _cpCollectionId (Just AltJSON)
+              _cpPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CollectionsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Collections/Update.hs b/gen/Network/Google/Resource/AndroidEnterprise/Collections/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Collections/Update.hs
@@ -0,0 +1,112 @@
+{-# 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.AndroidEnterprise.Collections.Update
+-- Copyright   : (c) 2015 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 collection.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.collections.update@.
+module Network.Google.Resource.AndroidEnterprise.Collections.Update
+    (
+    -- * REST Resource
+      CollectionsUpdateResource
+
+    -- * Creating a Request
+    , collectionsUpdate
+    , CollectionsUpdate
+
+    -- * Request Lenses
+    , cuuEnterpriseId
+    , cuuCollectionId
+    , cuuPayload
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.collections.update@ method which the
+-- 'CollectionsUpdate' request conforms to.
+type CollectionsUpdateResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "collections" :>
+               Capture "collectionId" Text :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Collection :> Put '[JSON] Collection
+
+-- | Updates a collection.
+--
+-- /See:/ 'collectionsUpdate' smart constructor.
+data CollectionsUpdate = CollectionsUpdate
+    { _cuuEnterpriseId :: !Text
+    , _cuuCollectionId :: !Text
+    , _cuuPayload      :: !Collection
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CollectionsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cuuEnterpriseId'
+--
+-- * 'cuuCollectionId'
+--
+-- * 'cuuPayload'
+collectionsUpdate
+    :: Text -- ^ 'cuuEnterpriseId'
+    -> Text -- ^ 'cuuCollectionId'
+    -> Collection -- ^ 'cuuPayload'
+    -> CollectionsUpdate
+collectionsUpdate pCuuEnterpriseId_ pCuuCollectionId_ pCuuPayload_ =
+    CollectionsUpdate
+    { _cuuEnterpriseId = pCuuEnterpriseId_
+    , _cuuCollectionId = pCuuCollectionId_
+    , _cuuPayload = pCuuPayload_
+    }
+
+-- | The ID of the enterprise.
+cuuEnterpriseId :: Lens' CollectionsUpdate Text
+cuuEnterpriseId
+  = lens _cuuEnterpriseId
+      (\ s a -> s{_cuuEnterpriseId = a})
+
+-- | The ID of the collection.
+cuuCollectionId :: Lens' CollectionsUpdate Text
+cuuCollectionId
+  = lens _cuuCollectionId
+      (\ s a -> s{_cuuCollectionId = a})
+
+-- | Multipart request metadata.
+cuuPayload :: Lens' CollectionsUpdate Collection
+cuuPayload
+  = lens _cuuPayload (\ s a -> s{_cuuPayload = a})
+
+instance GoogleRequest CollectionsUpdate where
+        type Rs CollectionsUpdate = Collection
+        requestClient CollectionsUpdate{..}
+          = go _cuuEnterpriseId _cuuCollectionId (Just AltJSON)
+              _cuuPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CollectionsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Collectionviewers/Delete.hs b/gen/Network/Google/Resource/AndroidEnterprise/Collectionviewers/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Collectionviewers/Delete.hs
@@ -0,0 +1,116 @@
+{-# 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.AndroidEnterprise.Collectionviewers.Delete
+-- Copyright   : (c) 2015 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 the user from the list of those specifically allowed to see the
+-- collection. If the collection\'s visibility is set to viewersOnly then
+-- only such users will see the collection.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.collectionviewers.delete@.
+module Network.Google.Resource.AndroidEnterprise.Collectionviewers.Delete
+    (
+    -- * REST Resource
+      CollectionviewersDeleteResource
+
+    -- * Creating a Request
+    , collectionviewersDelete
+    , CollectionviewersDelete
+
+    -- * Request Lenses
+    , cdEnterpriseId
+    , cdCollectionId
+    , cdUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.collectionviewers.delete@ method which the
+-- 'CollectionviewersDelete' request conforms to.
+type CollectionviewersDeleteResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "collections" :>
+               Capture "collectionId" Text :>
+                 "users" :>
+                   Capture "userId" Text :>
+                     QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Removes the user from the list of those specifically allowed to see the
+-- collection. If the collection\'s visibility is set to viewersOnly then
+-- only such users will see the collection.
+--
+-- /See:/ 'collectionviewersDelete' smart constructor.
+data CollectionviewersDelete = CollectionviewersDelete
+    { _cdEnterpriseId :: !Text
+    , _cdCollectionId :: !Text
+    , _cdUserId       :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CollectionviewersDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdEnterpriseId'
+--
+-- * 'cdCollectionId'
+--
+-- * 'cdUserId'
+collectionviewersDelete
+    :: Text -- ^ 'cdEnterpriseId'
+    -> Text -- ^ 'cdCollectionId'
+    -> Text -- ^ 'cdUserId'
+    -> CollectionviewersDelete
+collectionviewersDelete pCdEnterpriseId_ pCdCollectionId_ pCdUserId_ =
+    CollectionviewersDelete
+    { _cdEnterpriseId = pCdEnterpriseId_
+    , _cdCollectionId = pCdCollectionId_
+    , _cdUserId = pCdUserId_
+    }
+
+-- | The ID of the enterprise.
+cdEnterpriseId :: Lens' CollectionviewersDelete Text
+cdEnterpriseId
+  = lens _cdEnterpriseId
+      (\ s a -> s{_cdEnterpriseId = a})
+
+-- | The ID of the collection.
+cdCollectionId :: Lens' CollectionviewersDelete Text
+cdCollectionId
+  = lens _cdCollectionId
+      (\ s a -> s{_cdCollectionId = a})
+
+-- | The ID of the user.
+cdUserId :: Lens' CollectionviewersDelete Text
+cdUserId = lens _cdUserId (\ s a -> s{_cdUserId = a})
+
+instance GoogleRequest CollectionviewersDelete where
+        type Rs CollectionviewersDelete = ()
+        requestClient CollectionviewersDelete{..}
+          = go _cdEnterpriseId _cdCollectionId _cdUserId
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CollectionviewersDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Collectionviewers/Get.hs b/gen/Network/Google/Resource/AndroidEnterprise/Collectionviewers/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Collectionviewers/Get.hs
@@ -0,0 +1,117 @@
+{-# 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.AndroidEnterprise.Collectionviewers.Get
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves the ID of the user if they have been specifically allowed to
+-- see the collection. If the collection\'s visibility is set to
+-- viewersOnly then only these users will see the collection.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.collectionviewers.get@.
+module Network.Google.Resource.AndroidEnterprise.Collectionviewers.Get
+    (
+    -- * REST Resource
+      CollectionviewersGetResource
+
+    -- * Creating a Request
+    , collectionviewersGet
+    , CollectionviewersGet
+
+    -- * Request Lenses
+    , cggEnterpriseId
+    , cggCollectionId
+    , cggUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.collectionviewers.get@ method which the
+-- 'CollectionviewersGet' request conforms to.
+type CollectionviewersGetResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "collections" :>
+               Capture "collectionId" Text :>
+                 "users" :>
+                   Capture "userId" Text :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] User
+
+-- | Retrieves the ID of the user if they have been specifically allowed to
+-- see the collection. If the collection\'s visibility is set to
+-- viewersOnly then only these users will see the collection.
+--
+-- /See:/ 'collectionviewersGet' smart constructor.
+data CollectionviewersGet = CollectionviewersGet
+    { _cggEnterpriseId :: !Text
+    , _cggCollectionId :: !Text
+    , _cggUserId       :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CollectionviewersGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cggEnterpriseId'
+--
+-- * 'cggCollectionId'
+--
+-- * 'cggUserId'
+collectionviewersGet
+    :: Text -- ^ 'cggEnterpriseId'
+    -> Text -- ^ 'cggCollectionId'
+    -> Text -- ^ 'cggUserId'
+    -> CollectionviewersGet
+collectionviewersGet pCggEnterpriseId_ pCggCollectionId_ pCggUserId_ =
+    CollectionviewersGet
+    { _cggEnterpriseId = pCggEnterpriseId_
+    , _cggCollectionId = pCggCollectionId_
+    , _cggUserId = pCggUserId_
+    }
+
+-- | The ID of the enterprise.
+cggEnterpriseId :: Lens' CollectionviewersGet Text
+cggEnterpriseId
+  = lens _cggEnterpriseId
+      (\ s a -> s{_cggEnterpriseId = a})
+
+-- | The ID of the collection.
+cggCollectionId :: Lens' CollectionviewersGet Text
+cggCollectionId
+  = lens _cggCollectionId
+      (\ s a -> s{_cggCollectionId = a})
+
+-- | The ID of the user.
+cggUserId :: Lens' CollectionviewersGet Text
+cggUserId
+  = lens _cggUserId (\ s a -> s{_cggUserId = a})
+
+instance GoogleRequest CollectionviewersGet where
+        type Rs CollectionviewersGet = User
+        requestClient CollectionviewersGet{..}
+          = go _cggEnterpriseId _cggCollectionId _cggUserId
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CollectionviewersGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Collectionviewers/List.hs b/gen/Network/Google/Resource/AndroidEnterprise/Collectionviewers/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Collectionviewers/List.hs
@@ -0,0 +1,106 @@
+{-# 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.AndroidEnterprise.Collectionviewers.List
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves the IDs of the users who have been specifically allowed to see
+-- the collection. If the collection\'s visibility is set to viewersOnly
+-- then only these users will see the collection.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.collectionviewers.list@.
+module Network.Google.Resource.AndroidEnterprise.Collectionviewers.List
+    (
+    -- * REST Resource
+      CollectionviewersListResource
+
+    -- * Creating a Request
+    , collectionviewersList
+    , CollectionviewersList
+
+    -- * Request Lenses
+    , cEnterpriseId
+    , cCollectionId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.collectionviewers.list@ method which the
+-- 'CollectionviewersList' request conforms to.
+type CollectionviewersListResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "collections" :>
+               Capture "collectionId" Text :>
+                 "users" :>
+                   QueryParam "alt" AltJSON :>
+                     Get '[JSON] CollectionViewersListResponse
+
+-- | Retrieves the IDs of the users who have been specifically allowed to see
+-- the collection. If the collection\'s visibility is set to viewersOnly
+-- then only these users will see the collection.
+--
+-- /See:/ 'collectionviewersList' smart constructor.
+data CollectionviewersList = CollectionviewersList
+    { _cEnterpriseId :: !Text
+    , _cCollectionId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CollectionviewersList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cEnterpriseId'
+--
+-- * 'cCollectionId'
+collectionviewersList
+    :: Text -- ^ 'cEnterpriseId'
+    -> Text -- ^ 'cCollectionId'
+    -> CollectionviewersList
+collectionviewersList pCEnterpriseId_ pCCollectionId_ =
+    CollectionviewersList
+    { _cEnterpriseId = pCEnterpriseId_
+    , _cCollectionId = pCCollectionId_
+    }
+
+-- | The ID of the enterprise.
+cEnterpriseId :: Lens' CollectionviewersList Text
+cEnterpriseId
+  = lens _cEnterpriseId
+      (\ s a -> s{_cEnterpriseId = a})
+
+-- | The ID of the collection.
+cCollectionId :: Lens' CollectionviewersList Text
+cCollectionId
+  = lens _cCollectionId
+      (\ s a -> s{_cCollectionId = a})
+
+instance GoogleRequest CollectionviewersList where
+        type Rs CollectionviewersList =
+             CollectionViewersListResponse
+        requestClient CollectionviewersList{..}
+          = go _cEnterpriseId _cCollectionId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CollectionviewersListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Collectionviewers/Patch.hs b/gen/Network/Google/Resource/AndroidEnterprise/Collectionviewers/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Collectionviewers/Patch.hs
@@ -0,0 +1,132 @@
+{-# 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.AndroidEnterprise.Collectionviewers.Patch
+-- Copyright   : (c) 2015 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)
+--
+-- Adds the user to the list of those specifically allowed to see the
+-- collection. If the collection\'s visibility is set to viewersOnly then
+-- only such users will see the collection. This method supports patch
+-- semantics.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.collectionviewers.patch@.
+module Network.Google.Resource.AndroidEnterprise.Collectionviewers.Patch
+    (
+    -- * REST Resource
+      CollectionviewersPatchResource
+
+    -- * Creating a Request
+    , collectionviewersPatch
+    , CollectionviewersPatch
+
+    -- * Request Lenses
+    , cppEnterpriseId
+    , cppCollectionId
+    , cppPayload
+    , cppUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.collectionviewers.patch@ method which the
+-- 'CollectionviewersPatch' request conforms to.
+type CollectionviewersPatchResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "collections" :>
+               Capture "collectionId" Text :>
+                 "users" :>
+                   Capture "userId" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] User :> Patch '[JSON] User
+
+-- | Adds the user to the list of those specifically allowed to see the
+-- collection. If the collection\'s visibility is set to viewersOnly then
+-- only such users will see the collection. This method supports patch
+-- semantics.
+--
+-- /See:/ 'collectionviewersPatch' smart constructor.
+data CollectionviewersPatch = CollectionviewersPatch
+    { _cppEnterpriseId :: !Text
+    , _cppCollectionId :: !Text
+    , _cppPayload      :: !User
+    , _cppUserId       :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CollectionviewersPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cppEnterpriseId'
+--
+-- * 'cppCollectionId'
+--
+-- * 'cppPayload'
+--
+-- * 'cppUserId'
+collectionviewersPatch
+    :: Text -- ^ 'cppEnterpriseId'
+    -> Text -- ^ 'cppCollectionId'
+    -> User -- ^ 'cppPayload'
+    -> Text -- ^ 'cppUserId'
+    -> CollectionviewersPatch
+collectionviewersPatch pCppEnterpriseId_ pCppCollectionId_ pCppPayload_ pCppUserId_ =
+    CollectionviewersPatch
+    { _cppEnterpriseId = pCppEnterpriseId_
+    , _cppCollectionId = pCppCollectionId_
+    , _cppPayload = pCppPayload_
+    , _cppUserId = pCppUserId_
+    }
+
+-- | The ID of the enterprise.
+cppEnterpriseId :: Lens' CollectionviewersPatch Text
+cppEnterpriseId
+  = lens _cppEnterpriseId
+      (\ s a -> s{_cppEnterpriseId = a})
+
+-- | The ID of the collection.
+cppCollectionId :: Lens' CollectionviewersPatch Text
+cppCollectionId
+  = lens _cppCollectionId
+      (\ s a -> s{_cppCollectionId = a})
+
+-- | Multipart request metadata.
+cppPayload :: Lens' CollectionviewersPatch User
+cppPayload
+  = lens _cppPayload (\ s a -> s{_cppPayload = a})
+
+-- | The ID of the user.
+cppUserId :: Lens' CollectionviewersPatch Text
+cppUserId
+  = lens _cppUserId (\ s a -> s{_cppUserId = a})
+
+instance GoogleRequest CollectionviewersPatch where
+        type Rs CollectionviewersPatch = User
+        requestClient CollectionviewersPatch{..}
+          = go _cppEnterpriseId _cppCollectionId _cppUserId
+              (Just AltJSON)
+              _cppPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CollectionviewersPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Collectionviewers/Update.hs b/gen/Network/Google/Resource/AndroidEnterprise/Collectionviewers/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Collectionviewers/Update.hs
@@ -0,0 +1,129 @@
+{-# 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.AndroidEnterprise.Collectionviewers.Update
+-- Copyright   : (c) 2015 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)
+--
+-- Adds the user to the list of those specifically allowed to see the
+-- collection. If the collection\'s visibility is set to viewersOnly then
+-- only such users will see the collection.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.collectionviewers.update@.
+module Network.Google.Resource.AndroidEnterprise.Collectionviewers.Update
+    (
+    -- * REST Resource
+      CollectionviewersUpdateResource
+
+    -- * Creating a Request
+    , collectionviewersUpdate
+    , CollectionviewersUpdate
+
+    -- * Request Lenses
+    , cuEnterpriseId
+    , cuCollectionId
+    , cuPayload
+    , cuUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.collectionviewers.update@ method which the
+-- 'CollectionviewersUpdate' request conforms to.
+type CollectionviewersUpdateResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "collections" :>
+               Capture "collectionId" Text :>
+                 "users" :>
+                   Capture "userId" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] User :> Put '[JSON] User
+
+-- | Adds the user to the list of those specifically allowed to see the
+-- collection. If the collection\'s visibility is set to viewersOnly then
+-- only such users will see the collection.
+--
+-- /See:/ 'collectionviewersUpdate' smart constructor.
+data CollectionviewersUpdate = CollectionviewersUpdate
+    { _cuEnterpriseId :: !Text
+    , _cuCollectionId :: !Text
+    , _cuPayload      :: !User
+    , _cuUserId       :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CollectionviewersUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cuEnterpriseId'
+--
+-- * 'cuCollectionId'
+--
+-- * 'cuPayload'
+--
+-- * 'cuUserId'
+collectionviewersUpdate
+    :: Text -- ^ 'cuEnterpriseId'
+    -> Text -- ^ 'cuCollectionId'
+    -> User -- ^ 'cuPayload'
+    -> Text -- ^ 'cuUserId'
+    -> CollectionviewersUpdate
+collectionviewersUpdate pCuEnterpriseId_ pCuCollectionId_ pCuPayload_ pCuUserId_ =
+    CollectionviewersUpdate
+    { _cuEnterpriseId = pCuEnterpriseId_
+    , _cuCollectionId = pCuCollectionId_
+    , _cuPayload = pCuPayload_
+    , _cuUserId = pCuUserId_
+    }
+
+-- | The ID of the enterprise.
+cuEnterpriseId :: Lens' CollectionviewersUpdate Text
+cuEnterpriseId
+  = lens _cuEnterpriseId
+      (\ s a -> s{_cuEnterpriseId = a})
+
+-- | The ID of the collection.
+cuCollectionId :: Lens' CollectionviewersUpdate Text
+cuCollectionId
+  = lens _cuCollectionId
+      (\ s a -> s{_cuCollectionId = a})
+
+-- | Multipart request metadata.
+cuPayload :: Lens' CollectionviewersUpdate User
+cuPayload
+  = lens _cuPayload (\ s a -> s{_cuPayload = a})
+
+-- | The ID of the user.
+cuUserId :: Lens' CollectionviewersUpdate Text
+cuUserId = lens _cuUserId (\ s a -> s{_cuUserId = a})
+
+instance GoogleRequest CollectionviewersUpdate where
+        type Rs CollectionviewersUpdate = User
+        requestClient CollectionviewersUpdate{..}
+          = go _cuEnterpriseId _cuCollectionId _cuUserId
+              (Just AltJSON)
+              _cuPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CollectionviewersUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Devices/Get.hs b/gen/Network/Google/Resource/AndroidEnterprise/Devices/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Devices/Get.hs
@@ -0,0 +1,110 @@
+{-# 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.AndroidEnterprise.Devices.Get
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves the details of a device.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.devices.get@.
+module Network.Google.Resource.AndroidEnterprise.Devices.Get
+    (
+    -- * REST Resource
+      DevicesGetResource
+
+    -- * Creating a Request
+    , devicesGet
+    , DevicesGet
+
+    -- * Request Lenses
+    , dgEnterpriseId
+    , dgUserId
+    , dgDeviceId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.devices.get@ method which the
+-- 'DevicesGet' request conforms to.
+type DevicesGetResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "devices" :>
+                   Capture "deviceId" Text :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] Device
+
+-- | Retrieves the details of a device.
+--
+-- /See:/ 'devicesGet' smart constructor.
+data DevicesGet = DevicesGet
+    { _dgEnterpriseId :: !Text
+    , _dgUserId       :: !Text
+    , _dgDeviceId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DevicesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dgEnterpriseId'
+--
+-- * 'dgUserId'
+--
+-- * 'dgDeviceId'
+devicesGet
+    :: Text -- ^ 'dgEnterpriseId'
+    -> Text -- ^ 'dgUserId'
+    -> Text -- ^ 'dgDeviceId'
+    -> DevicesGet
+devicesGet pDgEnterpriseId_ pDgUserId_ pDgDeviceId_ =
+    DevicesGet
+    { _dgEnterpriseId = pDgEnterpriseId_
+    , _dgUserId = pDgUserId_
+    , _dgDeviceId = pDgDeviceId_
+    }
+
+-- | The ID of the enterprise.
+dgEnterpriseId :: Lens' DevicesGet Text
+dgEnterpriseId
+  = lens _dgEnterpriseId
+      (\ s a -> s{_dgEnterpriseId = a})
+
+-- | The ID of the user.
+dgUserId :: Lens' DevicesGet Text
+dgUserId = lens _dgUserId (\ s a -> s{_dgUserId = a})
+
+-- | The ID of the device.
+dgDeviceId :: Lens' DevicesGet Text
+dgDeviceId
+  = lens _dgDeviceId (\ s a -> s{_dgDeviceId = a})
+
+instance GoogleRequest DevicesGet where
+        type Rs DevicesGet = Device
+        requestClient DevicesGet{..}
+          = go _dgEnterpriseId _dgUserId _dgDeviceId
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient (Proxy :: Proxy DevicesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Devices/GetState.hs b/gen/Network/Google/Resource/AndroidEnterprise/Devices/GetState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Devices/GetState.hs
@@ -0,0 +1,121 @@
+{-# 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.AndroidEnterprise.Devices.GetState
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves whether a device is enabled or disabled for access by the user
+-- to Google services. The device state takes effect only if enforcing EMM
+-- policies on Android devices is enabled in the Google Admin Console.
+-- Otherwise, the device state is ignored and all devices are allowed
+-- access to Google services.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.devices.getState@.
+module Network.Google.Resource.AndroidEnterprise.Devices.GetState
+    (
+    -- * REST Resource
+      DevicesGetStateResource
+
+    -- * Creating a Request
+    , devicesGetState
+    , DevicesGetState
+
+    -- * Request Lenses
+    , dgsEnterpriseId
+    , dgsUserId
+    , dgsDeviceId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.devices.getState@ method which the
+-- 'DevicesGetState' request conforms to.
+type DevicesGetStateResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "devices" :>
+                   Capture "deviceId" Text :>
+                     "state" :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] DeviceState
+
+-- | Retrieves whether a device is enabled or disabled for access by the user
+-- to Google services. The device state takes effect only if enforcing EMM
+-- policies on Android devices is enabled in the Google Admin Console.
+-- Otherwise, the device state is ignored and all devices are allowed
+-- access to Google services.
+--
+-- /See:/ 'devicesGetState' smart constructor.
+data DevicesGetState = DevicesGetState
+    { _dgsEnterpriseId :: !Text
+    , _dgsUserId       :: !Text
+    , _dgsDeviceId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DevicesGetState' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dgsEnterpriseId'
+--
+-- * 'dgsUserId'
+--
+-- * 'dgsDeviceId'
+devicesGetState
+    :: Text -- ^ 'dgsEnterpriseId'
+    -> Text -- ^ 'dgsUserId'
+    -> Text -- ^ 'dgsDeviceId'
+    -> DevicesGetState
+devicesGetState pDgsEnterpriseId_ pDgsUserId_ pDgsDeviceId_ =
+    DevicesGetState
+    { _dgsEnterpriseId = pDgsEnterpriseId_
+    , _dgsUserId = pDgsUserId_
+    , _dgsDeviceId = pDgsDeviceId_
+    }
+
+-- | The ID of the enterprise.
+dgsEnterpriseId :: Lens' DevicesGetState Text
+dgsEnterpriseId
+  = lens _dgsEnterpriseId
+      (\ s a -> s{_dgsEnterpriseId = a})
+
+-- | The ID of the user.
+dgsUserId :: Lens' DevicesGetState Text
+dgsUserId
+  = lens _dgsUserId (\ s a -> s{_dgsUserId = a})
+
+-- | The ID of the device.
+dgsDeviceId :: Lens' DevicesGetState Text
+dgsDeviceId
+  = lens _dgsDeviceId (\ s a -> s{_dgsDeviceId = a})
+
+instance GoogleRequest DevicesGetState where
+        type Rs DevicesGetState = DeviceState
+        requestClient DevicesGetState{..}
+          = go _dgsEnterpriseId _dgsUserId _dgsDeviceId
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy DevicesGetStateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Devices/List.hs b/gen/Network/Google/Resource/AndroidEnterprise/Devices/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Devices/List.hs
@@ -0,0 +1,98 @@
+{-# 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.AndroidEnterprise.Devices.List
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves the IDs of all of a user\'s devices.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.devices.list@.
+module Network.Google.Resource.AndroidEnterprise.Devices.List
+    (
+    -- * REST Resource
+      DevicesListResource
+
+    -- * Creating a Request
+    , devicesList
+    , DevicesList
+
+    -- * Request Lenses
+    , dlEnterpriseId
+    , dlUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.devices.list@ method which the
+-- 'DevicesList' request conforms to.
+type DevicesListResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "devices" :>
+                   QueryParam "alt" AltJSON :>
+                     Get '[JSON] DevicesListResponse
+
+-- | Retrieves the IDs of all of a user\'s devices.
+--
+-- /See:/ 'devicesList' smart constructor.
+data DevicesList = DevicesList
+    { _dlEnterpriseId :: !Text
+    , _dlUserId       :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DevicesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dlEnterpriseId'
+--
+-- * 'dlUserId'
+devicesList
+    :: Text -- ^ 'dlEnterpriseId'
+    -> Text -- ^ 'dlUserId'
+    -> DevicesList
+devicesList pDlEnterpriseId_ pDlUserId_ =
+    DevicesList
+    { _dlEnterpriseId = pDlEnterpriseId_
+    , _dlUserId = pDlUserId_
+    }
+
+-- | The ID of the enterprise.
+dlEnterpriseId :: Lens' DevicesList Text
+dlEnterpriseId
+  = lens _dlEnterpriseId
+      (\ s a -> s{_dlEnterpriseId = a})
+
+-- | The ID of the user.
+dlUserId :: Lens' DevicesList Text
+dlUserId = lens _dlUserId (\ s a -> s{_dlUserId = a})
+
+instance GoogleRequest DevicesList where
+        type Rs DevicesList = DevicesListResponse
+        requestClient DevicesList{..}
+          = go _dlEnterpriseId _dlUserId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient (Proxy :: Proxy DevicesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Devices/SetState.hs b/gen/Network/Google/Resource/AndroidEnterprise/Devices/SetState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Devices/SetState.hs
@@ -0,0 +1,135 @@
+{-# 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.AndroidEnterprise.Devices.SetState
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets whether a device is enabled or disabled for access by the user to
+-- Google services. The device state takes effect only if enforcing EMM
+-- policies on Android devices is enabled in the Google Admin Console.
+-- Otherwise, the device state is ignored and all devices are allowed
+-- access to Google services.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.devices.setState@.
+module Network.Google.Resource.AndroidEnterprise.Devices.SetState
+    (
+    -- * REST Resource
+      DevicesSetStateResource
+
+    -- * Creating a Request
+    , devicesSetState
+    , DevicesSetState
+
+    -- * Request Lenses
+    , dssEnterpriseId
+    , dssPayload
+    , dssUserId
+    , dssDeviceId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.devices.setState@ method which the
+-- 'DevicesSetState' request conforms to.
+type DevicesSetStateResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "devices" :>
+                   Capture "deviceId" Text :>
+                     "state" :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] DeviceState :>
+                           Put '[JSON] DeviceState
+
+-- | Sets whether a device is enabled or disabled for access by the user to
+-- Google services. The device state takes effect only if enforcing EMM
+-- policies on Android devices is enabled in the Google Admin Console.
+-- Otherwise, the device state is ignored and all devices are allowed
+-- access to Google services.
+--
+-- /See:/ 'devicesSetState' smart constructor.
+data DevicesSetState = DevicesSetState
+    { _dssEnterpriseId :: !Text
+    , _dssPayload      :: !DeviceState
+    , _dssUserId       :: !Text
+    , _dssDeviceId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DevicesSetState' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dssEnterpriseId'
+--
+-- * 'dssPayload'
+--
+-- * 'dssUserId'
+--
+-- * 'dssDeviceId'
+devicesSetState
+    :: Text -- ^ 'dssEnterpriseId'
+    -> DeviceState -- ^ 'dssPayload'
+    -> Text -- ^ 'dssUserId'
+    -> Text -- ^ 'dssDeviceId'
+    -> DevicesSetState
+devicesSetState pDssEnterpriseId_ pDssPayload_ pDssUserId_ pDssDeviceId_ =
+    DevicesSetState
+    { _dssEnterpriseId = pDssEnterpriseId_
+    , _dssPayload = pDssPayload_
+    , _dssUserId = pDssUserId_
+    , _dssDeviceId = pDssDeviceId_
+    }
+
+-- | The ID of the enterprise.
+dssEnterpriseId :: Lens' DevicesSetState Text
+dssEnterpriseId
+  = lens _dssEnterpriseId
+      (\ s a -> s{_dssEnterpriseId = a})
+
+-- | Multipart request metadata.
+dssPayload :: Lens' DevicesSetState DeviceState
+dssPayload
+  = lens _dssPayload (\ s a -> s{_dssPayload = a})
+
+-- | The ID of the user.
+dssUserId :: Lens' DevicesSetState Text
+dssUserId
+  = lens _dssUserId (\ s a -> s{_dssUserId = a})
+
+-- | The ID of the device.
+dssDeviceId :: Lens' DevicesSetState Text
+dssDeviceId
+  = lens _dssDeviceId (\ s a -> s{_dssDeviceId = a})
+
+instance GoogleRequest DevicesSetState where
+        type Rs DevicesSetState = DeviceState
+        requestClient DevicesSetState{..}
+          = go _dssEnterpriseId _dssUserId _dssDeviceId
+              (Just AltJSON)
+              _dssPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy DevicesSetStateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/Delete.hs b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/Delete.hs
@@ -0,0 +1,91 @@
+{-# 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.AndroidEnterprise.Enterprises.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the binding between the MDM and enterprise. This is now
+-- deprecated; use this to unenroll customers that were previously enrolled
+-- with the \'insert\' call, then enroll them again with the \'enroll\'
+-- call.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.enterprises.delete@.
+module Network.Google.Resource.AndroidEnterprise.Enterprises.Delete
+    (
+    -- * REST Resource
+      EnterprisesDeleteResource
+
+    -- * Creating a Request
+    , enterprisesDelete
+    , EnterprisesDelete
+
+    -- * Request Lenses
+    , edEnterpriseId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.enterprises.delete@ method which the
+-- 'EnterprisesDelete' request conforms to.
+type EnterprisesDeleteResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes the binding between the MDM and enterprise. This is now
+-- deprecated; use this to unenroll customers that were previously enrolled
+-- with the \'insert\' call, then enroll them again with the \'enroll\'
+-- call.
+--
+-- /See:/ 'enterprisesDelete' smart constructor.
+newtype EnterprisesDelete = EnterprisesDelete
+    { _edEnterpriseId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edEnterpriseId'
+enterprisesDelete
+    :: Text -- ^ 'edEnterpriseId'
+    -> EnterprisesDelete
+enterprisesDelete pEdEnterpriseId_ =
+    EnterprisesDelete
+    { _edEnterpriseId = pEdEnterpriseId_
+    }
+
+-- | The ID of the enterprise.
+edEnterpriseId :: Lens' EnterprisesDelete Text
+edEnterpriseId
+  = lens _edEnterpriseId
+      (\ s a -> s{_edEnterpriseId = a})
+
+instance GoogleRequest EnterprisesDelete where
+        type Rs EnterprisesDelete = ()
+        requestClient EnterprisesDelete{..}
+          = go _edEnterpriseId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/Enroll.hs b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/Enroll.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/Enroll.hs
@@ -0,0 +1,96 @@
+{-# 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.AndroidEnterprise.Enterprises.Enroll
+-- Copyright   : (c) 2015 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)
+--
+-- Enrolls an enterprise with the calling MDM.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.enterprises.enroll@.
+module Network.Google.Resource.AndroidEnterprise.Enterprises.Enroll
+    (
+    -- * REST Resource
+      EnterprisesEnrollResource
+
+    -- * Creating a Request
+    , enterprisesEnroll
+    , EnterprisesEnroll
+
+    -- * Request Lenses
+    , eeToken
+    , eePayload
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.enterprises.enroll@ method which the
+-- 'EnterprisesEnroll' request conforms to.
+type EnterprisesEnrollResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           "enroll" :>
+             QueryParam "token" Text :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] Enterprise :> Post '[JSON] Enterprise
+
+-- | Enrolls an enterprise with the calling MDM.
+--
+-- /See:/ 'enterprisesEnroll' smart constructor.
+data EnterprisesEnroll = EnterprisesEnroll
+    { _eeToken   :: !Text
+    , _eePayload :: !Enterprise
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesEnroll' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eeToken'
+--
+-- * 'eePayload'
+enterprisesEnroll
+    :: Text -- ^ 'eeToken'
+    -> Enterprise -- ^ 'eePayload'
+    -> EnterprisesEnroll
+enterprisesEnroll pEeToken_ pEePayload_ =
+    EnterprisesEnroll
+    { _eeToken = pEeToken_
+    , _eePayload = pEePayload_
+    }
+
+-- | The token provided by the enterprise to register the MDM.
+eeToken :: Lens' EnterprisesEnroll Text
+eeToken = lens _eeToken (\ s a -> s{_eeToken = a})
+
+-- | Multipart request metadata.
+eePayload :: Lens' EnterprisesEnroll Enterprise
+eePayload
+  = lens _eePayload (\ s a -> s{_eePayload = a})
+
+instance GoogleRequest EnterprisesEnroll where
+        type Rs EnterprisesEnroll = Enterprise
+        requestClient EnterprisesEnroll{..}
+          = go (Just _eeToken) (Just AltJSON) _eePayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesEnrollResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/Get.hs b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/Get.hs
@@ -0,0 +1,84 @@
+{-# 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.AndroidEnterprise.Enterprises.Get
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves the name and domain of an enterprise.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.enterprises.get@.
+module Network.Google.Resource.AndroidEnterprise.Enterprises.Get
+    (
+    -- * REST Resource
+      EnterprisesGetResource
+
+    -- * Creating a Request
+    , enterprisesGet
+    , EnterprisesGet
+
+    -- * Request Lenses
+    , eEnterpriseId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.enterprises.get@ method which the
+-- 'EnterprisesGet' request conforms to.
+type EnterprisesGetResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             QueryParam "alt" AltJSON :> Get '[JSON] Enterprise
+
+-- | Retrieves the name and domain of an enterprise.
+--
+-- /See:/ 'enterprisesGet' smart constructor.
+newtype EnterprisesGet = EnterprisesGet
+    { _eEnterpriseId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eEnterpriseId'
+enterprisesGet
+    :: Text -- ^ 'eEnterpriseId'
+    -> EnterprisesGet
+enterprisesGet pEEnterpriseId_ =
+    EnterprisesGet
+    { _eEnterpriseId = pEEnterpriseId_
+    }
+
+-- | The ID of the enterprise.
+eEnterpriseId :: Lens' EnterprisesGet Text
+eEnterpriseId
+  = lens _eEnterpriseId
+      (\ s a -> s{_eEnterpriseId = a})
+
+instance GoogleRequest EnterprisesGet where
+        type Rs EnterprisesGet = Enterprise
+        requestClient EnterprisesGet{..}
+          = go _eEnterpriseId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient (Proxy :: Proxy EnterprisesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/Insert.hs b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/Insert.hs
@@ -0,0 +1,97 @@
+{-# 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.AndroidEnterprise.Enterprises.Insert
+-- Copyright   : (c) 2015 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)
+--
+-- Establishes the binding between the MDM and an enterprise. This is now
+-- deprecated; use enroll instead.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.enterprises.insert@.
+module Network.Google.Resource.AndroidEnterprise.Enterprises.Insert
+    (
+    -- * REST Resource
+      EnterprisesInsertResource
+
+    -- * Creating a Request
+    , enterprisesInsert
+    , EnterprisesInsert
+
+    -- * Request Lenses
+    , eiToken
+    , eiPayload
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.enterprises.insert@ method which the
+-- 'EnterprisesInsert' request conforms to.
+type EnterprisesInsertResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           QueryParam "token" Text :>
+             QueryParam "alt" AltJSON :>
+               ReqBody '[JSON] Enterprise :> Post '[JSON] Enterprise
+
+-- | Establishes the binding between the MDM and an enterprise. This is now
+-- deprecated; use enroll instead.
+--
+-- /See:/ 'enterprisesInsert' smart constructor.
+data EnterprisesInsert = EnterprisesInsert
+    { _eiToken   :: !Text
+    , _eiPayload :: !Enterprise
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eiToken'
+--
+-- * 'eiPayload'
+enterprisesInsert
+    :: Text -- ^ 'eiToken'
+    -> Enterprise -- ^ 'eiPayload'
+    -> EnterprisesInsert
+enterprisesInsert pEiToken_ pEiPayload_ =
+    EnterprisesInsert
+    { _eiToken = pEiToken_
+    , _eiPayload = pEiPayload_
+    }
+
+-- | The token provided by the enterprise to register the MDM.
+eiToken :: Lens' EnterprisesInsert Text
+eiToken = lens _eiToken (\ s a -> s{_eiToken = a})
+
+-- | Multipart request metadata.
+eiPayload :: Lens' EnterprisesInsert Enterprise
+eiPayload
+  = lens _eiPayload (\ s a -> s{_eiPayload = a})
+
+instance GoogleRequest EnterprisesInsert where
+        type Rs EnterprisesInsert = Enterprise
+        requestClient EnterprisesInsert{..}
+          = go (Just _eiToken) (Just AltJSON) _eiPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/List.hs b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/List.hs
@@ -0,0 +1,84 @@
+{-# 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.AndroidEnterprise.Enterprises.List
+-- Copyright   : (c) 2015 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)
+--
+-- Looks up an enterprise by domain name.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.enterprises.list@.
+module Network.Google.Resource.AndroidEnterprise.Enterprises.List
+    (
+    -- * REST Resource
+      EnterprisesListResource
+
+    -- * Creating a Request
+    , enterprisesList
+    , EnterprisesList
+
+    -- * Request Lenses
+    , elDomain
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.enterprises.list@ method which the
+-- 'EnterprisesList' request conforms to.
+type EnterprisesListResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           QueryParam "domain" Text :>
+             QueryParam "alt" AltJSON :>
+               Get '[JSON] EnterprisesListResponse
+
+-- | Looks up an enterprise by domain name.
+--
+-- /See:/ 'enterprisesList' smart constructor.
+newtype EnterprisesList = EnterprisesList
+    { _elDomain :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'elDomain'
+enterprisesList
+    :: Text -- ^ 'elDomain'
+    -> EnterprisesList
+enterprisesList pElDomain_ =
+    EnterprisesList
+    { _elDomain = pElDomain_
+    }
+
+-- | The exact primary domain name of the enterprise to look up.
+elDomain :: Lens' EnterprisesList Text
+elDomain = lens _elDomain (\ s a -> s{_elDomain = a})
+
+instance GoogleRequest EnterprisesList where
+        type Rs EnterprisesList = EnterprisesListResponse
+        requestClient EnterprisesList{..}
+          = go (Just _elDomain) (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/SendTestPushNotification.hs b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/SendTestPushNotification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/SendTestPushNotification.hs
@@ -0,0 +1,93 @@
+{-# 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.AndroidEnterprise.Enterprises.SendTestPushNotification
+-- Copyright   : (c) 2015 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)
+--
+-- Sends a test push notification to validate the MDM integration with the
+-- Google Cloud Pub\/Sub service for this enterprise.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.enterprises.sendTestPushNotification@.
+module Network.Google.Resource.AndroidEnterprise.Enterprises.SendTestPushNotification
+    (
+    -- * REST Resource
+      EnterprisesSendTestPushNotificationResource
+
+    -- * Creating a Request
+    , enterprisesSendTestPushNotification
+    , EnterprisesSendTestPushNotification
+
+    -- * Request Lenses
+    , estpnEnterpriseId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.enterprises.sendTestPushNotification@ method which the
+-- 'EnterprisesSendTestPushNotification' request conforms to.
+type EnterprisesSendTestPushNotificationResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "sendTestPushNotification" :>
+               QueryParam "alt" AltJSON :>
+                 Post '[JSON]
+                   EnterprisesSendTestPushNotificationResponse
+
+-- | Sends a test push notification to validate the MDM integration with the
+-- Google Cloud Pub\/Sub service for this enterprise.
+--
+-- /See:/ 'enterprisesSendTestPushNotification' smart constructor.
+newtype EnterprisesSendTestPushNotification = EnterprisesSendTestPushNotification
+    { _estpnEnterpriseId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesSendTestPushNotification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'estpnEnterpriseId'
+enterprisesSendTestPushNotification
+    :: Text -- ^ 'estpnEnterpriseId'
+    -> EnterprisesSendTestPushNotification
+enterprisesSendTestPushNotification pEstpnEnterpriseId_ =
+    EnterprisesSendTestPushNotification
+    { _estpnEnterpriseId = pEstpnEnterpriseId_
+    }
+
+-- | The ID of the enterprise.
+estpnEnterpriseId :: Lens' EnterprisesSendTestPushNotification Text
+estpnEnterpriseId
+  = lens _estpnEnterpriseId
+      (\ s a -> s{_estpnEnterpriseId = a})
+
+instance GoogleRequest
+         EnterprisesSendTestPushNotification where
+        type Rs EnterprisesSendTestPushNotification =
+             EnterprisesSendTestPushNotificationResponse
+        requestClient EnterprisesSendTestPushNotification{..}
+          = go _estpnEnterpriseId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy EnterprisesSendTestPushNotificationResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/SetAccount.hs b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/SetAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/SetAccount.hs
@@ -0,0 +1,101 @@
+{-# 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.AndroidEnterprise.Enterprises.SetAccount
+-- Copyright   : (c) 2015 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)
+--
+-- Set the account that will be used to authenticate to the API as the
+-- enterprise.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.enterprises.setAccount@.
+module Network.Google.Resource.AndroidEnterprise.Enterprises.SetAccount
+    (
+    -- * REST Resource
+      EnterprisesSetAccountResource
+
+    -- * Creating a Request
+    , enterprisesSetAccount
+    , EnterprisesSetAccount
+
+    -- * Request Lenses
+    , esaEnterpriseId
+    , esaPayload
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.enterprises.setAccount@ method which the
+-- 'EnterprisesSetAccount' request conforms to.
+type EnterprisesSetAccountResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "account" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] EnterpriseAccount :>
+                   Put '[JSON] EnterpriseAccount
+
+-- | Set the account that will be used to authenticate to the API as the
+-- enterprise.
+--
+-- /See:/ 'enterprisesSetAccount' smart constructor.
+data EnterprisesSetAccount = EnterprisesSetAccount
+    { _esaEnterpriseId :: !Text
+    , _esaPayload      :: !EnterpriseAccount
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesSetAccount' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'esaEnterpriseId'
+--
+-- * 'esaPayload'
+enterprisesSetAccount
+    :: Text -- ^ 'esaEnterpriseId'
+    -> EnterpriseAccount -- ^ 'esaPayload'
+    -> EnterprisesSetAccount
+enterprisesSetAccount pEsaEnterpriseId_ pEsaPayload_ =
+    EnterprisesSetAccount
+    { _esaEnterpriseId = pEsaEnterpriseId_
+    , _esaPayload = pEsaPayload_
+    }
+
+-- | The ID of the enterprise.
+esaEnterpriseId :: Lens' EnterprisesSetAccount Text
+esaEnterpriseId
+  = lens _esaEnterpriseId
+      (\ s a -> s{_esaEnterpriseId = a})
+
+-- | Multipart request metadata.
+esaPayload :: Lens' EnterprisesSetAccount EnterpriseAccount
+esaPayload
+  = lens _esaPayload (\ s a -> s{_esaPayload = a})
+
+instance GoogleRequest EnterprisesSetAccount where
+        type Rs EnterprisesSetAccount = EnterpriseAccount
+        requestClient EnterprisesSetAccount{..}
+          = go _esaEnterpriseId (Just AltJSON) _esaPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesSetAccountResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/Unenroll.hs b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/Unenroll.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/Unenroll.hs
@@ -0,0 +1,86 @@
+{-# 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.AndroidEnterprise.Enterprises.Unenroll
+-- Copyright   : (c) 2015 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)
+--
+-- Unenrolls an enterprise from the calling MDM.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.enterprises.unenroll@.
+module Network.Google.Resource.AndroidEnterprise.Enterprises.Unenroll
+    (
+    -- * REST Resource
+      EnterprisesUnenrollResource
+
+    -- * Creating a Request
+    , enterprisesUnenroll
+    , EnterprisesUnenroll
+
+    -- * Request Lenses
+    , euuEnterpriseId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.enterprises.unenroll@ method which the
+-- 'EnterprisesUnenroll' request conforms to.
+type EnterprisesUnenrollResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "unenroll" :>
+               QueryParam "alt" AltJSON :> Post '[JSON] ()
+
+-- | Unenrolls an enterprise from the calling MDM.
+--
+-- /See:/ 'enterprisesUnenroll' smart constructor.
+newtype EnterprisesUnenroll = EnterprisesUnenroll
+    { _euuEnterpriseId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesUnenroll' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'euuEnterpriseId'
+enterprisesUnenroll
+    :: Text -- ^ 'euuEnterpriseId'
+    -> EnterprisesUnenroll
+enterprisesUnenroll pEuuEnterpriseId_ =
+    EnterprisesUnenroll
+    { _euuEnterpriseId = pEuuEnterpriseId_
+    }
+
+-- | The ID of the enterprise.
+euuEnterpriseId :: Lens' EnterprisesUnenroll Text
+euuEnterpriseId
+  = lens _euuEnterpriseId
+      (\ s a -> s{_euuEnterpriseId = a})
+
+instance GoogleRequest EnterprisesUnenroll where
+        type Rs EnterprisesUnenroll = ()
+        requestClient EnterprisesUnenroll{..}
+          = go _euuEnterpriseId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesUnenrollResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Entitlements/Delete.hs b/gen/Network/Google/Resource/AndroidEnterprise/Entitlements/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Entitlements/Delete.hs
@@ -0,0 +1,113 @@
+{-# 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.AndroidEnterprise.Entitlements.Delete
+-- Copyright   : (c) 2015 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 an entitlement to an app for a user and uninstalls it.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.entitlements.delete@.
+module Network.Google.Resource.AndroidEnterprise.Entitlements.Delete
+    (
+    -- * REST Resource
+      EntitlementsDeleteResource
+
+    -- * Creating a Request
+    , entitlementsDelete
+    , EntitlementsDelete
+
+    -- * Request Lenses
+    , entEntitlementId
+    , entEnterpriseId
+    , entUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.entitlements.delete@ method which the
+-- 'EntitlementsDelete' request conforms to.
+type EntitlementsDeleteResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "entitlements" :>
+                   Capture "entitlementId" Text :>
+                     QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Removes an entitlement to an app for a user and uninstalls it.
+--
+-- /See:/ 'entitlementsDelete' smart constructor.
+data EntitlementsDelete = EntitlementsDelete
+    { _entEntitlementId :: !Text
+    , _entEnterpriseId  :: !Text
+    , _entUserId        :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EntitlementsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'entEntitlementId'
+--
+-- * 'entEnterpriseId'
+--
+-- * 'entUserId'
+entitlementsDelete
+    :: Text -- ^ 'entEntitlementId'
+    -> Text -- ^ 'entEnterpriseId'
+    -> Text -- ^ 'entUserId'
+    -> EntitlementsDelete
+entitlementsDelete pEntEntitlementId_ pEntEnterpriseId_ pEntUserId_ =
+    EntitlementsDelete
+    { _entEntitlementId = pEntEntitlementId_
+    , _entEnterpriseId = pEntEnterpriseId_
+    , _entUserId = pEntUserId_
+    }
+
+-- | The ID of the entitlement, e.g. \"app:com.google.android.gm\".
+entEntitlementId :: Lens' EntitlementsDelete Text
+entEntitlementId
+  = lens _entEntitlementId
+      (\ s a -> s{_entEntitlementId = a})
+
+-- | The ID of the enterprise.
+entEnterpriseId :: Lens' EntitlementsDelete Text
+entEnterpriseId
+  = lens _entEnterpriseId
+      (\ s a -> s{_entEnterpriseId = a})
+
+-- | The ID of the user.
+entUserId :: Lens' EntitlementsDelete Text
+entUserId
+  = lens _entUserId (\ s a -> s{_entUserId = a})
+
+instance GoogleRequest EntitlementsDelete where
+        type Rs EntitlementsDelete = ()
+        requestClient EntitlementsDelete{..}
+          = go _entEnterpriseId _entUserId _entEntitlementId
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EntitlementsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Entitlements/Get.hs b/gen/Network/Google/Resource/AndroidEnterprise/Entitlements/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Entitlements/Get.hs
@@ -0,0 +1,112 @@
+{-# 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.AndroidEnterprise.Entitlements.Get
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves details of an entitlement.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.entitlements.get@.
+module Network.Google.Resource.AndroidEnterprise.Entitlements.Get
+    (
+    -- * REST Resource
+      EntitlementsGetResource
+
+    -- * Creating a Request
+    , entitlementsGet
+    , EntitlementsGet
+
+    -- * Request Lenses
+    , egEntitlementId
+    , egEnterpriseId
+    , egUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.entitlements.get@ method which the
+-- 'EntitlementsGet' request conforms to.
+type EntitlementsGetResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "entitlements" :>
+                   Capture "entitlementId" Text :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] Entitlement
+
+-- | Retrieves details of an entitlement.
+--
+-- /See:/ 'entitlementsGet' smart constructor.
+data EntitlementsGet = EntitlementsGet
+    { _egEntitlementId :: !Text
+    , _egEnterpriseId  :: !Text
+    , _egUserId        :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EntitlementsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'egEntitlementId'
+--
+-- * 'egEnterpriseId'
+--
+-- * 'egUserId'
+entitlementsGet
+    :: Text -- ^ 'egEntitlementId'
+    -> Text -- ^ 'egEnterpriseId'
+    -> Text -- ^ 'egUserId'
+    -> EntitlementsGet
+entitlementsGet pEgEntitlementId_ pEgEnterpriseId_ pEgUserId_ =
+    EntitlementsGet
+    { _egEntitlementId = pEgEntitlementId_
+    , _egEnterpriseId = pEgEnterpriseId_
+    , _egUserId = pEgUserId_
+    }
+
+-- | The ID of the entitlement, e.g. \"app:com.google.android.gm\".
+egEntitlementId :: Lens' EntitlementsGet Text
+egEntitlementId
+  = lens _egEntitlementId
+      (\ s a -> s{_egEntitlementId = a})
+
+-- | The ID of the enterprise.
+egEnterpriseId :: Lens' EntitlementsGet Text
+egEnterpriseId
+  = lens _egEnterpriseId
+      (\ s a -> s{_egEnterpriseId = a})
+
+-- | The ID of the user.
+egUserId :: Lens' EntitlementsGet Text
+egUserId = lens _egUserId (\ s a -> s{_egUserId = a})
+
+instance GoogleRequest EntitlementsGet where
+        type Rs EntitlementsGet = Entitlement
+        requestClient EntitlementsGet{..}
+          = go _egEnterpriseId _egUserId _egEntitlementId
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EntitlementsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Entitlements/List.hs b/gen/Network/Google/Resource/AndroidEnterprise/Entitlements/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Entitlements/List.hs
@@ -0,0 +1,99 @@
+{-# 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.AndroidEnterprise.Entitlements.List
+-- Copyright   : (c) 2015 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)
+--
+-- List of all entitlements for the specified user. Only the ID is set.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.entitlements.list@.
+module Network.Google.Resource.AndroidEnterprise.Entitlements.List
+    (
+    -- * REST Resource
+      EntitlementsListResource
+
+    -- * Creating a Request
+    , entitlementsList
+    , EntitlementsList
+
+    -- * Request Lenses
+    , elEnterpriseId
+    , elUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.entitlements.list@ method which the
+-- 'EntitlementsList' request conforms to.
+type EntitlementsListResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "entitlements" :>
+                   QueryParam "alt" AltJSON :>
+                     Get '[JSON] EntitlementsListResponse
+
+-- | List of all entitlements for the specified user. Only the ID is set.
+--
+-- /See:/ 'entitlementsList' smart constructor.
+data EntitlementsList = EntitlementsList
+    { _elEnterpriseId :: !Text
+    , _elUserId       :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EntitlementsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'elEnterpriseId'
+--
+-- * 'elUserId'
+entitlementsList
+    :: Text -- ^ 'elEnterpriseId'
+    -> Text -- ^ 'elUserId'
+    -> EntitlementsList
+entitlementsList pElEnterpriseId_ pElUserId_ =
+    EntitlementsList
+    { _elEnterpriseId = pElEnterpriseId_
+    , _elUserId = pElUserId_
+    }
+
+-- | The ID of the enterprise.
+elEnterpriseId :: Lens' EntitlementsList Text
+elEnterpriseId
+  = lens _elEnterpriseId
+      (\ s a -> s{_elEnterpriseId = a})
+
+-- | The ID of the user.
+elUserId :: Lens' EntitlementsList Text
+elUserId = lens _elUserId (\ s a -> s{_elUserId = a})
+
+instance GoogleRequest EntitlementsList where
+        type Rs EntitlementsList = EntitlementsListResponse
+        requestClient EntitlementsList{..}
+          = go _elEnterpriseId _elUserId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EntitlementsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Entitlements/Patch.hs b/gen/Network/Google/Resource/AndroidEnterprise/Entitlements/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Entitlements/Patch.hs
@@ -0,0 +1,143 @@
+{-# 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.AndroidEnterprise.Entitlements.Patch
+-- Copyright   : (c) 2015 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)
+--
+-- Adds or updates an entitlement to an app for a user. This method
+-- supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.entitlements.patch@.
+module Network.Google.Resource.AndroidEnterprise.Entitlements.Patch
+    (
+    -- * REST Resource
+      EntitlementsPatchResource
+
+    -- * Creating a Request
+    , entitlementsPatch
+    , EntitlementsPatch
+
+    -- * Request Lenses
+    , epEntitlementId
+    , epEnterpriseId
+    , epPayload
+    , epInstall
+    , epUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.entitlements.patch@ method which the
+-- 'EntitlementsPatch' request conforms to.
+type EntitlementsPatchResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "entitlements" :>
+                   Capture "entitlementId" Text :>
+                     QueryParam "install" Bool :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] Entitlement :>
+                           Patch '[JSON] Entitlement
+
+-- | Adds or updates an entitlement to an app for a user. This method
+-- supports patch semantics.
+--
+-- /See:/ 'entitlementsPatch' smart constructor.
+data EntitlementsPatch = EntitlementsPatch
+    { _epEntitlementId :: !Text
+    , _epEnterpriseId  :: !Text
+    , _epPayload       :: !Entitlement
+    , _epInstall       :: !(Maybe Bool)
+    , _epUserId        :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EntitlementsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'epEntitlementId'
+--
+-- * 'epEnterpriseId'
+--
+-- * 'epPayload'
+--
+-- * 'epInstall'
+--
+-- * 'epUserId'
+entitlementsPatch
+    :: Text -- ^ 'epEntitlementId'
+    -> Text -- ^ 'epEnterpriseId'
+    -> Entitlement -- ^ 'epPayload'
+    -> Text -- ^ 'epUserId'
+    -> EntitlementsPatch
+entitlementsPatch pEpEntitlementId_ pEpEnterpriseId_ pEpPayload_ pEpUserId_ =
+    EntitlementsPatch
+    { _epEntitlementId = pEpEntitlementId_
+    , _epEnterpriseId = pEpEnterpriseId_
+    , _epPayload = pEpPayload_
+    , _epInstall = Nothing
+    , _epUserId = pEpUserId_
+    }
+
+-- | The ID of the entitlement, e.g. \"app:com.google.android.gm\".
+epEntitlementId :: Lens' EntitlementsPatch Text
+epEntitlementId
+  = lens _epEntitlementId
+      (\ s a -> s{_epEntitlementId = a})
+
+-- | The ID of the enterprise.
+epEnterpriseId :: Lens' EntitlementsPatch Text
+epEnterpriseId
+  = lens _epEnterpriseId
+      (\ s a -> s{_epEnterpriseId = a})
+
+-- | Multipart request metadata.
+epPayload :: Lens' EntitlementsPatch Entitlement
+epPayload
+  = lens _epPayload (\ s a -> s{_epPayload = a})
+
+-- | Set to true to also install the product on all the user\'s devices where
+-- possible. Failure to install on one or more devices will not prevent
+-- this operation from returning successfully, as long as the entitlement
+-- was successfully assigned to the user.
+epInstall :: Lens' EntitlementsPatch (Maybe Bool)
+epInstall
+  = lens _epInstall (\ s a -> s{_epInstall = a})
+
+-- | The ID of the user.
+epUserId :: Lens' EntitlementsPatch Text
+epUserId = lens _epUserId (\ s a -> s{_epUserId = a})
+
+instance GoogleRequest EntitlementsPatch where
+        type Rs EntitlementsPatch = Entitlement
+        requestClient EntitlementsPatch{..}
+          = go _epEnterpriseId _epUserId _epEntitlementId
+              _epInstall
+              (Just AltJSON)
+              _epPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EntitlementsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Entitlements/Update.hs b/gen/Network/Google/Resource/AndroidEnterprise/Entitlements/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Entitlements/Update.hs
@@ -0,0 +1,141 @@
+{-# 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.AndroidEnterprise.Entitlements.Update
+-- Copyright   : (c) 2015 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)
+--
+-- Adds or updates an entitlement to an app for a user.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.entitlements.update@.
+module Network.Google.Resource.AndroidEnterprise.Entitlements.Update
+    (
+    -- * REST Resource
+      EntitlementsUpdateResource
+
+    -- * Creating a Request
+    , entitlementsUpdate
+    , EntitlementsUpdate
+
+    -- * Request Lenses
+    , euEntitlementId
+    , euEnterpriseId
+    , euPayload
+    , euInstall
+    , euUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.entitlements.update@ method which the
+-- 'EntitlementsUpdate' request conforms to.
+type EntitlementsUpdateResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "entitlements" :>
+                   Capture "entitlementId" Text :>
+                     QueryParam "install" Bool :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] Entitlement :>
+                           Put '[JSON] Entitlement
+
+-- | Adds or updates an entitlement to an app for a user.
+--
+-- /See:/ 'entitlementsUpdate' smart constructor.
+data EntitlementsUpdate = EntitlementsUpdate
+    { _euEntitlementId :: !Text
+    , _euEnterpriseId  :: !Text
+    , _euPayload       :: !Entitlement
+    , _euInstall       :: !(Maybe Bool)
+    , _euUserId        :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EntitlementsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'euEntitlementId'
+--
+-- * 'euEnterpriseId'
+--
+-- * 'euPayload'
+--
+-- * 'euInstall'
+--
+-- * 'euUserId'
+entitlementsUpdate
+    :: Text -- ^ 'euEntitlementId'
+    -> Text -- ^ 'euEnterpriseId'
+    -> Entitlement -- ^ 'euPayload'
+    -> Text -- ^ 'euUserId'
+    -> EntitlementsUpdate
+entitlementsUpdate pEuEntitlementId_ pEuEnterpriseId_ pEuPayload_ pEuUserId_ =
+    EntitlementsUpdate
+    { _euEntitlementId = pEuEntitlementId_
+    , _euEnterpriseId = pEuEnterpriseId_
+    , _euPayload = pEuPayload_
+    , _euInstall = Nothing
+    , _euUserId = pEuUserId_
+    }
+
+-- | The ID of the entitlement, e.g. \"app:com.google.android.gm\".
+euEntitlementId :: Lens' EntitlementsUpdate Text
+euEntitlementId
+  = lens _euEntitlementId
+      (\ s a -> s{_euEntitlementId = a})
+
+-- | The ID of the enterprise.
+euEnterpriseId :: Lens' EntitlementsUpdate Text
+euEnterpriseId
+  = lens _euEnterpriseId
+      (\ s a -> s{_euEnterpriseId = a})
+
+-- | Multipart request metadata.
+euPayload :: Lens' EntitlementsUpdate Entitlement
+euPayload
+  = lens _euPayload (\ s a -> s{_euPayload = a})
+
+-- | Set to true to also install the product on all the user\'s devices where
+-- possible. Failure to install on one or more devices will not prevent
+-- this operation from returning successfully, as long as the entitlement
+-- was successfully assigned to the user.
+euInstall :: Lens' EntitlementsUpdate (Maybe Bool)
+euInstall
+  = lens _euInstall (\ s a -> s{_euInstall = a})
+
+-- | The ID of the user.
+euUserId :: Lens' EntitlementsUpdate Text
+euUserId = lens _euUserId (\ s a -> s{_euUserId = a})
+
+instance GoogleRequest EntitlementsUpdate where
+        type Rs EntitlementsUpdate = Entitlement
+        requestClient EntitlementsUpdate{..}
+          = go _euEnterpriseId _euUserId _euEntitlementId
+              _euInstall
+              (Just AltJSON)
+              _euPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EntitlementsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/GrouplicenseUsers/List.hs b/gen/Network/Google/Resource/AndroidEnterprise/GrouplicenseUsers/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/GrouplicenseUsers/List.hs
@@ -0,0 +1,106 @@
+{-# 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.AndroidEnterprise.GrouplicenseUsers.List
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves the IDs of the users who have been granted entitlements under
+-- the license.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.grouplicenseusers.list@.
+module Network.Google.Resource.AndroidEnterprise.GrouplicenseUsers.List
+    (
+    -- * REST Resource
+      GrouplicenseUsersListResource
+
+    -- * Creating a Request
+    , grouplicenseUsersList
+    , GrouplicenseUsersList
+
+    -- * Request Lenses
+    , gulEnterpriseId
+    , gulGroupLicenseId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.grouplicenseusers.list@ method which the
+-- 'GrouplicenseUsersList' request conforms to.
+type GrouplicenseUsersListResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "groupLicenses" :>
+               Capture "groupLicenseId" Text :>
+                 "users" :>
+                   QueryParam "alt" AltJSON :>
+                     Get '[JSON] GroupLicenseUsersListResponse
+
+-- | Retrieves the IDs of the users who have been granted entitlements under
+-- the license.
+--
+-- /See:/ 'grouplicenseUsersList' smart constructor.
+data GrouplicenseUsersList = GrouplicenseUsersList
+    { _gulEnterpriseId   :: !Text
+    , _gulGroupLicenseId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GrouplicenseUsersList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gulEnterpriseId'
+--
+-- * 'gulGroupLicenseId'
+grouplicenseUsersList
+    :: Text -- ^ 'gulEnterpriseId'
+    -> Text -- ^ 'gulGroupLicenseId'
+    -> GrouplicenseUsersList
+grouplicenseUsersList pGulEnterpriseId_ pGulGroupLicenseId_ =
+    GrouplicenseUsersList
+    { _gulEnterpriseId = pGulEnterpriseId_
+    , _gulGroupLicenseId = pGulGroupLicenseId_
+    }
+
+-- | The ID of the enterprise.
+gulEnterpriseId :: Lens' GrouplicenseUsersList Text
+gulEnterpriseId
+  = lens _gulEnterpriseId
+      (\ s a -> s{_gulEnterpriseId = a})
+
+-- | The ID of the product the group license is for, e.g.
+-- \"app:com.google.android.gm\".
+gulGroupLicenseId :: Lens' GrouplicenseUsersList Text
+gulGroupLicenseId
+  = lens _gulGroupLicenseId
+      (\ s a -> s{_gulGroupLicenseId = a})
+
+instance GoogleRequest GrouplicenseUsersList where
+        type Rs GrouplicenseUsersList =
+             GroupLicenseUsersListResponse
+        requestClient GrouplicenseUsersList{..}
+          = go _gulEnterpriseId _gulGroupLicenseId
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy GrouplicenseUsersListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Grouplicenses/Get.hs b/gen/Network/Google/Resource/AndroidEnterprise/Grouplicenses/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Grouplicenses/Get.hs
@@ -0,0 +1,100 @@
+{-# 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.AndroidEnterprise.Grouplicenses.Get
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves details of an enterprise\'s group license for a product.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.grouplicenses.get@.
+module Network.Google.Resource.AndroidEnterprise.Grouplicenses.Get
+    (
+    -- * REST Resource
+      GrouplicensesGetResource
+
+    -- * Creating a Request
+    , grouplicensesGet
+    , GrouplicensesGet
+
+    -- * Request Lenses
+    , ggEnterpriseId
+    , ggGroupLicenseId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.grouplicenses.get@ method which the
+-- 'GrouplicensesGet' request conforms to.
+type GrouplicensesGetResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "groupLicenses" :>
+               Capture "groupLicenseId" Text :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] GroupLicense
+
+-- | Retrieves details of an enterprise\'s group license for a product.
+--
+-- /See:/ 'grouplicensesGet' smart constructor.
+data GrouplicensesGet = GrouplicensesGet
+    { _ggEnterpriseId   :: !Text
+    , _ggGroupLicenseId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GrouplicensesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ggEnterpriseId'
+--
+-- * 'ggGroupLicenseId'
+grouplicensesGet
+    :: Text -- ^ 'ggEnterpriseId'
+    -> Text -- ^ 'ggGroupLicenseId'
+    -> GrouplicensesGet
+grouplicensesGet pGgEnterpriseId_ pGgGroupLicenseId_ =
+    GrouplicensesGet
+    { _ggEnterpriseId = pGgEnterpriseId_
+    , _ggGroupLicenseId = pGgGroupLicenseId_
+    }
+
+-- | The ID of the enterprise.
+ggEnterpriseId :: Lens' GrouplicensesGet Text
+ggEnterpriseId
+  = lens _ggEnterpriseId
+      (\ s a -> s{_ggEnterpriseId = a})
+
+-- | The ID of the product the group license is for, e.g.
+-- \"app:com.google.android.gm\".
+ggGroupLicenseId :: Lens' GrouplicensesGet Text
+ggGroupLicenseId
+  = lens _ggGroupLicenseId
+      (\ s a -> s{_ggGroupLicenseId = a})
+
+instance GoogleRequest GrouplicensesGet where
+        type Rs GrouplicensesGet = GroupLicense
+        requestClient GrouplicensesGet{..}
+          = go _ggEnterpriseId _ggGroupLicenseId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy GrouplicensesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Grouplicenses/List.hs b/gen/Network/Google/Resource/AndroidEnterprise/Grouplicenses/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Grouplicenses/List.hs
@@ -0,0 +1,89 @@
+{-# 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.AndroidEnterprise.Grouplicenses.List
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves IDs of all products for which the enterprise has a group
+-- license.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.grouplicenses.list@.
+module Network.Google.Resource.AndroidEnterprise.Grouplicenses.List
+    (
+    -- * REST Resource
+      GrouplicensesListResource
+
+    -- * Creating a Request
+    , grouplicensesList
+    , GrouplicensesList
+
+    -- * Request Lenses
+    , glEnterpriseId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.grouplicenses.list@ method which the
+-- 'GrouplicensesList' request conforms to.
+type GrouplicensesListResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "groupLicenses" :>
+               QueryParam "alt" AltJSON :>
+                 Get '[JSON] GroupLicensesListResponse
+
+-- | Retrieves IDs of all products for which the enterprise has a group
+-- license.
+--
+-- /See:/ 'grouplicensesList' smart constructor.
+newtype GrouplicensesList = GrouplicensesList
+    { _glEnterpriseId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GrouplicensesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'glEnterpriseId'
+grouplicensesList
+    :: Text -- ^ 'glEnterpriseId'
+    -> GrouplicensesList
+grouplicensesList pGlEnterpriseId_ =
+    GrouplicensesList
+    { _glEnterpriseId = pGlEnterpriseId_
+    }
+
+-- | The ID of the enterprise.
+glEnterpriseId :: Lens' GrouplicensesList Text
+glEnterpriseId
+  = lens _glEnterpriseId
+      (\ s a -> s{_glEnterpriseId = a})
+
+instance GoogleRequest GrouplicensesList where
+        type Rs GrouplicensesList = GroupLicensesListResponse
+        requestClient GrouplicensesList{..}
+          = go _glEnterpriseId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy GrouplicensesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Installs/Delete.hs b/gen/Network/Google/Resource/AndroidEnterprise/Installs/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Installs/Delete.hs
@@ -0,0 +1,129 @@
+{-# 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.AndroidEnterprise.Installs.Delete
+-- Copyright   : (c) 2015 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)
+--
+-- Requests to remove an app from a device. A call to get or list will
+-- still show the app as installed on the device until it is actually
+-- removed.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.installs.delete@.
+module Network.Google.Resource.AndroidEnterprise.Installs.Delete
+    (
+    -- * REST Resource
+      InstallsDeleteResource
+
+    -- * Creating a Request
+    , installsDelete
+    , InstallsDelete
+
+    -- * Request Lenses
+    , idEnterpriseId
+    , idUserId
+    , idInstallId
+    , idDeviceId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.installs.delete@ method which the
+-- 'InstallsDelete' request conforms to.
+type InstallsDeleteResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "devices" :>
+                   Capture "deviceId" Text :>
+                     "installs" :>
+                       Capture "installId" Text :>
+                         QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Requests to remove an app from a device. A call to get or list will
+-- still show the app as installed on the device until it is actually
+-- removed.
+--
+-- /See:/ 'installsDelete' smart constructor.
+data InstallsDelete = InstallsDelete
+    { _idEnterpriseId :: !Text
+    , _idUserId       :: !Text
+    , _idInstallId    :: !Text
+    , _idDeviceId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstallsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idEnterpriseId'
+--
+-- * 'idUserId'
+--
+-- * 'idInstallId'
+--
+-- * 'idDeviceId'
+installsDelete
+    :: Text -- ^ 'idEnterpriseId'
+    -> Text -- ^ 'idUserId'
+    -> Text -- ^ 'idInstallId'
+    -> Text -- ^ 'idDeviceId'
+    -> InstallsDelete
+installsDelete pIdEnterpriseId_ pIdUserId_ pIdInstallId_ pIdDeviceId_ =
+    InstallsDelete
+    { _idEnterpriseId = pIdEnterpriseId_
+    , _idUserId = pIdUserId_
+    , _idInstallId = pIdInstallId_
+    , _idDeviceId = pIdDeviceId_
+    }
+
+-- | The ID of the enterprise.
+idEnterpriseId :: Lens' InstallsDelete Text
+idEnterpriseId
+  = lens _idEnterpriseId
+      (\ s a -> s{_idEnterpriseId = a})
+
+-- | The ID of the user.
+idUserId :: Lens' InstallsDelete Text
+idUserId = lens _idUserId (\ s a -> s{_idUserId = a})
+
+-- | The ID of the product represented by the install, e.g.
+-- \"app:com.google.android.gm\".
+idInstallId :: Lens' InstallsDelete Text
+idInstallId
+  = lens _idInstallId (\ s a -> s{_idInstallId = a})
+
+-- | The Android ID of the device.
+idDeviceId :: Lens' InstallsDelete Text
+idDeviceId
+  = lens _idDeviceId (\ s a -> s{_idDeviceId = a})
+
+instance GoogleRequest InstallsDelete where
+        type Rs InstallsDelete = ()
+        requestClient InstallsDelete{..}
+          = go _idEnterpriseId _idUserId _idDeviceId
+              _idInstallId
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient (Proxy :: Proxy InstallsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Installs/Get.hs b/gen/Network/Google/Resource/AndroidEnterprise/Installs/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Installs/Get.hs
@@ -0,0 +1,125 @@
+{-# 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.AndroidEnterprise.Installs.Get
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves details of an installation of an app on a device.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.installs.get@.
+module Network.Google.Resource.AndroidEnterprise.Installs.Get
+    (
+    -- * REST Resource
+      InstallsGetResource
+
+    -- * Creating a Request
+    , installsGet
+    , InstallsGet
+
+    -- * Request Lenses
+    , igEnterpriseId
+    , igUserId
+    , igInstallId
+    , igDeviceId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.installs.get@ method which the
+-- 'InstallsGet' request conforms to.
+type InstallsGetResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "devices" :>
+                   Capture "deviceId" Text :>
+                     "installs" :>
+                       Capture "installId" Text :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] Install
+
+-- | Retrieves details of an installation of an app on a device.
+--
+-- /See:/ 'installsGet' smart constructor.
+data InstallsGet = InstallsGet
+    { _igEnterpriseId :: !Text
+    , _igUserId       :: !Text
+    , _igInstallId    :: !Text
+    , _igDeviceId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstallsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igEnterpriseId'
+--
+-- * 'igUserId'
+--
+-- * 'igInstallId'
+--
+-- * 'igDeviceId'
+installsGet
+    :: Text -- ^ 'igEnterpriseId'
+    -> Text -- ^ 'igUserId'
+    -> Text -- ^ 'igInstallId'
+    -> Text -- ^ 'igDeviceId'
+    -> InstallsGet
+installsGet pIgEnterpriseId_ pIgUserId_ pIgInstallId_ pIgDeviceId_ =
+    InstallsGet
+    { _igEnterpriseId = pIgEnterpriseId_
+    , _igUserId = pIgUserId_
+    , _igInstallId = pIgInstallId_
+    , _igDeviceId = pIgDeviceId_
+    }
+
+-- | The ID of the enterprise.
+igEnterpriseId :: Lens' InstallsGet Text
+igEnterpriseId
+  = lens _igEnterpriseId
+      (\ s a -> s{_igEnterpriseId = a})
+
+-- | The ID of the user.
+igUserId :: Lens' InstallsGet Text
+igUserId = lens _igUserId (\ s a -> s{_igUserId = a})
+
+-- | The ID of the product represented by the install, e.g.
+-- \"app:com.google.android.gm\".
+igInstallId :: Lens' InstallsGet Text
+igInstallId
+  = lens _igInstallId (\ s a -> s{_igInstallId = a})
+
+-- | The Android ID of the device.
+igDeviceId :: Lens' InstallsGet Text
+igDeviceId
+  = lens _igDeviceId (\ s a -> s{_igDeviceId = a})
+
+instance GoogleRequest InstallsGet where
+        type Rs InstallsGet = Install
+        requestClient InstallsGet{..}
+          = go _igEnterpriseId _igUserId _igDeviceId
+              _igInstallId
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient (Proxy :: Proxy InstallsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Installs/List.hs b/gen/Network/Google/Resource/AndroidEnterprise/Installs/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Installs/List.hs
@@ -0,0 +1,112 @@
+{-# 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.AndroidEnterprise.Installs.List
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves the details of all apps installed on the specified device.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.installs.list@.
+module Network.Google.Resource.AndroidEnterprise.Installs.List
+    (
+    -- * REST Resource
+      InstallsListResource
+
+    -- * Creating a Request
+    , installsList
+    , InstallsList
+
+    -- * Request Lenses
+    , ilEnterpriseId
+    , ilUserId
+    , ilDeviceId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.installs.list@ method which the
+-- 'InstallsList' request conforms to.
+type InstallsListResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "devices" :>
+                   Capture "deviceId" Text :>
+                     "installs" :>
+                       QueryParam "alt" AltJSON :>
+                         Get '[JSON] InstallsListResponse
+
+-- | Retrieves the details of all apps installed on the specified device.
+--
+-- /See:/ 'installsList' smart constructor.
+data InstallsList = InstallsList
+    { _ilEnterpriseId :: !Text
+    , _ilUserId       :: !Text
+    , _ilDeviceId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstallsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ilEnterpriseId'
+--
+-- * 'ilUserId'
+--
+-- * 'ilDeviceId'
+installsList
+    :: Text -- ^ 'ilEnterpriseId'
+    -> Text -- ^ 'ilUserId'
+    -> Text -- ^ 'ilDeviceId'
+    -> InstallsList
+installsList pIlEnterpriseId_ pIlUserId_ pIlDeviceId_ =
+    InstallsList
+    { _ilEnterpriseId = pIlEnterpriseId_
+    , _ilUserId = pIlUserId_
+    , _ilDeviceId = pIlDeviceId_
+    }
+
+-- | The ID of the enterprise.
+ilEnterpriseId :: Lens' InstallsList Text
+ilEnterpriseId
+  = lens _ilEnterpriseId
+      (\ s a -> s{_ilEnterpriseId = a})
+
+-- | The ID of the user.
+ilUserId :: Lens' InstallsList Text
+ilUserId = lens _ilUserId (\ s a -> s{_ilUserId = a})
+
+-- | The Android ID of the device.
+ilDeviceId :: Lens' InstallsList Text
+ilDeviceId
+  = lens _ilDeviceId (\ s a -> s{_ilDeviceId = a})
+
+instance GoogleRequest InstallsList where
+        type Rs InstallsList = InstallsListResponse
+        requestClient InstallsList{..}
+          = go _ilEnterpriseId _ilUserId _ilDeviceId
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient (Proxy :: Proxy InstallsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Installs/Patch.hs b/gen/Network/Google/Resource/AndroidEnterprise/Installs/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Installs/Patch.hs
@@ -0,0 +1,142 @@
+{-# 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.AndroidEnterprise.Installs.Patch
+-- Copyright   : (c) 2015 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)
+--
+-- Requests to install the latest version of an app to a device. If the app
+-- is already installed then it is updated to the latest version if
+-- necessary. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.installs.patch@.
+module Network.Google.Resource.AndroidEnterprise.Installs.Patch
+    (
+    -- * REST Resource
+      InstallsPatchResource
+
+    -- * Creating a Request
+    , installsPatch
+    , InstallsPatch
+
+    -- * Request Lenses
+    , ipEnterpriseId
+    , ipPayload
+    , ipUserId
+    , ipInstallId
+    , ipDeviceId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.installs.patch@ method which the
+-- 'InstallsPatch' request conforms to.
+type InstallsPatchResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "devices" :>
+                   Capture "deviceId" Text :>
+                     "installs" :>
+                       Capture "installId" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] Install :> Patch '[JSON] Install
+
+-- | Requests to install the latest version of an app to a device. If the app
+-- is already installed then it is updated to the latest version if
+-- necessary. This method supports patch semantics.
+--
+-- /See:/ 'installsPatch' smart constructor.
+data InstallsPatch = InstallsPatch
+    { _ipEnterpriseId :: !Text
+    , _ipPayload      :: !Install
+    , _ipUserId       :: !Text
+    , _ipInstallId    :: !Text
+    , _ipDeviceId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstallsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ipEnterpriseId'
+--
+-- * 'ipPayload'
+--
+-- * 'ipUserId'
+--
+-- * 'ipInstallId'
+--
+-- * 'ipDeviceId'
+installsPatch
+    :: Text -- ^ 'ipEnterpriseId'
+    -> Install -- ^ 'ipPayload'
+    -> Text -- ^ 'ipUserId'
+    -> Text -- ^ 'ipInstallId'
+    -> Text -- ^ 'ipDeviceId'
+    -> InstallsPatch
+installsPatch pIpEnterpriseId_ pIpPayload_ pIpUserId_ pIpInstallId_ pIpDeviceId_ =
+    InstallsPatch
+    { _ipEnterpriseId = pIpEnterpriseId_
+    , _ipPayload = pIpPayload_
+    , _ipUserId = pIpUserId_
+    , _ipInstallId = pIpInstallId_
+    , _ipDeviceId = pIpDeviceId_
+    }
+
+-- | The ID of the enterprise.
+ipEnterpriseId :: Lens' InstallsPatch Text
+ipEnterpriseId
+  = lens _ipEnterpriseId
+      (\ s a -> s{_ipEnterpriseId = a})
+
+-- | Multipart request metadata.
+ipPayload :: Lens' InstallsPatch Install
+ipPayload
+  = lens _ipPayload (\ s a -> s{_ipPayload = a})
+
+-- | The ID of the user.
+ipUserId :: Lens' InstallsPatch Text
+ipUserId = lens _ipUserId (\ s a -> s{_ipUserId = a})
+
+-- | The ID of the product represented by the install, e.g.
+-- \"app:com.google.android.gm\".
+ipInstallId :: Lens' InstallsPatch Text
+ipInstallId
+  = lens _ipInstallId (\ s a -> s{_ipInstallId = a})
+
+-- | The Android ID of the device.
+ipDeviceId :: Lens' InstallsPatch Text
+ipDeviceId
+  = lens _ipDeviceId (\ s a -> s{_ipDeviceId = a})
+
+instance GoogleRequest InstallsPatch where
+        type Rs InstallsPatch = Install
+        requestClient InstallsPatch{..}
+          = go _ipEnterpriseId _ipUserId _ipDeviceId
+              _ipInstallId
+              (Just AltJSON)
+              _ipPayload
+              androidEnterpriseService
+          where go
+                  = buildClient (Proxy :: Proxy InstallsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Installs/Update.hs b/gen/Network/Google/Resource/AndroidEnterprise/Installs/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Installs/Update.hs
@@ -0,0 +1,142 @@
+{-# 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.AndroidEnterprise.Installs.Update
+-- Copyright   : (c) 2015 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)
+--
+-- Requests to install the latest version of an app to a device. If the app
+-- is already installed then it is updated to the latest version if
+-- necessary.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.installs.update@.
+module Network.Google.Resource.AndroidEnterprise.Installs.Update
+    (
+    -- * REST Resource
+      InstallsUpdateResource
+
+    -- * Creating a Request
+    , installsUpdate
+    , InstallsUpdate
+
+    -- * Request Lenses
+    , iuEnterpriseId
+    , iuPayload
+    , iuUserId
+    , iuInstallId
+    , iuDeviceId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.installs.update@ method which the
+-- 'InstallsUpdate' request conforms to.
+type InstallsUpdateResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "devices" :>
+                   Capture "deviceId" Text :>
+                     "installs" :>
+                       Capture "installId" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] Install :> Put '[JSON] Install
+
+-- | Requests to install the latest version of an app to a device. If the app
+-- is already installed then it is updated to the latest version if
+-- necessary.
+--
+-- /See:/ 'installsUpdate' smart constructor.
+data InstallsUpdate = InstallsUpdate
+    { _iuEnterpriseId :: !Text
+    , _iuPayload      :: !Install
+    , _iuUserId       :: !Text
+    , _iuInstallId    :: !Text
+    , _iuDeviceId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstallsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iuEnterpriseId'
+--
+-- * 'iuPayload'
+--
+-- * 'iuUserId'
+--
+-- * 'iuInstallId'
+--
+-- * 'iuDeviceId'
+installsUpdate
+    :: Text -- ^ 'iuEnterpriseId'
+    -> Install -- ^ 'iuPayload'
+    -> Text -- ^ 'iuUserId'
+    -> Text -- ^ 'iuInstallId'
+    -> Text -- ^ 'iuDeviceId'
+    -> InstallsUpdate
+installsUpdate pIuEnterpriseId_ pIuPayload_ pIuUserId_ pIuInstallId_ pIuDeviceId_ =
+    InstallsUpdate
+    { _iuEnterpriseId = pIuEnterpriseId_
+    , _iuPayload = pIuPayload_
+    , _iuUserId = pIuUserId_
+    , _iuInstallId = pIuInstallId_
+    , _iuDeviceId = pIuDeviceId_
+    }
+
+-- | The ID of the enterprise.
+iuEnterpriseId :: Lens' InstallsUpdate Text
+iuEnterpriseId
+  = lens _iuEnterpriseId
+      (\ s a -> s{_iuEnterpriseId = a})
+
+-- | Multipart request metadata.
+iuPayload :: Lens' InstallsUpdate Install
+iuPayload
+  = lens _iuPayload (\ s a -> s{_iuPayload = a})
+
+-- | The ID of the user.
+iuUserId :: Lens' InstallsUpdate Text
+iuUserId = lens _iuUserId (\ s a -> s{_iuUserId = a})
+
+-- | The ID of the product represented by the install, e.g.
+-- \"app:com.google.android.gm\".
+iuInstallId :: Lens' InstallsUpdate Text
+iuInstallId
+  = lens _iuInstallId (\ s a -> s{_iuInstallId = a})
+
+-- | The Android ID of the device.
+iuDeviceId :: Lens' InstallsUpdate Text
+iuDeviceId
+  = lens _iuDeviceId (\ s a -> s{_iuDeviceId = a})
+
+instance GoogleRequest InstallsUpdate where
+        type Rs InstallsUpdate = Install
+        requestClient InstallsUpdate{..}
+          = go _iuEnterpriseId _iuUserId _iuDeviceId
+              _iuInstallId
+              (Just AltJSON)
+              _iuPayload
+              androidEnterpriseService
+          where go
+                  = buildClient (Proxy :: Proxy InstallsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Permissions/Get.hs b/gen/Network/Google/Resource/AndroidEnterprise/Permissions/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Permissions/Get.hs
@@ -0,0 +1,98 @@
+{-# 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.AndroidEnterprise.Permissions.Get
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves details of an Android app permission for display to an
+-- enterprise admin.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.permissions.get@.
+module Network.Google.Resource.AndroidEnterprise.Permissions.Get
+    (
+    -- * REST Resource
+      PermissionsGetResource
+
+    -- * Creating a Request
+    , permissionsGet
+    , PermissionsGet
+
+    -- * Request Lenses
+    , pgLanguage
+    , pgPermissionId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.permissions.get@ method which the
+-- 'PermissionsGet' request conforms to.
+type PermissionsGetResource =
+     "androidenterprise" :>
+       "v1" :>
+         "permissions" :>
+           Capture "permissionId" Text :>
+             QueryParam "language" Text :>
+               QueryParam "alt" AltJSON :> Get '[JSON] Permission
+
+-- | Retrieves details of an Android app permission for display to an
+-- enterprise admin.
+--
+-- /See:/ 'permissionsGet' smart constructor.
+data PermissionsGet = PermissionsGet
+    { _pgLanguage     :: !(Maybe Text)
+    , _pgPermissionId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PermissionsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pgLanguage'
+--
+-- * 'pgPermissionId'
+permissionsGet
+    :: Text -- ^ 'pgPermissionId'
+    -> PermissionsGet
+permissionsGet pPgPermissionId_ =
+    PermissionsGet
+    { _pgLanguage = Nothing
+    , _pgPermissionId = pPgPermissionId_
+    }
+
+-- | The BCP47 tag for the user\'s preferred language (e.g. \"en-US\",
+-- \"de\")
+pgLanguage :: Lens' PermissionsGet (Maybe Text)
+pgLanguage
+  = lens _pgLanguage (\ s a -> s{_pgLanguage = a})
+
+-- | The ID of the permission.
+pgPermissionId :: Lens' PermissionsGet Text
+pgPermissionId
+  = lens _pgPermissionId
+      (\ s a -> s{_pgPermissionId = a})
+
+instance GoogleRequest PermissionsGet where
+        type Rs PermissionsGet = Permission
+        requestClient PermissionsGet{..}
+          = go _pgPermissionId _pgLanguage (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient (Proxy :: Proxy PermissionsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Products/Approve.hs b/gen/Network/Google/Resource/AndroidEnterprise/Products/Approve.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Products/Approve.hs
@@ -0,0 +1,115 @@
+{-# 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.AndroidEnterprise.Products.Approve
+-- Copyright   : (c) 2015 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)
+--
+-- Approves the specified product (and the relevant app permissions, if
+-- any).
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.products.approve@.
+module Network.Google.Resource.AndroidEnterprise.Products.Approve
+    (
+    -- * REST Resource
+      ProductsApproveResource
+
+    -- * Creating a Request
+    , productsApprove
+    , ProductsApprove
+
+    -- * Request Lenses
+    , paEnterpriseId
+    , paPayload
+    , paProductId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.products.approve@ method which the
+-- 'ProductsApprove' request conforms to.
+type ProductsApproveResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "products" :>
+               Capture "productId" Text :>
+                 "approve" :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] ProductsApproveRequest :>
+                       Post '[JSON] ()
+
+-- | Approves the specified product (and the relevant app permissions, if
+-- any).
+--
+-- /See:/ 'productsApprove' smart constructor.
+data ProductsApprove = ProductsApprove
+    { _paEnterpriseId :: !Text
+    , _paPayload      :: !ProductsApproveRequest
+    , _paProductId    :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProductsApprove' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'paEnterpriseId'
+--
+-- * 'paPayload'
+--
+-- * 'paProductId'
+productsApprove
+    :: Text -- ^ 'paEnterpriseId'
+    -> ProductsApproveRequest -- ^ 'paPayload'
+    -> Text -- ^ 'paProductId'
+    -> ProductsApprove
+productsApprove pPaEnterpriseId_ pPaPayload_ pPaProductId_ =
+    ProductsApprove
+    { _paEnterpriseId = pPaEnterpriseId_
+    , _paPayload = pPaPayload_
+    , _paProductId = pPaProductId_
+    }
+
+-- | The ID of the enterprise.
+paEnterpriseId :: Lens' ProductsApprove Text
+paEnterpriseId
+  = lens _paEnterpriseId
+      (\ s a -> s{_paEnterpriseId = a})
+
+-- | Multipart request metadata.
+paPayload :: Lens' ProductsApprove ProductsApproveRequest
+paPayload
+  = lens _paPayload (\ s a -> s{_paPayload = a})
+
+-- | The ID of the product.
+paProductId :: Lens' ProductsApprove Text
+paProductId
+  = lens _paProductId (\ s a -> s{_paProductId = a})
+
+instance GoogleRequest ProductsApprove where
+        type Rs ProductsApprove = ()
+        requestClient ProductsApprove{..}
+          = go _paEnterpriseId _paProductId (Just AltJSON)
+              _paPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProductsApproveResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Products/GenerateApprovalURL.hs b/gen/Network/Google/Resource/AndroidEnterprise/Products/GenerateApprovalURL.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Products/GenerateApprovalURL.hs
@@ -0,0 +1,132 @@
+{-# 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.AndroidEnterprise.Products.GenerateApprovalURL
+-- Copyright   : (c) 2015 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)
+--
+-- Generates a URL that can be rendered in an iframe to display the
+-- permissions (if any) of a product. An enterprise admin must view these
+-- permissions and accept them on behalf of their organization in order to
+-- approve that product. Admins should accept the displayed permissions by
+-- interacting with a separate UI element in the EMM console, which in turn
+-- should trigger the use of this URL as the approvalUrlInfo.approvalUrl
+-- property in a Products.approve call to approve the product. This URL can
+-- only be used to display permissions for up to 1 day.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.products.generateApprovalUrl@.
+module Network.Google.Resource.AndroidEnterprise.Products.GenerateApprovalURL
+    (
+    -- * REST Resource
+      ProductsGenerateApprovalURLResource
+
+    -- * Creating a Request
+    , productsGenerateApprovalURL
+    , ProductsGenerateApprovalURL
+
+    -- * Request Lenses
+    , pgauLanguageCode
+    , pgauEnterpriseId
+    , pgauProductId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.products.generateApprovalUrl@ method which the
+-- 'ProductsGenerateApprovalURL' request conforms to.
+type ProductsGenerateApprovalURLResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "products" :>
+               Capture "productId" Text :>
+                 "generateApprovalUrl" :>
+                   QueryParam "languageCode" Text :>
+                     QueryParam "alt" AltJSON :>
+                       Post '[JSON] ProductsGenerateApprovalURLResponse
+
+-- | Generates a URL that can be rendered in an iframe to display the
+-- permissions (if any) of a product. An enterprise admin must view these
+-- permissions and accept them on behalf of their organization in order to
+-- approve that product. Admins should accept the displayed permissions by
+-- interacting with a separate UI element in the EMM console, which in turn
+-- should trigger the use of this URL as the approvalUrlInfo.approvalUrl
+-- property in a Products.approve call to approve the product. This URL can
+-- only be used to display permissions for up to 1 day.
+--
+-- /See:/ 'productsGenerateApprovalURL' smart constructor.
+data ProductsGenerateApprovalURL = ProductsGenerateApprovalURL
+    { _pgauLanguageCode :: !(Maybe Text)
+    , _pgauEnterpriseId :: !Text
+    , _pgauProductId    :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProductsGenerateApprovalURL' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pgauLanguageCode'
+--
+-- * 'pgauEnterpriseId'
+--
+-- * 'pgauProductId'
+productsGenerateApprovalURL
+    :: Text -- ^ 'pgauEnterpriseId'
+    -> Text -- ^ 'pgauProductId'
+    -> ProductsGenerateApprovalURL
+productsGenerateApprovalURL pPgauEnterpriseId_ pPgauProductId_ =
+    ProductsGenerateApprovalURL
+    { _pgauLanguageCode = Nothing
+    , _pgauEnterpriseId = pPgauEnterpriseId_
+    , _pgauProductId = pPgauProductId_
+    }
+
+-- | The BCP 47 language code used for permission names and descriptions in
+-- the returned iframe, for instance \"en-US\".
+pgauLanguageCode :: Lens' ProductsGenerateApprovalURL (Maybe Text)
+pgauLanguageCode
+  = lens _pgauLanguageCode
+      (\ s a -> s{_pgauLanguageCode = a})
+
+-- | The ID of the enterprise.
+pgauEnterpriseId :: Lens' ProductsGenerateApprovalURL Text
+pgauEnterpriseId
+  = lens _pgauEnterpriseId
+      (\ s a -> s{_pgauEnterpriseId = a})
+
+-- | The ID of the product.
+pgauProductId :: Lens' ProductsGenerateApprovalURL Text
+pgauProductId
+  = lens _pgauProductId
+      (\ s a -> s{_pgauProductId = a})
+
+instance GoogleRequest ProductsGenerateApprovalURL
+         where
+        type Rs ProductsGenerateApprovalURL =
+             ProductsGenerateApprovalURLResponse
+        requestClient ProductsGenerateApprovalURL{..}
+          = go _pgauEnterpriseId _pgauProductId
+              _pgauLanguageCode
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProductsGenerateApprovalURLResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Products/Get.hs b/gen/Network/Google/Resource/AndroidEnterprise/Products/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Products/Get.hs
@@ -0,0 +1,110 @@
+{-# 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.AndroidEnterprise.Products.Get
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves details of a product for display to an enterprise admin.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.products.get@.
+module Network.Google.Resource.AndroidEnterprise.Products.Get
+    (
+    -- * REST Resource
+      ProductsGetResource
+
+    -- * Creating a Request
+    , productsGet
+    , ProductsGet
+
+    -- * Request Lenses
+    , proEnterpriseId
+    , proLanguage
+    , proProductId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.products.get@ method which the
+-- 'ProductsGet' request conforms to.
+type ProductsGetResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "products" :>
+               Capture "productId" Text :>
+                 QueryParam "language" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Product
+
+-- | Retrieves details of a product for display to an enterprise admin.
+--
+-- /See:/ 'productsGet' smart constructor.
+data ProductsGet = ProductsGet
+    { _proEnterpriseId :: !Text
+    , _proLanguage     :: !(Maybe Text)
+    , _proProductId    :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProductsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'proEnterpriseId'
+--
+-- * 'proLanguage'
+--
+-- * 'proProductId'
+productsGet
+    :: Text -- ^ 'proEnterpriseId'
+    -> Text -- ^ 'proProductId'
+    -> ProductsGet
+productsGet pProEnterpriseId_ pProProductId_ =
+    ProductsGet
+    { _proEnterpriseId = pProEnterpriseId_
+    , _proLanguage = Nothing
+    , _proProductId = pProProductId_
+    }
+
+-- | The ID of the enterprise.
+proEnterpriseId :: Lens' ProductsGet Text
+proEnterpriseId
+  = lens _proEnterpriseId
+      (\ s a -> s{_proEnterpriseId = a})
+
+-- | The BCP47 tag for the user\'s preferred language (e.g. \"en-US\",
+-- \"de\").
+proLanguage :: Lens' ProductsGet (Maybe Text)
+proLanguage
+  = lens _proLanguage (\ s a -> s{_proLanguage = a})
+
+-- | The ID of the product, e.g. \"app:com.google.android.gm\".
+proProductId :: Lens' ProductsGet Text
+proProductId
+  = lens _proProductId (\ s a -> s{_proProductId = a})
+
+instance GoogleRequest ProductsGet where
+        type Rs ProductsGet = Product
+        requestClient ProductsGet{..}
+          = go _proEnterpriseId _proProductId _proLanguage
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient (Proxy :: Proxy ProductsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Products/GetAppRestrictionsSchema.hs b/gen/Network/Google/Resource/AndroidEnterprise/Products/GetAppRestrictionsSchema.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Products/GetAppRestrictionsSchema.hs
@@ -0,0 +1,123 @@
+{-# 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.AndroidEnterprise.Products.GetAppRestrictionsSchema
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves the schema defining app restrictions configurable for this
+-- product. All products have a schema, but this may be empty if no app
+-- restrictions are defined.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.products.getAppRestrictionsSchema@.
+module Network.Google.Resource.AndroidEnterprise.Products.GetAppRestrictionsSchema
+    (
+    -- * REST Resource
+      ProductsGetAppRestrictionsSchemaResource
+
+    -- * Creating a Request
+    , productsGetAppRestrictionsSchema
+    , ProductsGetAppRestrictionsSchema
+
+    -- * Request Lenses
+    , pgarsEnterpriseId
+    , pgarsLanguage
+    , pgarsProductId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.products.getAppRestrictionsSchema@ method which the
+-- 'ProductsGetAppRestrictionsSchema' request conforms to.
+type ProductsGetAppRestrictionsSchemaResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "products" :>
+               Capture "productId" Text :>
+                 "appRestrictionsSchema" :>
+                   QueryParam "language" Text :>
+                     QueryParam "alt" AltJSON :>
+                       Get '[JSON] AppRestrictionsSchema
+
+-- | Retrieves the schema defining app restrictions configurable for this
+-- product. All products have a schema, but this may be empty if no app
+-- restrictions are defined.
+--
+-- /See:/ 'productsGetAppRestrictionsSchema' smart constructor.
+data ProductsGetAppRestrictionsSchema = ProductsGetAppRestrictionsSchema
+    { _pgarsEnterpriseId :: !Text
+    , _pgarsLanguage     :: !(Maybe Text)
+    , _pgarsProductId    :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProductsGetAppRestrictionsSchema' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pgarsEnterpriseId'
+--
+-- * 'pgarsLanguage'
+--
+-- * 'pgarsProductId'
+productsGetAppRestrictionsSchema
+    :: Text -- ^ 'pgarsEnterpriseId'
+    -> Text -- ^ 'pgarsProductId'
+    -> ProductsGetAppRestrictionsSchema
+productsGetAppRestrictionsSchema pPgarsEnterpriseId_ pPgarsProductId_ =
+    ProductsGetAppRestrictionsSchema
+    { _pgarsEnterpriseId = pPgarsEnterpriseId_
+    , _pgarsLanguage = Nothing
+    , _pgarsProductId = pPgarsProductId_
+    }
+
+-- | The ID of the enterprise.
+pgarsEnterpriseId :: Lens' ProductsGetAppRestrictionsSchema Text
+pgarsEnterpriseId
+  = lens _pgarsEnterpriseId
+      (\ s a -> s{_pgarsEnterpriseId = a})
+
+-- | The BCP47 tag for the user\'s preferred language (e.g. \"en-US\",
+-- \"de\").
+pgarsLanguage :: Lens' ProductsGetAppRestrictionsSchema (Maybe Text)
+pgarsLanguage
+  = lens _pgarsLanguage
+      (\ s a -> s{_pgarsLanguage = a})
+
+-- | The ID of the product.
+pgarsProductId :: Lens' ProductsGetAppRestrictionsSchema Text
+pgarsProductId
+  = lens _pgarsProductId
+      (\ s a -> s{_pgarsProductId = a})
+
+instance GoogleRequest
+         ProductsGetAppRestrictionsSchema where
+        type Rs ProductsGetAppRestrictionsSchema =
+             AppRestrictionsSchema
+        requestClient ProductsGetAppRestrictionsSchema{..}
+          = go _pgarsEnterpriseId _pgarsProductId
+              _pgarsLanguage
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProductsGetAppRestrictionsSchemaResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Products/GetPermissions.hs b/gen/Network/Google/Resource/AndroidEnterprise/Products/GetPermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Products/GetPermissions.hs
@@ -0,0 +1,100 @@
+{-# 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.AndroidEnterprise.Products.GetPermissions
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves the Android app permissions required by this app.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.products.getPermissions@.
+module Network.Google.Resource.AndroidEnterprise.Products.GetPermissions
+    (
+    -- * REST Resource
+      ProductsGetPermissionsResource
+
+    -- * Creating a Request
+    , productsGetPermissions
+    , ProductsGetPermissions
+
+    -- * Request Lenses
+    , pgpEnterpriseId
+    , pgpProductId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.products.getPermissions@ method which the
+-- 'ProductsGetPermissions' request conforms to.
+type ProductsGetPermissionsResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "products" :>
+               Capture "productId" Text :>
+                 "permissions" :>
+                   QueryParam "alt" AltJSON :>
+                     Get '[JSON] ProductPermissions
+
+-- | Retrieves the Android app permissions required by this app.
+--
+-- /See:/ 'productsGetPermissions' smart constructor.
+data ProductsGetPermissions = ProductsGetPermissions
+    { _pgpEnterpriseId :: !Text
+    , _pgpProductId    :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProductsGetPermissions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pgpEnterpriseId'
+--
+-- * 'pgpProductId'
+productsGetPermissions
+    :: Text -- ^ 'pgpEnterpriseId'
+    -> Text -- ^ 'pgpProductId'
+    -> ProductsGetPermissions
+productsGetPermissions pPgpEnterpriseId_ pPgpProductId_ =
+    ProductsGetPermissions
+    { _pgpEnterpriseId = pPgpEnterpriseId_
+    , _pgpProductId = pPgpProductId_
+    }
+
+-- | The ID of the enterprise.
+pgpEnterpriseId :: Lens' ProductsGetPermissions Text
+pgpEnterpriseId
+  = lens _pgpEnterpriseId
+      (\ s a -> s{_pgpEnterpriseId = a})
+
+-- | The ID of the product.
+pgpProductId :: Lens' ProductsGetPermissions Text
+pgpProductId
+  = lens _pgpProductId (\ s a -> s{_pgpProductId = a})
+
+instance GoogleRequest ProductsGetPermissions where
+        type Rs ProductsGetPermissions = ProductPermissions
+        requestClient ProductsGetPermissions{..}
+          = go _pgpEnterpriseId _pgpProductId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProductsGetPermissionsResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Products/UpdatePermissions.hs b/gen/Network/Google/Resource/AndroidEnterprise/Products/UpdatePermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Products/UpdatePermissions.hs
@@ -0,0 +1,117 @@
+{-# 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.AndroidEnterprise.Products.UpdatePermissions
+-- Copyright   : (c) 2015 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 set of Android app permissions for this app that have been
+-- accepted by the enterprise.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.products.updatePermissions@.
+module Network.Google.Resource.AndroidEnterprise.Products.UpdatePermissions
+    (
+    -- * REST Resource
+      ProductsUpdatePermissionsResource
+
+    -- * Creating a Request
+    , productsUpdatePermissions
+    , ProductsUpdatePermissions
+
+    -- * Request Lenses
+    , pupEnterpriseId
+    , pupPayload
+    , pupProductId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.products.updatePermissions@ method which the
+-- 'ProductsUpdatePermissions' request conforms to.
+type ProductsUpdatePermissionsResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "products" :>
+               Capture "productId" Text :>
+                 "permissions" :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] ProductPermissions :>
+                       Put '[JSON] ProductPermissions
+
+-- | Updates the set of Android app permissions for this app that have been
+-- accepted by the enterprise.
+--
+-- /See:/ 'productsUpdatePermissions' smart constructor.
+data ProductsUpdatePermissions = ProductsUpdatePermissions
+    { _pupEnterpriseId :: !Text
+    , _pupPayload      :: !ProductPermissions
+    , _pupProductId    :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProductsUpdatePermissions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pupEnterpriseId'
+--
+-- * 'pupPayload'
+--
+-- * 'pupProductId'
+productsUpdatePermissions
+    :: Text -- ^ 'pupEnterpriseId'
+    -> ProductPermissions -- ^ 'pupPayload'
+    -> Text -- ^ 'pupProductId'
+    -> ProductsUpdatePermissions
+productsUpdatePermissions pPupEnterpriseId_ pPupPayload_ pPupProductId_ =
+    ProductsUpdatePermissions
+    { _pupEnterpriseId = pPupEnterpriseId_
+    , _pupPayload = pPupPayload_
+    , _pupProductId = pPupProductId_
+    }
+
+-- | The ID of the enterprise.
+pupEnterpriseId :: Lens' ProductsUpdatePermissions Text
+pupEnterpriseId
+  = lens _pupEnterpriseId
+      (\ s a -> s{_pupEnterpriseId = a})
+
+-- | Multipart request metadata.
+pupPayload :: Lens' ProductsUpdatePermissions ProductPermissions
+pupPayload
+  = lens _pupPayload (\ s a -> s{_pupPayload = a})
+
+-- | The ID of the product.
+pupProductId :: Lens' ProductsUpdatePermissions Text
+pupProductId
+  = lens _pupProductId (\ s a -> s{_pupProductId = a})
+
+instance GoogleRequest ProductsUpdatePermissions
+         where
+        type Rs ProductsUpdatePermissions =
+             ProductPermissions
+        requestClient ProductsUpdatePermissions{..}
+          = go _pupEnterpriseId _pupProductId (Just AltJSON)
+              _pupPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProductsUpdatePermissionsResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Users/GenerateToken.hs b/gen/Network/Google/Resource/AndroidEnterprise/Users/GenerateToken.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Users/GenerateToken.hs
@@ -0,0 +1,103 @@
+{-# 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.AndroidEnterprise.Users.GenerateToken
+-- Copyright   : (c) 2015 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)
+--
+-- Generates a token (activation code) to allow this user to configure
+-- their work account in the Android Setup Wizard. Revokes any previously
+-- generated token.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.users.generateToken@.
+module Network.Google.Resource.AndroidEnterprise.Users.GenerateToken
+    (
+    -- * REST Resource
+      UsersGenerateTokenResource
+
+    -- * Creating a Request
+    , usersGenerateToken
+    , UsersGenerateToken
+
+    -- * Request Lenses
+    , ugtEnterpriseId
+    , ugtUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.users.generateToken@ method which the
+-- 'UsersGenerateToken' request conforms to.
+type UsersGenerateTokenResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "token" :>
+                   QueryParam "alt" AltJSON :> Post '[JSON] UserToken
+
+-- | Generates a token (activation code) to allow this user to configure
+-- their work account in the Android Setup Wizard. Revokes any previously
+-- generated token.
+--
+-- /See:/ 'usersGenerateToken' smart constructor.
+data UsersGenerateToken = UsersGenerateToken
+    { _ugtEnterpriseId :: !Text
+    , _ugtUserId       :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersGenerateToken' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ugtEnterpriseId'
+--
+-- * 'ugtUserId'
+usersGenerateToken
+    :: Text -- ^ 'ugtEnterpriseId'
+    -> Text -- ^ 'ugtUserId'
+    -> UsersGenerateToken
+usersGenerateToken pUgtEnterpriseId_ pUgtUserId_ =
+    UsersGenerateToken
+    { _ugtEnterpriseId = pUgtEnterpriseId_
+    , _ugtUserId = pUgtUserId_
+    }
+
+-- | The ID of the enterprise.
+ugtEnterpriseId :: Lens' UsersGenerateToken Text
+ugtEnterpriseId
+  = lens _ugtEnterpriseId
+      (\ s a -> s{_ugtEnterpriseId = a})
+
+-- | The ID of the user.
+ugtUserId :: Lens' UsersGenerateToken Text
+ugtUserId
+  = lens _ugtUserId (\ s a -> s{_ugtUserId = a})
+
+instance GoogleRequest UsersGenerateToken where
+        type Rs UsersGenerateToken = UserToken
+        requestClient UsersGenerateToken{..}
+          = go _ugtEnterpriseId _ugtUserId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersGenerateTokenResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Users/Get.hs b/gen/Network/Google/Resource/AndroidEnterprise/Users/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Users/Get.hs
@@ -0,0 +1,96 @@
+{-# 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.AndroidEnterprise.Users.Get
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves a user\'s details.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.users.get@.
+module Network.Google.Resource.AndroidEnterprise.Users.Get
+    (
+    -- * REST Resource
+      UsersGetResource
+
+    -- * Creating a Request
+    , usersGet
+    , UsersGet
+
+    -- * Request Lenses
+    , ugEnterpriseId
+    , ugUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.users.get@ method which the
+-- 'UsersGet' request conforms to.
+type UsersGetResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] User
+
+-- | Retrieves a user\'s details.
+--
+-- /See:/ 'usersGet' smart constructor.
+data UsersGet = UsersGet
+    { _ugEnterpriseId :: !Text
+    , _ugUserId       :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ugEnterpriseId'
+--
+-- * 'ugUserId'
+usersGet
+    :: Text -- ^ 'ugEnterpriseId'
+    -> Text -- ^ 'ugUserId'
+    -> UsersGet
+usersGet pUgEnterpriseId_ pUgUserId_ =
+    UsersGet
+    { _ugEnterpriseId = pUgEnterpriseId_
+    , _ugUserId = pUgUserId_
+    }
+
+-- | The ID of the enterprise.
+ugEnterpriseId :: Lens' UsersGet Text
+ugEnterpriseId
+  = lens _ugEnterpriseId
+      (\ s a -> s{_ugEnterpriseId = a})
+
+-- | The ID of the user.
+ugUserId :: Lens' UsersGet Text
+ugUserId = lens _ugUserId (\ s a -> s{_ugUserId = a})
+
+instance GoogleRequest UsersGet where
+        type Rs UsersGet = User
+        requestClient UsersGet{..}
+          = go _ugEnterpriseId _ugUserId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient (Proxy :: Proxy UsersGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Users/GetAvailableProductSet.hs b/gen/Network/Google/Resource/AndroidEnterprise/Users/GetAvailableProductSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Users/GetAvailableProductSet.hs
@@ -0,0 +1,100 @@
+{-# 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.AndroidEnterprise.Users.GetAvailableProductSet
+-- Copyright   : (c) 2015 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)
+--
+-- Retrieves the set of products a user is entitled to access.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.users.getAvailableProductSet@.
+module Network.Google.Resource.AndroidEnterprise.Users.GetAvailableProductSet
+    (
+    -- * REST Resource
+      UsersGetAvailableProductSetResource
+
+    -- * Creating a Request
+    , usersGetAvailableProductSet
+    , UsersGetAvailableProductSet
+
+    -- * Request Lenses
+    , ugapsEnterpriseId
+    , ugapsUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.users.getAvailableProductSet@ method which the
+-- 'UsersGetAvailableProductSet' request conforms to.
+type UsersGetAvailableProductSetResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "availableProductSet" :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] ProductSet
+
+-- | Retrieves the set of products a user is entitled to access.
+--
+-- /See:/ 'usersGetAvailableProductSet' smart constructor.
+data UsersGetAvailableProductSet = UsersGetAvailableProductSet
+    { _ugapsEnterpriseId :: !Text
+    , _ugapsUserId       :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersGetAvailableProductSet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ugapsEnterpriseId'
+--
+-- * 'ugapsUserId'
+usersGetAvailableProductSet
+    :: Text -- ^ 'ugapsEnterpriseId'
+    -> Text -- ^ 'ugapsUserId'
+    -> UsersGetAvailableProductSet
+usersGetAvailableProductSet pUgapsEnterpriseId_ pUgapsUserId_ =
+    UsersGetAvailableProductSet
+    { _ugapsEnterpriseId = pUgapsEnterpriseId_
+    , _ugapsUserId = pUgapsUserId_
+    }
+
+-- | The ID of the enterprise.
+ugapsEnterpriseId :: Lens' UsersGetAvailableProductSet Text
+ugapsEnterpriseId
+  = lens _ugapsEnterpriseId
+      (\ s a -> s{_ugapsEnterpriseId = a})
+
+-- | The ID of the user.
+ugapsUserId :: Lens' UsersGetAvailableProductSet Text
+ugapsUserId
+  = lens _ugapsUserId (\ s a -> s{_ugapsUserId = a})
+
+instance GoogleRequest UsersGetAvailableProductSet
+         where
+        type Rs UsersGetAvailableProductSet = ProductSet
+        requestClient UsersGetAvailableProductSet{..}
+          = go _ugapsEnterpriseId _ugapsUserId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersGetAvailableProductSetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Users/List.hs b/gen/Network/Google/Resource/AndroidEnterprise/Users/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Users/List.hs
@@ -0,0 +1,97 @@
+{-# 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.AndroidEnterprise.Users.List
+-- Copyright   : (c) 2015 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)
+--
+-- Looks up a user by email address.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.users.list@.
+module Network.Google.Resource.AndroidEnterprise.Users.List
+    (
+    -- * REST Resource
+      UsersListResource
+
+    -- * Creating a Request
+    , usersList
+    , UsersList
+
+    -- * Request Lenses
+    , ulEmail
+    , ulEnterpriseId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.users.list@ method which the
+-- 'UsersList' request conforms to.
+type UsersListResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               QueryParam "email" Text :>
+                 QueryParam "alt" AltJSON :>
+                   Get '[JSON] UsersListResponse
+
+-- | Looks up a user by email address.
+--
+-- /See:/ 'usersList' smart constructor.
+data UsersList = UsersList
+    { _ulEmail        :: !Text
+    , _ulEnterpriseId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ulEmail'
+--
+-- * 'ulEnterpriseId'
+usersList
+    :: Text -- ^ 'ulEmail'
+    -> Text -- ^ 'ulEnterpriseId'
+    -> UsersList
+usersList pUlEmail_ pUlEnterpriseId_ =
+    UsersList
+    { _ulEmail = pUlEmail_
+    , _ulEnterpriseId = pUlEnterpriseId_
+    }
+
+-- | The exact primary email address of the user to look up.
+ulEmail :: Lens' UsersList Text
+ulEmail = lens _ulEmail (\ s a -> s{_ulEmail = a})
+
+-- | The ID of the enterprise.
+ulEnterpriseId :: Lens' UsersList Text
+ulEnterpriseId
+  = lens _ulEnterpriseId
+      (\ s a -> s{_ulEnterpriseId = a})
+
+instance GoogleRequest UsersList where
+        type Rs UsersList = UsersListResponse
+        requestClient UsersList{..}
+          = go _ulEnterpriseId (Just _ulEmail) (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient (Proxy :: Proxy UsersListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Users/RevokeToken.hs b/gen/Network/Google/Resource/AndroidEnterprise/Users/RevokeToken.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Users/RevokeToken.hs
@@ -0,0 +1,99 @@
+{-# 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.AndroidEnterprise.Users.RevokeToken
+-- Copyright   : (c) 2015 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)
+--
+-- Revokes a previously generated token (activation code) for the user.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.users.revokeToken@.
+module Network.Google.Resource.AndroidEnterprise.Users.RevokeToken
+    (
+    -- * REST Resource
+      UsersRevokeTokenResource
+
+    -- * Creating a Request
+    , usersRevokeToken
+    , UsersRevokeToken
+
+    -- * Request Lenses
+    , urtEnterpriseId
+    , urtUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.users.revokeToken@ method which the
+-- 'UsersRevokeToken' request conforms to.
+type UsersRevokeTokenResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "token" :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Revokes a previously generated token (activation code) for the user.
+--
+-- /See:/ 'usersRevokeToken' smart constructor.
+data UsersRevokeToken = UsersRevokeToken
+    { _urtEnterpriseId :: !Text
+    , _urtUserId       :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersRevokeToken' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'urtEnterpriseId'
+--
+-- * 'urtUserId'
+usersRevokeToken
+    :: Text -- ^ 'urtEnterpriseId'
+    -> Text -- ^ 'urtUserId'
+    -> UsersRevokeToken
+usersRevokeToken pUrtEnterpriseId_ pUrtUserId_ =
+    UsersRevokeToken
+    { _urtEnterpriseId = pUrtEnterpriseId_
+    , _urtUserId = pUrtUserId_
+    }
+
+-- | The ID of the enterprise.
+urtEnterpriseId :: Lens' UsersRevokeToken Text
+urtEnterpriseId
+  = lens _urtEnterpriseId
+      (\ s a -> s{_urtEnterpriseId = a})
+
+-- | The ID of the user.
+urtUserId :: Lens' UsersRevokeToken Text
+urtUserId
+  = lens _urtUserId (\ s a -> s{_urtUserId = a})
+
+instance GoogleRequest UsersRevokeToken where
+        type Rs UsersRevokeToken = ()
+        requestClient UsersRevokeToken{..}
+          = go _urtEnterpriseId _urtUserId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersRevokeTokenResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Users/SetAvailableProductSet.hs b/gen/Network/Google/Resource/AndroidEnterprise/Users/SetAvailableProductSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Users/SetAvailableProductSet.hs
@@ -0,0 +1,113 @@
+{-# 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.AndroidEnterprise.Users.SetAvailableProductSet
+-- Copyright   : (c) 2015 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)
+--
+-- Modifies the set of products a user is entitled to access.
+--
+-- /See:/ <https://developers.google.com/play/enterprise Google Play EMM API Reference> for @androidenterprise.users.setAvailableProductSet@.
+module Network.Google.Resource.AndroidEnterprise.Users.SetAvailableProductSet
+    (
+    -- * REST Resource
+      UsersSetAvailableProductSetResource
+
+    -- * Creating a Request
+    , usersSetAvailableProductSet
+    , UsersSetAvailableProductSet
+
+    -- * Request Lenses
+    , usapsEnterpriseId
+    , usapsPayload
+    , usapsUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.users.setAvailableProductSet@ method which the
+-- 'UsersSetAvailableProductSet' request conforms to.
+type UsersSetAvailableProductSetResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "availableProductSet" :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] ProductSet :> Put '[JSON] ProductSet
+
+-- | Modifies the set of products a user is entitled to access.
+--
+-- /See:/ 'usersSetAvailableProductSet' smart constructor.
+data UsersSetAvailableProductSet = UsersSetAvailableProductSet
+    { _usapsEnterpriseId :: !Text
+    , _usapsPayload      :: !ProductSet
+    , _usapsUserId       :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersSetAvailableProductSet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usapsEnterpriseId'
+--
+-- * 'usapsPayload'
+--
+-- * 'usapsUserId'
+usersSetAvailableProductSet
+    :: Text -- ^ 'usapsEnterpriseId'
+    -> ProductSet -- ^ 'usapsPayload'
+    -> Text -- ^ 'usapsUserId'
+    -> UsersSetAvailableProductSet
+usersSetAvailableProductSet pUsapsEnterpriseId_ pUsapsPayload_ pUsapsUserId_ =
+    UsersSetAvailableProductSet
+    { _usapsEnterpriseId = pUsapsEnterpriseId_
+    , _usapsPayload = pUsapsPayload_
+    , _usapsUserId = pUsapsUserId_
+    }
+
+-- | The ID of the enterprise.
+usapsEnterpriseId :: Lens' UsersSetAvailableProductSet Text
+usapsEnterpriseId
+  = lens _usapsEnterpriseId
+      (\ s a -> s{_usapsEnterpriseId = a})
+
+-- | Multipart request metadata.
+usapsPayload :: Lens' UsersSetAvailableProductSet ProductSet
+usapsPayload
+  = lens _usapsPayload (\ s a -> s{_usapsPayload = a})
+
+-- | The ID of the user.
+usapsUserId :: Lens' UsersSetAvailableProductSet Text
+usapsUserId
+  = lens _usapsUserId (\ s a -> s{_usapsUserId = a})
+
+instance GoogleRequest UsersSetAvailableProductSet
+         where
+        type Rs UsersSetAvailableProductSet = ProductSet
+        requestClient UsersSetAvailableProductSet{..}
+          = go _usapsEnterpriseId _usapsUserId (Just AltJSON)
+              _usapsPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersSetAvailableProductSetResource)
+                      mempty
diff --git a/gogol-android-enterprise.cabal b/gogol-android-enterprise.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-android-enterprise.cabal
@@ -0,0 +1,95 @@
+name:                  gogol-android-enterprise
+version:               0.0.1
+synopsis:              Google Play EMM 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 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md
+
+description:
+    Allows MDMs\/EMMs and enterprises to manage the deployment of apps to
+    Android for Work users.
+    .
+    /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.AndroidEnterprise
+        , Network.Google.AndroidEnterprise.Types
+        , Network.Google.Resource.AndroidEnterprise.Collections.Delete
+        , Network.Google.Resource.AndroidEnterprise.Collections.Get
+        , Network.Google.Resource.AndroidEnterprise.Collections.Insert
+        , Network.Google.Resource.AndroidEnterprise.Collections.List
+        , Network.Google.Resource.AndroidEnterprise.Collections.Patch
+        , Network.Google.Resource.AndroidEnterprise.Collections.Update
+        , Network.Google.Resource.AndroidEnterprise.Collectionviewers.Delete
+        , Network.Google.Resource.AndroidEnterprise.Collectionviewers.Get
+        , Network.Google.Resource.AndroidEnterprise.Collectionviewers.List
+        , Network.Google.Resource.AndroidEnterprise.Collectionviewers.Patch
+        , Network.Google.Resource.AndroidEnterprise.Collectionviewers.Update
+        , Network.Google.Resource.AndroidEnterprise.Devices.Get
+        , Network.Google.Resource.AndroidEnterprise.Devices.GetState
+        , Network.Google.Resource.AndroidEnterprise.Devices.List
+        , Network.Google.Resource.AndroidEnterprise.Devices.SetState
+        , Network.Google.Resource.AndroidEnterprise.Enterprises.Delete
+        , Network.Google.Resource.AndroidEnterprise.Enterprises.Enroll
+        , Network.Google.Resource.AndroidEnterprise.Enterprises.Get
+        , Network.Google.Resource.AndroidEnterprise.Enterprises.Insert
+        , Network.Google.Resource.AndroidEnterprise.Enterprises.List
+        , Network.Google.Resource.AndroidEnterprise.Enterprises.SendTestPushNotification
+        , Network.Google.Resource.AndroidEnterprise.Enterprises.SetAccount
+        , Network.Google.Resource.AndroidEnterprise.Enterprises.Unenroll
+        , Network.Google.Resource.AndroidEnterprise.Entitlements.Delete
+        , Network.Google.Resource.AndroidEnterprise.Entitlements.Get
+        , Network.Google.Resource.AndroidEnterprise.Entitlements.List
+        , Network.Google.Resource.AndroidEnterprise.Entitlements.Patch
+        , Network.Google.Resource.AndroidEnterprise.Entitlements.Update
+        , Network.Google.Resource.AndroidEnterprise.GrouplicenseUsers.List
+        , Network.Google.Resource.AndroidEnterprise.Grouplicenses.Get
+        , Network.Google.Resource.AndroidEnterprise.Grouplicenses.List
+        , Network.Google.Resource.AndroidEnterprise.Installs.Delete
+        , Network.Google.Resource.AndroidEnterprise.Installs.Get
+        , Network.Google.Resource.AndroidEnterprise.Installs.List
+        , Network.Google.Resource.AndroidEnterprise.Installs.Patch
+        , Network.Google.Resource.AndroidEnterprise.Installs.Update
+        , Network.Google.Resource.AndroidEnterprise.Permissions.Get
+        , Network.Google.Resource.AndroidEnterprise.Products.Approve
+        , Network.Google.Resource.AndroidEnterprise.Products.GenerateApprovalURL
+        , Network.Google.Resource.AndroidEnterprise.Products.Get
+        , Network.Google.Resource.AndroidEnterprise.Products.GetAppRestrictionsSchema
+        , Network.Google.Resource.AndroidEnterprise.Products.GetPermissions
+        , Network.Google.Resource.AndroidEnterprise.Products.UpdatePermissions
+        , Network.Google.Resource.AndroidEnterprise.Users.GenerateToken
+        , Network.Google.Resource.AndroidEnterprise.Users.Get
+        , Network.Google.Resource.AndroidEnterprise.Users.GetAvailableProductSet
+        , Network.Google.Resource.AndroidEnterprise.Users.List
+        , Network.Google.Resource.AndroidEnterprise.Users.RevokeToken
+        , Network.Google.Resource.AndroidEnterprise.Users.SetAvailableProductSet
+
+    other-modules:
+          Network.Google.AndroidEnterprise.Types.Product
+        , Network.Google.AndroidEnterprise.Types.Sum
+
+    build-depends:
+          gogol-core == 0.0.1.*
+        , base       >= 4.7 && < 5
